diff options
author | vantezzen <properly@protonmail.com> | 2019-09-07 15:50:23 +0200 |
---|---|---|
committer | vantezzen <properly@protonmail.com> | 2019-09-07 15:50:23 +0200 |
commit | e7a74514c1e7c3833dfdcf5900cb87f9e6e8354e (patch) | |
tree | b8314e4155503b135dcb07e8b4a0e847e25c19cf | |
parent | Update CHANGELOG.md (diff) | |
parent | Update CHANGELOG.md (diff) | |
download | ferdium-app-e7a74514c1e7c3833dfdcf5900cb87f9e6e8354e.tar.gz ferdium-app-e7a74514c1e7c3833dfdcf5900cb87f9e6e8354e.tar.zst ferdium-app-e7a74514c1e7c3833dfdcf5900cb87f9e6e8354e.zip |
Merge branch 'master' of https://github.com/meetfranz/franz into franz-5.3.0
151 files changed, 7775 insertions, 2493 deletions
@@ -17,7 +17,7 @@ | |||
17 | "extensions": [".js", ".jsx"] | 17 | "extensions": [".js", ".jsx"] |
18 | }], | 18 | }], |
19 | "react/forbid-prop-types": 0, | 19 | "react/forbid-prop-types": 0, |
20 | "react/destructuring-assignment": 1, | 20 | "react/destructuring-assignment": 0, |
21 | "prefer-destructuring": 1, | 21 | "prefer-destructuring": 1, |
22 | "no-underscore-dangle": 0, | 22 | "no-underscore-dangle": 0, |
23 | "max-len": 0, | 23 | "max-len": 0, |
@@ -55,7 +55,8 @@ | |||
55 | "atob": true, | 55 | "atob": true, |
56 | "btoa": true, | 56 | "btoa": true, |
57 | "ga": true, | 57 | "ga": true, |
58 | "mocha": true | 58 | "mocha": true, |
59 | "Element": true | ||
59 | }, | 60 | }, |
60 | "env": { | 61 | "env": { |
61 | "jest/globals": true | 62 | "jest/globals": true |
diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d96cb3d1..72794b646 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -12,16 +12,32 @@ | |||
12 | 12 | ||
13 | ## [5.2.1-beta.1](https://github.com/meetfranz/franz/compare/v5.2.0...v5.2.1-beta.1) (2019-07-30) | 13 | ## [5.2.1-beta.1](https://github.com/meetfranz/franz/compare/v5.2.0...v5.2.1-beta.1) (2019-07-30) |
14 | 14 | ||
15 | ### Features | ||
15 | 16 | ||
16 | ### Bug Fixes | 17 | * **App:** Add second confirmation step for the free 14 day trial. |
17 | 18 | * **Todos:** Add option to disable todos ([5d03b91](https://github.com/meetfranz/franz/commit/5d03b91)) | |
18 | * **Notifications:** Fix issue that blocked notifications from e.g. Slack ([44c413b](https://github.com/meetfranz/franz/commit/44c413b)) | ||
19 | 19 | ||
20 | # [5.3.0](https://github.com/meetfranz/franz/compare/v5.2.1-beta.1...v5.3.0) (2019-09-06) | ||
20 | 21 | ||
21 | ### Features | 22 | ### Features |
22 | 23 | ||
24 | * **Todos:** 🥳🥳🥳 Manage your daily tasks with **Franz Todos** 🥳🥳🥳 | ||
23 | * **App:** Add option to copy debug information via the help menu ([4666e85](https://github.com/meetfranz/franz/commit/4666e85)) | 25 | * **App:** Add option to copy debug information via the help menu ([4666e85](https://github.com/meetfranz/franz/commit/4666e85)) |
26 | * **App:** Updated Pricing, more infos can be found on ([meetfranz.com/pricing](https://meetfranz.com/pricing)) | ||
27 | * **App:** Improved Settings UX | ||
28 | * **3rd Party Services:** Added option to open custom recipes folder | ||
29 | |||
30 | |||
31 | ### Bug Fixes | ||
32 | |||
33 | * **Windows:** Fix app size in fullscreen ([e210701](https://github.com/meetfranz/franz/commit/e210701)) | ||
34 | * **Windows:** Fix app to be cropped at the bottom on Windows ([42f97b4](https://github.com/meetfranz/franz/commit/42f97b4)) | ||
35 | * **Notifications:** Fix issue that blocked notifications from e.g. Slack ([44c413b](https://github.com/meetfranz/franz/commit/44c413b)) | ||
36 | * **App:** A ton of various bugfixes and improvements | ||
24 | 37 | ||
38 | ### General | ||
39 | |||
40 | * **Translations:** Improved translations. **[A million thanks to the amazing community. 🎉](http://i18n.meetfranz.com/)** | ||
25 | 41 | ||
26 | 42 | ||
27 | # [5.2.0](https://github.com/meetfranz/franz/compare/v5.2.0-beta.4...v5.2.0) (2019-07-19) | 43 | # [5.2.0](https://github.com/meetfranz/franz/compare/v5.2.0-beta.4...v5.2.0) (2019-07-19) |
diff --git a/package-lock.json b/package-lock.json index 169929d2f..4ce2893a3 100644 --- a/package-lock.json +++ b/package-lock.json | |||
@@ -2149,9 +2149,9 @@ | |||
2149 | } | 2149 | } |
2150 | }, | 2150 | }, |
2151 | "@mdi/js": { | 2151 | "@mdi/js": { |
2152 | "version": "3.4.93", | 2152 | "version": "4.2.95", |
2153 | "resolved": "https://registry.npmjs.org/@mdi/js/-/js-3.4.93.tgz", | 2153 | "resolved": "https://registry.npmjs.org/@mdi/js/-/js-4.2.95.tgz", |
2154 | "integrity": "sha512-SEzolEqT8ErlWdHz4AAtQ1lTfAnM6j67Ppm6k5s/I1aIuuoFP/D8d/z838C28xHO1KOqrsS1fw2wlf6fRiEEJA==" | 2154 | "integrity": "sha512-3qqOZx2HkrQEUc9fr5MiQWlokwmO8TK5bQZ2EP1Rg0q2Q507jy+fUeL8lb9ko2ossYqoPnugIr7jI0/O7uhlrA==" |
2155 | }, | 2155 | }, |
2156 | "@mdi/react": { | 2156 | "@mdi/react": { |
2157 | "version": "1.1.0", | 2157 | "version": "1.1.0", |
@@ -2178,6 +2178,10 @@ | |||
2178 | "react-loader": "^2.4.5" | 2178 | "react-loader": "^2.4.5" |
2179 | }, | 2179 | }, |
2180 | "dependencies": { | 2180 | "dependencies": { |
2181 | "@mdi/js": { | ||
2182 | "version": "3.9.97", | ||
2183 | "bundled": true | ||
2184 | }, | ||
2181 | "@meetfranz/theme": { | 2185 | "@meetfranz/theme": { |
2182 | "version": "1.0.14", | 2186 | "version": "1.0.14", |
2183 | "resolved": "https://registry.npmjs.org/@meetfranz/theme/-/theme-1.0.14.tgz", | 2187 | "resolved": "https://registry.npmjs.org/@meetfranz/theme/-/theme-1.0.14.tgz", |
@@ -2203,6 +2207,10 @@ | |||
2203 | "react-loader": "^2.4.5" | 2207 | "react-loader": "^2.4.5" |
2204 | }, | 2208 | }, |
2205 | "dependencies": { | 2209 | "dependencies": { |
2210 | "@mdi/js": { | ||
2211 | "version": "3.9.97", | ||
2212 | "bundled": true | ||
2213 | }, | ||
2206 | "@meetfranz/theme": { | 2214 | "@meetfranz/theme": { |
2207 | "version": "1.0.14", | 2215 | "version": "1.0.14", |
2208 | "resolved": "https://registry.npmjs.org/@meetfranz/theme/-/theme-1.0.14.tgz", | 2216 | "resolved": "https://registry.npmjs.org/@meetfranz/theme/-/theme-1.0.14.tgz", |
@@ -16886,6 +16894,14 @@ | |||
16886 | "react-transition-group": "^1.2.0" | 16894 | "react-transition-group": "^1.2.0" |
16887 | } | 16895 | } |
16888 | }, | 16896 | }, |
16897 | "react-confetti": { | ||
16898 | "version": "3.1.0", | ||
16899 | "resolved": "https://registry.npmjs.org/react-confetti/-/react-confetti-3.1.0.tgz", | ||
16900 | "integrity": "sha512-T1DKt09C9rrf2BJ0OxFu8saPohFalOJfOgci11/ePz6DxbY+0cd/3CMimxj/ZITl7jQWnmC/bNWBgGheke3WZQ==", | ||
16901 | "requires": { | ||
16902 | "tween-functions": "^1.2.0" | ||
16903 | } | ||
16904 | }, | ||
16889 | "react-dom": { | 16905 | "react-dom": { |
16890 | "version": "16.6.3", | 16906 | "version": "16.6.3", |
16891 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz", | 16907 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz", |
@@ -20037,6 +20053,11 @@ | |||
20037 | "safe-buffer": "^5.0.1" | 20053 | "safe-buffer": "^5.0.1" |
20038 | } | 20054 | } |
20039 | }, | 20055 | }, |
20056 | "tween-functions": { | ||
20057 | "version": "1.2.0", | ||
20058 | "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", | ||
20059 | "integrity": "sha1-GuOlDnxguz3vd06scHrLynO7w/8=" | ||
20060 | }, | ||
20040 | "tweetnacl": { | 20061 | "tweetnacl": { |
20041 | "version": "0.14.5", | 20062 | "version": "0.14.5", |
20042 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", | 20063 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", |
diff --git a/package.json b/package.json index 80235e1db..36580a0f7 100644 --- a/package.json +++ b/package.json | |||
@@ -37,6 +37,7 @@ | |||
37 | "dependencies": { | 37 | "dependencies": { |
38 | "@babel/polyfill": "7.4.4", | 38 | "@babel/polyfill": "7.4.4", |
39 | "@babel/runtime": "7.4.5", | 39 | "@babel/runtime": "7.4.5", |
40 | "@mdi/js": "4.2.95", | ||
40 | "@meetfranz/electron-notification-state": "1.0.0", | 41 | "@meetfranz/electron-notification-state": "1.0.0", |
41 | "@meetfranz/forms": "file:packages/forms", | 42 | "@meetfranz/forms": "file:packages/forms", |
42 | "@meetfranz/theme": "file:packages/theme", | 43 | "@meetfranz/theme": "file:packages/theme", |
@@ -72,6 +73,7 @@ | |||
72 | "prop-types": "^15.5.10", | 73 | "prop-types": "^15.5.10", |
73 | "react": "16.6.3", | 74 | "react": "16.6.3", |
74 | "react-addons-css-transition-group": "15.6.2", | 75 | "react-addons-css-transition-group": "15.6.2", |
76 | "react-confetti": "3.1.0", | ||
75 | "react-dom": "16.6.3", | 77 | "react-dom": "16.6.3", |
76 | "react-dropzone": "7.0.1", | 78 | "react-dropzone": "7.0.1", |
77 | "react-electron-web-view": "^2.0.1", | 79 | "react-electron-web-view": "^2.0.1", |
diff --git a/packages/forms/package.json b/packages/forms/package.json index d50f4c756..bb76462d8 100644 --- a/packages/forms/package.json +++ b/packages/forms/package.json | |||
@@ -1,6 +1,6 @@ | |||
1 | { | 1 | { |
2 | "name": "@meetfranz/forms", | 2 | "name": "@meetfranz/forms", |
3 | "version": "1.0.16", | 3 | "version": "1.1.0", |
4 | "description": "React form components for Franz", | 4 | "description": "React form components for Franz", |
5 | "main": "lib/index.js", | 5 | "main": "lib/index.js", |
6 | "scripts": { | 6 | "scripts": { |
@@ -35,5 +35,5 @@ | |||
35 | "react-dom": "16.7.0", | 35 | "react-dom": "16.7.0", |
36 | "react-jss": "^8.6.1" | 36 | "react-jss": "^8.6.1" |
37 | }, | 37 | }, |
38 | "gitHead": "9f2ab40b7602bc3df26ebb093b484b9917768f69" | 38 | "gitHead": "e1e46986d902adc4c19ee009016290f9733a7d61" |
39 | } | 39 | } |
diff --git a/packages/forms/src/button/index.tsx b/packages/forms/src/button/index.tsx index 3f129d0ff..b81154a43 100644 --- a/packages/forms/src/button/index.tsx +++ b/packages/forms/src/button/index.tsx | |||
@@ -1,4 +1,3 @@ | |||
1 | import * as mdiIcons from '@mdi/js'; | ||
2 | import Icon from '@mdi/react'; | 1 | import Icon from '@mdi/react'; |
3 | import { Theme } from '@meetfranz/theme'; | 2 | import { Theme } from '@meetfranz/theme'; |
4 | import classnames from 'classnames'; | 3 | import classnames from 'classnames'; |
@@ -21,7 +20,7 @@ interface IProps extends IFormField, IWithStyle { | |||
21 | stretch?: boolean; | 20 | stretch?: boolean; |
22 | loaded?: boolean; | 21 | loaded?: boolean; |
23 | busy?: boolean; | 22 | busy?: boolean; |
24 | icon?: keyof typeof mdiIcons; | 23 | icon?: string; |
25 | href?: string; | 24 | href?: string; |
26 | target?: string; | 25 | target?: string; |
27 | } | 26 | } |
@@ -175,7 +174,7 @@ class ButtonComponent extends Component<IProps> { | |||
175 | onClick, | 174 | onClick, |
176 | buttonType, | 175 | buttonType, |
177 | loaded, | 176 | loaded, |
178 | icon: iconName, | 177 | icon, |
179 | busy: busyProp, | 178 | busy: busyProp, |
180 | href, | 179 | href, |
181 | target, | 180 | target, |
@@ -185,13 +184,6 @@ class ButtonComponent extends Component<IProps> { | |||
185 | busy, | 184 | busy, |
186 | } = this.state; | 185 | } = this.state; |
187 | 186 | ||
188 | let icon = ''; | ||
189 | if (iconName && mdiIcons[iconName]) { | ||
190 | icon = mdiIcons[iconName]; | ||
191 | } else if (iconName && !mdiIcons[iconName]) { | ||
192 | console.warn(`Icon '${iconName}' was not found`); | ||
193 | } | ||
194 | |||
195 | let showLoader = false; | 187 | let showLoader = false; |
196 | if (loaded) { | 188 | if (loaded) { |
197 | showLoader = !loaded; | 189 | showLoader = !loaded; |
diff --git a/packages/theme/src/themes/dark/index.ts b/packages/theme/src/themes/dark/index.ts index bd9f001e8..e94f54c55 100644 --- a/packages/theme/src/themes/dark/index.ts +++ b/packages/theme/src/themes/dark/index.ts | |||
@@ -11,6 +11,8 @@ export const colorBackgroundSubscriptionContainer = legacyStyles.themeBrandInfo; | |||
11 | export const colorHeadline = legacyStyles.darkThemeTextColor; | 11 | export const colorHeadline = legacyStyles.darkThemeTextColor; |
12 | export const colorText = legacyStyles.darkThemeTextColor; | 12 | export const colorText = legacyStyles.darkThemeTextColor; |
13 | 13 | ||
14 | export const defaultContentBorder = legacyStyles.themeGrayDark; | ||
15 | |||
14 | // Loader | 16 | // Loader |
15 | export const colorFullscreenLoaderSpinner = '#FFF'; | 17 | export const colorFullscreenLoaderSpinner = '#FFF'; |
16 | export const colorWebviewLoaderBackground = color(legacyStyles.darkThemeGrayDarkest).alpha(0.5).rgb().string(); | 18 | export const colorWebviewLoaderBackground = color(legacyStyles.darkThemeGrayDarkest).alpha(0.5).rgb().string(); |
@@ -118,3 +120,28 @@ export const announcements = merge({}, defaultStyles.announcements, { | |||
118 | background: legacyStyles.darkThemeGrayDark, | 120 | background: legacyStyles.darkThemeGrayDark, |
119 | }, | 121 | }, |
120 | }); | 122 | }); |
123 | |||
124 | // Signup | ||
125 | export const signup = merge({}, defaultStyles.signup, { | ||
126 | pricing: { | ||
127 | feature: { | ||
128 | background: legacyStyles.darkThemeGrayLight, | ||
129 | border: color(legacyStyles.darkThemeGrayLight).lighten(0.2).hex(), | ||
130 | }, | ||
131 | }, | ||
132 | }); | ||
133 | |||
134 | // Todos | ||
135 | export const todos = merge({}, defaultStyles.todos, { | ||
136 | todosLayer: { | ||
137 | borderLeftColor: legacyStyles.darkThemeGrayDarker, | ||
138 | }, | ||
139 | toggleButton: { | ||
140 | background: defaultStyles.styleTypes.primary.accent, | ||
141 | textColor: defaultStyles.styleTypes.primary.contrast, | ||
142 | shadowColor: 'rgba(0, 0, 0, 0.2)', | ||
143 | }, | ||
144 | dragIndicator: { | ||
145 | background: legacyStyles.themeGrayLight, | ||
146 | }, | ||
147 | }); | ||
diff --git a/packages/theme/src/themes/default/index.ts b/packages/theme/src/themes/default/index.ts index 53f810f00..79a6d676f 100644 --- a/packages/theme/src/themes/default/index.ts +++ b/packages/theme/src/themes/default/index.ts | |||
@@ -28,6 +28,8 @@ export const colorHeadline = legacyStyles.themeGrayDark; | |||
28 | 28 | ||
29 | export const colorText = legacyStyles.themeTextColor; | 29 | export const colorText = legacyStyles.themeTextColor; |
30 | 30 | ||
31 | export const defaultContentBorder = color(legacyStyles.themeGrayLighter).darken(0.1).rgb().string(); | ||
32 | |||
31 | // Subscription Container Component | 33 | // Subscription Container Component |
32 | export const colorSubscriptionContainerBackground = 'none'; | 34 | export const colorSubscriptionContainerBackground = 'none'; |
33 | export const colorSubscriptionContainerBorder = `1px solid ${brandPrimary}`; | 35 | export const colorSubscriptionContainerBorder = `1px solid ${brandPrimary}`; |
@@ -207,3 +209,31 @@ export const announcements = { | |||
207 | background: legacyStyles.themeGrayLightest, | 209 | background: legacyStyles.themeGrayLightest, |
208 | }, | 210 | }, |
209 | }; | 211 | }; |
212 | |||
213 | // Signup | ||
214 | export const signup = { | ||
215 | pricing: { | ||
216 | feature: { | ||
217 | background: legacyStyles.themeGrayLightest, | ||
218 | border: legacyStyles.themeGrayLighter, | ||
219 | }, | ||
220 | }, | ||
221 | }; | ||
222 | |||
223 | // Todos | ||
224 | export const todos = { | ||
225 | todosLayer: { | ||
226 | borderLeftColor: legacyStyles.themeGrayLighter, | ||
227 | }, | ||
228 | toggleButton: { | ||
229 | background: styleTypes.primary.accent, | ||
230 | textColor: styleTypes.primary.contrast, | ||
231 | shadowColor: 'rgba(0, 0, 0, 0.2)', | ||
232 | }, | ||
233 | dragIndicator: { | ||
234 | background: legacyStyles.themeGrayLight, | ||
235 | }, | ||
236 | resizeHandler: { | ||
237 | backgroundHover: styleTypes.primary.accent, | ||
238 | }, | ||
239 | }; | ||
diff --git a/packages/ui/package.json b/packages/ui/package.json index a851ed9cf..4f42b21b5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json | |||
@@ -1,6 +1,6 @@ | |||
1 | { | 1 | { |
2 | "name": "@meetfranz/ui", | 2 | "name": "@meetfranz/ui", |
3 | "version": "0.0.9", | 3 | "version": "1.0.0", |
4 | "description": "React UI components for Franz", | 4 | "description": "React UI components for Franz", |
5 | "main": "lib/index.js", | 5 | "main": "lib/index.js", |
6 | "scripts": { | 6 | "scripts": { |
@@ -34,5 +34,5 @@ | |||
34 | "react-dom": "16.7.0", | 34 | "react-dom": "16.7.0", |
35 | "react-jss": "^8.6.1" | 35 | "react-jss": "^8.6.1" |
36 | }, | 36 | }, |
37 | "gitHead": "9f2ab40b7602bc3df26ebb093b484b9917768f69" | 37 | "gitHead": "e1e46986d902adc4c19ee009016290f9733a7d61" |
38 | } | 38 | } |
diff --git a/packages/ui/src/badge/ProBadge.tsx b/packages/ui/src/badge/ProBadge.tsx index 612e23210..5cc41f5b2 100644 --- a/packages/ui/src/badge/ProBadge.tsx +++ b/packages/ui/src/badge/ProBadge.tsx | |||
@@ -1,15 +1,17 @@ | |||
1 | import { mdiStar } from '@mdi/js'; | ||
1 | import { Theme } from '@meetfranz/theme'; | 2 | import { Theme } from '@meetfranz/theme'; |
2 | import classnames from 'classnames'; | 3 | import classnames from 'classnames'; |
3 | import React, { Component } from 'react'; | 4 | import React, { Component } from 'react'; |
4 | import injectStyle from 'react-jss'; | 5 | import injectStyle from 'react-jss'; |
5 | 6 | ||
6 | import { Icon, Badge } from '../'; | 7 | import { Badge, Icon } from '../'; |
7 | import { IWithStyle } from '../typings/generic'; | 8 | import { IWithStyle } from '../typings/generic'; |
8 | 9 | ||
9 | interface IProps extends IWithStyle { | 10 | interface IProps extends IWithStyle { |
10 | badgeClasses?: string; | 11 | badgeClasses?: string; |
11 | iconClasses?: string; | 12 | iconClasses?: string; |
12 | inverted?: boolean; | 13 | inverted?: boolean; |
14 | className?: string; | ||
13 | } | 15 | } |
14 | 16 | ||
15 | const styles = (theme: Theme) => ({ | 17 | const styles = (theme: Theme) => ({ |
@@ -37,6 +39,7 @@ class ProBadgeComponent extends Component<IProps> { | |||
37 | badgeClasses, | 39 | badgeClasses, |
38 | iconClasses, | 40 | iconClasses, |
39 | inverted, | 41 | inverted, |
42 | className, | ||
40 | } = this.props; | 43 | } = this.props; |
41 | 44 | ||
42 | return ( | 45 | return ( |
@@ -46,10 +49,11 @@ class ProBadgeComponent extends Component<IProps> { | |||
46 | classes.badge, | 49 | classes.badge, |
47 | inverted && classes.invertedBadge, | 50 | inverted && classes.invertedBadge, |
48 | badgeClasses, | 51 | badgeClasses, |
52 | className, | ||
49 | ])} | 53 | ])} |
50 | > | 54 | > |
51 | <Icon | 55 | <Icon |
52 | icon="mdiStar" | 56 | icon={mdiStar} |
53 | className={classnames([ | 57 | className={classnames([ |
54 | classes.icon, | 58 | classes.icon, |
55 | inverted && classes.invertedIcon, | 59 | inverted && classes.invertedIcon, |
diff --git a/packages/ui/src/icon/index.tsx b/packages/ui/src/icon/index.tsx index e30d3396d..af467c085 100644 --- a/packages/ui/src/icon/index.tsx +++ b/packages/ui/src/icon/index.tsx | |||
@@ -1,4 +1,3 @@ | |||
1 | import * as mdiIcons from '@mdi/js'; | ||
2 | import MdiIcon from '@mdi/react'; | 1 | import MdiIcon from '@mdi/react'; |
3 | import { Theme } from '@meetfranz/theme'; | 2 | import { Theme } from '@meetfranz/theme'; |
4 | import classnames from 'classnames'; | 3 | import classnames from 'classnames'; |
@@ -8,7 +7,7 @@ import injectStyle from 'react-jss'; | |||
8 | import { IWithStyle } from '../typings/generic'; | 7 | import { IWithStyle } from '../typings/generic'; |
9 | 8 | ||
10 | interface IProps extends IWithStyle { | 9 | interface IProps extends IWithStyle { |
11 | icon: keyof typeof mdiIcons; | 10 | icon: string; |
12 | size?: number; | 11 | size?: number; |
13 | className?: string; | 12 | className?: string; |
14 | } | 13 | } |
@@ -27,16 +26,13 @@ class IconComponent extends Component<IProps> { | |||
27 | render() { | 26 | render() { |
28 | const { | 27 | const { |
29 | classes, | 28 | classes, |
30 | icon: iconName, | 29 | icon, |
31 | size, | 30 | size, |
32 | className, | 31 | className, |
33 | } = this.props; | 32 | } = this.props; |
34 | 33 | ||
35 | let icon = ''; | 34 | if (!icon) { |
36 | if (iconName && mdiIcons[iconName]) { | 35 | console.warn('No Icon specified'); |
37 | icon = mdiIcons[iconName]; | ||
38 | } else if (iconName && !mdiIcons[iconName]) { | ||
39 | console.warn(`Icon '${iconName}' was not found`); | ||
40 | } | 36 | } |
41 | 37 | ||
42 | return ( | 38 | return ( |
diff --git a/packages/ui/src/infobox/index.tsx b/packages/ui/src/infobox/index.tsx index 9066a623e..e4c2c5a3e 100644 --- a/packages/ui/src/infobox/index.tsx +++ b/packages/ui/src/infobox/index.tsx | |||
@@ -1,3 +1,4 @@ | |||
1 | import { mdiClose } from '@mdi/js'; | ||
1 | import { Theme } from '@meetfranz/theme'; | 2 | import { Theme } from '@meetfranz/theme'; |
2 | import classnames from 'classnames'; | 3 | import classnames from 'classnames'; |
3 | import React, { Component } from 'react'; | 4 | import React, { Component } from 'react'; |
@@ -48,13 +49,13 @@ const styles = (theme: Theme) => ({ | |||
48 | position: 'relative', | 49 | position: 'relative', |
49 | overflow: 'hidden', | 50 | overflow: 'hidden', |
50 | height: 'auto', | 51 | height: 'auto', |
52 | marginBottom: 30, | ||
51 | }, | 53 | }, |
52 | infobox: { | 54 | infobox: { |
53 | alignItems: 'center', | 55 | alignItems: 'center', |
54 | borderRadius: theme.borderRadiusSmall, | 56 | borderRadius: theme.borderRadiusSmall, |
55 | display: 'flex', | 57 | display: 'flex', |
56 | height: 'auto', | 58 | height: 'auto', |
57 | marginBottom: 30, | ||
58 | padding: '15px 20px', | 59 | padding: '15px 20px', |
59 | top: 0, | 60 | top: 0, |
60 | transition: 'all 0.5s', | 61 | transition: 'all 0.5s', |
@@ -192,7 +193,7 @@ class InfoboxComponent extends Component<IProps, IState> { | |||
192 | onClick={this.dismiss.bind(this)} | 193 | onClick={this.dismiss.bind(this)} |
193 | className={classes.close} | 194 | className={classes.close} |
194 | > | 195 | > |
195 | <Icon icon="mdiClose" /> | 196 | <Icon icon={mdiClose} /> |
196 | </button> | 197 | </button> |
197 | )} | 198 | )} |
198 | </div> | 199 | </div> |
diff --git a/src/actions/index.js b/src/actions/index.js index fc525afeb..336344d76 100644 --- a/src/actions/index.js +++ b/src/actions/index.js | |||
@@ -13,6 +13,7 @@ import settings from './settings'; | |||
13 | import requests from './requests'; | 13 | import requests from './requests'; |
14 | import announcements from '../features/announcements/actions'; | 14 | import announcements from '../features/announcements/actions'; |
15 | import workspaces from '../features/workspaces/actions'; | 15 | import workspaces from '../features/workspaces/actions'; |
16 | import todos from '../features/todos/actions'; | ||
16 | 17 | ||
17 | const actions = Object.assign({}, { | 18 | const actions = Object.assign({}, { |
18 | service, | 19 | service, |
@@ -31,4 +32,5 @@ export default Object.assign( | |||
31 | defineActions(actions, PropTypes.checkPropTypes), | 32 | defineActions(actions, PropTypes.checkPropTypes), |
32 | { announcements }, | 33 | { announcements }, |
33 | { workspaces }, | 34 | { workspaces }, |
35 | { todos }, | ||
34 | ); | 36 | ); |
diff --git a/src/actions/user.js b/src/actions/user.js index ccf1fa56a..5d7d9a899 100644 --- a/src/actions/user.js +++ b/src/actions/user.js | |||
@@ -17,6 +17,9 @@ export default { | |||
17 | retrievePassword: { | 17 | retrievePassword: { |
18 | email: PropTypes.string.isRequired, | 18 | email: PropTypes.string.isRequired, |
19 | }, | 19 | }, |
20 | activateTrial: { | ||
21 | planId: PropTypes.string.isRequired, | ||
22 | }, | ||
20 | invite: { | 23 | invite: { |
21 | invites: PropTypes.array.isRequired, | 24 | invites: PropTypes.array.isRequired, |
22 | }, | 25 | }, |
diff --git a/src/api/UserApi.js b/src/api/UserApi.js index edfb88988..8ba8cd1e9 100644 --- a/src/api/UserApi.js +++ b/src/api/UserApi.js | |||
@@ -25,6 +25,10 @@ export default class UserApi { | |||
25 | return this.server.retrievePassword(email); | 25 | return this.server.retrievePassword(email); |
26 | } | 26 | } |
27 | 27 | ||
28 | activateTrial(data) { | ||
29 | return this.server.activateTrial(data); | ||
30 | } | ||
31 | |||
28 | invite(data) { | 32 | invite(data) { |
29 | return this.server.inviteUser(data); | 33 | return this.server.inviteUser(data); |
30 | } | 34 | } |
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js index efac5ca19..293fcda26 100644 --- a/src/api/server/ServerApi.js +++ b/src/api/server/ServerApi.js | |||
@@ -76,6 +76,20 @@ export default class ServerApi { | |||
76 | return u.token; | 76 | return u.token; |
77 | } | 77 | } |
78 | 78 | ||
79 | async activateTrial(data) { | ||
80 | const request = await sendAuthRequest(`${API_URL}/payment/trial`, { | ||
81 | method: 'POST', | ||
82 | body: JSON.stringify(data), | ||
83 | }); | ||
84 | if (!request.ok) { | ||
85 | throw request; | ||
86 | } | ||
87 | const trial = await request.json(); | ||
88 | |||
89 | debug('ServerApi::signup resolves', trial); | ||
90 | return true; | ||
91 | } | ||
92 | |||
79 | async inviteUser(data) { | 93 | async inviteUser(data) { |
80 | const request = await sendAuthRequest(`${apiBase()}/invite`, { | 94 | const request = await sendAuthRequest(`${apiBase()}/invite`, { |
81 | method: 'POST', | 95 | method: 'POST', |
@@ -468,7 +482,7 @@ export default class ServerApi { | |||
468 | return services; | 482 | return services; |
469 | } | 483 | } |
470 | } catch (err) { | 484 | } catch (err) { |
471 | throw (new Error('ServerApi::getLegacyServices no config found')); | 485 | console.error('ServerApi::getLegacyServices no config found'); |
472 | } | 486 | } |
473 | 487 | ||
474 | return []; | 488 | return []; |
diff --git a/src/components/TrialActivationInfoBar.js b/src/components/TrialActivationInfoBar.js new file mode 100644 index 000000000..77ab97565 --- /dev/null +++ b/src/components/TrialActivationInfoBar.js | |||
@@ -0,0 +1,94 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { defineMessages, intlShape } from 'react-intl'; | ||
4 | import ms from 'ms'; | ||
5 | import injectSheet from 'react-jss'; | ||
6 | import classnames from 'classnames'; | ||
7 | |||
8 | import InfoBar from './ui/InfoBar'; | ||
9 | |||
10 | const messages = defineMessages({ | ||
11 | message: { | ||
12 | id: 'infobar.trialActivated', | ||
13 | defaultMessage: '!!!Your trial was successfully activated. Happy messaging!', | ||
14 | }, | ||
15 | }); | ||
16 | |||
17 | const styles = { | ||
18 | notification: { | ||
19 | height: 'auto', | ||
20 | position: 'absolute', | ||
21 | top: -50, | ||
22 | transition: 'top 0.3s', | ||
23 | zIndex: 500, | ||
24 | width: 'calc(100% - 300px)', | ||
25 | }, | ||
26 | show: { | ||
27 | top: 0, | ||
28 | }, | ||
29 | }; | ||
30 | |||
31 | @injectSheet(styles) | ||
32 | class TrialActivationInfoBar extends Component { | ||
33 | static propTypes = { | ||
34 | // eslint-disable-next-line | ||
35 | classes: PropTypes.object.isRequired, | ||
36 | }; | ||
37 | |||
38 | static contextTypes = { | ||
39 | intl: intlShape, | ||
40 | }; | ||
41 | |||
42 | state = { | ||
43 | showing: false, | ||
44 | removed: false, | ||
45 | } | ||
46 | |||
47 | componentDidMount() { | ||
48 | setTimeout(() => { | ||
49 | this.setState({ | ||
50 | showing: true, | ||
51 | }); | ||
52 | }, 0); | ||
53 | |||
54 | setTimeout(() => { | ||
55 | this.setState({ | ||
56 | showing: false, | ||
57 | }); | ||
58 | }, ms('6s')); | ||
59 | |||
60 | setTimeout(() => { | ||
61 | this.setState({ | ||
62 | removed: true, | ||
63 | }); | ||
64 | }, ms('7s')); | ||
65 | } | ||
66 | |||
67 | render() { | ||
68 | const { classes } = this.props; | ||
69 | const { showing, removed } = this.state; | ||
70 | const { intl } = this.context; | ||
71 | |||
72 | if (removed) return null; | ||
73 | |||
74 | return ( | ||
75 | <div | ||
76 | className={classnames({ | ||
77 | [classes.notification]: true, | ||
78 | [classes.show]: showing, | ||
79 | })} | ||
80 | > | ||
81 | <InfoBar | ||
82 | type="primary" | ||
83 | position="top" | ||
84 | sticky | ||
85 | > | ||
86 | <span className="mdi mdi-information" /> | ||
87 | {intl.formatMessage(messages.message)} | ||
88 | </InfoBar> | ||
89 | </div> | ||
90 | ); | ||
91 | } | ||
92 | } | ||
93 | |||
94 | export default TrialActivationInfoBar; | ||
diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js index 13a1e2351..cbeaaa5d9 100644 --- a/src/components/auth/Pricing.js +++ b/src/components/auth/Pricing.js | |||
@@ -1,40 +1,107 @@ | |||
1 | import React, { Component } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | // import { Link } from 'react-router'; | 5 | import injectSheet from 'react-jss'; |
6 | import { H2, Loader } from '@meetfranz/ui'; | ||
7 | import classnames from 'classnames'; | ||
8 | |||
9 | import { Button } from '@meetfranz/forms'; | ||
10 | import { FeatureItem } from '../ui/FeatureItem'; | ||
11 | import { FeatureList } from '../ui/FeatureList'; | ||
6 | 12 | ||
7 | // import Button from '../ui/Button'; | ||
8 | import Loader from '../ui/Loader'; | ||
9 | import Appear from '../ui/effects/Appear'; | ||
10 | import SubscriptionForm from '../../containers/subscription/SubscriptionFormScreen'; | ||
11 | 13 | ||
12 | const messages = defineMessages({ | 14 | const messages = defineMessages({ |
13 | headline: { | 15 | headline: { |
14 | id: 'pricing.headline', | 16 | id: 'pricing.trial.headline', |
15 | defaultMessage: '!!!Support Ferdi', | 17 | defaultMessage: '!!!Franz Professional', |
18 | }, | ||
19 | personalOffer: { | ||
20 | id: 'pricing.trial.subheadline', | ||
21 | defaultMessage: '!!!Your personal welcome offer:', | ||
22 | }, | ||
23 | noStringsAttachedHeadline: { | ||
24 | id: 'pricing.trial.terms.headline', | ||
25 | defaultMessage: '!!!No strings attached', | ||
26 | }, | ||
27 | noCreditCard: { | ||
28 | id: 'pricing.trial.terms.noCreditCard', | ||
29 | defaultMessage: '!!!No credit card required', | ||
16 | }, | 30 | }, |
17 | monthlySupportLabel: { | 31 | automaticTrialEnd: { |
18 | id: 'pricing.support.label', | 32 | id: 'pricing.trial.terms.automaticTrialEnd', |
19 | defaultMessage: '!!!Select your support plan', | 33 | defaultMessage: '!!!Your free trial ends automatically after 14 days', |
20 | }, | 34 | }, |
21 | submitButtonLabel: { | 35 | activationError: { |
22 | id: 'pricing.submit.label', | 36 | id: 'pricing.trial.error', |
23 | defaultMessage: '!!!Support the development of Ferdi', | 37 | defaultMessage: '!!!Sorry, we could not activate your trial!', |
24 | }, | 38 | }, |
25 | skipPayment: { | 39 | ctaAccept: { |
26 | id: 'pricing.link.skipPayment', | 40 | id: 'pricing.trial.cta.accept', |
27 | defaultMessage: '!!!I don\'t want to support the development of Ferdi.', | 41 | defaultMessage: '!!!Yes, upgrade my account to Franz Professional', |
42 | }, | ||
43 | ctaSkip: { | ||
44 | id: 'pricing.trial.cta.skip', | ||
45 | defaultMessage: '!!!Continue to Franz', | ||
46 | }, | ||
47 | featuresHeadline: { | ||
48 | id: 'pricing.trial.features.headline', | ||
49 | defaultMessage: '!!!Franz Professional includes:', | ||
28 | }, | 50 | }, |
29 | }); | 51 | }); |
30 | 52 | ||
31 | export default @observer class Signup extends Component { | 53 | const styles = theme => ({ |
54 | container: { | ||
55 | position: 'relative', | ||
56 | marginLeft: -150, | ||
57 | }, | ||
58 | welcomeOffer: { | ||
59 | textAlign: 'center', | ||
60 | fontWeight: 'bold', | ||
61 | }, | ||
62 | keyTerms: { | ||
63 | textAlign: 'center', | ||
64 | }, | ||
65 | content: { | ||
66 | position: 'relative', | ||
67 | zIndex: 20, | ||
68 | }, | ||
69 | featureContainer: { | ||
70 | width: 300, | ||
71 | position: 'absolute', | ||
72 | left: 'calc(100% / 2 + 225px)', | ||
73 | top: 155, | ||
74 | background: theme.signup.pricing.feature.background, | ||
75 | height: 'auto', | ||
76 | padding: 20, | ||
77 | borderTopRightRadius: theme.borderRadius, | ||
78 | borderBottomRightRadius: theme.borderRadius, | ||
79 | zIndex: 10, | ||
80 | }, | ||
81 | featureItem: { | ||
82 | borderBottom: [1, 'solid', theme.signup.pricing.feature.border], | ||
83 | }, | ||
84 | cta: { | ||
85 | marginTop: 40, | ||
86 | width: '100%', | ||
87 | }, | ||
88 | skipLink: { | ||
89 | textAlign: 'center', | ||
90 | marginTop: 10, | ||
91 | }, | ||
92 | error: { | ||
93 | margin: [20, 0, 0], | ||
94 | color: theme.styleTypes.danger.accent, | ||
95 | }, | ||
96 | }); | ||
97 | |||
98 | export default @observer @injectSheet(styles) class Signup extends Component { | ||
32 | static propTypes = { | 99 | static propTypes = { |
33 | donor: MobxPropTypes.objectOrObservableObject.isRequired, | 100 | onSubmit: PropTypes.func.isRequired, |
34 | isLoading: PropTypes.bool.isRequired, | 101 | isLoadingRequiredData: PropTypes.bool.isRequired, |
35 | isLoadingUser: PropTypes.bool.isRequired, | 102 | isActivatingTrial: PropTypes.bool.isRequired, |
36 | onCloseSubscriptionWindow: PropTypes.func.isRequired, | 103 | trialActivationError: PropTypes.bool.isRequired, |
37 | skipAction: PropTypes.func.isRequired, | 104 | classes: PropTypes.object.isRequired, |
38 | }; | 105 | }; |
39 | 106 | ||
40 | static contextTypes = { | 107 | static contextTypes = { |
@@ -43,70 +110,37 @@ export default @observer class Signup extends Component { | |||
43 | 110 | ||
44 | render() { | 111 | render() { |
45 | const { | 112 | const { |
46 | donor, | 113 | onSubmit, |
47 | isLoading, | 114 | isLoadingRequiredData, |
48 | isLoadingUser, | 115 | isActivatingTrial, |
49 | onCloseSubscriptionWindow, | 116 | trialActivationError, |
50 | skipAction, | 117 | classes, |
51 | } = this.props; | 118 | } = this.props; |
52 | const { intl } = this.context; | 119 | const { intl } = this.context; |
53 | 120 | ||
54 | return ( | 121 | return ( |
55 | <div className="auth__scroll-container"> | 122 | <div className={classnames('auth__scroll-container', classes.container)}> |
56 | <div className="auth__container auth__container--signup"> | 123 | <div className={classnames('auth__container', 'auth__container--signup', classes.content)}> |
57 | <form className="Ferdi-form auth__form"> | 124 | <form className="franz-form auth__form"> |
58 | <img | 125 | {isLoadingRequiredData ? <Loader /> : ( |
59 | src="./assets/images/sm.png" | 126 | <img |
60 | className="auth__logo auth__logo--sm" | 127 | src="./assets/images/sm.png" |
61 | alt="" | 128 | className="auth__logo auth__logo--sm" |
62 | /> | 129 | alt="" |
130 | /> | ||
131 | )} | ||
132 | <p className={classes.welcomeOffer}>{intl.formatMessage(messages.personalOffer)}</p> | ||
63 | <h1>{intl.formatMessage(messages.headline)}</h1> | 133 | <h1>{intl.formatMessage(messages.headline)}</h1> |
64 | <div className="auth__letter"> | 134 | <div className="auth__letter"> |
65 | {isLoadingUser && ( | 135 | <p> |
66 | <p>Loading</p> | 136 | We built Franz with a lot of effort, manpower and love, |
67 | )} | 137 | to boost up your messaging experience. |
68 | {!isLoadingUser && ( | 138 | <br /> |
69 | donor.amount ? ( | 139 | </p> |
70 | <span> | 140 | <p> |
71 | <p> | 141 | Get the free 14 day Franz Professional trial and see your communication evolving. |
72 | Thank you so much for your previous donation of | 142 | <br /> |
73 | {' '} | 143 | </p> |
74 | <strong> | ||
75 | $ | ||
76 | {donor.amount} | ||
77 | </strong> | ||
78 | . | ||
79 | <br /> | ||
80 | Your support allowed us to get where we are today. | ||
81 | <br /> | ||
82 | </p> | ||
83 | <p> | ||
84 | As an early supporter, you get | ||
85 | {' '} | ||
86 | <strong>a lifetime premium supporter license</strong> | ||
87 | {' '} | ||
88 | without any | ||
89 | additional charges. | ||
90 | </p> | ||
91 | <p> | ||
92 | However, If you want to keep supporting us, you are more than welcome to subscribe to a plan. | ||
93 | <br /> | ||
94 | <br /> | ||
95 | </p> | ||
96 | </span> | ||
97 | ) : ( | ||
98 | <span> | ||
99 | <p> | ||
100 | We built Ferdi with a lot of effort, manpower and love, | ||
101 | to bring you the best messaging experience. | ||
102 | <br /> | ||
103 | </p> | ||
104 | <p> | ||
105 | Getting a Ferdi Premium Supporter License will allow us to keep improving Ferdi for you. | ||
106 | </p> | ||
107 | </span> | ||
108 | ) | ||
109 | )} | ||
110 | <p> | 144 | <p> |
111 | Thanks for being a hero. | 145 | Thanks for being a hero. |
112 | </p> | 146 | </p> |
@@ -114,20 +148,48 @@ export default @observer class Signup extends Component { | |||
114 | <strong>Stefan Malzner</strong> | 148 | <strong>Stefan Malzner</strong> |
115 | </p> | 149 | </p> |
116 | </div> | 150 | </div> |
117 | <Loader loaded={!isLoading}> | 151 | <div className={classes.keyTerms}> |
118 | <Appear transitionName="slideDown"> | 152 | <H2> |
119 | <span className="label">{intl.formatMessage(messages.monthlySupportLabel)}</span> | 153 | {intl.formatMessage(messages.noStringsAttachedHeadline)} |
120 | <SubscriptionForm | 154 | </H2> |
121 | onCloseWindow={onCloseSubscriptionWindow} | 155 | <ul className={classes.keyTermsList}> |
122 | showSkipOption | 156 | <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} /> |
123 | skipAction={skipAction} | 157 | <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} /> |
124 | hideInfo={Boolean(donor.amount)} | 158 | </ul> |
125 | skipButtonLabel={intl.formatMessage(messages.skipPayment)} | 159 | </div> |
126 | /> | 160 | {trialActivationError && ( |
127 | </Appear> | 161 | <p className={classes.error}>{intl.formatMessage(messages.activationError)}</p> |
128 | </Loader> | 162 | )} |
163 | <Button | ||
164 | label={intl.formatMessage(messages.ctaAccept)} | ||
165 | className={classes.cta} | ||
166 | onClick={onSubmit} | ||
167 | busy={isActivatingTrial} | ||
168 | disabled={isLoadingRequiredData || isActivatingTrial} | ||
169 | /> | ||
170 | <p className={classes.skipLink}> | ||
171 | <a href="#/">{intl.formatMessage(messages.ctaSkip)}</a> | ||
172 | </p> | ||
129 | </form> | 173 | </form> |
130 | </div> | 174 | </div> |
175 | <div className={classes.featureContainer}> | ||
176 | <H2> | ||
177 | {intl.formatMessage(messages.featuresHeadline)} | ||
178 | </H2> | ||
179 | {/* <ul className={classes.features}> | ||
180 | <FeatureItem name="Add unlimited services" className={classes.featureItem} /> | ||
181 | <FeatureItem name="Spellchecker support" className={classes.featureItem} /> | ||
182 | <FeatureItem name="Workspaces" className={classes.featureItem} /> | ||
183 | <FeatureItem name="Add Custom Websites" className={classes.featureItem} /> | ||
184 | <FeatureItem name="On-premise & other Hosted Services" className={classes.featureItem} /> | ||
185 | <FeatureItem name="Install 3rd party services" className={classes.featureItem} /> | ||
186 | <FeatureItem name="Service Proxies" className={classes.featureItem} /> | ||
187 | <FeatureItem name="Team Management" className={classes.featureItem} /> | ||
188 | <FeatureItem name="No Waiting Screens" className={classes.featureItem} /> | ||
189 | <FeatureItem name="Forever ad-free" className={classes.featureItem} /> | ||
190 | </ul> */} | ||
191 | <FeatureList /> | ||
192 | </div> | ||
131 | </div> | 193 | </div> |
132 | ); | 194 | ); |
133 | } | 195 | } |
diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js index 2aedbe6ea..b36e71ce1 100644 --- a/src/components/auth/Signup.js +++ b/src/components/auth/Signup.js | |||
@@ -7,7 +7,6 @@ import { isDevMode, useLiveAPI } from '../../environment'; | |||
7 | import Form from '../../lib/Form'; | 7 | import Form from '../../lib/Form'; |
8 | import { required, email, minLength } from '../../helpers/validation-helpers'; | 8 | import { required, email, minLength } from '../../helpers/validation-helpers'; |
9 | import Input from '../ui/Input'; | 9 | import Input from '../ui/Input'; |
10 | import Radio from '../ui/Radio'; | ||
11 | import Button from '../ui/Button'; | 10 | import Button from '../ui/Button'; |
12 | import Link from '../ui/Link'; | 11 | import Link from '../ui/Link'; |
13 | import Infobox from '../ui/Infobox'; | 12 | import Infobox from '../ui/Infobox'; |
@@ -31,10 +30,10 @@ const messages = defineMessages({ | |||
31 | id: 'signup.email.label', | 30 | id: 'signup.email.label', |
32 | defaultMessage: '!!!Email address', | 31 | defaultMessage: '!!!Email address', |
33 | }, | 32 | }, |
34 | companyLabel: { | 33 | // companyLabel: { |
35 | id: 'signup.company.label', | 34 | // id: 'signup.company.label', |
36 | defaultMessage: '!!!Company', | 35 | // defaultMessage: '!!!Company', |
37 | }, | 36 | // }, |
38 | passwordLabel: { | 37 | passwordLabel: { |
39 | id: 'signup.password.label', | 38 | id: 'signup.password.label', |
40 | defaultMessage: '!!!Password', | 39 | defaultMessage: '!!!Password', |
@@ -79,20 +78,6 @@ export default @observer class Signup extends Component { | |||
79 | 78 | ||
80 | form = new Form({ | 79 | form = new Form({ |
81 | fields: { | 80 | fields: { |
82 | accountType: { | ||
83 | value: 'individual', | ||
84 | validators: [required], | ||
85 | options: [{ | ||
86 | value: 'individual', | ||
87 | label: 'Individual', | ||
88 | }, { | ||
89 | value: 'non-profit', | ||
90 | label: 'Non-Profit', | ||
91 | }, { | ||
92 | value: 'company', | ||
93 | label: 'Company', | ||
94 | }], | ||
95 | }, | ||
96 | firstname: { | 81 | firstname: { |
97 | label: this.context.intl.formatMessage(messages.firstnameLabel), | 82 | label: this.context.intl.formatMessage(messages.firstnameLabel), |
98 | value: '', | 83 | value: '', |
@@ -108,10 +93,6 @@ export default @observer class Signup extends Component { | |||
108 | value: '', | 93 | value: '', |
109 | validators: [required, email], | 94 | validators: [required, email], |
110 | }, | 95 | }, |
111 | organization: { | ||
112 | label: this.context.intl.formatMessage(messages.companyLabel), | ||
113 | value: '', // TODO: make required when accountType: company | ||
114 | }, | ||
115 | password: { | 96 | password: { |
116 | label: this.context.intl.formatMessage(messages.passwordLabel), | 97 | label: this.context.intl.formatMessage(messages.passwordLabel), |
117 | value: '', | 98 | value: '', |
@@ -153,7 +134,6 @@ export default @observer class Signup extends Component { | |||
153 | In Dev Mode your data is not persistent. Please use the live app for accesing the production API. | 134 | In Dev Mode your data is not persistent. Please use the live app for accesing the production API. |
154 | </Infobox> | 135 | </Infobox> |
155 | )} | 136 | )} |
156 | <Radio field={form.$('accountType')} showLabel={false} /> | ||
157 | <div className="grid__row"> | 137 | <div className="grid__row"> |
158 | <Input field={form.$('firstname')} focus /> | 138 | <Input field={form.$('firstname')} focus /> |
159 | <Input field={form.$('lastname')} /> | 139 | <Input field={form.$('lastname')} /> |
@@ -164,9 +144,6 @@ export default @observer class Signup extends Component { | |||
164 | showPasswordToggle | 144 | showPasswordToggle |
165 | scorePassword | 145 | scorePassword |
166 | /> | 146 | /> |
167 | {form.$('accountType').value === 'company' && ( | ||
168 | <Input field={form.$('organization')} /> | ||
169 | )} | ||
170 | {error.code === 'email-duplicate' && ( | 147 | {error.code === 'email-duplicate' && ( |
171 | <p className="error-message center">{intl.formatMessage(messages.emailDuplicate)}</p> | 148 | <p className="error-message center">{intl.formatMessage(messages.emailDuplicate)}</p> |
172 | )} | 149 | )} |
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js index 5c3d301e0..ed004d07e 100644 --- a/src/components/layout/AppLayout.js +++ b/src/components/layout/AppLayout.js | |||
@@ -16,6 +16,8 @@ import { isWindows } from '../../environment'; | |||
16 | import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; | 16 | import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; |
17 | import { workspaceStore } from '../../features/workspaces'; | 17 | import { workspaceStore } from '../../features/workspaces'; |
18 | import AppUpdateInfoBar from '../AppUpdateInfoBar'; | 18 | import AppUpdateInfoBar from '../AppUpdateInfoBar'; |
19 | import TrialActivationInfoBar from '../TrialActivationInfoBar'; | ||
20 | import Todos from '../../features/todos/containers/TodosScreen'; | ||
19 | 21 | ||
20 | function createMarkup(HTMLString) { | 22 | function createMarkup(HTMLString) { |
21 | return { __html: HTMLString }; | 23 | return { __html: HTMLString }; |
@@ -42,7 +44,8 @@ const messages = defineMessages({ | |||
42 | 44 | ||
43 | const styles = theme => ({ | 45 | const styles = theme => ({ |
44 | appContent: { | 46 | appContent: { |
45 | width: `calc(100% + ${theme.workspaces.drawer.width}px)`, | 47 | // width: `calc(100% + ${theme.workspaces.drawer.width}px)`, |
48 | width: '100%', | ||
46 | transition: 'transform 0.5s ease', | 49 | transition: 'transform 0.5s ease', |
47 | transform() { | 50 | transform() { |
48 | return workspaceStore.isWorkspaceDrawerOpen ? 'translateX(0)' : `translateX(-${theme.workspaces.drawer.width}px)`; | 51 | return workspaceStore.isWorkspaceDrawerOpen ? 'translateX(0)' : `translateX(-${theme.workspaces.drawer.width}px)`; |
@@ -60,7 +63,6 @@ class AppLayout extends Component { | |||
60 | services: PropTypes.element.isRequired, | 63 | services: PropTypes.element.isRequired, |
61 | children: PropTypes.element, | 64 | children: PropTypes.element, |
62 | news: MobxPropTypes.arrayOrObservableArray.isRequired, | 65 | news: MobxPropTypes.arrayOrObservableArray.isRequired, |
63 | // isOnline: PropTypes.bool.isRequired, | ||
64 | showServicesUpdatedInfoBar: PropTypes.bool.isRequired, | 66 | showServicesUpdatedInfoBar: PropTypes.bool.isRequired, |
65 | appUpdateIsDownloaded: PropTypes.bool.isRequired, | 67 | appUpdateIsDownloaded: PropTypes.bool.isRequired, |
66 | nextAppReleaseVersion: PropTypes.string, | 68 | nextAppReleaseVersion: PropTypes.string, |
@@ -72,6 +74,8 @@ class AppLayout extends Component { | |||
72 | areRequiredRequestsSuccessful: PropTypes.bool.isRequired, | 74 | areRequiredRequestsSuccessful: PropTypes.bool.isRequired, |
73 | retryRequiredRequests: PropTypes.func.isRequired, | 75 | retryRequiredRequests: PropTypes.func.isRequired, |
74 | areRequiredRequestsLoading: PropTypes.bool.isRequired, | 76 | areRequiredRequestsLoading: PropTypes.bool.isRequired, |
77 | isDelayAppScreenVisible: PropTypes.bool.isRequired, | ||
78 | hasActivatedTrial: PropTypes.bool.isRequired, | ||
75 | }; | 79 | }; |
76 | 80 | ||
77 | static defaultProps = { | 81 | static defaultProps = { |
@@ -91,7 +95,6 @@ class AppLayout extends Component { | |||
91 | sidebar, | 95 | sidebar, |
92 | services, | 96 | services, |
93 | children, | 97 | children, |
94 | // isOnline, | ||
95 | news, | 98 | news, |
96 | showServicesUpdatedInfoBar, | 99 | showServicesUpdatedInfoBar, |
97 | appUpdateIsDownloaded, | 100 | appUpdateIsDownloaded, |
@@ -104,6 +107,8 @@ class AppLayout extends Component { | |||
104 | areRequiredRequestsSuccessful, | 107 | areRequiredRequestsSuccessful, |
105 | retryRequiredRequests, | 108 | retryRequiredRequests, |
106 | areRequiredRequestsLoading, | 109 | areRequiredRequestsLoading, |
110 | isDelayAppScreenVisible, | ||
111 | hasActivatedTrial, | ||
107 | } = this.props; | 112 | } = this.props; |
108 | 113 | ||
109 | const { intl } = this.context; | 114 | const { intl } = this.context; |
@@ -125,29 +130,31 @@ class AppLayout extends Component { | |||
125 | sticky={item.sticky} | 130 | sticky={item.sticky} |
126 | onHide={() => removeNewsItem({ newsId: item.id })} | 131 | onHide={() => removeNewsItem({ newsId: item.id })} |
127 | > | 132 | > |
128 | <span dangerouslySetInnerHTML={createMarkup(item.message)} /> | 133 | <span |
134 | dangerouslySetInnerHTML={createMarkup(item.message)} | ||
135 | onClick={(event) => { | ||
136 | const { target } = event; | ||
137 | if (target && target.hasAttribute('data-is-news-cta')) { | ||
138 | removeNewsItem({ newsId: item.id }); | ||
139 | } | ||
140 | }} | ||
141 | /> | ||
129 | </InfoBar> | 142 | </InfoBar> |
130 | ))} | 143 | ))} |
131 | {/* {!isOnline && ( | 144 | {hasActivatedTrial && ( |
132 | <InfoBar | 145 | <TrialActivationInfoBar /> |
133 | type="danger" | 146 | )} |
134 | sticky | ||
135 | > | ||
136 | <span className="mdi mdi-flash" /> | ||
137 | {intl.formatMessage(globalMessages.notConnectedToTheInternet)} | ||
138 | </InfoBar> | ||
139 | )} */} | ||
140 | {!areRequiredRequestsSuccessful && showRequiredRequestsError && ( | 147 | {!areRequiredRequestsSuccessful && showRequiredRequestsError && ( |
141 | <InfoBar | 148 | <InfoBar |
142 | type="danger" | 149 | type="danger" |
143 | ctaLabel="Try again" | 150 | ctaLabel="Try again" |
144 | ctaLoading={areRequiredRequestsLoading} | 151 | ctaLoading={areRequiredRequestsLoading} |
145 | sticky | 152 | sticky |
146 | onClick={retryRequiredRequests} | 153 | onClick={retryRequiredRequests} |
147 | > | 154 | > |
148 | <span className="mdi mdi-flash" /> | 155 | <span className="mdi mdi-flash" /> |
149 | {intl.formatMessage(messages.requiredRequestsFailed)} | 156 | {intl.formatMessage(messages.requiredRequestsFailed)} |
150 | </InfoBar> | 157 | </InfoBar> |
151 | )} | 158 | )} |
152 | {authRequestFailed && ( | 159 | {authRequestFailed && ( |
153 | <InfoBar | 160 | <InfoBar |
@@ -183,6 +190,7 @@ class AppLayout extends Component { | |||
183 | {services} | 190 | {services} |
184 | {children} | 191 | {children} |
185 | </div> | 192 | </div> |
193 | <Todos /> | ||
186 | </div> | 194 | </div> |
187 | </div> | 195 | </div> |
188 | </ErrorBoundary> | 196 | </ErrorBoundary> |
diff --git a/src/components/services/content/ServiceRestricted.js b/src/components/services/content/ServiceRestricted.js new file mode 100644 index 000000000..4b8d926aa --- /dev/null +++ b/src/components/services/content/ServiceRestricted.js | |||
@@ -0,0 +1,78 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { observer } from 'mobx-react'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | |||
6 | import { serviceLimitStore } from '../../../features/serviceLimit'; | ||
7 | import Button from '../../ui/Button'; | ||
8 | import { RESTRICTION_TYPES } from '../../../models/Service'; | ||
9 | |||
10 | const messages = defineMessages({ | ||
11 | headlineServiceLimit: { | ||
12 | id: 'service.restrictedHandler.serviceLimit.headline', | ||
13 | defaultMessage: '!!!You have reached your service limit.', | ||
14 | }, | ||
15 | textServiceLimit: { | ||
16 | id: 'service.restrictedHandler.serviceLimit.text', | ||
17 | defaultMessage: '!!!Please upgrade your account to use more than {count} services.', | ||
18 | }, | ||
19 | headlineCustomUrl: { | ||
20 | id: 'service.restrictedHandler.customUrl.headline', | ||
21 | defaultMessage: '!!!Franz Professional Plan required', | ||
22 | }, | ||
23 | textCustomUrl: { | ||
24 | id: 'service.restrictedHandler.customUrl.text', | ||
25 | defaultMessage: '!!!Please upgrade to the Franz Professional plan to use custom urls & self hosted services.', | ||
26 | }, | ||
27 | action: { | ||
28 | id: 'service.restrictedHandler.action', | ||
29 | defaultMessage: '!!!Upgrade Account', | ||
30 | }, | ||
31 | }); | ||
32 | |||
33 | export default @observer class ServiceRestricted extends Component { | ||
34 | static propTypes = { | ||
35 | name: PropTypes.string.isRequired, | ||
36 | upgrade: PropTypes.func.isRequired, | ||
37 | type: PropTypes.number.isRequired, | ||
38 | }; | ||
39 | |||
40 | static contextTypes = { | ||
41 | intl: intlShape, | ||
42 | }; | ||
43 | |||
44 | countdownInterval = null; | ||
45 | |||
46 | countdownIntervalTimeout = 1000; | ||
47 | |||
48 | render() { | ||
49 | const { | ||
50 | name, | ||
51 | upgrade, | ||
52 | type, | ||
53 | } = this.props; | ||
54 | const { intl } = this.context; | ||
55 | |||
56 | return ( | ||
57 | <div className="services__info-layer"> | ||
58 | {type === RESTRICTION_TYPES.SERVICE_LIMIT && ( | ||
59 | <> | ||
60 | <h1>{intl.formatMessage(messages.headlineServiceLimit)}</h1> | ||
61 | <p>{intl.formatMessage(messages.textServiceLimit, { count: serviceLimitStore.serviceLimit })}</p> | ||
62 | </> | ||
63 | )} | ||
64 | {type === RESTRICTION_TYPES.CUSTOM_URL && ( | ||
65 | <> | ||
66 | <h1>{intl.formatMessage(messages.headlineCustomUrl)}</h1> | ||
67 | <p>{intl.formatMessage(messages.textCustomUrl)}</p> | ||
68 | </> | ||
69 | )} | ||
70 | <Button | ||
71 | label={intl.formatMessage(messages.action, { name })} | ||
72 | buttonType="inverted" | ||
73 | onClick={() => upgrade()} | ||
74 | /> | ||
75 | </div> | ||
76 | ); | ||
77 | } | ||
78 | } | ||
diff --git a/src/components/services/content/ServiceView.js b/src/components/services/content/ServiceView.js index 13148b9b3..f65f51346 100644 --- a/src/components/services/content/ServiceView.js +++ b/src/components/services/content/ServiceView.js | |||
@@ -10,6 +10,7 @@ import WebviewLoader from '../../ui/WebviewLoader'; | |||
10 | import WebviewCrashHandler from './WebviewCrashHandler'; | 10 | import WebviewCrashHandler from './WebviewCrashHandler'; |
11 | import WebviewErrorHandler from './ErrorHandlers/WebviewErrorHandler'; | 11 | import WebviewErrorHandler from './ErrorHandlers/WebviewErrorHandler'; |
12 | import ServiceDisabled from './ServiceDisabled'; | 12 | import ServiceDisabled from './ServiceDisabled'; |
13 | import ServiceRestricted from './ServiceRestricted'; | ||
13 | import ServiceWebview from './ServiceWebview'; | 14 | import ServiceWebview from './ServiceWebview'; |
14 | 15 | ||
15 | export default @observer class ServiceView extends Component { | 16 | export default @observer class ServiceView extends Component { |
@@ -21,6 +22,7 @@ export default @observer class ServiceView extends Component { | |||
21 | edit: PropTypes.func.isRequired, | 22 | edit: PropTypes.func.isRequired, |
22 | enable: PropTypes.func.isRequired, | 23 | enable: PropTypes.func.isRequired, |
23 | isActive: PropTypes.bool, | 24 | isActive: PropTypes.bool, |
25 | upgrade: PropTypes.func.isRequired, | ||
24 | }; | 26 | }; |
25 | 27 | ||
26 | static defaultProps = { | 28 | static defaultProps = { |
@@ -72,6 +74,7 @@ export default @observer class ServiceView extends Component { | |||
72 | reload, | 74 | reload, |
73 | edit, | 75 | edit, |
74 | enable, | 76 | enable, |
77 | upgrade, | ||
75 | } = this.props; | 78 | } = this.props; |
76 | 79 | ||
77 | const webviewClasses = classnames({ | 80 | const webviewClasses = classnames({ |
@@ -99,7 +102,7 @@ export default @observer class ServiceView extends Component { | |||
99 | reload={reload} | 102 | reload={reload} |
100 | /> | 103 | /> |
101 | )} | 104 | )} |
102 | {service.isEnabled && service.isLoading && service.isFirstLoad && ( | 105 | {service.isEnabled && service.isLoading && service.isFirstLoad && !service.isServiceAccessRestricted && ( |
103 | <WebviewLoader | 106 | <WebviewLoader |
104 | loaded={false} | 107 | loaded={false} |
105 | name={service.name} | 108 | name={service.name} |
@@ -126,11 +129,21 @@ export default @observer class ServiceView extends Component { | |||
126 | )} | 129 | )} |
127 | </Fragment> | 130 | </Fragment> |
128 | ) : ( | 131 | ) : ( |
129 | <ServiceWebview | 132 | <> |
130 | service={service} | 133 | {service.isServiceAccessRestricted ? ( |
131 | setWebviewReference={setWebviewReference} | 134 | <ServiceRestricted |
132 | detachService={detachService} | 135 | name={service.recipe.name} |
133 | /> | 136 | upgrade={upgrade} |
137 | type={service.restrictionType} | ||
138 | /> | ||
139 | ) : ( | ||
140 | <ServiceWebview | ||
141 | service={service} | ||
142 | setWebviewReference={setWebviewReference} | ||
143 | detachService={detachService} | ||
144 | /> | ||
145 | )} | ||
146 | </> | ||
134 | )} | 147 | )} |
135 | {statusBar} | 148 | {statusBar} |
136 | </div> | 149 | </div> |
diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js index 5fad070f0..1afbaabc4 100644 --- a/src/components/services/content/Services.js +++ b/src/components/services/content/Services.js | |||
@@ -3,6 +3,9 @@ import PropTypes from 'prop-types'; | |||
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; |
4 | import { Link } from 'react-router'; | 4 | import { Link } from 'react-router'; |
5 | import { defineMessages, intlShape } from 'react-intl'; | 5 | import { defineMessages, intlShape } from 'react-intl'; |
6 | import Confetti from 'react-confetti'; | ||
7 | import ms from 'ms'; | ||
8 | import injectSheet from 'react-jss'; | ||
6 | 9 | ||
7 | import ServiceView from './ServiceView'; | 10 | import ServiceView from './ServiceView'; |
8 | import Appear from '../../ui/effects/Appear'; | 11 | import Appear from '../../ui/effects/Appear'; |
@@ -26,7 +29,17 @@ const messages = defineMessages({ | |||
26 | }, | 29 | }, |
27 | }); | 30 | }); |
28 | 31 | ||
29 | export default @observer class Services extends Component { | 32 | |
33 | const styles = { | ||
34 | confettiContainer: { | ||
35 | position: 'absolute', | ||
36 | width: '100%', | ||
37 | zIndex: 9999, | ||
38 | pointerEvents: 'none', | ||
39 | }, | ||
40 | }; | ||
41 | |||
42 | export default @observer @injectSheet(styles) class Services extends Component { | ||
30 | static propTypes = { | 43 | static propTypes = { |
31 | services: MobxPropTypes.arrayOrObservableArray, | 44 | services: MobxPropTypes.arrayOrObservableArray, |
32 | setWebviewReference: PropTypes.func.isRequired, | 45 | setWebviewReference: PropTypes.func.isRequired, |
@@ -36,6 +49,9 @@ export default @observer class Services extends Component { | |||
36 | reload: PropTypes.func.isRequired, | 49 | reload: PropTypes.func.isRequired, |
37 | openSettings: PropTypes.func.isRequired, | 50 | openSettings: PropTypes.func.isRequired, |
38 | update: PropTypes.func.isRequired, | 51 | update: PropTypes.func.isRequired, |
52 | userHasCompletedSignup: PropTypes.bool.isRequired, | ||
53 | hasActivatedTrial: PropTypes.bool.isRequired, | ||
54 | classes: PropTypes.object.isRequired, | ||
39 | }; | 55 | }; |
40 | 56 | ||
41 | static defaultProps = { | 57 | static defaultProps = { |
@@ -46,6 +62,18 @@ export default @observer class Services extends Component { | |||
46 | intl: intlShape, | 62 | intl: intlShape, |
47 | }; | 63 | }; |
48 | 64 | ||
65 | state = { | ||
66 | showConfetti: true, | ||
67 | } | ||
68 | |||
69 | componentDidMount() { | ||
70 | window.setTimeout(() => { | ||
71 | this.setState({ | ||
72 | showConfetti: false, | ||
73 | }); | ||
74 | }, ms('8s')); | ||
75 | } | ||
76 | |||
49 | render() { | 77 | render() { |
50 | const { | 78 | const { |
51 | services, | 79 | services, |
@@ -56,12 +84,29 @@ export default @observer class Services extends Component { | |||
56 | reload, | 84 | reload, |
57 | openSettings, | 85 | openSettings, |
58 | update, | 86 | update, |
87 | userHasCompletedSignup, | ||
88 | hasActivatedTrial, | ||
89 | classes, | ||
59 | } = this.props; | 90 | } = this.props; |
91 | |||
92 | const { | ||
93 | showConfetti, | ||
94 | } = this.state; | ||
95 | |||
60 | const { intl } = this.context; | 96 | const { intl } = this.context; |
61 | const isLoggedIn = Boolean(localStorage.getItem('authToken')); | 97 | const isLoggedIn = Boolean(localStorage.getItem('authToken')); |
62 | 98 | ||
63 | return ( | 99 | return ( |
64 | <div className="services"> | 100 | <div className="services"> |
101 | {(userHasCompletedSignup || hasActivatedTrial) && ( | ||
102 | <div className={classes.confettiContainer}> | ||
103 | <Confetti | ||
104 | width={window.width} | ||
105 | height={window.height} | ||
106 | numberOfPieces={showConfetti ? 200 : 0} | ||
107 | /> | ||
108 | </div> | ||
109 | )} | ||
65 | {services.length === 0 && ( | 110 | {services.length === 0 && ( |
66 | <Appear | 111 | <Appear |
67 | timeout={1500} | 112 | timeout={1500} |
@@ -104,6 +149,7 @@ export default @observer class Services extends Component { | |||
104 | }, | 149 | }, |
105 | redirect: false, | 150 | redirect: false, |
106 | })} | 151 | })} |
152 | upgrade={() => openSettings({ path: 'user' })} | ||
107 | /> | 153 | /> |
108 | ))} | 154 | ))} |
109 | </div> | 155 | </div> |
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 4b7637637..f588449f4 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js | |||
@@ -1,14 +1,18 @@ | |||
1 | import React, { Component, Fragment } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; |
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import ReactTooltip from 'react-tooltip'; | 5 | import ReactTooltip from 'react-tooltip'; |
6 | import { ProBadge } from '@meetfranz/ui'; | 6 | import { |
7 | ProBadge, H1, H2, | ||
8 | } from '@meetfranz/ui'; | ||
9 | import moment from 'moment'; | ||
7 | 10 | ||
8 | import Loader from '../../ui/Loader'; | 11 | import Loader from '../../ui/Loader'; |
9 | import Button from '../../ui/Button'; | 12 | import Button from '../../ui/Button'; |
10 | import Infobox from '../../ui/Infobox'; | 13 | import Infobox from '../../ui/Infobox'; |
11 | import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; | 14 | import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; |
15 | import { i18nPlanName } from '../../../helpers/plan-helpers'; | ||
12 | 16 | ||
13 | const messages = defineMessages({ | 17 | const messages = defineMessages({ |
14 | headline: { | 18 | headline: { |
@@ -19,10 +23,6 @@ const messages = defineMessages({ | |||
19 | id: 'settings.account.headlineSubscription', | 23 | id: 'settings.account.headlineSubscription', |
20 | defaultMessage: '!!!Your Subscription', | 24 | defaultMessage: '!!!Your Subscription', |
21 | }, | 25 | }, |
22 | headlineUpgrade: { | ||
23 | id: 'settings.account.headlineUpgrade', | ||
24 | defaultMessage: '!!!Upgrade your Account', | ||
25 | }, | ||
26 | headlineDangerZone: { | 26 | headlineDangerZone: { |
27 | id: 'settings.account.headlineDangerZone', | 27 | id: 'settings.account.headlineDangerZone', |
28 | defaultMessage: '!!Danger Zone', | 28 | defaultMessage: '!!Danger Zone', |
@@ -31,6 +31,10 @@ const messages = defineMessages({ | |||
31 | id: 'settings.account.manageSubscription.label', | 31 | id: 'settings.account.manageSubscription.label', |
32 | defaultMessage: '!!!Manage your subscription', | 32 | defaultMessage: '!!!Manage your subscription', |
33 | }, | 33 | }, |
34 | upgradeAccountToPro: { | ||
35 | id: 'settings.account.upgradeToPro.label', | ||
36 | defaultMessage: '!!!Upgrade to Franz Professional', | ||
37 | }, | ||
34 | accountTypeBasic: { | 38 | accountTypeBasic: { |
35 | id: 'settings.account.accountType.basic', | 39 | id: 'settings.account.accountType.basic', |
36 | defaultMessage: '!!!Basic Account', | 40 | defaultMessage: '!!!Basic Account', |
@@ -71,21 +75,39 @@ const messages = defineMessages({ | |||
71 | id: 'settings.account.deleteEmailSent', | 75 | id: 'settings.account.deleteEmailSent', |
72 | defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', | 76 | defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', |
73 | }, | 77 | }, |
78 | trial: { | ||
79 | id: 'settings.account.trial', | ||
80 | defaultMessage: '!!!Free Trial', | ||
81 | }, | ||
82 | yourLicense: { | ||
83 | id: 'settings.account.yourLicense', | ||
84 | defaultMessage: '!!!Your Franz License:', | ||
85 | }, | ||
86 | trialEndsIn: { | ||
87 | id: 'settings.account.trialEndsIn', | ||
88 | defaultMessage: '!!!Your free trial ends in {duration}.', | ||
89 | }, | ||
90 | trialUpdateBillingInformation: { | ||
91 | id: 'settings.account.trialUpdateBillingInfo', | ||
92 | defaultMessage: '!!!Please update your billing info to continue using {license} after your trial period.', | ||
93 | }, | ||
74 | }); | 94 | }); |
75 | 95 | ||
76 | export default @observer class AccountDashboard extends Component { | 96 | @observer |
97 | class AccountDashboard extends Component { | ||
77 | static propTypes = { | 98 | static propTypes = { |
78 | user: MobxPropTypes.observableObject.isRequired, | 99 | user: MobxPropTypes.observableObject.isRequired, |
100 | isPremiumOverrideUser: PropTypes.bool.isRequired, | ||
101 | isProUser: PropTypes.bool.isRequired, | ||
79 | isLoading: PropTypes.bool.isRequired, | 102 | isLoading: PropTypes.bool.isRequired, |
80 | isLoadingPlans: PropTypes.bool.isRequired, | ||
81 | userInfoRequestFailed: PropTypes.bool.isRequired, | 103 | userInfoRequestFailed: PropTypes.bool.isRequired, |
82 | retryUserInfoRequest: PropTypes.func.isRequired, | 104 | retryUserInfoRequest: PropTypes.func.isRequired, |
83 | onCloseSubscriptionWindow: PropTypes.func.isRequired, | ||
84 | deleteAccount: PropTypes.func.isRequired, | 105 | deleteAccount: PropTypes.func.isRequired, |
85 | isLoadingDeleteAccount: PropTypes.bool.isRequired, | 106 | isLoadingDeleteAccount: PropTypes.bool.isRequired, |
86 | isDeleteAccountSuccessful: PropTypes.bool.isRequired, | 107 | isDeleteAccountSuccessful: PropTypes.bool.isRequired, |
87 | openEditAccount: PropTypes.func.isRequired, | 108 | openEditAccount: PropTypes.func.isRequired, |
88 | openBilling: PropTypes.func.isRequired, | 109 | openBilling: PropTypes.func.isRequired, |
110 | upgradeToPro: PropTypes.func.isRequired, | ||
89 | openInvoices: PropTypes.func.isRequired, | 111 | openInvoices: PropTypes.func.isRequired, |
90 | }; | 112 | }; |
91 | 113 | ||
@@ -96,20 +118,27 @@ export default @observer class AccountDashboard extends Component { | |||
96 | render() { | 118 | render() { |
97 | const { | 119 | const { |
98 | user, | 120 | user, |
121 | isPremiumOverrideUser, | ||
122 | isProUser, | ||
99 | isLoading, | 123 | isLoading, |
100 | isLoadingPlans, | ||
101 | userInfoRequestFailed, | 124 | userInfoRequestFailed, |
102 | retryUserInfoRequest, | 125 | retryUserInfoRequest, |
103 | onCloseSubscriptionWindow, | ||
104 | deleteAccount, | 126 | deleteAccount, |
105 | isLoadingDeleteAccount, | 127 | isLoadingDeleteAccount, |
106 | isDeleteAccountSuccessful, | 128 | isDeleteAccountSuccessful, |
107 | openEditAccount, | 129 | openEditAccount, |
108 | openBilling, | 130 | openBilling, |
131 | upgradeToPro, | ||
109 | openInvoices, | 132 | openInvoices, |
110 | } = this.props; | 133 | } = this.props; |
111 | const { intl } = this.context; | 134 | const { intl } = this.context; |
112 | 135 | ||
136 | let planName = ''; | ||
137 | |||
138 | if (user.team && user.team.plan) { | ||
139 | planName = i18nPlanName(user.team.plan, intl); | ||
140 | } | ||
141 | |||
113 | return ( | 142 | return ( |
114 | <div className="settings__main"> | 143 | <div className="settings__main"> |
115 | <div className="settings__header"> | 144 | <div className="settings__header"> |
@@ -135,82 +164,115 @@ export default @observer class AccountDashboard extends Component { | |||
135 | )} | 164 | )} |
136 | 165 | ||
137 | {!userInfoRequestFailed && ( | 166 | {!userInfoRequestFailed && ( |
138 | <Fragment> | 167 | <> |
139 | {!isLoading && ( | 168 | {!isLoading && ( |
140 | <div className="account"> | 169 | <> |
141 | <div className="account__box account__box--flex"> | 170 | <div className="account"> |
142 | <div className="account__avatar"> | 171 | <div className="account__box account__box--flex"> |
143 | <img | 172 | <div className="account__avatar"> |
144 | src="./assets/images/logo.svg" | 173 | <img |
145 | alt="" | 174 | src="./assets/images/logo.svg" |
146 | /> | 175 | alt="" |
147 | </div> | 176 | /> |
148 | <div className="account__info"> | 177 | </div> |
149 | <h2> | 178 | <div className="account__info"> |
150 | <span className="username">{`${user.firstname} ${user.lastname}`}</span> | 179 | <H1> |
180 | <span className="username">{`${user.firstname} ${user.lastname}`}</span> | ||
181 | {user.isPremium && ( | ||
182 | <> | ||
183 | {' '} | ||
184 | <ProBadge /> | ||
185 | </> | ||
186 | )} | ||
187 | </H1> | ||
188 | <p> | ||
189 | {user.organization && `${user.organization}, `} | ||
190 | {user.email} | ||
191 | </p> | ||
151 | {user.isPremium && ( | 192 | {user.isPremium && ( |
193 | <div className="manage-user-links"> | ||
194 | <Button | ||
195 | label={intl.formatMessage(messages.accountEditButton)} | ||
196 | className="franz-form__button--inverted" | ||
197 | onClick={openEditAccount} | ||
198 | /> | ||
199 | </div> | ||
200 | )} | ||
201 | </div> | ||
202 | {!user.isPremium && ( | ||
203 | <Button | ||
204 | label={intl.formatMessage(messages.accountEditButton)} | ||
205 | className="franz-form__button--inverted" | ||
206 | onClick={openEditAccount} | ||
207 | /> | ||
208 | )} | ||
209 | </div> | ||
210 | </div> | ||
211 | {user.isPremium && user.isSubscriptionOwner && ( | ||
212 | <div className="account"> | ||
213 | <div className="account__box"> | ||
214 | <H2> | ||
215 | {intl.formatMessage(messages.yourLicense)} | ||
216 | </H2> | ||
217 | <p> | ||
218 | {isPremiumOverrideUser ? 'Franz Premium' : planName} | ||
219 | {user.team.isTrial && ( | ||
220 | <> | ||
221 | {' – '} | ||
222 | {intl.formatMessage(messages.trial)} | ||
223 | </> | ||
224 | )} | ||
225 | </p> | ||
226 | {user.team.isTrial && ( | ||
152 | <> | 227 | <> |
153 | {' '} | 228 | <br /> |
154 | <ProBadge /> | 229 | <p> |
155 | <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> | 230 | {intl.formatMessage(messages.trialEndsIn, { |
231 | duration: moment.duration(moment().diff(user.team.trialEnd)).humanize(), | ||
232 | })} | ||
233 | </p> | ||
234 | <p> | ||
235 | {intl.formatMessage(messages.trialUpdateBillingInformation, { | ||
236 | license: planName, | ||
237 | })} | ||
238 | </p> | ||
156 | </> | 239 | </> |
157 | )} | 240 | )} |
158 | </h2> | ||
159 | {user.organization && `${user.organization}, `} | ||
160 | {user.email} | ||
161 | {user.isPremium && ( | ||
162 | <div className="manage-user-links"> | 241 | <div className="manage-user-links"> |
242 | {!isProUser && ( | ||
243 | <Button | ||
244 | label={intl.formatMessage(messages.upgradeAccountToPro)} | ||
245 | className="franz-form__button--primary" | ||
246 | onClick={upgradeToPro} | ||
247 | /> | ||
248 | )} | ||
163 | <Button | 249 | <Button |
164 | label={intl.formatMessage(messages.accountEditButton)} | 250 | label={intl.formatMessage(messages.manageSubscriptionButtonLabel)} |
165 | className="franz-form__button--inverted" | 251 | className="franz-form__button--inverted" |
166 | onClick={openEditAccount} | 252 | onClick={openBilling} |
253 | /> | ||
254 | <Button | ||
255 | label={intl.formatMessage(messages.invoicesButton)} | ||
256 | className="franz-form__button--inverted" | ||
257 | onClick={openInvoices} | ||
167 | /> | 258 | /> |
168 | {user.isSubscriptionOwner && ( | ||
169 | <> | ||
170 | <Button | ||
171 | label={intl.formatMessage(messages.manageSubscriptionButtonLabel)} | ||
172 | className="franz-form__button--inverted" | ||
173 | onClick={openBilling} | ||
174 | /> | ||
175 | <Button | ||
176 | label={intl.formatMessage(messages.invoicesButton)} | ||
177 | className="franz-form__button--inverted" | ||
178 | onClick={openInvoices} | ||
179 | /> | ||
180 | </> | ||
181 | )} | ||
182 | </div> | 259 | </div> |
183 | )} | 260 | </div> |
184 | </div> | 261 | </div> |
185 | {!user.isPremium && ( | 262 | )} |
186 | <Button | 263 | {!user.isPremium && ( |
187 | label={intl.formatMessage(messages.accountEditButton)} | 264 | <div className="account franz-form"> |
188 | className="franz-form__button--inverted" | 265 | <div className="account__box"> |
189 | onClick={openEditAccount} | 266 | <SubscriptionForm /> |
190 | /> | 267 | </div> |
191 | )} | ||
192 | </div> | ||
193 | </div> | ||
194 | )} | ||
195 | |||
196 | {!user.isPremium && ( | ||
197 | isLoadingPlans ? ( | ||
198 | <Loader /> | ||
199 | ) : ( | ||
200 | <div className="account franz-form"> | ||
201 | <div className="account__box"> | ||
202 | <h2>{intl.formatMessage(messages.headlineUpgrade)}</h2> | ||
203 | <SubscriptionForm | ||
204 | onCloseWindow={onCloseSubscriptionWindow} | ||
205 | /> | ||
206 | </div> | 268 | </div> |
207 | </div> | 269 | )} |
208 | ) | 270 | </> |
209 | )} | 271 | )} |
210 | 272 | ||
211 | <div className="account franz-form"> | 273 | <div className="account franz-form"> |
212 | <div className="account__box"> | 274 | <div className="account__box"> |
213 | <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> | 275 | <H2>{intl.formatMessage(messages.headlineDangerZone)}</H2> |
214 | {!isDeleteAccountSuccessful && ( | 276 | {!isDeleteAccountSuccessful && ( |
215 | <div className="account__subscription"> | 277 | <div className="account__subscription"> |
216 | <p>{intl.formatMessage(messages.deleteInfo)}</p> | 278 | <p>{intl.formatMessage(messages.deleteInfo)}</p> |
@@ -227,7 +289,7 @@ export default @observer class AccountDashboard extends Component { | |||
227 | )} | 289 | )} |
228 | </div> | 290 | </div> |
229 | </div> | 291 | </div> |
230 | </Fragment> | 292 | </> |
231 | )} | 293 | )} |
232 | </div> | 294 | </div> |
233 | <ReactTooltip place="right" type="dark" effect="solid" /> | 295 | <ReactTooltip place="right" type="dark" effect="solid" /> |
@@ -235,3 +297,5 @@ export default @observer class AccountDashboard extends Component { | |||
235 | ); | 297 | ); |
236 | } | 298 | } |
237 | } | 299 | } |
300 | |||
301 | export default AccountDashboard; | ||
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js index 6aa9bda03..201819526 100644 --- a/src/components/settings/navigation/SettingsNavigation.js +++ b/src/components/settings/navigation/SettingsNavigation.js | |||
@@ -8,6 +8,7 @@ import Link from '../../ui/Link'; | |||
8 | import { workspaceStore } from '../../../features/workspaces'; | 8 | import { workspaceStore } from '../../../features/workspaces'; |
9 | import UIStore from '../../../stores/UIStore'; | 9 | import UIStore from '../../../stores/UIStore'; |
10 | import UserStore from '../../../stores/UserStore'; | 10 | import UserStore from '../../../stores/UserStore'; |
11 | import { serviceLimitStore } from '../../../features/serviceLimit'; | ||
11 | 12 | ||
12 | const messages = defineMessages({ | 13 | const messages = defineMessages({ |
13 | availableServices: { | 14 | availableServices: { |
@@ -81,7 +82,12 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp | |||
81 | > | 82 | > |
82 | {intl.formatMessage(messages.yourServices)} | 83 | {intl.formatMessage(messages.yourServices)} |
83 | {' '} | 84 | {' '} |
84 | <span className="badge">{serviceCount}</span> | 85 | <span className="badge"> |
86 | {serviceCount} | ||
87 | {serviceLimitStore.serviceLimit !== 0 && ( | ||
88 | `/${serviceLimitStore.serviceLimit}` | ||
89 | )} | ||
90 | </span> | ||
85 | </Link> | 91 | </Link> |
86 | {workspaceStore.isFeatureEnabled ? ( | 92 | {workspaceStore.isFeatureEnabled ? ( |
87 | <Link | 93 | <Link |
diff --git a/src/components/settings/recipes/RecipeItem.js b/src/components/settings/recipes/RecipeItem.js index 3bb0852b2..12e3775f6 100644 --- a/src/components/settings/recipes/RecipeItem.js +++ b/src/components/settings/recipes/RecipeItem.js | |||
@@ -19,7 +19,7 @@ export default @observer class RecipeItem extends Component { | |||
19 | className="recipe-teaser" | 19 | className="recipe-teaser" |
20 | onClick={onClick} | 20 | onClick={onClick} |
21 | > | 21 | > |
22 | {recipe.local && ( | 22 | {recipe.isDevRecipe && ( |
23 | <span className="recipe-teaser__dev-badge">dev</span> | 23 | <span className="recipe-teaser__dev-badge">dev</span> |
24 | )} | 24 | )} |
25 | <img | 25 | <img |
diff --git a/src/components/settings/recipes/RecipesDashboard.js b/src/components/settings/recipes/RecipesDashboard.js index 00cd725cf..877cbc588 100644 --- a/src/components/settings/recipes/RecipesDashboard.js +++ b/src/components/settings/recipes/RecipesDashboard.js | |||
@@ -4,12 +4,17 @@ import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | |||
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import { Link } from 'react-router'; | 5 | import { Link } from 'react-router'; |
6 | 6 | ||
7 | import { Button, Input } from '@meetfranz/forms'; | ||
8 | import injectSheet from 'react-jss'; | ||
9 | import { H3, H2, ProBadge } from '@meetfranz/ui'; | ||
7 | import SearchInput from '../../ui/SearchInput'; | 10 | import SearchInput from '../../ui/SearchInput'; |
8 | import Infobox from '../../ui/Infobox'; | 11 | import Infobox from '../../ui/Infobox'; |
9 | import RecipeItem from './RecipeItem'; | 12 | import RecipeItem from './RecipeItem'; |
10 | import Loader from '../../ui/Loader'; | 13 | import Loader from '../../ui/Loader'; |
11 | import Appear from '../../ui/effects/Appear'; | 14 | import Appear from '../../ui/effects/Appear'; |
12 | import { FRANZ_SERVICE_REQUEST } from '../../../config'; | 15 | import { FRANZ_SERVICE_REQUEST } from '../../../config'; |
16 | import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox'; | ||
17 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; | ||
13 | 18 | ||
14 | const messages = defineMessages({ | 19 | const messages = defineMessages({ |
15 | headline: { | 20 | headline: { |
@@ -28,9 +33,9 @@ const messages = defineMessages({ | |||
28 | id: 'settings.recipes.all', | 33 | id: 'settings.recipes.all', |
29 | defaultMessage: '!!!All services', | 34 | defaultMessage: '!!!All services', |
30 | }, | 35 | }, |
31 | devRecipes: { | 36 | customRecipes: { |
32 | id: 'settings.recipes.dev', | 37 | id: 'settings.recipes.custom', |
33 | defaultMessage: '!!!Development', | 38 | defaultMessage: '!!!Custom Services', |
34 | }, | 39 | }, |
35 | nothingFound: { | 40 | nothingFound: { |
36 | id: 'settings.recipes.nothingFound', | 41 | id: 'settings.recipes.nothingFound', |
@@ -44,9 +49,61 @@ const messages = defineMessages({ | |||
44 | id: 'settings.recipes.missingService', | 49 | id: 'settings.recipes.missingService', |
45 | defaultMessage: '!!!Missing a service?', | 50 | defaultMessage: '!!!Missing a service?', |
46 | }, | 51 | }, |
52 | customRecipeIntro: { | ||
53 | id: 'settings.recipes.customService.intro', | ||
54 | defaultMessage: '!!!To add a custom service, copy the recipe folder into:', | ||
55 | }, | ||
56 | openFolder: { | ||
57 | id: 'settings.recipes.customService.openFolder', | ||
58 | defaultMessage: '!!!Open directory', | ||
59 | }, | ||
60 | openDevDocs: { | ||
61 | id: 'settings.recipes.customService.openDevDocs', | ||
62 | defaultMessage: '!!!Developer Documentation', | ||
63 | }, | ||
64 | headlineCustomRecipes: { | ||
65 | id: 'settings.recipes.customService.headline.customRecipes', | ||
66 | defaultMessage: '!!!Custom 3rd Party Recipes', | ||
67 | }, | ||
68 | headlineCommunityRecipes: { | ||
69 | id: 'settings.recipes.customService.headline.communityRecipes', | ||
70 | defaultMessage: '!!!Community 3rd Party Recipes', | ||
71 | }, | ||
72 | headlineDevRecipes: { | ||
73 | id: 'settings.recipes.customService.headline.devRecipes', | ||
74 | defaultMessage: '!!!Your Development Service Recipes', | ||
75 | }, | ||
47 | }); | 76 | }); |
48 | 77 | ||
49 | export default @observer class RecipesDashboard extends Component { | 78 | const styles = { |
79 | devRecipeIntroContainer: { | ||
80 | textAlign: 'center', | ||
81 | width: '100%', | ||
82 | height: 'auto', | ||
83 | margin: [40, 0], | ||
84 | }, | ||
85 | path: { | ||
86 | marginTop: 20, | ||
87 | |||
88 | '& > div': { | ||
89 | fontFamily: 'SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace', | ||
90 | }, | ||
91 | }, | ||
92 | actionContainer: { | ||
93 | '& button': { | ||
94 | margin: [0, 10], | ||
95 | }, | ||
96 | }, | ||
97 | devRecipeList: { | ||
98 | marginTop: 20, | ||
99 | height: 'auto', | ||
100 | }, | ||
101 | proBadge: { | ||
102 | marginLeft: '10px !important', | ||
103 | }, | ||
104 | }; | ||
105 | |||
106 | export default @injectSheet(styles) @observer class RecipesDashboard extends Component { | ||
50 | static propTypes = { | 107 | static propTypes = { |
51 | recipes: MobxPropTypes.arrayOrObservableArray.isRequired, | 108 | recipes: MobxPropTypes.arrayOrObservableArray.isRequired, |
52 | isLoading: PropTypes.bool.isRequired, | 109 | isLoading: PropTypes.bool.isRequired, |
@@ -55,12 +112,18 @@ export default @observer class RecipesDashboard extends Component { | |||
55 | searchRecipes: PropTypes.func.isRequired, | 112 | searchRecipes: PropTypes.func.isRequired, |
56 | resetSearch: PropTypes.func.isRequired, | 113 | resetSearch: PropTypes.func.isRequired, |
57 | serviceStatus: MobxPropTypes.arrayOrObservableArray.isRequired, | 114 | serviceStatus: MobxPropTypes.arrayOrObservableArray.isRequired, |
58 | devRecipesCount: PropTypes.number.isRequired, | ||
59 | searchNeedle: PropTypes.string, | 115 | searchNeedle: PropTypes.string, |
116 | recipeFilter: PropTypes.string, | ||
117 | recipeDirectory: PropTypes.string.isRequired, | ||
118 | openRecipeDirectory: PropTypes.func.isRequired, | ||
119 | openDevDocs: PropTypes.func.isRequired, | ||
120 | classes: PropTypes.object.isRequired, | ||
121 | isCommunityRecipesIncludedInCurrentPlan: PropTypes.bool.isRequired, | ||
60 | }; | 122 | }; |
61 | 123 | ||
62 | static defaultProps = { | 124 | static defaultProps = { |
63 | searchNeedle: '', | 125 | searchNeedle: '', |
126 | recipeFilter: 'all', | ||
64 | } | 127 | } |
65 | 128 | ||
66 | static contextTypes = { | 129 | static contextTypes = { |
@@ -76,16 +139,26 @@ export default @observer class RecipesDashboard extends Component { | |||
76 | searchRecipes, | 139 | searchRecipes, |
77 | resetSearch, | 140 | resetSearch, |
78 | serviceStatus, | 141 | serviceStatus, |
79 | devRecipesCount, | ||
80 | searchNeedle, | 142 | searchNeedle, |
143 | recipeFilter, | ||
144 | recipeDirectory, | ||
145 | openRecipeDirectory, | ||
146 | openDevDocs, | ||
147 | classes, | ||
148 | isCommunityRecipesIncludedInCurrentPlan, | ||
81 | } = this.props; | 149 | } = this.props; |
82 | const { intl } = this.context; | 150 | const { intl } = this.context; |
83 | 151 | ||
152 | |||
153 | const communityRecipes = recipes.filter(r => !r.isDevRecipe); | ||
154 | const devRecipes = recipes.filter(r => r.isDevRecipe); | ||
155 | |||
84 | return ( | 156 | return ( |
85 | <div className="settings__main"> | 157 | <div className="settings__main"> |
86 | <div className="settings__header"> | 158 | <div className="settings__header"> |
87 | <h1>{intl.formatMessage(messages.headline)}</h1> | 159 | <h1>{intl.formatMessage(messages.headline)}</h1> |
88 | </div> | 160 | </div> |
161 | <LimitReachedInfobox /> | ||
89 | <div className="settings__body recipes"> | 162 | <div className="settings__body recipes"> |
90 | {serviceStatus.length > 0 && serviceStatus.includes('created') && ( | 163 | {serviceStatus.length > 0 && serviceStatus.includes('created') && ( |
91 | <Appear> | 164 | <Appear> |
@@ -122,20 +195,14 @@ export default @observer class RecipesDashboard extends Component { | |||
122 | > | 195 | > |
123 | {intl.formatMessage(messages.allRecipes)} | 196 | {intl.formatMessage(messages.allRecipes)} |
124 | </Link> | 197 | </Link> |
125 | {devRecipesCount > 0 && ( | 198 | <Link |
126 | <Link | 199 | to="/settings/recipes/dev" |
127 | to="/settings/recipes/dev" | 200 | className="badge" |
128 | className="badge" | 201 | activeClassName={`${!searchNeedle ? 'badge--primary' : ''}`} |
129 | activeClassName={`${!searchNeedle ? 'badge--primary' : ''}`} | 202 | onClick={() => resetSearch()} |
130 | onClick={() => resetSearch()} | 203 | > |
131 | > | 204 | {intl.formatMessage(messages.customRecipes)} |
132 | {intl.formatMessage(messages.devRecipes)} | 205 | </Link> |
133 | {' '} | ||
134 | ( | ||
135 | {devRecipesCount} | ||
136 | ) | ||
137 | </Link> | ||
138 | )} | ||
139 | <a href={FRANZ_SERVICE_REQUEST} target="_blank" className="link recipes__service-request"> | 206 | <a href={FRANZ_SERVICE_REQUEST} target="_blank" className="link recipes__service-request"> |
140 | {intl.formatMessage(messages.missingService)} | 207 | {intl.formatMessage(messages.missingService)} |
141 | {' '} | 208 | {' '} |
@@ -146,23 +213,78 @@ export default @observer class RecipesDashboard extends Component { | |||
146 | {isLoading ? ( | 213 | {isLoading ? ( |
147 | <Loader /> | 214 | <Loader /> |
148 | ) : ( | 215 | ) : ( |
149 | <div className="recipes__list"> | 216 | <> |
150 | {hasLoadedRecipes && recipes.length === 0 && ( | 217 | {recipeFilter === 'dev' && ( |
151 | <p className="align-middle settings__empty-state"> | 218 | <> |
152 | <span className="emoji"> | 219 | <H2> |
153 | <img src="./assets/images/emoji/dontknow.png" alt="" /> | 220 | {intl.formatMessage(messages.headlineCustomRecipes)} |
154 | </span> | 221 | {!isCommunityRecipesIncludedInCurrentPlan && ( |
155 | {intl.formatMessage(messages.nothingFound)} | 222 | <ProBadge className={classes.proBadge} /> |
156 | </p> | 223 | )} |
224 | </H2> | ||
225 | <div className={classes.devRecipeIntroContainer}> | ||
226 | <p> | ||
227 | {intl.formatMessage(messages.customRecipeIntro)} | ||
228 | </p> | ||
229 | <Input | ||
230 | value={recipeDirectory} | ||
231 | className={classes.path} | ||
232 | showLabel={false} | ||
233 | /> | ||
234 | <div className={classes.actionContainer}> | ||
235 | <Button | ||
236 | onClick={openRecipeDirectory} | ||
237 | buttonType="secondary" | ||
238 | label={intl.formatMessage(messages.openFolder)} | ||
239 | /> | ||
240 | <Button | ||
241 | onClick={openDevDocs} | ||
242 | buttonType="secondary" | ||
243 | label={intl.formatMessage(messages.openDevDocs)} | ||
244 | /> | ||
245 | </div> | ||
246 | </div> | ||
247 | </> | ||
248 | )} | ||
249 | <PremiumFeatureContainer | ||
250 | condition={(recipeFilter === 'dev' && communityRecipes.length > 0) && !isCommunityRecipesIncludedInCurrentPlan} | ||
251 | > | ||
252 | {recipeFilter === 'dev' && communityRecipes.length > 0 && ( | ||
253 | <H3>{intl.formatMessage(messages.headlineCommunityRecipes)}</H3> | ||
254 | )} | ||
255 | <div className="recipes__list"> | ||
256 | {hasLoadedRecipes && recipes.length === 0 && recipeFilter !== 'dev' && ( | ||
257 | <p className="align-middle settings__empty-state"> | ||
258 | <span className="emoji"> | ||
259 | <img src="./assets/images/emoji/dontknow.png" alt="" /> | ||
260 | </span> | ||
261 | {intl.formatMessage(messages.nothingFound)} | ||
262 | </p> | ||
263 | )} | ||
264 | {communityRecipes.map(recipe => ( | ||
265 | <RecipeItem | ||
266 | key={recipe.id} | ||
267 | recipe={recipe} | ||
268 | onClick={() => showAddServiceInterface({ recipeId: recipe.id })} | ||
269 | /> | ||
270 | ))} | ||
271 | </div> | ||
272 | </PremiumFeatureContainer> | ||
273 | {recipeFilter === 'dev' && devRecipes.length > 0 && ( | ||
274 | <div className={classes.devRecipeList}> | ||
275 | <H3>{intl.formatMessage(messages.headlineDevRecipes)}</H3> | ||
276 | <div className="recipes__list"> | ||
277 | {devRecipes.map(recipe => ( | ||
278 | <RecipeItem | ||
279 | key={recipe.id} | ||
280 | recipe={recipe} | ||
281 | onClick={() => showAddServiceInterface({ recipeId: recipe.id })} | ||
282 | /> | ||
283 | ))} | ||
284 | </div> | ||
285 | </div> | ||
157 | )} | 286 | )} |
158 | {recipes.map(recipe => ( | 287 | </> |
159 | <RecipeItem | ||
160 | key={recipe.id} | ||
161 | recipe={recipe} | ||
162 | onClick={() => showAddServiceInterface({ recipeId: recipe.id })} | ||
163 | /> | ||
164 | ))} | ||
165 | </div> | ||
166 | )} | 288 | )} |
167 | </div> | 289 | </div> |
168 | </div> | 290 | </div> |
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index 711b571e2..5fe00cb8b 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js | |||
@@ -17,6 +17,8 @@ import ImageUpload from '../../ui/ImageUpload'; | |||
17 | import Select from '../../ui/Select'; | 17 | import Select from '../../ui/Select'; |
18 | 18 | ||
19 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; | 19 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; |
20 | import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox'; | ||
21 | import { serviceLimitStore } from '../../../features/serviceLimit'; | ||
20 | 22 | ||
21 | const messages = defineMessages({ | 23 | const messages = defineMessages({ |
22 | saveService: { | 24 | saveService: { |
@@ -128,8 +130,8 @@ export default @observer class EditServiceForm extends Component { | |||
128 | isSaving: PropTypes.bool.isRequired, | 130 | isSaving: PropTypes.bool.isRequired, |
129 | isDeleting: PropTypes.bool.isRequired, | 131 | isDeleting: PropTypes.bool.isRequired, |
130 | isProxyFeatureEnabled: PropTypes.bool.isRequired, | 132 | isProxyFeatureEnabled: PropTypes.bool.isRequired, |
131 | isProxyPremiumFeature: PropTypes.bool.isRequired, | 133 | isServiceProxyIncludedInCurrentPlan: PropTypes.bool.isRequired, |
132 | isSpellcheckerPremiumFeature: PropTypes.bool.isRequired, | 134 | isSpellcheckerIncludedInCurrentPlan: PropTypes.bool.isRequired, |
133 | }; | 135 | }; |
134 | 136 | ||
135 | static defaultProps = { | 137 | static defaultProps = { |
@@ -192,8 +194,8 @@ export default @observer class EditServiceForm extends Component { | |||
192 | isDeleting, | 194 | isDeleting, |
193 | onDelete, | 195 | onDelete, |
194 | isProxyFeatureEnabled, | 196 | isProxyFeatureEnabled, |
195 | isProxyPremiumFeature, | 197 | isServiceProxyIncludedInCurrentPlan, |
196 | isSpellcheckerPremiumFeature, | 198 | isSpellcheckerIncludedInCurrentPlan, |
197 | } = this.props; | 199 | } = this.props; |
198 | const { intl } = this.context; | 200 | const { intl } = this.context; |
199 | 201 | ||
@@ -252,6 +254,7 @@ export default @observer class EditServiceForm extends Component { | |||
252 | )} | 254 | )} |
253 | </span> | 255 | </span> |
254 | </div> | 256 | </div> |
257 | <LimitReachedInfobox /> | ||
255 | <div className="settings__body"> | 258 | <div className="settings__body"> |
256 | <form onSubmit={e => this.submit(e)} id="form"> | 259 | <form onSubmit={e => this.submit(e)} id="form"> |
257 | <div className="service-name"> | 260 | <div className="service-name"> |
@@ -342,7 +345,7 @@ export default @observer class EditServiceForm extends Component { | |||
342 | </div> | 345 | </div> |
343 | 346 | ||
344 | <PremiumFeatureContainer | 347 | <PremiumFeatureContainer |
345 | condition={isSpellcheckerPremiumFeature} | 348 | condition={!isSpellcheckerIncludedInCurrentPlan} |
346 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'spellchecker' }} | 349 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'spellchecker' }} |
347 | > | 350 | > |
348 | <div className="settings__settings-group"> | 351 | <div className="settings__settings-group"> |
@@ -352,7 +355,7 @@ export default @observer class EditServiceForm extends Component { | |||
352 | 355 | ||
353 | {isProxyFeatureEnabled && ( | 356 | {isProxyFeatureEnabled && ( |
354 | <PremiumFeatureContainer | 357 | <PremiumFeatureContainer |
355 | condition={isProxyPremiumFeature} | 358 | condition={!isServiceProxyIncludedInCurrentPlan} |
356 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'proxy' }} | 359 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'proxy' }} |
357 | > | 360 | > |
358 | <div className="settings__settings-group"> | 361 | <div className="settings__settings-group"> |
@@ -418,7 +421,7 @@ export default @observer class EditServiceForm extends Component { | |||
418 | type="submit" | 421 | type="submit" |
419 | label={intl.formatMessage(messages.saveService)} | 422 | label={intl.formatMessage(messages.saveService)} |
420 | htmlForm="form" | 423 | htmlForm="form" |
421 | disabled={action !== 'edit' && form.isPristine && requiresUserInput} | 424 | disabled={action !== 'edit' && ((form.isPristine && requiresUserInput) || serviceLimitStore.userHasReachedServiceLimit)} |
422 | /> | 425 | /> |
423 | )} | 426 | )} |
424 | </div> | 427 | </div> |
diff --git a/src/components/settings/services/ServicesDashboard.js b/src/components/settings/services/ServicesDashboard.js index 53bae12df..78038e86a 100644 --- a/src/components/settings/services/ServicesDashboard.js +++ b/src/components/settings/services/ServicesDashboard.js | |||
@@ -9,6 +9,7 @@ import Infobox from '../../ui/Infobox'; | |||
9 | import Loader from '../../ui/Loader'; | 9 | import Loader from '../../ui/Loader'; |
10 | import ServiceItem from './ServiceItem'; | 10 | import ServiceItem from './ServiceItem'; |
11 | import Appear from '../../ui/effects/Appear'; | 11 | import Appear from '../../ui/effects/Appear'; |
12 | import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox'; | ||
12 | 13 | ||
13 | const messages = defineMessages({ | 14 | const messages = defineMessages({ |
14 | headline: { | 15 | headline: { |
@@ -91,6 +92,7 @@ export default @observer class ServicesDashboard extends Component { | |||
91 | <div className="settings__header"> | 92 | <div className="settings__header"> |
92 | <h1>{intl.formatMessage(messages.headline)}</h1> | 93 | <h1>{intl.formatMessage(messages.headline)}</h1> |
93 | </div> | 94 | </div> |
95 | <LimitReachedInfobox /> | ||
94 | <div className="settings__body"> | 96 | <div className="settings__body"> |
95 | {!isLoading && ( | 97 | {!isLoading && ( |
96 | <SearchInput | 98 | <SearchInput |
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 660c3c109..19333fdff 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js | |||
@@ -105,7 +105,8 @@ export default @observer class EditSettingsForm extends Component { | |||
105 | isClearingAllCache: PropTypes.bool.isRequired, | 105 | isClearingAllCache: PropTypes.bool.isRequired, |
106 | onClearAllCache: PropTypes.func.isRequired, | 106 | onClearAllCache: PropTypes.func.isRequired, |
107 | cacheSize: PropTypes.string.isRequired, | 107 | cacheSize: PropTypes.string.isRequired, |
108 | isSpellcheckerPremiumFeature: PropTypes.bool.isRequired, | 108 | isSpellcheckerIncludedInCurrentPlan: PropTypes.bool.isRequired, |
109 | isTodosEnabled: PropTypes.bool.isRequired, | ||
109 | }; | 110 | }; |
110 | 111 | ||
111 | static contextTypes = { | 112 | static contextTypes = { |
@@ -135,7 +136,8 @@ export default @observer class EditSettingsForm extends Component { | |||
135 | isClearingAllCache, | 136 | isClearingAllCache, |
136 | onClearAllCache, | 137 | onClearAllCache, |
137 | cacheSize, | 138 | cacheSize, |
138 | isSpellcheckerPremiumFeature, | 139 | isSpellcheckerIncludedInCurrentPlan, |
140 | isTodosEnabled, | ||
139 | } = this.props; | 141 | } = this.props; |
140 | const { intl } = this.context; | 142 | const { intl } = this.context; |
141 | 143 | ||
@@ -178,6 +180,9 @@ export default @observer class EditSettingsForm extends Component { | |||
178 | { isLoggedIn && ( | 180 | { isLoggedIn && ( |
179 | <p>{ intl.formatMessage(messages.serverInfo) }</p> | 181 | <p>{ intl.formatMessage(messages.serverInfo) }</p> |
180 | )} | 182 | )} |
183 | {isTodosEnabled && ( | ||
184 | <Toggle field={form.$('enableTodos')} /> | ||
185 | )} | ||
181 | 186 | ||
182 | {/* Appearance */} | 187 | {/* Appearance */} |
183 | <h2 id="apperance">{intl.formatMessage(messages.headlineAppearance)}</h2> | 188 | <h2 id="apperance">{intl.formatMessage(messages.headlineAppearance)}</h2> |
@@ -189,7 +194,7 @@ export default @observer class EditSettingsForm extends Component { | |||
189 | <h2 id="language">{intl.formatMessage(messages.headlineLanguage)}</h2> | 194 | <h2 id="language">{intl.formatMessage(messages.headlineLanguage)}</h2> |
190 | <Select field={form.$('locale')} showLabel={false} /> | 195 | <Select field={form.$('locale')} showLabel={false} /> |
191 | <PremiumFeatureContainer | 196 | <PremiumFeatureContainer |
192 | condition={isSpellcheckerPremiumFeature} | 197 | condition={!isSpellcheckerIncludedInCurrentPlan} |
193 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'spellchecker' }} | 198 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'spellchecker' }} |
194 | > | 199 | > |
195 | <Fragment> | 200 | <Fragment> |
diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js index 05c942a11..2bf46b48d 100644 --- a/src/components/settings/team/TeamDashboard.js +++ b/src/components/settings/team/TeamDashboard.js | |||
@@ -4,11 +4,14 @@ import { observer } from 'mobx-react'; | |||
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import ReactTooltip from 'react-tooltip'; | 5 | import ReactTooltip from 'react-tooltip'; |
6 | import injectSheet from 'react-jss'; | 6 | import injectSheet from 'react-jss'; |
7 | import classnames from 'classnames'; | ||
7 | 8 | ||
9 | import { Badge } from '@meetfranz/ui'; | ||
8 | import Loader from '../../ui/Loader'; | 10 | import Loader from '../../ui/Loader'; |
9 | import Button from '../../ui/Button'; | 11 | import Button from '../../ui/Button'; |
10 | import Infobox from '../../ui/Infobox'; | 12 | import Infobox from '../../ui/Infobox'; |
11 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; | 13 | import globalMessages from '../../../i18n/globalMessages'; |
14 | import UpgradeButton from '../../ui/UpgradeButton'; | ||
12 | 15 | ||
13 | const messages = defineMessages({ | 16 | const messages = defineMessages({ |
14 | headline: { | 17 | headline: { |
@@ -40,6 +43,7 @@ const messages = defineMessages({ | |||
40 | const styles = { | 43 | const styles = { |
41 | cta: { | 44 | cta: { |
42 | margin: [40, 'auto'], | 45 | margin: [40, 'auto'], |
46 | height: 'auto', | ||
43 | }, | 47 | }, |
44 | container: { | 48 | container: { |
45 | display: 'flex', | 49 | display: 'flex', |
@@ -69,6 +73,20 @@ const styles = { | |||
69 | order: 1, | 73 | order: 1, |
70 | }, | 74 | }, |
71 | }, | 75 | }, |
76 | headline: { | ||
77 | marginBottom: 0, | ||
78 | }, | ||
79 | headlineWithSpacing: { | ||
80 | marginBottom: 'inherit', | ||
81 | }, | ||
82 | proRequired: { | ||
83 | margin: [10, 0, 40], | ||
84 | height: 'auto', | ||
85 | }, | ||
86 | buttonContainer: { | ||
87 | display: 'flex', | ||
88 | height: 'auto', | ||
89 | }, | ||
72 | }; | 90 | }; |
73 | 91 | ||
74 | 92 | ||
@@ -79,6 +97,7 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon | |||
79 | retryUserInfoRequest: PropTypes.func.isRequired, | 97 | retryUserInfoRequest: PropTypes.func.isRequired, |
80 | openTeamManagement: PropTypes.func.isRequired, | 98 | openTeamManagement: PropTypes.func.isRequired, |
81 | classes: PropTypes.object.isRequired, | 99 | classes: PropTypes.object.isRequired, |
100 | isProUser: PropTypes.bool.isRequired, | ||
82 | }; | 101 | }; |
83 | 102 | ||
84 | static contextTypes = { | 103 | static contextTypes = { |
@@ -91,6 +110,7 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon | |||
91 | userInfoRequestFailed, | 110 | userInfoRequestFailed, |
92 | retryUserInfoRequest, | 111 | retryUserInfoRequest, |
93 | openTeamManagement, | 112 | openTeamManagement, |
113 | isProUser, | ||
94 | classes, | 114 | classes, |
95 | } = this.props; | 115 | } = this.props; |
96 | const { intl } = this.context; | 116 | const { intl } = this.context; |
@@ -123,23 +143,42 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon | |||
123 | <> | 143 | <> |
124 | {!isLoading && ( | 144 | {!isLoading && ( |
125 | <> | 145 | <> |
126 | <PremiumFeatureContainer> | 146 | <> |
127 | <> | 147 | <h1 className={classnames({ |
128 | <h1>{intl.formatMessage(messages.contentHeadline)}</h1> | 148 | [classes.headline]: true, |
129 | <div className={classes.container}> | 149 | [classes.headlineWithSpacing]: isProUser, |
130 | <div className={classes.content}> | 150 | })} |
131 | <p>{intl.formatMessage(messages.intro)}</p> | 151 | > |
132 | <p>{intl.formatMessage(messages.copy)}</p> | 152 | {intl.formatMessage(messages.contentHeadline)} |
133 | </div> | 153 | |
134 | <img className={classes.image} src="https://cdn.franzinfra.com/announcements/assets/teams.png" alt="Ferdi for Teams" /> | 154 | </h1> |
155 | {!isProUser && ( | ||
156 | <Badge className={classes.proRequired}>{intl.formatMessage(globalMessages.proRequired)}</Badge> | ||
157 | )} | ||
158 | <div className={classes.container}> | ||
159 | <div className={classes.content}> | ||
160 | <p>{intl.formatMessage(messages.intro)}</p> | ||
161 | <p>{intl.formatMessage(messages.copy)}</p> | ||
135 | </div> | 162 | </div> |
136 | <Button | 163 | <img className={classes.image} src="https://cdn.franzinfra.com/announcements/assets/teams.png" alt="Franz for Teams" /> |
137 | label={intl.formatMessage(messages.manageButton)} | 164 | </div> |
138 | onClick={openTeamManagement} | 165 | <div className={classes.buttonContainer}> |
139 | className={classes.cta} | 166 | {!isProUser ? ( |
140 | /> | 167 | <UpgradeButton |
141 | </> | 168 | className={classes.cta} |
142 | </PremiumFeatureContainer> | 169 | gaEventInfo={{ category: 'Todos', event: 'upgrade' }} |
170 | requiresPro | ||
171 | short | ||
172 | /> | ||
173 | ) : ( | ||
174 | <Button | ||
175 | label={intl.formatMessage(messages.manageButton)} | ||
176 | onClick={openTeamManagement} | ||
177 | className={classes.cta} | ||
178 | /> | ||
179 | )} | ||
180 | </div> | ||
181 | </> | ||
143 | </> | 182 | </> |
144 | )} | 183 | )} |
145 | </> | 184 | </> |
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js index 8c7dceece..cdfbbe60d 100644 --- a/src/components/subscription/SubscriptionForm.js +++ b/src/components/subscription/SubscriptionForm.js | |||
@@ -1,214 +1,78 @@ | |||
1 | import React, { Component, Fragment } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import injectSheet from 'react-jss'; | ||
5 | 6 | ||
6 | import Form from '../../lib/Form'; | 7 | import { H3, H2 } from '@meetfranz/ui'; |
7 | import Radio from '../ui/Radio'; | ||
8 | import Button from '../ui/Button'; | ||
9 | import Loader from '../ui/Loader'; | ||
10 | 8 | ||
11 | import { required } from '../../helpers/validation-helpers'; | 9 | import { Button } from '@meetfranz/forms'; |
10 | import { FeatureList } from '../ui/FeatureList'; | ||
12 | 11 | ||
13 | const messages = defineMessages({ | 12 | const messages = defineMessages({ |
14 | submitButtonLabel: { | 13 | submitButtonLabel: { |
15 | id: 'subscription.submit.label', | 14 | id: 'subscription.cta.choosePlan', |
16 | defaultMessage: '!!!Support the development of Franz', | 15 | defaultMessage: '!!!Choose your plan', |
17 | }, | 16 | }, |
18 | paymentSessionError: { | 17 | teaserHeadline: { |
19 | id: 'subscription.paymentSessionError', | 18 | id: 'settings.account.headlineUpgradeAccount', |
20 | defaultMessage: '!!!Could not initialize payment form', | 19 | defaultMessage: '!!!Upgrade your account and get the full Franz experience', |
21 | }, | 20 | }, |
22 | typeFree: { | 21 | teaserText: { |
23 | id: 'subscription.type.free', | 22 | id: 'subscription.teaser.intro', |
24 | defaultMessage: '!!!free', | 23 | defaultMessage: '!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!', |
25 | }, | ||
26 | typeMonthly: { | ||
27 | id: 'subscription.type.month', | ||
28 | defaultMessage: '!!!month', | ||
29 | }, | ||
30 | typeYearly: { | ||
31 | id: 'subscription.type.year', | ||
32 | defaultMessage: '!!!year', | ||
33 | }, | 24 | }, |
34 | includedFeatures: { | 25 | includedFeatures: { |
35 | id: 'subscription.includedFeatures', | 26 | id: 'subscription.teaser.includedFeatures', |
36 | defaultMessage: '!!!The Ferdi Premium Supporter Account includes', | 27 | defaultMessage: '!!!Paid Franz Plans include:', |
37 | }, | ||
38 | onpremise: { | ||
39 | id: 'subscription.features.onpremise.mattermost', | ||
40 | defaultMessage: '!!!Add on-premise/hosted services like Mattermost', | ||
41 | }, | ||
42 | noInterruptions: { | ||
43 | id: 'subscription.features.noInterruptions', | ||
44 | defaultMessage: '!!!No app delays & nagging to upgrade license', | ||
45 | }, | ||
46 | proxy: { | ||
47 | id: 'subscription.features.proxy', | ||
48 | defaultMessage: '!!!Proxy support for services', | ||
49 | }, | ||
50 | spellchecker: { | ||
51 | id: 'subscription.features.spellchecker', | ||
52 | defaultMessage: '!!!Support for Spellchecker', | ||
53 | }, | 28 | }, |
54 | workspaces: { | 29 | }); |
55 | id: 'subscription.features.workspaces', | 30 | |
56 | defaultMessage: '!!!Organize your services in workspaces', | 31 | const styles = () => ({ |
57 | }, | 32 | activateTrialButton: { |
58 | ads: { | 33 | margin: [40, 0, 50], |
59 | id: 'subscription.features.ads', | ||
60 | defaultMessage: '!!!No ads, ever!', | ||
61 | }, | ||
62 | comingSoon: { | ||
63 | id: 'subscription.features.comingSoon', | ||
64 | defaultMessage: '!!!coming soon', | ||
65 | }, | ||
66 | euTaxInfo: { | ||
67 | id: 'subscription.euTaxInfo', | ||
68 | defaultMessage: '!!!EU residents: local sales tax may apply', | ||
69 | }, | 34 | }, |
70 | }); | 35 | }); |
71 | 36 | ||
72 | export default @observer class SubscriptionForm extends Component { | 37 | export default @observer @injectSheet(styles) class SubscriptionForm extends Component { |
73 | static propTypes = { | 38 | static propTypes = { |
74 | plan: MobxPropTypes.objectOrObservableObject.isRequired, | 39 | selectPlan: PropTypes.func.isRequired, |
75 | isLoading: PropTypes.bool.isRequired, | 40 | isActivatingTrial: PropTypes.bool.isRequired, |
76 | handlePayment: PropTypes.func.isRequired, | 41 | classes: PropTypes.object.isRequired, |
77 | retryPlanRequest: PropTypes.func.isRequired, | ||
78 | isCreatingHostedPage: PropTypes.bool.isRequired, | ||
79 | error: PropTypes.bool.isRequired, | ||
80 | showSkipOption: PropTypes.bool, | ||
81 | skipAction: PropTypes.func, | ||
82 | skipButtonLabel: PropTypes.string, | ||
83 | hideInfo: PropTypes.bool.isRequired, | ||
84 | }; | ||
85 | |||
86 | static defaultProps = { | ||
87 | showSkipOption: false, | ||
88 | skipAction: () => null, | ||
89 | skipButtonLabel: '', | ||
90 | }; | 42 | }; |
91 | 43 | ||
92 | static contextTypes = { | 44 | static contextTypes = { |
93 | intl: intlShape, | 45 | intl: intlShape, |
94 | }; | 46 | }; |
95 | 47 | ||
96 | componentWillMount() { | ||
97 | this.form = this.prepareForm(); | ||
98 | } | ||
99 | |||
100 | prepareForm() { | ||
101 | const { intl } = this.context; | ||
102 | |||
103 | const form = { | ||
104 | fields: { | ||
105 | paymentTier: { | ||
106 | value: 'year', | ||
107 | validators: [required], | ||
108 | options: [{ | ||
109 | value: 'month', | ||
110 | label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'month') | ||
111 | ? `${this.props.plan.month.price} / ${intl.formatMessage(messages.typeMonthly)}` | ||
112 | : 'monthly'}`, | ||
113 | }, { | ||
114 | value: 'year', | ||
115 | label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'year') | ||
116 | ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}` | ||
117 | : 'yearly'}`, | ||
118 | }], | ||
119 | }, | ||
120 | }, | ||
121 | }; | ||
122 | |||
123 | if (this.props.showSkipOption) { | ||
124 | form.fields.paymentTier.options.unshift({ | ||
125 | value: 'skip', | ||
126 | label: `€ 0 / ${intl.formatMessage(messages.typeFree)}`, | ||
127 | }); | ||
128 | } | ||
129 | |||
130 | return new Form(form, this.context.intl); | ||
131 | } | ||
132 | |||
133 | render() { | 48 | render() { |
134 | const { | 49 | const { |
135 | isLoading, | 50 | isActivatingTrial, |
136 | isCreatingHostedPage, | 51 | selectPlan, |
137 | handlePayment, | 52 | classes, |
138 | retryPlanRequest, | ||
139 | error, | ||
140 | showSkipOption, | ||
141 | skipAction, | ||
142 | skipButtonLabel, | ||
143 | hideInfo, | ||
144 | } = this.props; | 53 | } = this.props; |
145 | const { intl } = this.context; | 54 | const { intl } = this.context; |
146 | 55 | ||
147 | if (error) { | 56 | return ( |
148 | return ( | 57 | <> |
58 | <H2>{intl.formatMessage(messages.teaserHeadline)}</H2> | ||
59 | <p>{intl.formatMessage(messages.teaserText)}</p> | ||
149 | <Button | 60 | <Button |
150 | label="Reload" | 61 | label={intl.formatMessage(messages.submitButtonLabel)} |
151 | onClick={retryPlanRequest} | 62 | className={classes.activateTrialButton} |
152 | isLoaded={!isLoading} | 63 | busy={isActivatingTrial} |
64 | onClick={selectPlan} | ||
65 | stretch | ||
153 | /> | 66 | /> |
154 | ); | 67 | <div className="subscription__premium-info"> |
155 | } | 68 | <H3> |
156 | 69 | {intl.formatMessage(messages.includedFeatures)} | |
157 | return ( | 70 | </H3> |
158 | <Loader loaded={!isLoading}> | 71 | <div className="subscription"> |
159 | <Radio field={this.form.$('paymentTier')} showLabel={false} className="paymentTiers" /> | 72 | <FeatureList /> |
160 | {!hideInfo && ( | ||
161 | <div className="subscription__premium-info"> | ||
162 | <p> | ||
163 | <strong>{intl.formatMessage(messages.includedFeatures)}</strong> | ||
164 | </p> | ||
165 | <div className="subscription"> | ||
166 | <ul className="subscription__premium-features"> | ||
167 | <li>{intl.formatMessage(messages.onpremise)}</li> | ||
168 | <li> | ||
169 | {intl.formatMessage(messages.noInterruptions)} | ||
170 | </li> | ||
171 | <li> | ||
172 | {intl.formatMessage(messages.spellchecker)} | ||
173 | </li> | ||
174 | <li> | ||
175 | {intl.formatMessage(messages.proxy)} | ||
176 | </li> | ||
177 | <li> | ||
178 | {intl.formatMessage(messages.workspaces)} | ||
179 | </li> | ||
180 | <li> | ||
181 | {intl.formatMessage(messages.ads)} | ||
182 | </li> | ||
183 | </ul> | ||
184 | </div> | ||
185 | </div> | 73 | </div> |
186 | )} | 74 | </div> |
187 | <Fragment> | 75 | </> |
188 | {error.code === 'no-payment-session' && ( | ||
189 | <p className="error-message center">{intl.formatMessage(messages.paymentSessionError)}</p> | ||
190 | )} | ||
191 | </Fragment> | ||
192 | {showSkipOption && this.form.$('paymentTier').value === 'skip' ? ( | ||
193 | <Button | ||
194 | label={skipButtonLabel} | ||
195 | className="auth__button" | ||
196 | onClick={skipAction} | ||
197 | /> | ||
198 | ) : ( | ||
199 | <Button | ||
200 | label={intl.formatMessage(messages.submitButtonLabel)} | ||
201 | className="auth__button" | ||
202 | loaded={!isCreatingHostedPage} | ||
203 | onClick={() => handlePayment(this.form.$('paymentTier').value)} | ||
204 | /> | ||
205 | )} | ||
206 | {this.form.$('paymentTier').value !== 'skip' && ( | ||
207 | <p className="legal"> | ||
208 | {intl.formatMessage(messages.euTaxInfo)} | ||
209 | </p> | ||
210 | )} | ||
211 | </Loader> | ||
212 | ); | 76 | ); |
213 | } | 77 | } |
214 | } | 78 | } |
diff --git a/src/components/subscription/SubscriptionPopup.js b/src/components/subscription/SubscriptionPopup.js index 0f6f0260f..12ef8a6e9 100644 --- a/src/components/subscription/SubscriptionPopup.js +++ b/src/components/subscription/SubscriptionPopup.js | |||
@@ -43,7 +43,7 @@ export default @observer class SubscriptionPopup extends Component { | |||
43 | 43 | ||
44 | setTimeout(() => { | 44 | setTimeout(() => { |
45 | this.props.closeWindow(); | 45 | this.props.closeWindow(); |
46 | }, ms('4s')); | 46 | }, ms('1s')); |
47 | } | 47 | } |
48 | 48 | ||
49 | render() { | 49 | render() { |
@@ -61,8 +61,6 @@ export default @observer class SubscriptionPopup extends Component { | |||
61 | autosize | 61 | autosize |
62 | src={encodeURI(url)} | 62 | src={encodeURI(url)} |
63 | onDidNavigate={completeCheck} | 63 | onDidNavigate={completeCheck} |
64 | // onNewWindow={(event, url, frameName, options) => | ||
65 | // openWindow({ event, url, frameName, options })} | ||
66 | /> | 64 | /> |
67 | </div> | 65 | </div> |
68 | <div className="subscription-popup__toolbar franz-form"> | 66 | <div className="subscription-popup__toolbar franz-form"> |
diff --git a/src/components/subscription/TrialForm.js b/src/components/subscription/TrialForm.js new file mode 100644 index 000000000..9ed548f16 --- /dev/null +++ b/src/components/subscription/TrialForm.js | |||
@@ -0,0 +1,115 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { observer } from 'mobx-react'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | import injectSheet from 'react-jss'; | ||
6 | |||
7 | import { H3, H2 } from '@meetfranz/ui'; | ||
8 | |||
9 | import { Button } from '@meetfranz/forms'; | ||
10 | import { FeatureList } from '../ui/FeatureList'; | ||
11 | import { FeatureItem } from '../ui/FeatureItem'; | ||
12 | |||
13 | const messages = defineMessages({ | ||
14 | submitButtonLabel: { | ||
15 | id: 'subscription.cta.activateTrial', | ||
16 | defaultMessage: '!!!Yes, start the free Franz Professional trial', | ||
17 | }, | ||
18 | allOptionsButton: { | ||
19 | id: 'subscription.cta.allOptions', | ||
20 | defaultMessage: '!!!See all options', | ||
21 | }, | ||
22 | teaserHeadline: { | ||
23 | id: 'settings.account.headlineTrialUpgrade', | ||
24 | defaultMessage: '!!!Get the free 14 day Franz Professional Trial', | ||
25 | }, | ||
26 | includedFeatures: { | ||
27 | id: 'subscription.includedProFeatures', | ||
28 | defaultMessage: '!!!The Franz Professional Plan includes:', | ||
29 | }, | ||
30 | noStringsAttachedHeadline: { | ||
31 | id: 'pricing.trial.terms.headline', | ||
32 | defaultMessage: '!!!No strings attached', | ||
33 | }, | ||
34 | noCreditCard: { | ||
35 | id: 'pricing.trial.terms.noCreditCard', | ||
36 | defaultMessage: '!!!No credit card required', | ||
37 | }, | ||
38 | automaticTrialEnd: { | ||
39 | id: 'pricing.trial.terms.automaticTrialEnd', | ||
40 | defaultMessage: '!!!Your free trial ends automatically after 14 days', | ||
41 | }, | ||
42 | }); | ||
43 | |||
44 | const styles = theme => ({ | ||
45 | activateTrialButton: { | ||
46 | margin: [40, 0, 10], | ||
47 | }, | ||
48 | allOptionsButton: { | ||
49 | margin: [0, 0, 40], | ||
50 | background: 'none', | ||
51 | border: 'none', | ||
52 | color: theme.colorText, | ||
53 | }, | ||
54 | keyTerms: { | ||
55 | marginTop: 20, | ||
56 | }, | ||
57 | }); | ||
58 | |||
59 | export default @observer @injectSheet(styles) class TrialForm extends Component { | ||
60 | static propTypes = { | ||
61 | activateTrial: PropTypes.func.isRequired, | ||
62 | isActivatingTrial: PropTypes.bool.isRequired, | ||
63 | showAllOptions: PropTypes.func.isRequired, | ||
64 | classes: PropTypes.object.isRequired, | ||
65 | }; | ||
66 | |||
67 | static contextTypes = { | ||
68 | intl: intlShape, | ||
69 | }; | ||
70 | |||
71 | render() { | ||
72 | const { | ||
73 | isActivatingTrial, | ||
74 | activateTrial, | ||
75 | showAllOptions, | ||
76 | classes, | ||
77 | } = this.props; | ||
78 | const { intl } = this.context; | ||
79 | |||
80 | return ( | ||
81 | <> | ||
82 | <H2>{intl.formatMessage(messages.teaserHeadline)}</H2> | ||
83 | <H3 className={classes.keyTerms}> | ||
84 | {intl.formatMessage(messages.noStringsAttachedHeadline)} | ||
85 | </H3> | ||
86 | <ul> | ||
87 | <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} /> | ||
88 | <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} /> | ||
89 | </ul> | ||
90 | |||
91 | <Button | ||
92 | label={intl.formatMessage(messages.submitButtonLabel)} | ||
93 | className={classes.activateTrialButton} | ||
94 | busy={isActivatingTrial} | ||
95 | onClick={activateTrial} | ||
96 | stretch | ||
97 | /> | ||
98 | <Button | ||
99 | label={intl.formatMessage(messages.allOptionsButton)} | ||
100 | className={classes.allOptionsButton} | ||
101 | onClick={showAllOptions} | ||
102 | stretch | ||
103 | /> | ||
104 | <div className="subscription__premium-info"> | ||
105 | <H3> | ||
106 | {intl.formatMessage(messages.includedFeatures)} | ||
107 | </H3> | ||
108 | <div className="subscription"> | ||
109 | <FeatureList /> | ||
110 | </div> | ||
111 | </div> | ||
112 | </> | ||
113 | ); | ||
114 | } | ||
115 | } | ||
diff --git a/src/components/ui/ActivateTrialButton/index.js b/src/components/ui/ActivateTrialButton/index.js new file mode 100644 index 000000000..e0637da90 --- /dev/null +++ b/src/components/ui/ActivateTrialButton/index.js | |||
@@ -0,0 +1,125 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { inject, observer } from 'mobx-react'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | import classnames from 'classnames'; | ||
6 | |||
7 | import { Button } from '@meetfranz/forms'; | ||
8 | import { gaEvent } from '../../../lib/analytics'; | ||
9 | |||
10 | import UserStore from '../../../stores/UserStore'; | ||
11 | |||
12 | const messages = defineMessages({ | ||
13 | action: { | ||
14 | id: 'feature.delayApp.upgrade.action', | ||
15 | defaultMessage: '!!!Get a Franz Supporter License', | ||
16 | }, | ||
17 | actionTrial: { | ||
18 | id: 'feature.delayApp.trial.action', | ||
19 | defaultMessage: '!!!Yes, I want the free 14 day trial of Franz Professional', | ||
20 | }, | ||
21 | shortAction: { | ||
22 | id: 'feature.delayApp.upgrade.actionShort', | ||
23 | defaultMessage: '!!!Upgrade account', | ||
24 | }, | ||
25 | shortActionTrial: { | ||
26 | id: 'feature.delayApp.trial.actionShort', | ||
27 | defaultMessage: '!!!Activate the free Franz Professional trial', | ||
28 | }, | ||
29 | noStringsAttachedHeadline: { | ||
30 | id: 'pricing.trial.terms.headline', | ||
31 | defaultMessage: '!!!No strings attached', | ||
32 | }, | ||
33 | noCreditCard: { | ||
34 | id: 'pricing.trial.terms.noCreditCard', | ||
35 | defaultMessage: '!!!No credit card required', | ||
36 | }, | ||
37 | automaticTrialEnd: { | ||
38 | id: 'pricing.trial.terms.automaticTrialEnd', | ||
39 | defaultMessage: '!!!Your free trial ends automatically after 14 days', | ||
40 | }, | ||
41 | }); | ||
42 | |||
43 | @inject('stores', 'actions') @observer | ||
44 | class ActivateTrialButton extends Component { | ||
45 | static propTypes = { | ||
46 | className: PropTypes.string, | ||
47 | short: PropTypes.bool, | ||
48 | gaEventInfo: PropTypes.shape({ | ||
49 | category: PropTypes.string.isRequired, | ||
50 | event: PropTypes.string.isRequired, | ||
51 | label: PropTypes.string, | ||
52 | }), | ||
53 | }; | ||
54 | |||
55 | static defaultProps = { | ||
56 | className: '', | ||
57 | short: false, | ||
58 | gaEventInfo: null, | ||
59 | } | ||
60 | |||
61 | static contextTypes = { | ||
62 | intl: intlShape, | ||
63 | }; | ||
64 | |||
65 | handleCTAClick() { | ||
66 | const { actions, stores, gaEventInfo } = this.props; | ||
67 | const { hadSubscription } = stores.user.data; | ||
68 | // const { defaultTrialPlan } = stores.features.features; | ||
69 | |||
70 | let label = ''; | ||
71 | if (!hadSubscription) { | ||
72 | // actions.user.activateTrial({ planId: defaultTrialPlan }); | ||
73 | |||
74 | label = 'Start Trial'; | ||
75 | } else { | ||
76 | label = 'Upgrade Account'; | ||
77 | } | ||
78 | |||
79 | actions.ui.openSettings({ path: 'user' }); | ||
80 | |||
81 | if (gaEventInfo) { | ||
82 | const { category, event } = gaEventInfo; | ||
83 | gaEvent(category, event, label); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | render() { | ||
88 | const { stores, className, short } = this.props; | ||
89 | const { intl } = this.context; | ||
90 | |||
91 | const { hadSubscription } = stores.user.data; | ||
92 | |||
93 | let label; | ||
94 | if (hadSubscription) { | ||
95 | label = short ? messages.shortAction : messages.action; | ||
96 | } else { | ||
97 | label = short ? messages.shortActionTrial : messages.actionTrial; | ||
98 | } | ||
99 | |||
100 | return ( | ||
101 | <Button | ||
102 | label={intl.formatMessage(label)} | ||
103 | className={classnames({ | ||
104 | [className]: className, | ||
105 | })} | ||
106 | buttonType="inverted" | ||
107 | onClick={this.handleCTAClick.bind(this)} | ||
108 | busy={stores.user.activateTrialRequest.isExecuting} | ||
109 | /> | ||
110 | ); | ||
111 | } | ||
112 | } | ||
113 | |||
114 | export default ActivateTrialButton; | ||
115 | |||
116 | ActivateTrialButton.wrappedComponent.propTypes = { | ||
117 | stores: PropTypes.shape({ | ||
118 | user: PropTypes.instanceOf(UserStore).isRequired, | ||
119 | }).isRequired, | ||
120 | actions: PropTypes.shape({ | ||
121 | ui: PropTypes.shape({ | ||
122 | openSettings: PropTypes.func.isRequired, | ||
123 | }).isRequired, | ||
124 | }).isRequired, | ||
125 | }; | ||
diff --git a/src/components/ui/FeatureItem.js b/src/components/ui/FeatureItem.js new file mode 100644 index 000000000..7c482c4d4 --- /dev/null +++ b/src/components/ui/FeatureItem.js | |||
@@ -0,0 +1,37 @@ | |||
1 | import React from 'react'; | ||
2 | import injectSheet from 'react-jss'; | ||
3 | import { Icon } from '@meetfranz/ui'; | ||
4 | import classnames from 'classnames'; | ||
5 | import { mdiCheckCircle } from '@mdi/js'; | ||
6 | |||
7 | const styles = theme => ({ | ||
8 | featureItem: { | ||
9 | borderBottom: [1, 'solid', theme.defaultContentBorder], | ||
10 | padding: [8, 0], | ||
11 | display: 'flex', | ||
12 | alignItems: 'center', | ||
13 | }, | ||
14 | featureIcon: { | ||
15 | fill: theme.brandSuccess, | ||
16 | marginRight: 10, | ||
17 | }, | ||
18 | }); | ||
19 | |||
20 | export const FeatureItem = injectSheet(styles)(({ | ||
21 | classes, className, name, icon, | ||
22 | }) => ( | ||
23 | <li className={classnames({ | ||
24 | [classes.featureItem]: true, | ||
25 | [className]: className, | ||
26 | })} | ||
27 | > | ||
28 | {icon ? ( | ||
29 | <span className={classes.featureIcon}>{icon}</span> | ||
30 | ) : ( | ||
31 | <Icon icon={mdiCheckCircle} className={classes.featureIcon} size={1.5} /> | ||
32 | )} | ||
33 | {name} | ||
34 | </li> | ||
35 | )); | ||
36 | |||
37 | export default FeatureItem; | ||
diff --git a/src/components/ui/FeatureList.js b/src/components/ui/FeatureList.js new file mode 100644 index 000000000..62944ad75 --- /dev/null +++ b/src/components/ui/FeatureList.js | |||
@@ -0,0 +1,89 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { defineMessages, intlShape } from 'react-intl'; | ||
4 | |||
5 | import { FeatureItem } from './FeatureItem'; | ||
6 | |||
7 | const messages = defineMessages({ | ||
8 | unlimitedServices: { | ||
9 | id: 'pricing.features.unlimitedServices', | ||
10 | defaultMessage: '!!!Add unlimited services', | ||
11 | }, | ||
12 | spellchecker: { | ||
13 | id: 'pricing.features.spellchecker', | ||
14 | defaultMessage: '!!!Spellchecker support', | ||
15 | }, | ||
16 | workspaces: { | ||
17 | id: 'pricing.features.workspaces', | ||
18 | defaultMessage: '!!!Workspaces', | ||
19 | }, | ||
20 | customWebsites: { | ||
21 | id: 'pricing.features.customWebsites', | ||
22 | defaultMessage: '!!!Add Custom Websites', | ||
23 | }, | ||
24 | onPremise: { | ||
25 | id: 'pricing.features.onPremise', | ||
26 | defaultMessage: '!!!On-premise & other Hosted Services', | ||
27 | }, | ||
28 | thirdPartyServices: { | ||
29 | id: 'pricing.features.thirdPartyServices', | ||
30 | defaultMessage: '!!!Install 3rd party services', | ||
31 | }, | ||
32 | serviceProxies: { | ||
33 | id: 'pricing.features.serviceProxies', | ||
34 | defaultMessage: '!!!Service Proxies', | ||
35 | }, | ||
36 | teamManagement: { | ||
37 | id: 'pricing.features.teamManagement', | ||
38 | defaultMessage: '!!!Team Management', | ||
39 | }, | ||
40 | appDelays: { | ||
41 | id: 'pricing.features.appDelays', | ||
42 | defaultMessage: '!!!No Waiting Screens', | ||
43 | }, | ||
44 | adFree: { | ||
45 | id: 'pricing.features.adFree', | ||
46 | defaultMessage: '!!!Forever ad-free', | ||
47 | }, | ||
48 | }); | ||
49 | |||
50 | export class FeatureList extends Component { | ||
51 | static propTypes = { | ||
52 | className: PropTypes.string, | ||
53 | featureClassName: PropTypes.string, | ||
54 | }; | ||
55 | |||
56 | static defaultProps = { | ||
57 | className: '', | ||
58 | featureClassName: '', | ||
59 | } | ||
60 | |||
61 | static contextTypes = { | ||
62 | intl: intlShape, | ||
63 | }; | ||
64 | |||
65 | render() { | ||
66 | const { | ||
67 | className, | ||
68 | featureClassName, | ||
69 | } = this.props; | ||
70 | const { intl } = this.context; | ||
71 | |||
72 | return ( | ||
73 | <ul className={className}> | ||
74 | <FeatureItem name={intl.formatMessage(messages.unlimitedServices)} className={featureClassName} /> | ||
75 | <FeatureItem name={intl.formatMessage(messages.spellchecker)} className={featureClassName} /> | ||
76 | <FeatureItem name={intl.formatMessage(messages.workspaces)} className={featureClassName} /> | ||
77 | <FeatureItem name={intl.formatMessage(messages.customWebsites)} className={featureClassName} /> | ||
78 | <FeatureItem name={intl.formatMessage(messages.onPremise)} className={featureClassName} /> | ||
79 | <FeatureItem name={intl.formatMessage(messages.thirdPartyServices)} className={featureClassName} /> | ||
80 | <FeatureItem name={intl.formatMessage(messages.serviceProxies)} className={featureClassName} /> | ||
81 | <FeatureItem name={intl.formatMessage(messages.teamManagement)} className={featureClassName} /> | ||
82 | <FeatureItem name={intl.formatMessage(messages.appDelays)} className={featureClassName} /> | ||
83 | <FeatureItem name={intl.formatMessage(messages.adFree)} className={featureClassName} /> | ||
84 | </ul> | ||
85 | ); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | export default FeatureList; | ||
diff --git a/src/components/ui/Modal/index.js b/src/components/ui/Modal/index.js index 0b7154760..63d858c47 100644 --- a/src/components/ui/Modal/index.js +++ b/src/components/ui/Modal/index.js | |||
@@ -5,6 +5,7 @@ import classnames from 'classnames'; | |||
5 | import injectCSS from 'react-jss'; | 5 | import injectCSS from 'react-jss'; |
6 | import { Icon } from '@meetfranz/ui'; | 6 | import { Icon } from '@meetfranz/ui'; |
7 | 7 | ||
8 | import { mdiClose } from '@mdi/js'; | ||
8 | import styles from './styles'; | 9 | import styles from './styles'; |
9 | 10 | ||
10 | // ReactModal.setAppElement('#root'); | 11 | // ReactModal.setAppElement('#root'); |
@@ -59,7 +60,7 @@ export default @injectCSS(styles) class Modal extends Component { | |||
59 | className={classes.close} | 60 | className={classes.close} |
60 | onClick={close} | 61 | onClick={close} |
61 | > | 62 | > |
62 | <Icon icon="mdiClose" size={1.5} /> | 63 | <Icon icon={mdiClose} size={1.5} /> |
63 | </button> | 64 | </button> |
64 | )} | 65 | )} |
65 | <div className={classes.content}> | 66 | <div className={classes.content}> |
diff --git a/src/components/ui/PremiumFeatureContainer/index.js b/src/components/ui/PremiumFeatureContainer/index.js index b890b09ab..c53d345a0 100644 --- a/src/components/ui/PremiumFeatureContainer/index.js +++ b/src/components/ui/PremiumFeatureContainer/index.js | |||
@@ -9,6 +9,7 @@ import { oneOrManyChildElements } from '../../../prop-types'; | |||
9 | import UserStore from '../../../stores/UserStore'; | 9 | import UserStore from '../../../stores/UserStore'; |
10 | 10 | ||
11 | import styles from './styles'; | 11 | import styles from './styles'; |
12 | import { FeatureStore } from '../../../features/utils/FeatureStore'; | ||
12 | 13 | ||
13 | const messages = defineMessages({ | 14 | const messages = defineMessages({ |
14 | action: { | 15 | action: { |
@@ -21,7 +22,10 @@ const messages = defineMessages({ | |||
21 | class PremiumFeatureContainer extends Component { | 22 | class PremiumFeatureContainer extends Component { |
22 | static propTypes = { | 23 | static propTypes = { |
23 | classes: PropTypes.object.isRequired, | 24 | classes: PropTypes.object.isRequired, |
24 | condition: PropTypes.bool, | 25 | condition: PropTypes.oneOfType([ |
26 | PropTypes.bool, | ||
27 | PropTypes.func, | ||
28 | ]), | ||
25 | gaEventInfo: PropTypes.shape({ | 29 | gaEventInfo: PropTypes.shape({ |
26 | category: PropTypes.string.isRequired, | 30 | category: PropTypes.string.isRequired, |
27 | event: PropTypes.string.isRequired, | 31 | event: PropTypes.string.isRequired, |
@@ -30,7 +34,7 @@ class PremiumFeatureContainer extends Component { | |||
30 | }; | 34 | }; |
31 | 35 | ||
32 | static defaultProps = { | 36 | static defaultProps = { |
33 | condition: true, | 37 | condition: null, |
34 | gaEventInfo: null, | 38 | gaEventInfo: null, |
35 | }; | 39 | }; |
36 | 40 | ||
@@ -49,7 +53,18 @@ class PremiumFeatureContainer extends Component { | |||
49 | 53 | ||
50 | const { intl } = this.context; | 54 | const { intl } = this.context; |
51 | 55 | ||
52 | return !stores.user.data.isPremium && !!condition ? ( | 56 | let showWrapper = !!condition; |
57 | |||
58 | if (condition === null) { | ||
59 | showWrapper = !stores.user.data.isPremium; | ||
60 | } else if (typeof condition === 'function') { | ||
61 | showWrapper = condition({ | ||
62 | isPremium: stores.user.data.isPremium, | ||
63 | features: stores.features.features, | ||
64 | }); | ||
65 | } | ||
66 | |||
67 | return showWrapper ? ( | ||
53 | <div className={classes.container}> | 68 | <div className={classes.container}> |
54 | <div className={classes.titleContainer}> | 69 | <div className={classes.titleContainer}> |
55 | <p className={classes.title}>Premium Feature</p> | 70 | <p className={classes.title}>Premium Feature</p> |
@@ -75,6 +90,7 @@ PremiumFeatureContainer.wrappedComponent.propTypes = { | |||
75 | children: oneOrManyChildElements.isRequired, | 90 | children: oneOrManyChildElements.isRequired, |
76 | stores: PropTypes.shape({ | 91 | stores: PropTypes.shape({ |
77 | user: PropTypes.instanceOf(UserStore).isRequired, | 92 | user: PropTypes.instanceOf(UserStore).isRequired, |
93 | features: PropTypes.instanceOf(FeatureStore).isRequired, | ||
78 | }).isRequired, | 94 | }).isRequired, |
79 | actions: PropTypes.shape({ | 95 | actions: PropTypes.shape({ |
80 | ui: PropTypes.shape({ | 96 | ui: PropTypes.shape({ |
diff --git a/src/components/ui/UpgradeButton/index.js b/src/components/ui/UpgradeButton/index.js new file mode 100644 index 000000000..73762f0bf --- /dev/null +++ b/src/components/ui/UpgradeButton/index.js | |||
@@ -0,0 +1,89 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { inject, observer } from 'mobx-react'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | |||
6 | import { Button } from '@meetfranz/forms'; | ||
7 | import { gaEvent } from '../../../lib/analytics'; | ||
8 | |||
9 | import UserStore from '../../../stores/UserStore'; | ||
10 | import ActivateTrialButton from '../ActivateTrialButton'; | ||
11 | |||
12 | const messages = defineMessages({ | ||
13 | upgradeToPro: { | ||
14 | id: 'global.upgradeButton.upgradeToPro', | ||
15 | defaultMessage: '!!!Upgrade to Franz Professional', | ||
16 | }, | ||
17 | }); | ||
18 | |||
19 | @inject('stores', 'actions') @observer | ||
20 | class UpgradeButton extends Component { | ||
21 | static propTypes = { | ||
22 | // eslint-disable-next-line | ||
23 | classes: PropTypes.object.isRequired, | ||
24 | className: PropTypes.string, | ||
25 | gaEventInfo: PropTypes.shape({ | ||
26 | category: PropTypes.string.isRequired, | ||
27 | event: PropTypes.string.isRequired, | ||
28 | label: PropTypes.string, | ||
29 | }), | ||
30 | requiresPro: PropTypes.bool, | ||
31 | }; | ||
32 | |||
33 | static defaultProps = { | ||
34 | className: '', | ||
35 | gaEventInfo: null, | ||
36 | requiresPro: false, | ||
37 | } | ||
38 | |||
39 | static contextTypes = { | ||
40 | intl: intlShape, | ||
41 | }; | ||
42 | |||
43 | handleCTAClick() { | ||
44 | const { actions, gaEventInfo } = this.props; | ||
45 | |||
46 | actions.ui.openSettings({ path: 'user' }); | ||
47 | if (gaEventInfo) { | ||
48 | const { category, event } = gaEventInfo; | ||
49 | gaEvent(category, event, 'Upgrade Account'); | ||
50 | } | ||
51 | } | ||
52 | |||
53 | render() { | ||
54 | const { stores, requiresPro } = this.props; | ||
55 | const { intl } = this.context; | ||
56 | |||
57 | const { isPremium, isPersonal } = stores.user; | ||
58 | |||
59 | if (isPremium && isPersonal && requiresPro) { | ||
60 | return ( | ||
61 | <Button | ||
62 | label={intl.formatMessage(messages.upgradeToPro)} | ||
63 | onClick={this.handleCTAClick.bind(this)} | ||
64 | className={this.props.className} | ||
65 | buttonType="inverted" | ||
66 | /> | ||
67 | ); | ||
68 | } | ||
69 | |||
70 | if (!isPremium) { | ||
71 | return <ActivateTrialButton {...this.props} />; | ||
72 | } | ||
73 | |||
74 | return null; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | export default UpgradeButton; | ||
79 | |||
80 | UpgradeButton.wrappedComponent.propTypes = { | ||
81 | stores: PropTypes.shape({ | ||
82 | user: PropTypes.instanceOf(UserStore).isRequired, | ||
83 | }).isRequired, | ||
84 | actions: PropTypes.shape({ | ||
85 | ui: PropTypes.shape({ | ||
86 | openSettings: PropTypes.func.isRequired, | ||
87 | }).isRequired, | ||
88 | }).isRequired, | ||
89 | }; | ||
diff --git a/src/config.js b/src/config.js index 2d6e74411..d6a0317bf 100644 --- a/src/config.js +++ b/src/config.js | |||
@@ -19,11 +19,16 @@ export const DEV_WS_API = 'wss://dev.franzinfra.com'; | |||
19 | export const LIVE_WS_API = 'wss://api.franzinfra.com'; | 19 | export const LIVE_WS_API = 'wss://api.franzinfra.com'; |
20 | 20 | ||
21 | export const LOCAL_API_WEBSITE = 'http://localhost:3333'; | 21 | export const LOCAL_API_WEBSITE = 'http://localhost:3333'; |
22 | export const DEV_API_WEBSITE = 'https://meetfranz.com'; | 22 | // export const DEV_API_WEBSITE = 'https://meetfranz.com';t |
23 | export const DEV_API_WEBSITE = 'http://hash-58883791519ef6288c952316bdce7fb462283893.franzstaging.com/'; // TODO: revert me | ||
23 | export const LIVE_API_WEBSITE = 'https://meetfranz.com'; | 24 | export const LIVE_API_WEBSITE = 'https://meetfranz.com'; |
24 | 25 | ||
25 | export const STATS_API = 'https://stats.franzinfra.com'; | 26 | export const STATS_API = 'https://stats.franzinfra.com'; |
26 | 27 | ||
28 | export const LOCAL_TODOS_FRONTEND_URL = 'http://localhost:4000'; | ||
29 | export const PRODUCTION_TODOS_FRONTEND_URL = 'https://app.franztodos.com'; | ||
30 | export const DEVELOPMENT_TODOS_FRONTEND_URL = 'https://development--franz-todos.netlify.com'; | ||
31 | |||
27 | export const GA_ID = !isDevMode ? 'UA-74126766-10' : 'UA-74126766-12'; | 32 | export const GA_ID = !isDevMode ? 'UA-74126766-10' : 'UA-74126766-12'; |
28 | 33 | ||
29 | export const DEFAULT_APP_SETTINGS = { | 34 | export const DEFAULT_APP_SETTINGS = { |
@@ -46,16 +51,16 @@ export const DEFAULT_APP_SETTINGS = { | |||
46 | }; | 51 | }; |
47 | 52 | ||
48 | export const DEFAULT_FEATURES_CONFIG = { | 53 | export const DEFAULT_FEATURES_CONFIG = { |
49 | isSpellcheckerPremiumFeature: false, | 54 | isSpellcheckerIncludedInCurrentPlan: true, |
50 | needToWaitToProceed: false, | 55 | needToWaitToProceed: false, |
51 | needToWaitToProceedConfig: { | 56 | needToWaitToProceedConfig: { |
52 | delayOffset: ms('1h'), | 57 | delayOffset: ms('1h'), |
53 | wait: ms('10s'), | 58 | wait: ms('10s'), |
54 | }, | 59 | }, |
55 | isServiceProxyEnabled: false, | 60 | isServiceProxyEnabled: false, |
56 | isServiceProxyPremiumFeature: true, | 61 | isServiceProxyIncludedInCurrentPlan: false, |
57 | isAnnouncementsEnabled: true, | 62 | isAnnouncementsEnabled: true, |
58 | isWorkspacePremiumFeature: true, | 63 | isWorkspaceIncludedInCurrentPlan: true, |
59 | isWorkspaceEnabled: false, | 64 | isWorkspaceEnabled: false, |
60 | }; | 65 | }; |
61 | 66 | ||
@@ -68,6 +73,7 @@ export const DEFAULT_WINDOW_OPTIONS = { | |||
68 | 73 | ||
69 | export const FRANZ_SERVICE_REQUEST = 'https://bit.ly/franz-plugin-docs'; | 74 | export const FRANZ_SERVICE_REQUEST = 'https://bit.ly/franz-plugin-docs'; |
70 | export const FRANZ_TRANSLATION = 'https://bit.ly/franz-translate'; | 75 | export const FRANZ_TRANSLATION = 'https://bit.ly/franz-translate'; |
76 | export const FRANZ_DEV_DOCS = 'http://bit.ly/franz-dev-hub'; | ||
71 | 77 | ||
72 | export const FILE_SYSTEM_SETTINGS_TYPES = [ | 78 | export const FILE_SYSTEM_SETTINGS_TYPES = [ |
73 | 'app', | 79 | 'app', |
@@ -84,3 +90,25 @@ export const ALLOWED_PROTOCOLS = [ | |||
84 | 'http:', | 90 | 'http:', |
85 | 'ftp:', | 91 | 'ftp:', |
86 | ]; | 92 | ]; |
93 | |||
94 | export const PLANS = { | ||
95 | PERSONAL: 'PERSONAL', | ||
96 | PRO: 'PRO', | ||
97 | LEGACY: 'LEGACY', | ||
98 | FREE: 'FREE', | ||
99 | }; | ||
100 | |||
101 | export const PLANS_MAPPING = { | ||
102 | 'franz-personal-monthly': PLANS.PERSONAL, | ||
103 | 'franz-personal-yearly': PLANS.PERSONAL, | ||
104 | 'franz-pro-monthly': PLANS.PRO, | ||
105 | 'franz-pro-yearly': PLANS.PRO, | ||
106 | 'franz-supporter-license': PLANS.LEGACY, | ||
107 | 'franz-supporter-license-x1': PLANS.LEGACY, | ||
108 | 'franz-supporter-license-x2': PLANS.LEGACY, | ||
109 | 'franz-supporter-license-year': PLANS.LEGACY, | ||
110 | 'franz-supporter-license-year-x1': PLANS.LEGACY, | ||
111 | 'franz-supporter-license-year-x2': PLANS.LEGACY, | ||
112 | 'franz-supporter-license-year-2019': PLANS.LEGACY, | ||
113 | free: PLANS.FREE, | ||
114 | }; | ||
diff --git a/src/containers/auth/PricingScreen.js b/src/containers/auth/PricingScreen.js index 8d179a170..af1651931 100644 --- a/src/containers/auth/PricingScreen.js +++ b/src/containers/auth/PricingScreen.js | |||
@@ -5,7 +5,6 @@ import { RouterStore } from 'mobx-react-router'; | |||
5 | 5 | ||
6 | import Pricing from '../../components/auth/Pricing'; | 6 | import Pricing from '../../components/auth/Pricing'; |
7 | import UserStore from '../../stores/UserStore'; | 7 | import UserStore from '../../stores/UserStore'; |
8 | import PaymentStore from '../../stores/PaymentStore'; | ||
9 | 8 | ||
10 | import { globalError as globalErrorPropType } from '../../prop-types'; | 9 | import { globalError as globalErrorPropType } from '../../prop-types'; |
11 | 10 | ||
@@ -14,20 +13,40 @@ export default @inject('stores', 'actions') @observer class PricingScreen extend | |||
14 | error: globalErrorPropType.isRequired, | 13 | error: globalErrorPropType.isRequired, |
15 | }; | 14 | }; |
16 | 15 | ||
16 | async submit() { | ||
17 | const { | ||
18 | actions, | ||
19 | stores, | ||
20 | } = this.props; | ||
21 | |||
22 | const { activateTrialRequest } = stores.user; | ||
23 | const { defaultTrialPlan } = stores.features.features; | ||
24 | |||
25 | actions.user.activateTrial({ planId: defaultTrialPlan }); | ||
26 | await activateTrialRequest._promise; | ||
27 | |||
28 | if (!activateTrialRequest.isError) { | ||
29 | stores.router.push('/'); | ||
30 | stores.user.hasCompletedSignup = true; | ||
31 | } | ||
32 | } | ||
33 | |||
17 | render() { | 34 | render() { |
18 | const { actions, stores, error } = this.props; | 35 | const { |
36 | error, | ||
37 | stores, | ||
38 | } = this.props; | ||
19 | 39 | ||
20 | const nextStepRoute = stores.user.legacyServices.length ? stores.user.importRoute : stores.user.inviteRoute; | 40 | const { getUserInfoRequest, activateTrialRequest } = stores.user; |
41 | const { featuresRequest } = stores.features; | ||
21 | 42 | ||
22 | return ( | 43 | return ( |
23 | <Pricing | 44 | <Pricing |
24 | donor={stores.user.data.donor || {}} | 45 | onSubmit={this.submit.bind(this)} |
25 | onSubmit={actions.user.signup} | 46 | isLoadingRequiredData={(getUserInfoRequest.isExecuting || !getUserInfoRequest.wasExecuted) || (featuresRequest.isExecuting || !featuresRequest.wasExecuted)} |
26 | onCloseSubscriptionWindow={() => this.props.stores.router.push(nextStepRoute)} | 47 | isActivatingTrial={activateTrialRequest.isExecuting} |
27 | isLoading={stores.payment.plansRequest.isExecuting} | 48 | trialActivationError={activateTrialRequest.isError} |
28 | isLoadingUser={stores.user.getUserInfoRequest.isExecuting} | ||
29 | error={error} | 49 | error={error} |
30 | skipAction={() => this.props.stores.router.push(nextStepRoute)} | ||
31 | /> | 50 | /> |
32 | ); | 51 | ); |
33 | } | 52 | } |
@@ -36,12 +55,11 @@ export default @inject('stores', 'actions') @observer class PricingScreen extend | |||
36 | PricingScreen.wrappedComponent.propTypes = { | 55 | PricingScreen.wrappedComponent.propTypes = { |
37 | actions: PropTypes.shape({ | 56 | actions: PropTypes.shape({ |
38 | user: PropTypes.shape({ | 57 | user: PropTypes.shape({ |
39 | signup: PropTypes.func.isRequired, | 58 | activateTrial: PropTypes.func.isRequired, |
40 | }).isRequired, | 59 | }).isRequired, |
41 | }).isRequired, | 60 | }).isRequired, |
42 | stores: PropTypes.shape({ | 61 | stores: PropTypes.shape({ |
43 | user: PropTypes.instanceOf(UserStore).isRequired, | 62 | user: PropTypes.instanceOf(UserStore).isRequired, |
44 | payment: PropTypes.instanceOf(PaymentStore).isRequired, | ||
45 | router: PropTypes.instanceOf(RouterStore).isRequired, | 63 | router: PropTypes.instanceOf(RouterStore).isRequired, |
46 | }).isRequired, | 64 | }).isRequired, |
47 | }; | 65 | }; |
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js index 38ed85986..95fbd109f 100644 --- a/src/containers/layout/AppLayoutContainer.js +++ b/src/containers/layout/AppLayoutContainer.js | |||
@@ -10,6 +10,7 @@ import FeaturesStore from '../../stores/FeaturesStore'; | |||
10 | import UIStore from '../../stores/UIStore'; | 10 | import UIStore from '../../stores/UIStore'; |
11 | import NewsStore from '../../stores/NewsStore'; | 11 | import NewsStore from '../../stores/NewsStore'; |
12 | import SettingsStore from '../../stores/SettingsStore'; | 12 | import SettingsStore from '../../stores/SettingsStore'; |
13 | import UserStore from '../../stores/UserStore'; | ||
13 | import RequestStore from '../../stores/RequestStore'; | 14 | import RequestStore from '../../stores/RequestStore'; |
14 | import GlobalErrorStore from '../../stores/GlobalErrorStore'; | 15 | import GlobalErrorStore from '../../stores/GlobalErrorStore'; |
15 | 16 | ||
@@ -39,6 +40,7 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e | |||
39 | settings, | 40 | settings, |
40 | globalError, | 41 | globalError, |
41 | requests, | 42 | requests, |
43 | user, | ||
42 | } = this.props.stores; | 44 | } = this.props.stores; |
43 | 45 | ||
44 | const { | 46 | const { |
@@ -125,6 +127,8 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e | |||
125 | reload={reload} | 127 | reload={reload} |
126 | openSettings={openSettings} | 128 | openSettings={openSettings} |
127 | update={updateService} | 129 | update={updateService} |
130 | userHasCompletedSignup={user.hasCompletedSignup} | ||
131 | hasActivatedTrial={user.hasActivatedTrial} | ||
128 | /> | 132 | /> |
129 | ); | 133 | ); |
130 | 134 | ||
@@ -150,6 +154,7 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e | |||
150 | retryRequiredRequests={retryRequiredRequests} | 154 | retryRequiredRequests={retryRequiredRequests} |
151 | areRequiredRequestsLoading={requests.areRequiredRequestsLoading} | 155 | areRequiredRequestsLoading={requests.areRequiredRequestsLoading} |
152 | isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible} | 156 | isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible} |
157 | hasActivatedTrial={user.hasActivatedTrial} | ||
153 | > | 158 | > |
154 | {React.Children.count(children) > 0 ? children : null} | 159 | {React.Children.count(children) > 0 ? children : null} |
155 | </AppLayout> | 160 | </AppLayout> |
@@ -167,6 +172,7 @@ AppLayoutContainer.wrappedComponent.propTypes = { | |||
167 | ui: PropTypes.instanceOf(UIStore).isRequired, | 172 | ui: PropTypes.instanceOf(UIStore).isRequired, |
168 | news: PropTypes.instanceOf(NewsStore).isRequired, | 173 | news: PropTypes.instanceOf(NewsStore).isRequired, |
169 | settings: PropTypes.instanceOf(SettingsStore).isRequired, | 174 | settings: PropTypes.instanceOf(SettingsStore).isRequired, |
175 | user: PropTypes.instanceOf(UserStore).isRequired, | ||
170 | requests: PropTypes.instanceOf(RequestStore).isRequired, | 176 | requests: PropTypes.instanceOf(RequestStore).isRequired, |
171 | globalError: PropTypes.instanceOf(GlobalErrorStore).isRequired, | 177 | globalError: PropTypes.instanceOf(GlobalErrorStore).isRequired, |
172 | }).isRequired, | 178 | }).isRequired, |
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js index fd3317301..41cdeb79a 100644 --- a/src/containers/settings/AccountScreen.js +++ b/src/containers/settings/AccountScreen.js | |||
@@ -30,7 +30,7 @@ export default @inject('stores', 'actions') @observer class AccountScreen extend | |||
30 | 30 | ||
31 | let url; | 31 | let url; |
32 | if (api === 'https://api.franzinfra.com') { | 32 | if (api === 'https://api.franzinfra.com') { |
33 | url = `${WEBSITE}${route}?authToken=${stores.user.authToken}&utm_source=app&utm_medium=account_dashboard`; | 33 | url = stores.user.getAuthURL(`${WEBSITE}${route}?utm_source=app&utm_medium=account_dashboard`); |
34 | } else { | 34 | } else { |
35 | url = `${api}${route}`; | 35 | url = `${api}${route}`; |
36 | } | 36 | } |
@@ -49,6 +49,8 @@ export default @inject('stores', 'actions') @observer class AccountScreen extend | |||
49 | <ErrorBoundary> | 49 | <ErrorBoundary> |
50 | <AccountDashboard | 50 | <AccountDashboard |
51 | user={user.data} | 51 | user={user.data} |
52 | isPremiumOverrideUser={user.isPremiumOverride} | ||
53 | isProUser={user.isPro} | ||
52 | isLoading={isLoadingUserInfo} | 54 | isLoading={isLoadingUserInfo} |
53 | isLoadingPlans={isLoadingPlans} | 55 | isLoadingPlans={isLoadingPlans} |
54 | userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError} | 56 | userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError} |
@@ -58,6 +60,7 @@ export default @inject('stores', 'actions') @observer class AccountScreen extend | |||
58 | isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting} | 60 | isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting} |
59 | isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError} | 61 | isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError} |
60 | openEditAccount={() => this.handleWebsiteLink('/user/profile')} | 62 | openEditAccount={() => this.handleWebsiteLink('/user/profile')} |
63 | upgradeToPro={() => this.handleWebsiteLink('/inapp/user/licenses')} | ||
61 | openBilling={() => this.handleWebsiteLink('/user/billing')} | 64 | openBilling={() => this.handleWebsiteLink('/user/billing')} |
62 | openInvoices={() => this.handleWebsiteLink('/user/invoices')} | 65 | openInvoices={() => this.handleWebsiteLink('/user/invoices')} |
63 | /> | 66 | /> |
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js index 870ca4ecd..e4ff03bb3 100644 --- a/src/containers/settings/EditServiceScreen.js +++ b/src/containers/settings/EditServiceScreen.js | |||
@@ -330,8 +330,8 @@ export default @inject('stores', 'actions') @observer class EditServiceScreen ex | |||
330 | onSubmit={d => this.onSubmit(d)} | 330 | onSubmit={d => this.onSubmit(d)} |
331 | onDelete={() => this.deleteService()} | 331 | onDelete={() => this.deleteService()} |
332 | isProxyFeatureEnabled={proxyFeature.isEnabled} | 332 | isProxyFeatureEnabled={proxyFeature.isEnabled} |
333 | isProxyPremiumFeature={proxyFeature.isPremium} | 333 | isServiceProxyIncludedInCurrentPlan={proxyFeature.isIncludedInCurrentPlan} |
334 | isSpellcheckerPremiumFeature={spellcheckerFeature.isPremium} | 334 | isSpellcheckerIncludedInCurrentPlan={spellcheckerFeature.isIncludedInCurrentPlan} |
335 | /> | 335 | /> |
336 | </ErrorBoundary> | 336 | </ErrorBoundary> |
337 | ); | 337 | ); |
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js index 38f73c20f..954f64dc6 100644 --- a/src/containers/settings/EditSettingsScreen.js +++ b/src/containers/settings/EditSettingsScreen.js | |||
@@ -6,6 +6,7 @@ import { defineMessages, intlShape } from 'react-intl'; | |||
6 | import AppStore from '../../stores/AppStore'; | 6 | import AppStore from '../../stores/AppStore'; |
7 | import SettingsStore from '../../stores/SettingsStore'; | 7 | import SettingsStore from '../../stores/SettingsStore'; |
8 | import UserStore from '../../stores/UserStore'; | 8 | import UserStore from '../../stores/UserStore'; |
9 | import TodosStore from '../../features/todos/store'; | ||
9 | import Form from '../../lib/Form'; | 10 | import Form from '../../lib/Form'; |
10 | import { APP_LOCALES, SPELLCHECKER_LOCALES } from '../../i18n/languages'; | 11 | import { APP_LOCALES, SPELLCHECKER_LOCALES } from '../../i18n/languages'; |
11 | import { DEFAULT_APP_SETTINGS } from '../../config'; | 12 | import { DEFAULT_APP_SETTINGS } from '../../config'; |
@@ -19,6 +20,7 @@ import ErrorBoundary from '../../components/util/ErrorBoundary'; | |||
19 | import { API } from '../../environment'; | 20 | import { API } from '../../environment'; |
20 | 21 | ||
21 | import globalMessages from '../../i18n/globalMessages'; | 22 | import globalMessages from '../../i18n/globalMessages'; |
23 | import { DEFAULT_IS_FEATURE_ENABLED_BY_USER } from '../../features/todos'; | ||
22 | 24 | ||
23 | const messages = defineMessages({ | 25 | const messages = defineMessages({ |
24 | autoLaunchOnStart: { | 26 | autoLaunchOnStart: { |
@@ -73,6 +75,10 @@ const messages = defineMessages({ | |||
73 | id: 'settings.app.form.beta', | 75 | id: 'settings.app.form.beta', |
74 | defaultMessage: '!!!Include beta versions', | 76 | defaultMessage: '!!!Include beta versions', |
75 | }, | 77 | }, |
78 | enableTodos: { | ||
79 | id: 'settings.app.form.enableTodos', | ||
80 | defaultMessage: '!!!Enable Franz Todos', | ||
81 | }, | ||
76 | }); | 82 | }); |
77 | 83 | ||
78 | export default @inject('stores', 'actions') @observer class EditSettingsScreen extends Component { | 84 | export default @inject('stores', 'actions') @observer class EditSettingsScreen extends Component { |
@@ -81,7 +87,13 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e | |||
81 | }; | 87 | }; |
82 | 88 | ||
83 | onSubmit(settingsData) { | 89 | onSubmit(settingsData) { |
84 | const { app, settings, user } = this.props.actions; | 90 | const { todos } = this.props.stores; |
91 | const { | ||
92 | app, | ||
93 | settings, | ||
94 | user, | ||
95 | todos: todosActions, | ||
96 | } = this.props.actions; | ||
85 | 97 | ||
86 | app.launchOnStartup({ | 98 | app.launchOnStartup({ |
87 | enable: settingsData.autoLaunchOnStart, | 99 | enable: settingsData.autoLaunchOnStart, |
@@ -112,10 +124,16 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e | |||
112 | locale: settingsData.locale, | 124 | locale: settingsData.locale, |
113 | }, | 125 | }, |
114 | }); | 126 | }); |
127 | |||
128 | if (todos.isFeatureActive) { | ||
129 | todosActions.toggleTodosFeatureVisibility(); | ||
130 | } | ||
115 | } | 131 | } |
116 | 132 | ||
117 | prepareForm() { | 133 | prepareForm() { |
118 | const { app, settings, user } = this.props.stores; | 134 | const { |
135 | app, settings, user, todos, | ||
136 | } = this.props.stores; | ||
119 | const { intl } = this.context; | 137 | const { intl } = this.context; |
120 | 138 | ||
121 | const locales = getSelectOptions({ | 139 | const locales = getSelectOptions({ |
@@ -171,8 +189,8 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e | |||
171 | }, | 189 | }, |
172 | enableSpellchecking: { | 190 | enableSpellchecking: { |
173 | label: intl.formatMessage(messages.enableSpellchecking), | 191 | label: intl.formatMessage(messages.enableSpellchecking), |
174 | value: !this.props.stores.user.data.isPremium && spellcheckerConfig.isPremium ? false : settings.all.app.enableSpellchecking, | 192 | value: !this.props.stores.user.data.isPremium && !spellcheckerConfig.isIncludedInCurrentPlan ? false : settings.all.app.enableSpellchecking, |
175 | default: !this.props.stores.user.data.isPremium && spellcheckerConfig.isPremium ? false : DEFAULT_APP_SETTINGS.enableSpellchecking, | 193 | default: !this.props.stores.user.data.isPremium && !spellcheckerConfig.isIncludedInCurrentPlan ? false : DEFAULT_APP_SETTINGS.enableSpellchecking, |
176 | }, | 194 | }, |
177 | spellcheckerLanguage: { | 195 | spellcheckerLanguage: { |
178 | label: intl.formatMessage(globalMessages.spellcheckerLanguage), | 196 | label: intl.formatMessage(globalMessages.spellcheckerLanguage), |
@@ -204,16 +222,28 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e | |||
204 | }, | 222 | }, |
205 | }; | 223 | }; |
206 | 224 | ||
225 | if (todos.isFeatureActive) { | ||
226 | config.fields.enableTodos = { | ||
227 | label: intl.formatMessage(messages.enableTodos), | ||
228 | value: todos.settings.isFeatureEnabledByUser, | ||
229 | default: DEFAULT_IS_FEATURE_ENABLED_BY_USER, | ||
230 | }; | ||
231 | } | ||
232 | |||
207 | return new Form(config); | 233 | return new Form(config); |
208 | } | 234 | } |
209 | 235 | ||
210 | render() { | 236 | render() { |
211 | const { | 237 | const { |
238 | app, | ||
239 | todos, | ||
240 | } = this.props.stores; | ||
241 | const { | ||
212 | updateStatus, | 242 | updateStatus, |
213 | cacheSize, | 243 | cacheSize, |
214 | updateStatusTypes, | 244 | updateStatusTypes, |
215 | isClearingAllCache, | 245 | isClearingAllCache, |
216 | } = this.props.stores.app; | 246 | } = app; |
217 | const { | 247 | const { |
218 | checkForUpdates, | 248 | checkForUpdates, |
219 | installUpdate, | 249 | installUpdate, |
@@ -235,7 +265,8 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e | |||
235 | cacheSize={cacheSize} | 265 | cacheSize={cacheSize} |
236 | isClearingAllCache={isClearingAllCache} | 266 | isClearingAllCache={isClearingAllCache} |
237 | onClearAllCache={clearAllCache} | 267 | onClearAllCache={clearAllCache} |
238 | isSpellcheckerPremiumFeature={spellcheckerConfig.isPremium} | 268 | isSpellcheckerIncludedInCurrentPlan={spellcheckerConfig.isIncludedInCurrentPlan} |
269 | isTodosEnabled={todos.isFeatureActive} | ||
239 | /> | 270 | /> |
240 | </ErrorBoundary> | 271 | </ErrorBoundary> |
241 | ); | 272 | ); |
@@ -247,6 +278,7 @@ EditSettingsScreen.wrappedComponent.propTypes = { | |||
247 | app: PropTypes.instanceOf(AppStore).isRequired, | 278 | app: PropTypes.instanceOf(AppStore).isRequired, |
248 | user: PropTypes.instanceOf(UserStore).isRequired, | 279 | user: PropTypes.instanceOf(UserStore).isRequired, |
249 | settings: PropTypes.instanceOf(SettingsStore).isRequired, | 280 | settings: PropTypes.instanceOf(SettingsStore).isRequired, |
281 | todos: PropTypes.instanceOf(TodosStore).isRequired, | ||
250 | }).isRequired, | 282 | }).isRequired, |
251 | actions: PropTypes.shape({ | 283 | actions: PropTypes.shape({ |
252 | app: PropTypes.shape({ | 284 | app: PropTypes.shape({ |
@@ -261,5 +293,8 @@ EditSettingsScreen.wrappedComponent.propTypes = { | |||
261 | user: PropTypes.shape({ | 293 | user: PropTypes.shape({ |
262 | update: PropTypes.func.isRequired, | 294 | update: PropTypes.func.isRequired, |
263 | }).isRequired, | 295 | }).isRequired, |
296 | todos: PropTypes.shape({ | ||
297 | toggleTodosFeatureVisibility: PropTypes.func.isRequired, | ||
298 | }).isRequired, | ||
264 | }).isRequired, | 299 | }).isRequired, |
265 | }; | 300 | }; |
diff --git a/src/containers/settings/RecipesScreen.js b/src/containers/settings/RecipesScreen.js index eda5ae54c..132820b6f 100644 --- a/src/containers/settings/RecipesScreen.js +++ b/src/containers/settings/RecipesScreen.js | |||
@@ -1,7 +1,9 @@ | |||
1 | import { remote, shell } from 'electron'; | ||
1 | import React, { Component } from 'react'; | 2 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 3 | import PropTypes from 'prop-types'; |
3 | import { autorun } from 'mobx'; | 4 | import { autorun } from 'mobx'; |
4 | import { inject, observer } from 'mobx-react'; | 5 | import { inject, observer } from 'mobx-react'; |
6 | import path from 'path'; | ||
5 | 7 | ||
6 | import RecipePreviewsStore from '../../stores/RecipePreviewsStore'; | 8 | import RecipePreviewsStore from '../../stores/RecipePreviewsStore'; |
7 | import RecipeStore from '../../stores/RecipesStore'; | 9 | import RecipeStore from '../../stores/RecipesStore'; |
@@ -10,6 +12,11 @@ import UserStore from '../../stores/UserStore'; | |||
10 | 12 | ||
11 | import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; | 13 | import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; |
12 | import ErrorBoundary from '../../components/util/ErrorBoundary'; | 14 | import ErrorBoundary from '../../components/util/ErrorBoundary'; |
15 | import { FRANZ_DEV_DOCS } from '../../config'; | ||
16 | import { gaEvent } from '../../lib/analytics'; | ||
17 | import { communityRecipesStore } from '../../features/communityRecipes'; | ||
18 | |||
19 | const { app } = remote; | ||
13 | 20 | ||
14 | export default @inject('stores', 'actions') @observer class RecipesScreen extends Component { | 21 | export default @inject('stores', 'actions') @observer class RecipesScreen extends Component { |
15 | static propTypes = { | 22 | static propTypes = { |
@@ -67,9 +74,16 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend | |||
67 | 74 | ||
68 | render() { | 75 | render() { |
69 | const { | 76 | const { |
70 | recipePreviews, recipes, services, user, | 77 | recipePreviews, |
78 | recipes, | ||
79 | services, | ||
80 | user, | ||
71 | } = this.props.stores; | 81 | } = this.props.stores; |
72 | const { showAddServiceInterface } = this.props.actions.service; | 82 | |
83 | const { | ||
84 | app: appActions, | ||
85 | service: serviceActions, | ||
86 | } = this.props.actions; | ||
73 | 87 | ||
74 | const { filter } = this.props.params; | 88 | const { filter } = this.props.params; |
75 | let recipeFilter; | 89 | let recipeFilter; |
@@ -77,7 +91,7 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend | |||
77 | if (filter === 'all') { | 91 | if (filter === 'all') { |
78 | recipeFilter = recipePreviews.all; | 92 | recipeFilter = recipePreviews.all; |
79 | } else if (filter === 'dev') { | 93 | } else if (filter === 'dev') { |
80 | recipeFilter = recipePreviews.dev; | 94 | recipeFilter = communityRecipesStore.communityRecipes; |
81 | } else { | 95 | } else { |
82 | recipeFilter = recipePreviews.featured; | 96 | recipeFilter = recipePreviews.featured; |
83 | } | 97 | } |
@@ -89,6 +103,8 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend | |||
89 | || recipes.installRecipeRequest.isExecuting | 103 | || recipes.installRecipeRequest.isExecuting |
90 | || recipePreviews.searchRecipePreviewsRequest.isExecuting; | 104 | || recipePreviews.searchRecipePreviewsRequest.isExecuting; |
91 | 105 | ||
106 | const recipeDirectory = path.join(app.getPath('userData'), 'recipes', 'dev'); | ||
107 | |||
92 | return ( | 108 | return ( |
93 | <ErrorBoundary> | 109 | <ErrorBoundary> |
94 | <RecipesDashboard | 110 | <RecipesDashboard |
@@ -97,12 +113,23 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend | |||
97 | addedServiceCount={services.all.length} | 113 | addedServiceCount={services.all.length} |
98 | isPremium={user.data.isPremium} | 114 | isPremium={user.data.isPremium} |
99 | hasLoadedRecipes={recipePreviews.featuredRecipePreviewsRequest.wasExecuted} | 115 | hasLoadedRecipes={recipePreviews.featuredRecipePreviewsRequest.wasExecuted} |
100 | showAddServiceInterface={showAddServiceInterface} | 116 | showAddServiceInterface={serviceActions.showAddServiceInterface} |
101 | searchRecipes={e => this.searchRecipes(e)} | 117 | searchRecipes={e => this.searchRecipes(e)} |
102 | resetSearch={() => this.resetSearch()} | 118 | resetSearch={() => this.resetSearch()} |
103 | searchNeedle={this.state.needle} | 119 | searchNeedle={this.state.needle} |
104 | serviceStatus={services.actionStatus} | 120 | serviceStatus={services.actionStatus} |
105 | devRecipesCount={recipePreviews.dev.length} | 121 | recipeFilter={filter} |
122 | recipeDirectory={recipeDirectory} | ||
123 | openRecipeDirectory={() => { | ||
124 | shell.openItem(recipeDirectory); | ||
125 | gaEvent('Recipe', 'open-recipe-folder', 'Open Folder'); | ||
126 | }} | ||
127 | openDevDocs={() => { | ||
128 | appActions.openExternalUrl({ url: FRANZ_DEV_DOCS }); | ||
129 | gaEvent('Recipe', 'open-dev-docs', 'Developer Documentation'); | ||
130 | }} | ||
131 | isCommunityRecipesIncludedInCurrentPlan={communityRecipesStore.isCommunityRecipesIncludedInCurrentPlan} | ||
132 | isUserPremiumUser={user.isPremium} | ||
106 | /> | 133 | /> |
107 | </ErrorBoundary> | 134 | </ErrorBoundary> |
108 | ); | 135 | ); |
@@ -117,6 +144,9 @@ RecipesScreen.wrappedComponent.propTypes = { | |||
117 | user: PropTypes.instanceOf(UserStore).isRequired, | 144 | user: PropTypes.instanceOf(UserStore).isRequired, |
118 | }).isRequired, | 145 | }).isRequired, |
119 | actions: PropTypes.shape({ | 146 | actions: PropTypes.shape({ |
147 | app: PropTypes.shape({ | ||
148 | openExternalUrl: PropTypes.func.isRequired, | ||
149 | }).isRequired, | ||
120 | service: PropTypes.shape({ | 150 | service: PropTypes.shape({ |
121 | showAddServiceInterface: PropTypes.func.isRequired, | 151 | showAddServiceInterface: PropTypes.func.isRequired, |
122 | }).isRequired, | 152 | }).isRequired, |
diff --git a/src/containers/settings/TeamScreen.js b/src/containers/settings/TeamScreen.js index c69d5ad08..f600c9947 100644 --- a/src/containers/settings/TeamScreen.js +++ b/src/containers/settings/TeamScreen.js | |||
@@ -14,7 +14,6 @@ export default @inject('stores', 'actions') @observer class TeamScreen extends C | |||
14 | const { actions, stores } = this.props; | 14 | const { actions, stores } = this.props; |
15 | 15 | ||
16 | const url = `${WEBSITE}${route}?authToken=${stores.user.authToken}&utm_source=app&utm_medium=account_dashboard`; | 16 | const url = `${WEBSITE}${route}?authToken=${stores.user.authToken}&utm_source=app&utm_medium=account_dashboard`; |
17 | console.log(url); | ||
18 | 17 | ||
19 | actions.app.openExternalUrl({ url }); | 18 | actions.app.openExternalUrl({ url }); |
20 | } | 19 | } |
@@ -31,6 +30,7 @@ export default @inject('stores', 'actions') @observer class TeamScreen extends C | |||
31 | userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError} | 30 | userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError} |
32 | retryUserInfoRequest={() => this.reloadData()} | 31 | retryUserInfoRequest={() => this.reloadData()} |
33 | openTeamManagement={() => this.handleWebsiteLink('/user/team')} | 32 | openTeamManagement={() => this.handleWebsiteLink('/user/team')} |
33 | isProUser={user.isPro} | ||
34 | /> | 34 | /> |
35 | </ErrorBoundary> | 35 | </ErrorBoundary> |
36 | ); | 36 | ); |
diff --git a/src/containers/subscription/SubscriptionFormScreen.js b/src/containers/subscription/SubscriptionFormScreen.js index 3d153b8e8..726b10628 100644 --- a/src/containers/subscription/SubscriptionFormScreen.js +++ b/src/containers/subscription/SubscriptionFormScreen.js | |||
@@ -1,4 +1,3 @@ | |||
1 | import { remote } from 'electron'; | ||
2 | import React, { Component } from 'react'; | 1 | import React, { Component } from 'react'; |
3 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
4 | import { inject, observer } from 'mobx-react'; | 3 | import { inject, observer } from 'mobx-react'; |
@@ -6,96 +5,50 @@ import { inject, observer } from 'mobx-react'; | |||
6 | import PaymentStore from '../../stores/PaymentStore'; | 5 | import PaymentStore from '../../stores/PaymentStore'; |
7 | 6 | ||
8 | import SubscriptionForm from '../../components/subscription/SubscriptionForm'; | 7 | import SubscriptionForm from '../../components/subscription/SubscriptionForm'; |
9 | 8 | import TrialForm from '../../components/subscription/TrialForm'; | |
10 | const { BrowserWindow } = remote; | ||
11 | 9 | ||
12 | export default @inject('stores', 'actions') @observer class SubscriptionFormScreen extends Component { | 10 | export default @inject('stores', 'actions') @observer class SubscriptionFormScreen extends Component { |
13 | static propTypes = { | 11 | async openBrowser() { |
14 | onCloseWindow: PropTypes.func, | ||
15 | content: PropTypes.node, | ||
16 | showSkipOption: PropTypes.bool, | ||
17 | skipAction: PropTypes.func, | ||
18 | skipButtonLabel: PropTypes.string, | ||
19 | hideInfo: PropTypes.bool, | ||
20 | } | ||
21 | |||
22 | static defaultProps = { | ||
23 | onCloseWindow: () => null, | ||
24 | content: '', | ||
25 | showSkipOption: false, | ||
26 | skipAction: () => null, | ||
27 | skipButtonLabel: '', | ||
28 | hideInfo: false, | ||
29 | } | ||
30 | |||
31 | async handlePayment(plan) { | ||
32 | const { | 12 | const { |
33 | actions, | 13 | actions, |
34 | stores, | 14 | stores, |
35 | onCloseWindow, | ||
36 | } = this.props; | 15 | } = this.props; |
37 | 16 | ||
38 | const interval = plan; | 17 | const { |
39 | 18 | user, | |
40 | const { id } = stores.payment.plan[interval]; | 19 | features, |
41 | actions.payment.createHostedPage({ | 20 | } = stores; |
42 | planId: id, | ||
43 | }); | ||
44 | |||
45 | const hostedPage = await stores.payment.createHostedPageRequest; | ||
46 | 21 | ||
47 | if (hostedPage.url) { | 22 | let hostedPageURL = features.features.planSelectionURL; |
48 | if (hostedPage.legacyCheckoutFlow) { | 23 | hostedPageURL = user.getAuthURL(hostedPageURL); |
49 | const paymentWindow = new BrowserWindow({ | ||
50 | parent: remote.getCurrentWindow(), | ||
51 | modal: true, | ||
52 | title: '🔒 Ferdi Supporter License', | ||
53 | width: 600, | ||
54 | height: window.innerHeight - 100, | ||
55 | maxWidth: 600, | ||
56 | minWidth: 600, | ||
57 | webPreferences: { | ||
58 | nodeIntegration: true, | ||
59 | webviewTag: true, | ||
60 | }, | ||
61 | }); | ||
62 | paymentWindow.loadURL(`file://${__dirname}/../../index.html#/payment/${encodeURIComponent(hostedPage.url)}`); | ||
63 | 24 | ||
64 | paymentWindow.on('closed', () => { | 25 | actions.app.openExternalUrl({ url: hostedPageURL }); |
65 | onCloseWindow(); | ||
66 | }); | ||
67 | } else { | ||
68 | actions.app.openExternalUrl({ | ||
69 | url: hostedPage.url, | ||
70 | }); | ||
71 | } | ||
72 | } | ||
73 | } | 26 | } |
74 | 27 | ||
75 | render() { | 28 | render() { |
76 | const { | 29 | const { |
77 | content, | ||
78 | actions, | 30 | actions, |
79 | stores, | 31 | stores, |
80 | showSkipOption, | ||
81 | skipAction, | ||
82 | skipButtonLabel, | ||
83 | hideInfo, | ||
84 | } = this.props; | 32 | } = this.props; |
33 | |||
34 | const { data: user } = stores.user; | ||
35 | |||
36 | if (user.hadSubscription) { | ||
37 | return ( | ||
38 | <SubscriptionForm | ||
39 | plan={stores.payment.plan} | ||
40 | selectPlan={() => this.openBrowser()} | ||
41 | isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting} | ||
42 | /> | ||
43 | ); | ||
44 | } | ||
45 | |||
85 | return ( | 46 | return ( |
86 | <SubscriptionForm | 47 | <TrialForm |
87 | plan={stores.payment.plan} | 48 | plan={stores.payment.plan} |
88 | isLoading={stores.payment.plansRequest.isExecuting} | 49 | activateTrial={() => actions.user.activateTrial({ planId: stores.features.features.defaultTrialPlan })} |
89 | retryPlanRequest={() => stores.payment.plansRequest.reload()} | 50 | showAllOptions={() => this.openBrowser()} |
90 | isCreatingHostedPage={stores.payment.createHostedPageRequest.isExecuting} | 51 | isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting} |
91 | handlePayment={price => this.handlePayment(price)} | ||
92 | content={content} | ||
93 | error={stores.payment.plansRequest.isError} | ||
94 | showSkipOption={showSkipOption} | ||
95 | skipAction={skipAction} | ||
96 | skipButtonLabel={skipButtonLabel} | ||
97 | hideInfo={hideInfo} | ||
98 | openExternalUrl={actions.app.openExternalUrl} | ||
99 | /> | 52 | /> |
100 | ); | 53 | ); |
101 | } | 54 | } |
diff --git a/src/containers/subscription/SubscriptionPopupScreen.js b/src/containers/subscription/SubscriptionPopupScreen.js index f76d6c5a6..0de5a87c4 100644 --- a/src/containers/subscription/SubscriptionPopupScreen.js +++ b/src/containers/subscription/SubscriptionPopupScreen.js | |||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; | |||
3 | import { inject, observer } from 'mobx-react'; | 3 | import { inject, observer } from 'mobx-react'; |
4 | 4 | ||
5 | import SubscriptionPopup from '../../components/subscription/SubscriptionPopup'; | 5 | import SubscriptionPopup from '../../components/subscription/SubscriptionPopup'; |
6 | import { isDevMode } from '../../environment'; | ||
6 | 7 | ||
7 | 8 | ||
8 | export default @inject('stores', 'actions') @observer class SubscriptionPopupScreen extends Component { | 9 | export default @inject('stores', 'actions') @observer class SubscriptionPopupScreen extends Component { |
@@ -13,7 +14,7 @@ export default @inject('stores', 'actions') @observer class SubscriptionPopupScr | |||
13 | completeCheck(event) { | 14 | completeCheck(event) { |
14 | const { url } = event; | 15 | const { url } = event; |
15 | 16 | ||
16 | if ((url.includes('recurly') && url.includes('confirmation')) || (url.includes('meetfranz') && url.includes('success'))) { | 17 | if ((url.includes('recurly') && url.includes('confirmation')) || ((url.includes('meetfranz') || isDevMode) && url.includes('success'))) { |
17 | this.setState({ | 18 | this.setState({ |
18 | complete: true, | 19 | complete: true, |
19 | }); | 20 | }); |
diff --git a/src/environment.js b/src/environment.js index ae7a67e4d..4be2c7d70 100644 --- a/src/environment.js +++ b/src/environment.js | |||
@@ -10,6 +10,9 @@ import { | |||
10 | LIVE_WS_API, | 10 | LIVE_WS_API, |
11 | LOCAL_WS_API, | 11 | LOCAL_WS_API, |
12 | DEV_WS_API, | 12 | DEV_WS_API, |
13 | LOCAL_TODOS_FRONTEND_URL, | ||
14 | PRODUCTION_TODOS_FRONTEND_URL, | ||
15 | DEVELOPMENT_TODOS_FRONTEND_URL, | ||
13 | } from './config'; | 16 | } from './config'; |
14 | 17 | ||
15 | export const isDevMode = isDev; | 18 | export const isDevMode = isDev; |
@@ -31,21 +34,28 @@ export const cmdKey = isMac ? 'Cmd' : 'Ctrl'; | |||
31 | let api; | 34 | let api; |
32 | let wsApi; | 35 | let wsApi; |
33 | let web; | 36 | let web; |
37 | let todos; | ||
34 | if (!isDevMode || (isDevMode && useLiveAPI)) { | 38 | if (!isDevMode || (isDevMode && useLiveAPI)) { |
35 | api = LIVE_API; | 39 | api = LIVE_API; |
40 | // api = DEV_API; | ||
36 | wsApi = LIVE_WS_API; | 41 | wsApi = LIVE_WS_API; |
37 | web = LIVE_API_WEBSITE; | 42 | web = LIVE_API_WEBSITE; |
43 | // web = DEV_API_WEBSITE; | ||
44 | todos = PRODUCTION_TODOS_FRONTEND_URL; | ||
38 | } else if (isDevMode && useLocalAPI) { | 45 | } else if (isDevMode && useLocalAPI) { |
39 | api = LOCAL_API; | 46 | api = LOCAL_API; |
40 | wsApi = LOCAL_WS_API; | 47 | wsApi = LOCAL_WS_API; |
41 | web = LOCAL_API_WEBSITE; | 48 | web = LOCAL_API_WEBSITE; |
49 | todos = LOCAL_TODOS_FRONTEND_URL; | ||
42 | } else { | 50 | } else { |
43 | api = DEV_API; | 51 | api = DEV_API; |
44 | wsApi = DEV_WS_API; | 52 | wsApi = DEV_WS_API; |
45 | web = DEV_API_WEBSITE; | 53 | web = DEV_API_WEBSITE; |
54 | todos = DEVELOPMENT_TODOS_FRONTEND_URL; | ||
46 | } | 55 | } |
47 | 56 | ||
48 | export const API = api; | 57 | export const API = api; |
49 | export const API_VERSION = 'v1'; | 58 | export const API_VERSION = 'v1'; |
50 | export const WS_API = wsApi; | 59 | export const WS_API = wsApi; |
51 | export const WEBSITE = web; | 60 | export const WEBSITE = web; |
61 | export const TODOS_FRONTEND = todos; | ||
diff --git a/src/features/announcements/store.js b/src/features/announcements/store.js index 2884fb06f..91348029f 100644 --- a/src/features/announcements/store.js +++ b/src/features/announcements/store.js | |||
@@ -62,6 +62,11 @@ export class AnnouncementsStore extends FeatureStore { | |||
62 | return this.stores.settings.stats.appStarts <= 1; | 62 | return this.stores.settings.stats.appStarts <= 1; |
63 | } | 63 | } |
64 | 64 | ||
65 | @computed get isAnnouncementShown() { | ||
66 | const { router } = this.stores; | ||
67 | return router.location.pathname.includes('/announcements'); | ||
68 | } | ||
69 | |||
65 | async start(stores, actions) { | 70 | async start(stores, actions) { |
66 | debug('AnnouncementsStore::start'); | 71 | debug('AnnouncementsStore::start'); |
67 | this.stores = stores; | 72 | this.stores = stores; |
diff --git a/src/features/basicAuth/Component.js b/src/features/basicAuth/Component.js index a8252acb7..ba9ae2273 100644 --- a/src/features/basicAuth/Component.js +++ b/src/features/basicAuth/Component.js | |||
@@ -27,7 +27,6 @@ export default @injectSheet(styles) @observer class BasicAuthModal extends Compo | |||
27 | e.preventDefault(); | 27 | e.preventDefault(); |
28 | 28 | ||
29 | const values = Form.values(); | 29 | const values = Form.values(); |
30 | console.log('form submit', values); | ||
31 | 30 | ||
32 | sendCredentials(values.user, values.password); | 31 | sendCredentials(values.user, values.password); |
33 | resetState(); | 32 | resetState(); |
diff --git a/src/features/communityRecipes/index.js b/src/features/communityRecipes/index.js new file mode 100644 index 000000000..4d050f90e --- /dev/null +++ b/src/features/communityRecipes/index.js | |||
@@ -0,0 +1,28 @@ | |||
1 | import { reaction } from 'mobx'; | ||
2 | import { CommunityRecipesStore } from './store'; | ||
3 | |||
4 | const debug = require('debug')('Franz:feature:communityRecipes'); | ||
5 | |||
6 | export const DEFAULT_SERVICE_LIMIT = 3; | ||
7 | |||
8 | export const communityRecipesStore = new CommunityRecipesStore(); | ||
9 | |||
10 | export default function initCommunityRecipes(stores, actions) { | ||
11 | const { features } = stores; | ||
12 | |||
13 | communityRecipesStore.start(stores, actions); | ||
14 | |||
15 | // Toggle communityRecipe premium status | ||
16 | reaction( | ||
17 | () => ( | ||
18 | features.features.isCommunityRecipesIncludedInCurrentPlan | ||
19 | ), | ||
20 | (isPremiumFeature) => { | ||
21 | debug('Community recipes is premium feature: ', isPremiumFeature); | ||
22 | communityRecipesStore.isCommunityRecipesIncludedInCurrentPlan = isPremiumFeature; | ||
23 | }, | ||
24 | { | ||
25 | fireImmediately: true, | ||
26 | }, | ||
27 | ); | ||
28 | } | ||
diff --git a/src/features/communityRecipes/store.js b/src/features/communityRecipes/store.js new file mode 100644 index 000000000..4d45c3b33 --- /dev/null +++ b/src/features/communityRecipes/store.js | |||
@@ -0,0 +1,31 @@ | |||
1 | import { computed, observable } from 'mobx'; | ||
2 | import { FeatureStore } from '../utils/FeatureStore'; | ||
3 | |||
4 | const debug = require('debug')('Franz:feature:communityRecipes:store'); | ||
5 | |||
6 | export class CommunityRecipesStore extends FeatureStore { | ||
7 | @observable isCommunityRecipesIncludedInCurrentPlan = false; | ||
8 | |||
9 | start(stores, actions) { | ||
10 | debug('start'); | ||
11 | this.stores = stores; | ||
12 | this.actions = actions; | ||
13 | } | ||
14 | |||
15 | stop() { | ||
16 | debug('stop'); | ||
17 | super.stop(); | ||
18 | } | ||
19 | |||
20 | @computed get communityRecipes() { | ||
21 | if (!this.stores) return []; | ||
22 | |||
23 | return this.stores.recipePreviews.dev.map((r) => { | ||
24 | r.isDevRecipe = !!r.author.find(a => a.email === this.stores.user.data.email); | ||
25 | |||
26 | return r; | ||
27 | }); | ||
28 | } | ||
29 | } | ||
30 | |||
31 | export default CommunityRecipesStore; | ||
diff --git a/src/features/delayApp/Component.js b/src/features/delayApp/Component.js index ba50652e8..c61cb06c9 100644 --- a/src/features/delayApp/Component.js +++ b/src/features/delayApp/Component.js | |||
@@ -4,19 +4,28 @@ import { inject, observer } from 'mobx-react'; | |||
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import injectSheet from 'react-jss'; | 5 | import injectSheet from 'react-jss'; |
6 | 6 | ||
7 | import Button from '../../components/ui/Button'; | 7 | import { Button } from '@meetfranz/forms'; |
8 | 8 | ||
9 | import { config } from '.'; | 9 | import { config } from '.'; |
10 | import styles from './styles'; | 10 | import styles from './styles'; |
11 | import UserStore from '../../stores/UserStore'; | ||
11 | 12 | ||
12 | const messages = defineMessages({ | 13 | const messages = defineMessages({ |
13 | headline: { | 14 | headline: { |
14 | id: 'feature.delayApp.headline', | 15 | id: 'feature.delayApp.headline', |
15 | defaultMessage: '!!!Please purchase license to skip waiting', | 16 | defaultMessage: '!!!Please purchase license to skip waiting', |
16 | }, | 17 | }, |
18 | headlineTrial: { | ||
19 | id: 'feature.delayApp.trial.headline', | ||
20 | defaultMessage: '!!!Get the free Franz Professional 14 day trial and skip the line', | ||
21 | }, | ||
17 | action: { | 22 | action: { |
18 | id: 'feature.delayApp.action', | 23 | id: 'feature.delayApp.upgrade.action', |
19 | defaultMessage: '!!!Get a Ferdi Supporter License', | 24 | defaultMessage: '!!!Get a Franz Supporter License', |
25 | }, | ||
26 | actionTrial: { | ||
27 | id: 'feature.delayApp.trial.action', | ||
28 | defaultMessage: '!!!Yes, I want the free 14 day trial of Franz Professional', | ||
20 | }, | 29 | }, |
21 | text: { | 30 | text: { |
22 | id: 'feature.delayApp.text', | 31 | id: 'feature.delayApp.text', |
@@ -24,7 +33,7 @@ const messages = defineMessages({ | |||
24 | }, | 33 | }, |
25 | }); | 34 | }); |
26 | 35 | ||
27 | export default @inject('actions') @injectSheet(styles) @observer class DelayApp extends Component { | 36 | export default @inject('stores', 'actions') @injectSheet(styles) @observer class DelayApp extends Component { |
28 | static propTypes = { | 37 | static propTypes = { |
29 | // eslint-disable-next-line | 38 | // eslint-disable-next-line |
30 | classes: PropTypes.object.isRequired, | 39 | classes: PropTypes.object.isRequired, |
@@ -60,23 +69,32 @@ export default @inject('actions') @injectSheet(styles) @observer class DelayApp | |||
60 | } | 69 | } |
61 | 70 | ||
62 | handleCTAClick() { | 71 | handleCTAClick() { |
63 | const { actions } = this.props; | 72 | const { actions, stores } = this.props; |
64 | 73 | const { hadSubscription } = stores.user.data; | |
65 | actions.ui.openSettings({ path: 'user' }); | 74 | const { defaultTrialPlan } = stores.features.features; |
75 | |||
76 | if (!hadSubscription) { | ||
77 | actions.user.activateTrial({ planId: defaultTrialPlan }); | ||
78 | } else { | ||
79 | actions.ui.openSettings({ path: 'user' }); | ||
80 | } | ||
66 | } | 81 | } |
67 | 82 | ||
68 | render() { | 83 | render() { |
69 | const { classes } = this.props; | 84 | const { classes, stores } = this.props; |
70 | const { intl } = this.context; | 85 | const { intl } = this.context; |
71 | 86 | ||
87 | const { hadSubscription } = stores.user.data; | ||
88 | |||
72 | return ( | 89 | return ( |
73 | <div className={`${classes.container}`}> | 90 | <div className={`${classes.container}`}> |
74 | <h1 className={classes.headline}>{intl.formatMessage(messages.headline)}</h1> | 91 | <h1 className={classes.headline}>{intl.formatMessage(hadSubscription ? messages.headline : messages.headlineTrial)}</h1> |
75 | <Button | 92 | <Button |
76 | label={intl.formatMessage(messages.action)} | 93 | label={intl.formatMessage(hadSubscription ? messages.action : messages.actionTrial)} |
77 | className={classes.button} | 94 | className={classes.button} |
78 | buttonType="inverted" | 95 | buttonType="inverted" |
79 | onClick={this.handleCTAClick.bind(this)} | 96 | onClick={this.handleCTAClick.bind(this)} |
97 | busy={stores.user.activateTrialRequest.isExecuting} | ||
80 | /> | 98 | /> |
81 | <p className="footnote"> | 99 | <p className="footnote"> |
82 | {intl.formatMessage(messages.text, { | 100 | {intl.formatMessage(messages.text, { |
@@ -89,6 +107,9 @@ export default @inject('actions') @injectSheet(styles) @observer class DelayApp | |||
89 | } | 107 | } |
90 | 108 | ||
91 | DelayApp.wrappedComponent.propTypes = { | 109 | DelayApp.wrappedComponent.propTypes = { |
110 | stores: PropTypes.shape({ | ||
111 | user: PropTypes.instanceOf(UserStore).isRequired, | ||
112 | }).isRequired, | ||
92 | actions: PropTypes.shape({ | 113 | actions: PropTypes.shape({ |
93 | ui: PropTypes.shape({ | 114 | ui: PropTypes.shape({ |
94 | openSettings: PropTypes.func.isRequired, | 115 | openSettings: PropTypes.func.isRequired, |
diff --git a/src/features/delayApp/index.js b/src/features/delayApp/index.js index c753eeffe..4f793f16c 100644 --- a/src/features/delayApp/index.js +++ b/src/features/delayApp/index.js | |||
@@ -43,14 +43,16 @@ export default function init(stores) { | |||
43 | config.delayDuration = globalConfig.wait !== undefined ? globalConfig.wait : DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait; | 43 | config.delayDuration = globalConfig.wait !== undefined ? globalConfig.wait : DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait; |
44 | 44 | ||
45 | autorun(() => { | 45 | autorun(() => { |
46 | if (stores.services.all.length === 0) { | 46 | const { isAnnouncementShown } = stores.announcements; |
47 | debug('seas', stores.services.all.length); | 47 | if (stores.services.allDisplayed.length === 0 || isAnnouncementShown) { |
48 | shownAfterLaunch = true; | 48 | shownAfterLaunch = true; |
49 | setVisibility(false); | ||
49 | return; | 50 | return; |
50 | } | 51 | } |
51 | 52 | ||
52 | const diff = moment().diff(timeLastDelay); | 53 | const diff = moment().diff(timeLastDelay); |
53 | if ((stores.app.isFocused && diff >= config.delayOffset) || !shownAfterLaunch) { | 54 | const itsTimeToWait = diff >= config.delayOffset; |
55 | if (!isAnnouncementShown && ((stores.app.isFocused && itsTimeToWait) || !shownAfterLaunch)) { | ||
54 | debug(`App will be delayed for ${config.delayDuration / 1000}s`); | 56 | debug(`App will be delayed for ${config.delayDuration / 1000}s`); |
55 | 57 | ||
56 | setVisibility(true); | 58 | setVisibility(true); |
@@ -63,6 +65,8 @@ export default function init(stores) { | |||
63 | 65 | ||
64 | setVisibility(false); | 66 | setVisibility(false); |
65 | }, config.delayDuration + 1000); // timer needs to be able to hit 0 | 67 | }, config.delayDuration + 1000); // timer needs to be able to hit 0 |
68 | } else { | ||
69 | setVisibility(false); | ||
66 | } | 70 | } |
67 | }); | 71 | }); |
68 | } else { | 72 | } else { |
diff --git a/src/features/serviceLimit/components/LimitReachedInfobox.js b/src/features/serviceLimit/components/LimitReachedInfobox.js new file mode 100644 index 000000000..19285a4eb --- /dev/null +++ b/src/features/serviceLimit/components/LimitReachedInfobox.js | |||
@@ -0,0 +1,79 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { inject, observer } from 'mobx-react'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | import injectSheet from 'react-jss'; | ||
6 | import { Infobox } from '@meetfranz/ui'; | ||
7 | |||
8 | import { gaEvent } from '../../../lib/analytics'; | ||
9 | |||
10 | const messages = defineMessages({ | ||
11 | limitReached: { | ||
12 | id: 'feature.serviceLimit.limitReached', | ||
13 | defaultMessage: '!!!You have added {amount} of {limit} services. Please upgrade your account to add more services.', | ||
14 | }, | ||
15 | action: { | ||
16 | id: 'premiumFeature.button.upgradeAccount', | ||
17 | defaultMessage: '!!!Upgrade account', | ||
18 | }, | ||
19 | }); | ||
20 | |||
21 | const styles = theme => ({ | ||
22 | container: { | ||
23 | height: 'auto', | ||
24 | background: theme.styleTypes.warning.accent, | ||
25 | color: theme.styleTypes.warning.contrast, | ||
26 | borderRadius: 0, | ||
27 | marginBottom: 0, | ||
28 | |||
29 | '& > div': { | ||
30 | marginBottom: 0, | ||
31 | }, | ||
32 | |||
33 | '& button': { | ||
34 | color: theme.styleTypes.primary.contrast, | ||
35 | }, | ||
36 | }, | ||
37 | }); | ||
38 | |||
39 | |||
40 | @inject('stores', 'actions') @injectSheet(styles) @observer | ||
41 | class LimitReachedInfobox extends Component { | ||
42 | static propTypes = { | ||
43 | classes: PropTypes.object.isRequired, | ||
44 | stores: PropTypes.object.isRequired, | ||
45 | actions: PropTypes.object.isRequired, | ||
46 | }; | ||
47 | |||
48 | static contextTypes = { | ||
49 | intl: intlShape, | ||
50 | }; | ||
51 | |||
52 | render() { | ||
53 | const { classes, stores, actions } = this.props; | ||
54 | const { intl } = this.context; | ||
55 | |||
56 | const { | ||
57 | serviceLimit, | ||
58 | } = stores; | ||
59 | |||
60 | if (!serviceLimit.userHasReachedServiceLimit) return null; | ||
61 | |||
62 | return ( | ||
63 | <Infobox | ||
64 | icon="mdiInformation" | ||
65 | type="warning" | ||
66 | className={classes.container} | ||
67 | ctaLabel={intl.formatMessage(messages.action)} | ||
68 | ctaOnClick={() => { | ||
69 | actions.ui.openSettings({ path: 'user' }); | ||
70 | gaEvent('Service Limit', 'upgrade', 'Upgrade account'); | ||
71 | }} | ||
72 | > | ||
73 | {intl.formatMessage(messages.limitReached, { amount: serviceLimit.serviceCount, limit: serviceLimit.serviceLimit })} | ||
74 | </Infobox> | ||
75 | ); | ||
76 | } | ||
77 | } | ||
78 | |||
79 | export default LimitReachedInfobox; | ||
diff --git a/src/features/serviceLimit/index.js b/src/features/serviceLimit/index.js new file mode 100644 index 000000000..92ad8bb98 --- /dev/null +++ b/src/features/serviceLimit/index.js | |||
@@ -0,0 +1,33 @@ | |||
1 | import { reaction } from 'mobx'; | ||
2 | import { ServiceLimitStore } from './store'; | ||
3 | |||
4 | const debug = require('debug')('Franz:feature:serviceLimit'); | ||
5 | |||
6 | export const DEFAULT_SERVICE_LIMIT = 3; | ||
7 | |||
8 | let store = null; | ||
9 | |||
10 | export const serviceLimitStore = new ServiceLimitStore(); | ||
11 | |||
12 | export default function initServiceLimit(stores, actions) { | ||
13 | const { features } = stores; | ||
14 | |||
15 | // Toggle serviceLimit feature | ||
16 | reaction( | ||
17 | () => ( | ||
18 | features.features.isServiceLimitEnabled | ||
19 | ), | ||
20 | (isEnabled) => { | ||
21 | if (isEnabled) { | ||
22 | debug('Initializing `serviceLimit` feature'); | ||
23 | store = serviceLimitStore.start(stores, actions); | ||
24 | } else if (store) { | ||
25 | debug('Disabling `serviceLimit` feature'); | ||
26 | serviceLimitStore.stop(); | ||
27 | } | ||
28 | }, | ||
29 | { | ||
30 | fireImmediately: true, | ||
31 | }, | ||
32 | ); | ||
33 | } | ||
diff --git a/src/features/serviceLimit/store.js b/src/features/serviceLimit/store.js new file mode 100644 index 000000000..9836c5f51 --- /dev/null +++ b/src/features/serviceLimit/store.js | |||
@@ -0,0 +1,41 @@ | |||
1 | import { computed, observable } from 'mobx'; | ||
2 | import { FeatureStore } from '../utils/FeatureStore'; | ||
3 | import { DEFAULT_SERVICE_LIMIT } from '.'; | ||
4 | |||
5 | const debug = require('debug')('Franz:feature:serviceLimit:store'); | ||
6 | |||
7 | export class ServiceLimitStore extends FeatureStore { | ||
8 | @observable isServiceLimitEnabled = false; | ||
9 | |||
10 | start(stores, actions) { | ||
11 | debug('start'); | ||
12 | this.stores = stores; | ||
13 | this.actions = actions; | ||
14 | |||
15 | this.isServiceLimitEnabled = true; | ||
16 | } | ||
17 | |||
18 | stop() { | ||
19 | super.stop(); | ||
20 | |||
21 | this.isServiceLimitEnabled = false; | ||
22 | } | ||
23 | |||
24 | @computed get userHasReachedServiceLimit() { | ||
25 | if (!this.isServiceLimitEnabled) return false; | ||
26 | |||
27 | return this.serviceLimit !== 0 && this.serviceCount >= this.serviceLimit; | ||
28 | } | ||
29 | |||
30 | @computed get serviceLimit() { | ||
31 | if (!this.isServiceLimitEnabled || this.stores.features.features.serviceLimitCount === 0) return 0; | ||
32 | |||
33 | return this.stores.features.features.serviceLimitCount || DEFAULT_SERVICE_LIMIT; | ||
34 | } | ||
35 | |||
36 | @computed get serviceCount() { | ||
37 | return this.stores.services.all.length; | ||
38 | } | ||
39 | } | ||
40 | |||
41 | export default ServiceLimitStore; | ||
diff --git a/src/features/serviceProxy/index.js b/src/features/serviceProxy/index.js index 4bea327ad..55c600de4 100644 --- a/src/features/serviceProxy/index.js +++ b/src/features/serviceProxy/index.js | |||
@@ -9,17 +9,17 @@ const debug = require('debug')('Franz:feature:serviceProxy'); | |||
9 | 9 | ||
10 | export const config = observable({ | 10 | export const config = observable({ |
11 | isEnabled: DEFAULT_FEATURES_CONFIG.isServiceProxyEnabled, | 11 | isEnabled: DEFAULT_FEATURES_CONFIG.isServiceProxyEnabled, |
12 | isPremium: DEFAULT_FEATURES_CONFIG.isServiceProxyPremiumFeature, | 12 | isPremium: DEFAULT_FEATURES_CONFIG.isServiceProxyIncludedInCurrentPlan, |
13 | }); | 13 | }); |
14 | 14 | ||
15 | export default function init(stores) { | 15 | export default function init(stores) { |
16 | debug('Initializing `serviceProxy` feature'); | 16 | debug('Initializing `serviceProxy` feature'); |
17 | 17 | ||
18 | autorun(() => { | 18 | autorun(() => { |
19 | const { isServiceProxyEnabled, isServiceProxyPremiumFeature } = stores.features.features; | 19 | const { isServiceProxyEnabled, isServiceProxyIncludedInCurrentPlan } = stores.features.features; |
20 | 20 | ||
21 | config.isEnabled = isServiceProxyEnabled !== undefined ? isServiceProxyEnabled : DEFAULT_FEATURES_CONFIG.isServiceProxyEnabled; | 21 | config.isEnabled = isServiceProxyEnabled !== undefined ? isServiceProxyEnabled : DEFAULT_FEATURES_CONFIG.isServiceProxyEnabled; |
22 | config.isPremium = isServiceProxyPremiumFeature !== undefined ? isServiceProxyPremiumFeature : DEFAULT_FEATURES_CONFIG.isServiceProxyPremiumFeature; | 22 | config.isIncludedInCurrentPlan = isServiceProxyIncludedInCurrentPlan !== undefined ? isServiceProxyIncludedInCurrentPlan : DEFAULT_FEATURES_CONFIG.isServiceProxyIncludedInCurrentPlan; |
23 | 23 | ||
24 | const services = stores.services.enabled; | 24 | const services = stores.services.enabled; |
25 | const isPremiumUser = stores.user.data.isPremium; | 25 | const isPremiumUser = stores.user.data.isPremium; |
@@ -30,7 +30,7 @@ export default function init(stores) { | |||
30 | services.forEach((service) => { | 30 | services.forEach((service) => { |
31 | const s = session.fromPartition(`persist:service-${service.id}`); | 31 | const s = session.fromPartition(`persist:service-${service.id}`); |
32 | 32 | ||
33 | if (config.isEnabled && (isPremiumUser || !config.isPremium)) { | 33 | if (config.isEnabled && (isPremiumUser || !config.isIncludedInCurrentPlan)) { |
34 | const serviceProxyConfig = proxySettings[service.id]; | 34 | const serviceProxyConfig = proxySettings[service.id]; |
35 | 35 | ||
36 | if (serviceProxyConfig && serviceProxyConfig.isEnabled && serviceProxyConfig.host) { | 36 | if (serviceProxyConfig && serviceProxyConfig.isEnabled && serviceProxyConfig.host) { |
diff --git a/src/features/shareFranz/Component.js b/src/features/shareFranz/Component.js index 2e66acaf3..405fb0ab5 100644 --- a/src/features/shareFranz/Component.js +++ b/src/features/shareFranz/Component.js | |||
@@ -6,6 +6,9 @@ import { defineMessages, intlShape } from 'react-intl'; | |||
6 | import { Button } from '@meetfranz/forms'; | 6 | import { Button } from '@meetfranz/forms'; |
7 | import { H1, Icon } from '@meetfranz/ui'; | 7 | import { H1, Icon } from '@meetfranz/ui'; |
8 | 8 | ||
9 | import { | ||
10 | mdiHeart, mdiEmail, mdiFacebookBox, mdiTwitter, | ||
11 | } from '@mdi/js'; | ||
9 | import Modal from '../../components/ui/Modal'; | 12 | import Modal from '../../components/ui/Modal'; |
10 | import { state } from '.'; | 13 | import { state } from '.'; |
11 | import ServicesStore from '../../stores/ServicesStore'; | 14 | import ServicesStore from '../../stores/ServicesStore'; |
@@ -74,7 +77,7 @@ const styles = theme => ({ | |||
74 | }, | 77 | }, |
75 | cta: { | 78 | cta: { |
76 | background: theme.styleTypes.primary.contrast, | 79 | background: theme.styleTypes.primary.contrast, |
77 | color: theme.styleTypes.primary.accent, | 80 | color: `${theme.styleTypes.primary.accent} !important`, |
78 | 81 | ||
79 | '& svg': { | 82 | '& svg': { |
80 | fill: theme.styleTypes.primary.accent, | 83 | fill: theme.styleTypes.primary.accent, |
@@ -115,7 +118,7 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz | |||
115 | close={this.close.bind(this)} | 118 | close={this.close.bind(this)} |
116 | > | 119 | > |
117 | <div className={classes.heartContainer}> | 120 | <div className={classes.heartContainer}> |
118 | <Icon icon="mdiHeart" className={classes.heart} size={4} /> | 121 | <Icon icon={mdiHeart} className={classes.heart} size={4} /> |
119 | </div> | 122 | </div> |
120 | <H1 className={classes.headline}> | 123 | <H1 className={classes.headline}> |
121 | {intl.formatMessage(messages.headline)} | 124 | {intl.formatMessage(messages.headline)} |
@@ -125,21 +128,21 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz | |||
125 | <Button | 128 | <Button |
126 | label={intl.formatMessage(messages.actionsEmail)} | 129 | label={intl.formatMessage(messages.actionsEmail)} |
127 | className={classes.cta} | 130 | className={classes.cta} |
128 | icon="mdiEmail" | 131 | icon={mdiEmail} |
129 | href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareTextEmail, { count: serviceCount })}}`} | 132 | href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareTextEmail, { count: serviceCount })}}`} |
130 | target="_blank" | 133 | target="_blank" |
131 | /> | 134 | /> |
132 | <Button | 135 | <Button |
133 | label={intl.formatMessage(messages.actionsFacebook)} | 136 | label={intl.formatMessage(messages.actionsFacebook)} |
134 | className={classes.cta} | 137 | className={classes.cta} |
135 | icon="mdiFacebookBox" | 138 | icon={mdiFacebookBox} |
136 | href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button" | 139 | href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button" |
137 | target="_blank" | 140 | target="_blank" |
138 | /> | 141 | /> |
139 | <Button | 142 | <Button |
140 | label={intl.formatMessage(messages.actionsTwitter)} | 143 | label={intl.formatMessage(messages.actionsTwitter)} |
141 | className={classes.cta} | 144 | className={classes.cta} |
142 | icon="mdiTwitter" | 145 | icon={mdiTwitter} |
143 | href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareTextTwitter, { count: serviceCount })}`} | 146 | href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareTextTwitter, { count: serviceCount })}`} |
144 | target="_blank" | 147 | target="_blank" |
145 | /> | 148 | /> |
diff --git a/src/features/spellchecker/index.js b/src/features/spellchecker/index.js index 79a2172b4..a07f9f63a 100644 --- a/src/features/spellchecker/index.js +++ b/src/features/spellchecker/index.js | |||
@@ -5,18 +5,18 @@ import { DEFAULT_FEATURES_CONFIG } from '../../config'; | |||
5 | const debug = require('debug')('Franz:feature:spellchecker'); | 5 | const debug = require('debug')('Franz:feature:spellchecker'); |
6 | 6 | ||
7 | export const config = observable({ | 7 | export const config = observable({ |
8 | isPremium: DEFAULT_FEATURES_CONFIG.isSpellcheckerPremiumFeature, | 8 | isIncludedInCurrentPlan: DEFAULT_FEATURES_CONFIG.isSpellcheckerIncludedInCurrentPlan, |
9 | }); | 9 | }); |
10 | 10 | ||
11 | export default function init(stores) { | 11 | export default function init(stores) { |
12 | debug('Initializing `spellchecker` feature'); | 12 | debug('Initializing `spellchecker` feature'); |
13 | 13 | ||
14 | autorun(() => { | 14 | autorun(() => { |
15 | const { isSpellcheckerPremiumFeature } = stores.features.features; | 15 | const { isSpellcheckerIncludedInCurrentPlan } = stores.features.features; |
16 | 16 | ||
17 | config.isPremium = isSpellcheckerPremiumFeature !== undefined ? isSpellcheckerPremiumFeature : DEFAULT_FEATURES_CONFIG.isSpellcheckerPremiumFeature; | 17 | config.isIncludedInCurrentPlan = isSpellcheckerIncludedInCurrentPlan !== undefined ? isSpellcheckerIncludedInCurrentPlan : DEFAULT_FEATURES_CONFIG.isSpellcheckerIncludedInCurrentPlan; |
18 | 18 | ||
19 | if (!stores.user.data.isPremium && config.isPremium && stores.settings.app.enableSpellchecking) { | 19 | if (!stores.user.data.isPremium && config.isIncludedInCurrentPlan && stores.settings.app.enableSpellchecking) { |
20 | debug('Override settings.spellcheckerEnabled flag to false'); | 20 | debug('Override settings.spellcheckerEnabled flag to false'); |
21 | 21 | ||
22 | Object.assign(stores.settings.app, { | 22 | Object.assign(stores.settings.app, { |
diff --git a/src/features/todos/actions.js b/src/features/todos/actions.js new file mode 100644 index 000000000..1ccc9a592 --- /dev/null +++ b/src/features/todos/actions.js | |||
@@ -0,0 +1,23 @@ | |||
1 | import PropTypes from 'prop-types'; | ||
2 | import { createActionsFromDefinitions } from '../../actions/lib/actions'; | ||
3 | |||
4 | export const todoActions = createActionsFromDefinitions({ | ||
5 | resize: { | ||
6 | width: PropTypes.number.isRequired, | ||
7 | }, | ||
8 | toggleTodosPanel: {}, | ||
9 | toggleTodosFeatureVisibility: {}, | ||
10 | setTodosWebview: { | ||
11 | webview: PropTypes.instanceOf(Element).isRequired, | ||
12 | }, | ||
13 | handleHostMessage: { | ||
14 | action: PropTypes.string.isRequired, | ||
15 | data: PropTypes.object, | ||
16 | }, | ||
17 | handleClientMessage: { | ||
18 | action: PropTypes.string.isRequired, | ||
19 | data: PropTypes.object, | ||
20 | }, | ||
21 | }, PropTypes.checkPropTypes); | ||
22 | |||
23 | export default todoActions; | ||
diff --git a/src/features/todos/components/TodosWebview.js b/src/features/todos/components/TodosWebview.js new file mode 100644 index 000000000..c06183e37 --- /dev/null +++ b/src/features/todos/components/TodosWebview.js | |||
@@ -0,0 +1,300 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { observer } from 'mobx-react'; | ||
4 | import injectSheet from 'react-jss'; | ||
5 | import Webview from 'react-electron-web-view'; | ||
6 | import { Icon } from '@meetfranz/ui'; | ||
7 | import { defineMessages, intlShape } from 'react-intl'; | ||
8 | |||
9 | import { mdiChevronRight, mdiCheckAll } from '@mdi/js'; | ||
10 | import * as environment from '../../../environment'; | ||
11 | import Appear from '../../../components/ui/effects/Appear'; | ||
12 | import UpgradeButton from '../../../components/ui/UpgradeButton'; | ||
13 | |||
14 | const OPEN_TODOS_BUTTON_SIZE = 45; | ||
15 | const CLOSE_TODOS_BUTTON_SIZE = 35; | ||
16 | |||
17 | const messages = defineMessages({ | ||
18 | premiumInfo: { | ||
19 | id: 'feature.todos.premium.info', | ||
20 | defaultMessage: '!!!Franz Todos are available to premium users now!', | ||
21 | }, | ||
22 | upgradeCTA: { | ||
23 | id: 'feature.todos.premium.upgrade', | ||
24 | defaultMessage: '!!!Upgrade Account', | ||
25 | }, | ||
26 | rolloutInfo: { | ||
27 | id: 'feature.todos.premium.rollout', | ||
28 | defaultMessage: '!!!Everyone else will have to wait a little longer.', | ||
29 | }, | ||
30 | }); | ||
31 | |||
32 | const styles = theme => ({ | ||
33 | root: { | ||
34 | background: theme.colorBackground, | ||
35 | position: 'relative', | ||
36 | borderLeft: [1, 'solid', theme.todos.todosLayer.borderLeftColor], | ||
37 | zIndex: 300, | ||
38 | |||
39 | transform: ({ isVisible, width }) => `translateX(${isVisible ? 0 : width}px)`, | ||
40 | |||
41 | '&:hover $closeTodosButton': { | ||
42 | opacity: 1, | ||
43 | }, | ||
44 | '& webview': { | ||
45 | height: '100%', | ||
46 | }, | ||
47 | }, | ||
48 | resizeHandler: { | ||
49 | position: 'absolute', | ||
50 | left: 0, | ||
51 | marginLeft: -5, | ||
52 | width: 10, | ||
53 | zIndex: 400, | ||
54 | cursor: 'col-resize', | ||
55 | }, | ||
56 | dragIndicator: { | ||
57 | position: 'absolute', | ||
58 | left: 0, | ||
59 | width: 5, | ||
60 | zIndex: 400, | ||
61 | background: theme.todos.dragIndicator.background, | ||
62 | |||
63 | }, | ||
64 | openTodosButton: { | ||
65 | width: OPEN_TODOS_BUTTON_SIZE, | ||
66 | height: OPEN_TODOS_BUTTON_SIZE, | ||
67 | background: theme.todos.toggleButton.background, | ||
68 | position: 'absolute', | ||
69 | bottom: 120, | ||
70 | right: props => (props.width + (props.isVisible ? -OPEN_TODOS_BUTTON_SIZE / 2 : 0)), | ||
71 | borderRadius: OPEN_TODOS_BUTTON_SIZE / 2, | ||
72 | opacity: props => (props.isVisible ? 0 : 1), | ||
73 | transition: 'right 0.5s', | ||
74 | zIndex: 600, | ||
75 | display: 'flex', | ||
76 | alignItems: 'center', | ||
77 | justifyContent: 'center', | ||
78 | boxShadow: [0, 0, 10, theme.todos.toggleButton.shadowColor], | ||
79 | |||
80 | borderTopRightRadius: props => (props.isVisible ? null : 0), | ||
81 | borderBottomRightRadius: props => (props.isVisible ? null : 0), | ||
82 | |||
83 | '& svg': { | ||
84 | fill: theme.todos.toggleButton.textColor, | ||
85 | transition: 'all 0.5s', | ||
86 | }, | ||
87 | }, | ||
88 | closeTodosButton: { | ||
89 | width: CLOSE_TODOS_BUTTON_SIZE, | ||
90 | height: CLOSE_TODOS_BUTTON_SIZE, | ||
91 | background: theme.todos.toggleButton.background, | ||
92 | position: 'absolute', | ||
93 | bottom: 120, | ||
94 | right: ({ width }) => (width + -CLOSE_TODOS_BUTTON_SIZE / 2), | ||
95 | borderRadius: CLOSE_TODOS_BUTTON_SIZE / 2, | ||
96 | opacity: ({ isTodosIncludedInCurrentPlan }) => (!isTodosIncludedInCurrentPlan ? 1 : 0), | ||
97 | transition: 'opacity 0.5s', | ||
98 | zIndex: 600, | ||
99 | display: 'flex', | ||
100 | alignItems: 'center', | ||
101 | justifyContent: 'center', | ||
102 | boxShadow: [0, 0, 10, theme.todos.toggleButton.shadowColor], | ||
103 | |||
104 | '& svg': { | ||
105 | fill: theme.todos.toggleButton.textColor, | ||
106 | }, | ||
107 | }, | ||
108 | premiumContainer: { | ||
109 | display: 'flex', | ||
110 | flexDirection: 'column', | ||
111 | justifyContent: 'center', | ||
112 | alignItems: 'center', | ||
113 | width: '80%', | ||
114 | maxWidth: 300, | ||
115 | margin: [0, 'auto'], | ||
116 | textAlign: 'center', | ||
117 | }, | ||
118 | premiumIcon: { | ||
119 | marginBottom: 40, | ||
120 | background: theme.styleTypes.primary.accent, | ||
121 | fill: theme.styleTypes.primary.contrast, | ||
122 | padding: 10, | ||
123 | borderRadius: 10, | ||
124 | }, | ||
125 | premiumCTA: { | ||
126 | marginTop: 40, | ||
127 | }, | ||
128 | }); | ||
129 | |||
130 | @injectSheet(styles) @observer | ||
131 | class TodosWebview extends Component { | ||
132 | static propTypes = { | ||
133 | classes: PropTypes.object.isRequired, | ||
134 | isVisible: PropTypes.bool.isRequired, | ||
135 | togglePanel: PropTypes.func.isRequired, | ||
136 | handleClientMessage: PropTypes.func.isRequired, | ||
137 | setTodosWebview: PropTypes.func.isRequired, | ||
138 | resize: PropTypes.func.isRequired, | ||
139 | width: PropTypes.number.isRequired, | ||
140 | minWidth: PropTypes.number.isRequired, | ||
141 | isTodosIncludedInCurrentPlan: PropTypes.bool.isRequired, | ||
142 | }; | ||
143 | |||
144 | state = { | ||
145 | isDragging: false, | ||
146 | width: 300, | ||
147 | }; | ||
148 | |||
149 | static contextTypes = { | ||
150 | intl: intlShape, | ||
151 | }; | ||
152 | |||
153 | componentWillMount() { | ||
154 | const { width } = this.props; | ||
155 | |||
156 | this.setState({ | ||
157 | width, | ||
158 | }); | ||
159 | } | ||
160 | |||
161 | componentDidMount() { | ||
162 | this.node.addEventListener('mousemove', this.resizePanel.bind(this)); | ||
163 | this.node.addEventListener('mouseup', this.stopResize.bind(this)); | ||
164 | this.node.addEventListener('mouseleave', this.stopResize.bind(this)); | ||
165 | } | ||
166 | |||
167 | startResize = (event) => { | ||
168 | this.setState({ | ||
169 | isDragging: true, | ||
170 | initialPos: event.clientX, | ||
171 | delta: 0, | ||
172 | }); | ||
173 | }; | ||
174 | |||
175 | resizePanel(e) { | ||
176 | const { minWidth } = this.props; | ||
177 | |||
178 | const { | ||
179 | isDragging, | ||
180 | initialPos, | ||
181 | } = this.state; | ||
182 | |||
183 | if (isDragging && Math.abs(e.clientX - window.innerWidth) > minWidth) { | ||
184 | const delta = e.clientX - initialPos; | ||
185 | |||
186 | this.setState({ | ||
187 | delta, | ||
188 | }); | ||
189 | } | ||
190 | } | ||
191 | |||
192 | stopResize() { | ||
193 | const { | ||
194 | resize, | ||
195 | minWidth, | ||
196 | } = this.props; | ||
197 | |||
198 | const { | ||
199 | isDragging, | ||
200 | delta, | ||
201 | width, | ||
202 | } = this.state; | ||
203 | |||
204 | if (isDragging) { | ||
205 | let newWidth = width + (delta < 0 ? Math.abs(delta) : -Math.abs(delta)); | ||
206 | |||
207 | if (newWidth < minWidth) { | ||
208 | newWidth = minWidth; | ||
209 | } | ||
210 | |||
211 | this.setState({ | ||
212 | isDragging: false, | ||
213 | delta: 0, | ||
214 | width: newWidth, | ||
215 | }); | ||
216 | |||
217 | resize(newWidth); | ||
218 | } | ||
219 | } | ||
220 | |||
221 | startListeningToIpcMessages() { | ||
222 | const { handleClientMessage } = this.props; | ||
223 | if (!this.webview) return; | ||
224 | this.webview.addEventListener('ipc-message', e => handleClientMessage(e.args[0])); | ||
225 | } | ||
226 | |||
227 | render() { | ||
228 | const { | ||
229 | classes, | ||
230 | isVisible, | ||
231 | togglePanel, | ||
232 | isTodosIncludedInCurrentPlan, | ||
233 | } = this.props; | ||
234 | |||
235 | const { | ||
236 | width, | ||
237 | delta, | ||
238 | isDragging, | ||
239 | } = this.state; | ||
240 | |||
241 | const { intl } = this.context; | ||
242 | |||
243 | return ( | ||
244 | <div | ||
245 | className={classes.root} | ||
246 | style={{ width: isVisible ? width : 0 }} | ||
247 | onMouseUp={() => this.stopResize()} | ||
248 | ref={(node) => { this.node = node; }} | ||
249 | > | ||
250 | <button | ||
251 | onClick={() => togglePanel()} | ||
252 | className={isVisible ? classes.closeTodosButton : classes.openTodosButton} | ||
253 | type="button" | ||
254 | > | ||
255 | <Icon icon={isVisible ? mdiChevronRight : mdiCheckAll} size={2} /> | ||
256 | </button> | ||
257 | <div | ||
258 | className={classes.resizeHandler} | ||
259 | style={Object.assign({ left: delta }, isDragging ? { width: 600, marginLeft: -200 } : {})} // This hack is required as resizing with webviews beneath behaves quite bad | ||
260 | onMouseDown={e => this.startResize(e)} | ||
261 | /> | ||
262 | {isDragging && ( | ||
263 | <div | ||
264 | className={classes.dragIndicator} | ||
265 | style={{ left: delta }} // This hack is required as resizing with webviews beneath behaves quite bad | ||
266 | /> | ||
267 | )} | ||
268 | {isTodosIncludedInCurrentPlan ? ( | ||
269 | <Webview | ||
270 | className={classes.webview} | ||
271 | onDidAttach={() => { | ||
272 | const { setTodosWebview } = this.props; | ||
273 | setTodosWebview(this.webview); | ||
274 | this.startListeningToIpcMessages(); | ||
275 | }} | ||
276 | partition="persist:todos" | ||
277 | preload="./features/todos/preload.js" | ||
278 | ref={(webview) => { this.webview = webview ? webview.view : null; }} | ||
279 | src={environment.TODOS_FRONTEND} | ||
280 | /> | ||
281 | ) : ( | ||
282 | <Appear> | ||
283 | <div className={classes.premiumContainer}> | ||
284 | <Icon icon={mdiCheckAll} className={classes.premiumIcon} size={4} /> | ||
285 | <p>{intl.formatMessage(messages.premiumInfo)}</p> | ||
286 | <p>{intl.formatMessage(messages.rolloutInfo)}</p> | ||
287 | <UpgradeButton | ||
288 | className={classes.premiumCTA} | ||
289 | gaEventInfo={{ category: 'Todos', event: 'upgrade' }} | ||
290 | short | ||
291 | /> | ||
292 | </div> | ||
293 | </Appear> | ||
294 | )} | ||
295 | </div> | ||
296 | ); | ||
297 | } | ||
298 | } | ||
299 | |||
300 | export default TodosWebview; | ||
diff --git a/src/features/todos/constants.js b/src/features/todos/constants.js new file mode 100644 index 000000000..2e8a431cc --- /dev/null +++ b/src/features/todos/constants.js | |||
@@ -0,0 +1,4 @@ | |||
1 | export const IPC = { | ||
2 | TODOS_HOST_CHANNEL: 'TODOS_HOST_CHANNEL', | ||
3 | TODOS_CLIENT_CHANNEL: 'TODOS_CLIENT_CHANNEL', | ||
4 | }; | ||
diff --git a/src/features/todos/containers/TodosScreen.js b/src/features/todos/containers/TodosScreen.js new file mode 100644 index 000000000..a5da0b014 --- /dev/null +++ b/src/features/todos/containers/TodosScreen.js | |||
@@ -0,0 +1,41 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import { observer, inject } from 'mobx-react'; | ||
3 | import PropTypes from 'prop-types'; | ||
4 | |||
5 | import FeaturesStore from '../../../stores/FeaturesStore'; | ||
6 | import TodosWebview from '../components/TodosWebview'; | ||
7 | import ErrorBoundary from '../../../components/util/ErrorBoundary'; | ||
8 | import { TODOS_MIN_WIDTH, todosStore } from '..'; | ||
9 | import { todoActions } from '../actions'; | ||
10 | |||
11 | @inject('stores', 'actions') @observer | ||
12 | class TodosScreen extends Component { | ||
13 | render() { | ||
14 | if (!todosStore || !todosStore.isFeatureActive || todosStore.isTodosPanelForceHidden) { | ||
15 | return null; | ||
16 | } | ||
17 | |||
18 | return ( | ||
19 | <ErrorBoundary> | ||
20 | <TodosWebview | ||
21 | isVisible={todosStore.isTodosPanelVisible} | ||
22 | togglePanel={todoActions.toggleTodosPanel} | ||
23 | handleClientMessage={todoActions.handleClientMessage} | ||
24 | setTodosWebview={webview => todoActions.setTodosWebview({ webview })} | ||
25 | width={todosStore.width} | ||
26 | minWidth={TODOS_MIN_WIDTH} | ||
27 | resize={width => todoActions.resize({ width })} | ||
28 | isTodosIncludedInCurrentPlan={this.props.stores.features.features.isTodosIncludedInCurrentPlan || false} | ||
29 | /> | ||
30 | </ErrorBoundary> | ||
31 | ); | ||
32 | } | ||
33 | } | ||
34 | |||
35 | export default TodosScreen; | ||
36 | |||
37 | TodosScreen.wrappedComponent.propTypes = { | ||
38 | stores: PropTypes.shape({ | ||
39 | features: PropTypes.instanceOf(FeaturesStore).isRequired, | ||
40 | }).isRequired, | ||
41 | }; | ||
diff --git a/src/features/todos/index.js b/src/features/todos/index.js new file mode 100644 index 000000000..7388aebaf --- /dev/null +++ b/src/features/todos/index.js | |||
@@ -0,0 +1,39 @@ | |||
1 | import { reaction } from 'mobx'; | ||
2 | import TodoStore from './store'; | ||
3 | |||
4 | const debug = require('debug')('Franz:feature:todos'); | ||
5 | |||
6 | export const GA_CATEGORY_TODOS = 'Todos'; | ||
7 | |||
8 | export const DEFAULT_TODOS_WIDTH = 300; | ||
9 | export const TODOS_MIN_WIDTH = 200; | ||
10 | export const DEFAULT_TODOS_VISIBLE = true; | ||
11 | export const DEFAULT_IS_FEATURE_ENABLED_BY_USER = true; | ||
12 | |||
13 | export const TODOS_ROUTES = { | ||
14 | TARGET: '/todos', | ||
15 | }; | ||
16 | |||
17 | export const todosStore = new TodoStore(); | ||
18 | |||
19 | export default function initTodos(stores, actions) { | ||
20 | stores.todos = todosStore; | ||
21 | const { features } = stores; | ||
22 | |||
23 | // Toggle todos feature | ||
24 | reaction( | ||
25 | () => features.features.isTodosEnabled, | ||
26 | (isEnabled) => { | ||
27 | if (isEnabled) { | ||
28 | debug('Initializing `todos` feature'); | ||
29 | todosStore.start(stores, actions); | ||
30 | } else if (todosStore.isFeatureActive) { | ||
31 | debug('Disabling `todos` feature'); | ||
32 | todosStore.stop(); | ||
33 | } | ||
34 | }, | ||
35 | { | ||
36 | fireImmediately: true, | ||
37 | }, | ||
38 | ); | ||
39 | } | ||
diff --git a/src/features/todos/preload.js b/src/features/todos/preload.js new file mode 100644 index 000000000..6e38a2ef3 --- /dev/null +++ b/src/features/todos/preload.js | |||
@@ -0,0 +1,23 @@ | |||
1 | import { ipcRenderer } from 'electron'; | ||
2 | import { IPC } from './constants'; | ||
3 | |||
4 | const debug = require('debug')('Franz:feature:todos:preload'); | ||
5 | |||
6 | debug('Preloading Todos Webview'); | ||
7 | |||
8 | let hostMessageListener = () => {}; | ||
9 | |||
10 | window.franz = { | ||
11 | onInitialize(ipcHostMessageListener) { | ||
12 | hostMessageListener = ipcHostMessageListener; | ||
13 | ipcRenderer.sendToHost(IPC.TODOS_CLIENT_CHANNEL, { action: 'todos:initialized' }); | ||
14 | }, | ||
15 | sendToHost(message) { | ||
16 | ipcRenderer.sendToHost(IPC.TODOS_CLIENT_CHANNEL, message); | ||
17 | }, | ||
18 | }; | ||
19 | |||
20 | ipcRenderer.on(IPC.TODOS_HOST_CHANNEL, (event, message) => { | ||
21 | debug('Received host message', event, message); | ||
22 | hostMessageListener(message); | ||
23 | }); | ||
diff --git a/src/features/todos/store.js b/src/features/todos/store.js new file mode 100644 index 000000000..05eef4ec1 --- /dev/null +++ b/src/features/todos/store.js | |||
@@ -0,0 +1,213 @@ | |||
1 | import { ThemeType } from '@meetfranz/theme'; | ||
2 | import { | ||
3 | computed, | ||
4 | action, | ||
5 | observable, | ||
6 | } from 'mobx'; | ||
7 | import localStorage from 'mobx-localstorage'; | ||
8 | |||
9 | import { todoActions } from './actions'; | ||
10 | import { FeatureStore } from '../utils/FeatureStore'; | ||
11 | import { createReactions } from '../../stores/lib/Reaction'; | ||
12 | import { createActionBindings } from '../utils/ActionBinding'; | ||
13 | import { | ||
14 | DEFAULT_TODOS_WIDTH, TODOS_MIN_WIDTH, DEFAULT_TODOS_VISIBLE, TODOS_ROUTES, DEFAULT_IS_FEATURE_ENABLED_BY_USER, | ||
15 | } from '.'; | ||
16 | import { IPC } from './constants'; | ||
17 | import { state as delayAppState } from '../delayApp'; | ||
18 | |||
19 | const debug = require('debug')('Franz:feature:todos:store'); | ||
20 | |||
21 | export default class TodoStore extends FeatureStore { | ||
22 | @observable isFeatureEnabled = false; | ||
23 | |||
24 | @observable isFeatureActive = false; | ||
25 | |||
26 | webview = null; | ||
27 | |||
28 | @computed get width() { | ||
29 | const width = this.settings.width || DEFAULT_TODOS_WIDTH; | ||
30 | |||
31 | return width < TODOS_MIN_WIDTH ? TODOS_MIN_WIDTH : width; | ||
32 | } | ||
33 | |||
34 | @computed get isTodosPanelForceHidden() { | ||
35 | const { isAnnouncementShown } = this.stores.announcements; | ||
36 | return delayAppState.isDelayAppScreenVisible || !this.settings.isFeatureEnabledByUser || isAnnouncementShown; | ||
37 | } | ||
38 | |||
39 | @computed get isTodosPanelVisible() { | ||
40 | if (this.settings.isTodosPanelVisible === undefined) return DEFAULT_TODOS_VISIBLE; | ||
41 | return this.settings.isTodosPanelVisible; | ||
42 | } | ||
43 | |||
44 | @computed get settings() { | ||
45 | return localStorage.getItem('todos') || {}; | ||
46 | } | ||
47 | |||
48 | // ========== PUBLIC API ========= // | ||
49 | |||
50 | @action start(stores, actions) { | ||
51 | debug('TodoStore::start'); | ||
52 | this.stores = stores; | ||
53 | this.actions = actions; | ||
54 | |||
55 | // ACTIONS | ||
56 | |||
57 | this._registerActions(createActionBindings([ | ||
58 | [todoActions.resize, this._resize], | ||
59 | [todoActions.toggleTodosPanel, this._toggleTodosPanel], | ||
60 | [todoActions.setTodosWebview, this._setTodosWebview], | ||
61 | [todoActions.handleHostMessage, this._handleHostMessage], | ||
62 | [todoActions.handleClientMessage, this._handleClientMessage], | ||
63 | [todoActions.toggleTodosFeatureVisibility, this._toggleTodosFeatureVisibility], | ||
64 | ])); | ||
65 | |||
66 | // REACTIONS | ||
67 | |||
68 | this._allReactions = createReactions([ | ||
69 | this._setFeatureEnabledReaction, | ||
70 | this._updateTodosConfig, | ||
71 | this._firstLaunchReaction, | ||
72 | this._routeCheckReaction, | ||
73 | ]); | ||
74 | |||
75 | this._registerReactions(this._allReactions); | ||
76 | |||
77 | this.isFeatureActive = true; | ||
78 | |||
79 | if (this.settings.isFeatureEnabledByUser === undefined) { | ||
80 | this._updateSettings({ | ||
81 | isFeatureEnabledByUser: DEFAULT_IS_FEATURE_ENABLED_BY_USER, | ||
82 | }); | ||
83 | } | ||
84 | } | ||
85 | |||
86 | @action stop() { | ||
87 | super.stop(); | ||
88 | debug('TodoStore::stop'); | ||
89 | this.reset(); | ||
90 | this.isFeatureActive = false; | ||
91 | } | ||
92 | |||
93 | // ========== PRIVATE METHODS ========= // | ||
94 | |||
95 | _updateSettings = (changes) => { | ||
96 | localStorage.setItem('todos', { | ||
97 | ...this.settings, | ||
98 | ...changes, | ||
99 | }); | ||
100 | }; | ||
101 | |||
102 | // Actions | ||
103 | |||
104 | @action _resize = ({ width }) => { | ||
105 | this._updateSettings({ | ||
106 | width, | ||
107 | }); | ||
108 | }; | ||
109 | |||
110 | @action _toggleTodosPanel = () => { | ||
111 | this._updateSettings({ | ||
112 | isTodosPanelVisible: !this.isTodosPanelVisible, | ||
113 | }); | ||
114 | }; | ||
115 | |||
116 | @action _setTodosWebview = ({ webview }) => { | ||
117 | debug('_setTodosWebview', webview); | ||
118 | this.webview = webview; | ||
119 | }; | ||
120 | |||
121 | @action _handleHostMessage = (message) => { | ||
122 | debug('_handleHostMessage', message); | ||
123 | if (message.action === 'todos:create') { | ||
124 | this.webview.send(IPC.TODOS_HOST_CHANNEL, message); | ||
125 | } | ||
126 | }; | ||
127 | |||
128 | @action _handleClientMessage = (message) => { | ||
129 | debug('_handleClientMessage', message); | ||
130 | switch (message.action) { | ||
131 | case 'todos:initialized': this._onTodosClientInitialized(); break; | ||
132 | case 'todos:goToService': this._goToService(message.data); break; | ||
133 | default: | ||
134 | debug('Unknown client message reiceived', message); | ||
135 | } | ||
136 | }; | ||
137 | |||
138 | @action _toggleTodosFeatureVisibility = () => { | ||
139 | debug('_toggleTodosFeatureVisibility'); | ||
140 | |||
141 | this._updateSettings({ | ||
142 | isFeatureEnabledByUser: !this.settings.isFeatureEnabledByUser, | ||
143 | }); | ||
144 | }; | ||
145 | |||
146 | // Todos client message handlers | ||
147 | |||
148 | _onTodosClientInitialized = () => { | ||
149 | const { authToken } = this.stores.user; | ||
150 | const { isDarkThemeActive } = this.stores.ui; | ||
151 | const { locale } = this.stores.app; | ||
152 | if (!this.webview) return; | ||
153 | this.webview.send(IPC.TODOS_HOST_CHANNEL, { | ||
154 | action: 'todos:configure', | ||
155 | data: { | ||
156 | authToken, | ||
157 | locale, | ||
158 | theme: isDarkThemeActive ? ThemeType.dark : ThemeType.default, | ||
159 | }, | ||
160 | }); | ||
161 | }; | ||
162 | |||
163 | _goToService = ({ url, serviceId }) => { | ||
164 | if (url) { | ||
165 | this.stores.services.one(serviceId).webview.loadURL(url); | ||
166 | } | ||
167 | this.actions.service.setActive({ serviceId }); | ||
168 | }; | ||
169 | |||
170 | // Reactions | ||
171 | |||
172 | _setFeatureEnabledReaction = () => { | ||
173 | const { isTodosEnabled } = this.stores.features.features; | ||
174 | |||
175 | this.isFeatureEnabled = isTodosEnabled; | ||
176 | }; | ||
177 | |||
178 | _updateTodosConfig = () => { | ||
179 | // Resend the config if any part changes in Franz: | ||
180 | this._onTodosClientInitialized(); | ||
181 | }; | ||
182 | |||
183 | _firstLaunchReaction = () => { | ||
184 | const { stats } = this.stores.settings.all; | ||
185 | |||
186 | // Hide todos layer on first app start but show on second | ||
187 | if (stats.appStarts <= 1) { | ||
188 | this._updateSettings({ | ||
189 | isTodosPanelVisible: false, | ||
190 | }); | ||
191 | } else if (stats.appStarts <= 2) { | ||
192 | this._updateSettings({ | ||
193 | isTodosPanelVisible: true, | ||
194 | }); | ||
195 | } | ||
196 | }; | ||
197 | |||
198 | _routeCheckReaction = () => { | ||
199 | const { pathname } = this.stores.router.location; | ||
200 | |||
201 | if (pathname === TODOS_ROUTES.TARGET) { | ||
202 | debug('Router is on todos route, show todos panel'); | ||
203 | // todosStore.start(stores, actions); | ||
204 | this.stores.router.push('/'); | ||
205 | |||
206 | if (!this.isTodosPanelVisible) { | ||
207 | this._updateSettings({ | ||
208 | isTodosPanelVisible: true, | ||
209 | }); | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 | } | ||
diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js index cbc7372ca..f4ee89a14 100644 --- a/src/features/workspaces/components/WorkspaceDrawer.js +++ b/src/features/workspaces/components/WorkspaceDrawer.js | |||
@@ -7,6 +7,7 @@ import { H1, Icon, ProBadge } from '@meetfranz/ui'; | |||
7 | import { Button } from '@meetfranz/forms/lib'; | 7 | import { Button } from '@meetfranz/forms/lib'; |
8 | import ReactTooltip from 'react-tooltip'; | 8 | import ReactTooltip from 'react-tooltip'; |
9 | 9 | ||
10 | import { mdiPlusBox, mdiSettings } from '@mdi/js'; | ||
10 | import WorkspaceDrawerItem from './WorkspaceDrawerItem'; | 11 | import WorkspaceDrawerItem from './WorkspaceDrawerItem'; |
11 | import { workspaceActions } from '../actions'; | 12 | import { workspaceActions } from '../actions'; |
12 | import { workspaceStore } from '../index'; | 13 | import { workspaceStore } from '../index'; |
@@ -157,7 +158,7 @@ class WorkspaceDrawer extends Component { | |||
157 | data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`} | 158 | data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`} |
158 | > | 159 | > |
159 | <Icon | 160 | <Icon |
160 | icon="mdiSettings" | 161 | icon={mdiSettings} |
161 | size={1.5} | 162 | size={1.5} |
162 | className={classes.workspacesSettingsButtonIcon} | 163 | className={classes.workspacesSettingsButtonIcon} |
163 | /> | 164 | /> |
@@ -181,7 +182,7 @@ class WorkspaceDrawer extends Component { | |||
181 | className={classes.premiumCtaButton} | 182 | className={classes.premiumCtaButton} |
182 | buttonType="primary" | 183 | buttonType="primary" |
183 | label={intl.formatMessage(messages.premiumCtaButtonLabel)} | 184 | label={intl.formatMessage(messages.premiumCtaButtonLabel)} |
184 | icon="mdiPlusBox" | 185 | icon={mdiPlusBox} |
185 | onClick={() => { | 186 | onClick={() => { |
186 | workspaceActions.openWorkspaceSettings(); | 187 | workspaceActions.openWorkspaceSettings(); |
187 | }} | 188 | }} |
@@ -220,7 +221,7 @@ class WorkspaceDrawer extends Component { | |||
220 | }} | 221 | }} |
221 | > | 222 | > |
222 | <Icon | 223 | <Icon |
223 | icon="mdiPlusBox" | 224 | icon={mdiPlusBox} |
224 | size={1} | 225 | size={1} |
225 | className={classes.workspacesSettingsButtonIcon} | 226 | className={classes.workspacesSettingsButtonIcon} |
226 | /> | 227 | /> |
diff --git a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js index c4a800a7b..a70d1d66f 100644 --- a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js +++ b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js | |||
@@ -21,11 +21,8 @@ const styles = theme => ({ | |||
21 | alignItems: 'flex-start', | 21 | alignItems: 'flex-start', |
22 | position: 'absolute', | 22 | position: 'absolute', |
23 | transition: 'width 0.5s ease', | 23 | transition: 'width 0.5s ease', |
24 | width: '100%', | ||
25 | marginTop: '20px', | ||
26 | }, | ||
27 | wrapperWhenDrawerIsOpen: { | ||
28 | width: `calc(100% - ${theme.workspaces.drawer.width}px)`, | 24 | width: `calc(100% - ${theme.workspaces.drawer.width}px)`, |
25 | marginTop: '20px', | ||
29 | }, | 26 | }, |
30 | component: { | 27 | component: { |
31 | background: 'rgba(20, 20, 20, 0.4)', | 28 | background: 'rgba(20, 20, 20, 0.4)', |
@@ -64,14 +61,13 @@ class WorkspaceSwitchingIndicator extends Component { | |||
64 | render() { | 61 | render() { |
65 | const { classes, theme } = this.props; | 62 | const { classes, theme } = this.props; |
66 | const { intl } = this.context; | 63 | const { intl } = this.context; |
67 | const { isSwitchingWorkspace, isWorkspaceDrawerOpen, nextWorkspace } = workspaceStore; | 64 | const { isSwitchingWorkspace, nextWorkspace } = workspaceStore; |
68 | if (!isSwitchingWorkspace) return null; | 65 | if (!isSwitchingWorkspace) return null; |
69 | const nextWorkspaceName = nextWorkspace ? nextWorkspace.name : 'All services'; | 66 | const nextWorkspaceName = nextWorkspace ? nextWorkspace.name : 'All services'; |
70 | return ( | 67 | return ( |
71 | <div | 68 | <div |
72 | className={classnames([ | 69 | className={classnames([ |
73 | classes.wrapper, | 70 | classes.wrapper, |
74 | isWorkspaceDrawerOpen ? classes.wrapperWhenDrawerIsOpen : null, | ||
75 | ])} | 71 | ])} |
76 | > | 72 | > |
77 | <div className={classes.component}> | 73 | <div className={classes.component}> |
diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js index 9b51f2602..977b23999 100644 --- a/src/features/workspaces/components/WorkspacesDashboard.js +++ b/src/features/workspaces/components/WorkspacesDashboard.js | |||
@@ -1,9 +1,9 @@ | |||
1 | import React, { Component, Fragment } from 'react'; | 1 | import React, { Component, Fragment } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; |
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import injectSheet from 'react-jss'; | 5 | import injectSheet from 'react-jss'; |
6 | import { Infobox } from '@meetfranz/ui'; | 6 | import { Infobox, Badge } from '@meetfranz/ui'; |
7 | 7 | ||
8 | import Loader from '../../../components/ui/Loader'; | 8 | import Loader from '../../../components/ui/Loader'; |
9 | import WorkspaceItem from './WorkspaceItem'; | 9 | import WorkspaceItem from './WorkspaceItem'; |
@@ -11,7 +11,9 @@ import CreateWorkspaceForm from './CreateWorkspaceForm'; | |||
11 | import Request from '../../../stores/lib/Request'; | 11 | import Request from '../../../stores/lib/Request'; |
12 | import Appear from '../../../components/ui/effects/Appear'; | 12 | import Appear from '../../../components/ui/effects/Appear'; |
13 | import { workspaceStore } from '../index'; | 13 | import { workspaceStore } from '../index'; |
14 | import PremiumFeatureContainer from '../../../components/ui/PremiumFeatureContainer'; | 14 | import UIStore from '../../../stores/UIStore'; |
15 | import globalMessages from '../../../i18n/globalMessages'; | ||
16 | import UpgradeButton from '../../../components/ui/UpgradeButton'; | ||
15 | 17 | ||
16 | const messages = defineMessages({ | 18 | const messages = defineMessages({ |
17 | headline: { | 19 | headline: { |
@@ -48,7 +50,7 @@ const messages = defineMessages({ | |||
48 | }, | 50 | }, |
49 | }); | 51 | }); |
50 | 52 | ||
51 | const styles = theme => ({ | 53 | const styles = () => ({ |
52 | table: { | 54 | table: { |
53 | width: '100%', | 55 | width: '100%', |
54 | '& td': { | 56 | '& td': { |
@@ -62,17 +64,28 @@ const styles = theme => ({ | |||
62 | height: 'auto', | 64 | height: 'auto', |
63 | }, | 65 | }, |
64 | premiumAnnouncement: { | 66 | premiumAnnouncement: { |
65 | padding: '20px', | ||
66 | backgroundColor: '#3498db', | ||
67 | marginLeft: '-20px', | ||
68 | marginBottom: '20px', | ||
69 | height: 'auto', | 67 | height: 'auto', |
70 | color: 'white', | 68 | }, |
71 | borderRadius: theme.borderRadius, | 69 | premiumAnnouncementContainer: { |
70 | display: 'flex', | ||
71 | }, | ||
72 | announcementHeadline: { | ||
73 | marginBottom: 0, | ||
74 | }, | ||
75 | teaserImage: { | ||
76 | width: 250, | ||
77 | margin: [-8, 0, 0, 20], | ||
78 | alignSelf: 'center', | ||
79 | }, | ||
80 | upgradeCTA: { | ||
81 | margin: [40, 'auto'], | ||
82 | }, | ||
83 | proRequired: { | ||
84 | margin: [10, 0, 40], | ||
72 | }, | 85 | }, |
73 | }); | 86 | }); |
74 | 87 | ||
75 | @injectSheet(styles) @observer | 88 | @inject('stores') @injectSheet(styles) @observer |
76 | class WorkspacesDashboard extends Component { | 89 | class WorkspacesDashboard extends Component { |
77 | static propTypes = { | 90 | static propTypes = { |
78 | classes: PropTypes.object.isRequired, | 91 | classes: PropTypes.object.isRequired, |
@@ -100,7 +113,9 @@ class WorkspacesDashboard extends Component { | |||
100 | onWorkspaceClick, | 113 | onWorkspaceClick, |
101 | workspaces, | 114 | workspaces, |
102 | } = this.props; | 115 | } = this.props; |
116 | |||
103 | const { intl } = this.context; | 117 | const { intl } = this.context; |
118 | |||
104 | return ( | 119 | return ( |
105 | <div className="settings__main"> | 120 | <div className="settings__main"> |
106 | <div className="settings__header"> | 121 | <div className="settings__header"> |
@@ -138,68 +153,80 @@ class WorkspacesDashboard extends Component { | |||
138 | 153 | ||
139 | {workspaceStore.isPremiumUpgradeRequired && ( | 154 | {workspaceStore.isPremiumUpgradeRequired && ( |
140 | <div className={classes.premiumAnnouncement}> | 155 | <div className={classes.premiumAnnouncement}> |
141 | <h2>{intl.formatMessage(messages.workspaceFeatureHeadline)}</h2> | 156 | |
142 | <p>{intl.formatMessage(messages.workspaceFeatureInfo)}</p> | 157 | <h1 className={classes.announcementHeadline}>{intl.formatMessage(messages.workspaceFeatureHeadline)}</h1> |
158 | <Badge className={classes.proRequired}>{intl.formatMessage(globalMessages.proRequired)}</Badge> | ||
159 | <div className={classes.premiumAnnouncementContainer}> | ||
160 | <div className={classes.premiumAnnouncementContent}> | ||
161 | <p>{intl.formatMessage(messages.workspaceFeatureInfo)}</p> | ||
162 | <UpgradeButton | ||
163 | className={classes.upgradeCTA} | ||
164 | gaEventInfo={{ category: 'Workspaces', event: 'upgrade' }} | ||
165 | short | ||
166 | requiresPro | ||
167 | /> | ||
168 | </div> | ||
169 | <img src={`https://cdn.franzinfra.com/announcements/assets/workspaces_${this.props.stores.ui.isDarkThemeActive ? 'dark' : 'light'}.png`} className={classes.teaserImage} alt="" /> | ||
170 | </div> | ||
143 | </div> | 171 | </div> |
144 | )} | 172 | )} |
145 | 173 | ||
146 | <PremiumFeatureContainer | 174 | {!workspaceStore.isPremiumUpgradeRequired && ( |
147 | condition={workspaceStore.isPremiumFeature} | 175 | <> |
148 | gaEventInfo={{ category: 'User', event: 'upgrade', label: 'workspaces' }} | 176 | {/* ===== Create workspace form ===== */} |
149 | > | 177 | <div className={classes.createForm}> |
150 | {/* ===== Create workspace form ===== */} | 178 | <CreateWorkspaceForm |
151 | <div className={classes.createForm}> | 179 | isSubmitting={createWorkspaceRequest.isExecuting} |
152 | <CreateWorkspaceForm | 180 | onSubmit={onCreateWorkspaceSubmit} |
153 | isSubmitting={createWorkspaceRequest.isExecuting} | 181 | /> |
154 | onSubmit={onCreateWorkspaceSubmit} | 182 | </div> |
155 | /> | 183 | {getUserWorkspacesRequest.isExecuting ? ( |
156 | </div> | 184 | <Loader /> |
157 | {getUserWorkspacesRequest.isExecuting ? ( | 185 | ) : ( |
158 | <Loader /> | 186 | <Fragment> |
159 | ) : ( | 187 | {/* ===== Workspace could not be loaded error ===== */} |
160 | <Fragment> | 188 | {getUserWorkspacesRequest.error ? ( |
161 | {/* ===== Workspace could not be loaded error ===== */} | 189 | <Infobox |
162 | {getUserWorkspacesRequest.error ? ( | 190 | icon="alert" |
163 | <Infobox | 191 | type="danger" |
164 | icon="alert" | 192 | ctaLabel={intl.formatMessage(messages.tryReloadWorkspaces)} |
165 | type="danger" | 193 | ctaLoading={getUserWorkspacesRequest.isExecuting} |
166 | ctaLabel={intl.formatMessage(messages.tryReloadWorkspaces)} | 194 | ctaOnClick={getUserWorkspacesRequest.retry} |
167 | ctaLoading={getUserWorkspacesRequest.isExecuting} | 195 | > |
168 | ctaOnClick={getUserWorkspacesRequest.retry} | 196 | {intl.formatMessage(messages.workspacesRequestFailed)} |
169 | > | 197 | </Infobox> |
170 | {intl.formatMessage(messages.workspacesRequestFailed)} | 198 | ) : ( |
171 | </Infobox> | 199 | <Fragment> |
172 | ) : ( | 200 | {workspaces.length === 0 ? ( |
173 | <Fragment> | 201 | <div className="align-middle settings__empty-state"> |
174 | {workspaces.length === 0 ? ( | 202 | {/* ===== Workspaces empty state ===== */} |
175 | <div className="align-middle settings__empty-state"> | 203 | <p className="settings__empty-text"> |
176 | {/* ===== Workspaces empty state ===== */} | 204 | <span className="emoji"> |
177 | <p className="settings__empty-text"> | 205 | <img src="./assets/images/emoji/sad.png" alt="" /> |
178 | <span className="emoji"> | 206 | </span> |
179 | <img src="./assets/images/emoji/sad.png" alt="" /> | 207 | {intl.formatMessage(messages.noServicesAdded)} |
180 | </span> | 208 | </p> |
181 | {intl.formatMessage(messages.noServicesAdded)} | 209 | </div> |
182 | </p> | 210 | ) : ( |
183 | </div> | 211 | <table className={classes.table}> |
184 | ) : ( | 212 | {/* ===== Workspaces list ===== */} |
185 | <table className={classes.table}> | 213 | <tbody> |
186 | {/* ===== Workspaces list ===== */} | 214 | {workspaces.map(workspace => ( |
187 | <tbody> | 215 | <WorkspaceItem |
188 | {workspaces.map(workspace => ( | 216 | key={workspace.id} |
189 | <WorkspaceItem | 217 | workspace={workspace} |
190 | key={workspace.id} | 218 | onItemClick={w => onWorkspaceClick(w)} |
191 | workspace={workspace} | 219 | /> |
192 | onItemClick={w => onWorkspaceClick(w)} | 220 | ))} |
193 | /> | 221 | </tbody> |
194 | ))} | 222 | </table> |
195 | </tbody> | 223 | )} |
196 | </table> | 224 | </Fragment> |
197 | )} | 225 | )} |
198 | </Fragment> | 226 | </Fragment> |
199 | )} | 227 | )} |
200 | </Fragment> | 228 | </> |
201 | )} | 229 | )} |
202 | </PremiumFeatureContainer> | ||
203 | </div> | 230 | </div> |
204 | </div> | 231 | </div> |
205 | ); | 232 | ); |
@@ -207,3 +234,9 @@ class WorkspacesDashboard extends Component { | |||
207 | } | 234 | } |
208 | 235 | ||
209 | export default WorkspacesDashboard; | 236 | export default WorkspacesDashboard; |
237 | |||
238 | WorkspacesDashboard.wrappedComponent.propTypes = { | ||
239 | stores: PropTypes.shape({ | ||
240 | ui: PropTypes.instanceOf(UIStore).isRequired, | ||
241 | }).isRequired, | ||
242 | }; | ||
diff --git a/src/features/workspaces/containers/WorkspacesScreen.js b/src/features/workspaces/containers/WorkspacesScreen.js index 2ab565fa1..affbd230d 100644 --- a/src/features/workspaces/containers/WorkspacesScreen.js +++ b/src/features/workspaces/containers/WorkspacesScreen.js | |||
@@ -11,7 +11,7 @@ import { | |||
11 | updateWorkspaceRequest, | 11 | updateWorkspaceRequest, |
12 | } from '../api'; | 12 | } from '../api'; |
13 | 13 | ||
14 | @inject('actions') @observer | 14 | @inject('stores', 'actions') @observer |
15 | class WorkspacesScreen extends Component { | 15 | class WorkspacesScreen extends Component { |
16 | static propTypes = { | 16 | static propTypes = { |
17 | actions: PropTypes.shape({ | 17 | actions: PropTypes.shape({ |
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js index a82f6895c..4a1f80b4e 100644 --- a/src/features/workspaces/store.js +++ b/src/features/workspaces/store.js | |||
@@ -253,11 +253,10 @@ export default class WorkspacesStore extends FeatureStore { | |||
253 | }; | 253 | }; |
254 | 254 | ||
255 | _setIsPremiumFeatureReaction = () => { | 255 | _setIsPremiumFeatureReaction = () => { |
256 | const { features, user } = this.stores; | 256 | const { features } = this.stores; |
257 | const { isPremium } = user.data; | 257 | const { isWorkspaceIncludedInCurrentPlan } = features.features; |
258 | const { isWorkspacePremiumFeature } = features.features; | 258 | this.isPremiumFeature = !isWorkspaceIncludedInCurrentPlan; |
259 | this.isPremiumFeature = isWorkspacePremiumFeature; | 259 | this.isPremiumUpgradeRequired = !isWorkspaceIncludedInCurrentPlan; |
260 | this.isPremiumUpgradeRequired = isWorkspacePremiumFeature && !isPremium; | ||
261 | }; | 260 | }; |
262 | 261 | ||
263 | _setWorkspaceBeingEditedReaction = () => { | 262 | _setWorkspaceBeingEditedReaction = () => { |
diff --git a/src/helpers/plan-helpers.js b/src/helpers/plan-helpers.js new file mode 100644 index 000000000..e0f1fd89a --- /dev/null +++ b/src/helpers/plan-helpers.js | |||
@@ -0,0 +1,45 @@ | |||
1 | import { defineMessages } from 'react-intl'; | ||
2 | import { PLANS_MAPPING, PLANS } from '../config'; | ||
3 | |||
4 | const messages = defineMessages({ | ||
5 | [PLANS.PRO]: { | ||
6 | id: 'pricing.plan.pro', | ||
7 | defaultMessage: '!!!Franz Professional', | ||
8 | }, | ||
9 | [PLANS.PERSONAL]: { | ||
10 | id: 'pricing.plan.personal', | ||
11 | defaultMessage: '!!!Franz Personal', | ||
12 | }, | ||
13 | [PLANS.FREE]: { | ||
14 | id: 'pricing.plan.free', | ||
15 | defaultMessage: '!!!Franz Free', | ||
16 | }, | ||
17 | [PLANS.LEGACY]: { | ||
18 | id: 'pricing.plan.legacy', | ||
19 | defaultMessage: '!!!Franz Premium', | ||
20 | }, | ||
21 | }); | ||
22 | |||
23 | export function i18nPlanName(planId, intl) { | ||
24 | if (!planId) { | ||
25 | throw new Error('planId is required'); | ||
26 | } | ||
27 | |||
28 | if (!intl) { | ||
29 | throw new Error('intl context is required'); | ||
30 | } | ||
31 | |||
32 | const plan = PLANS_MAPPING[planId]; | ||
33 | |||
34 | return intl.formatMessage(messages[plan]); | ||
35 | } | ||
36 | |||
37 | export function getPlan(planId) { | ||
38 | if (!planId) { | ||
39 | throw new Error('planId is required'); | ||
40 | } | ||
41 | |||
42 | const plan = PLANS_MAPPING[planId]; | ||
43 | |||
44 | return plan; | ||
45 | } | ||
diff --git a/src/i18n/globalMessages.js b/src/i18n/globalMessages.js index adf2cc306..86fb9e18d 100644 --- a/src/i18n/globalMessages.js +++ b/src/i18n/globalMessages.js | |||
@@ -25,4 +25,8 @@ export default defineMessages({ | |||
25 | id: 'global.spellchecking.autodetect.short', | 25 | id: 'global.spellchecking.autodetect.short', |
26 | defaultMessage: '!!!Automatic', | 26 | defaultMessage: '!!!Automatic', |
27 | }, | 27 | }, |
28 | proRequired: { | ||
29 | id: 'global.franzProRequired', | ||
30 | defaultMessage: '!!!Franz Professional Required', | ||
31 | }, | ||
28 | }); | 32 | }); |
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json index 5b63b97fb..3da31b68e 100644 --- a/src/i18n/locales/ca.json +++ b/src/i18n/locales/ca.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Recarrega", | 2 | "app.errorHandler.action" : "Recarrega", |
3 | "app.errorHandler.headline" : "Quelcom ha anat malament", | 3 | "app.errorHandler.headline" : "Quelcom ha anat malament", |
4 | "feature.announcements.changelog.headline" : "Canvis en Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Canvis en Franz {version}", |
5 | "feature.delayApp.action" : "Aconsegueix una llicència de suport per a Franz", | 5 | "feature.delayApp.headline" : "Si us plau, compra una llicència de suport per a Franz per saltar l'espera", |
6 | "feature.delayApp.headline" : "Si us plau, compra una llicència de suport per a Ferdi per saltar l'espera", | 6 | "feature.delayApp.text" : "Franz continuarà en {seconds} segons", |
7 | "feature.delayApp.text" : "Ferdi continuarà en {seconds} segons", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Aconsegueix una llicència de suport per a Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Millorar el teu compte", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Envia com a correu", | 13 | "feature.shareFranz.action.email" : "Envia com a correu", |
9 | "feature.shareFranz.action.facebook" : "Compartir en Facebook", | 14 | "feature.shareFranz.action.facebook" : "Compartir en Facebook", |
10 | "feature.shareFranz.action.twitter" : "Compartir a Twitter", | 15 | "feature.shareFranz.action.twitter" : "Compartir a Twitter", |
11 | "feature.shareFranz.headline" : "Junts millorem Franz!", | 16 | "feature.shareFranz.headline" : "Junts millorem Franz!", |
12 | "feature.shareFranz.shareText.email" : "He afegit {count} serveis a Franz! Obtén l'aplicació gratuïta per a Whatsapp, Messenger, Slack, Skype a www,meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "He afegit {count} serveis a Franz! Obtén l'aplicació gratuïta per a Whatsapp, Messenger, Slack, Skype a www,meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "He afegit {count} serveis a Franz! Obtén l'aplicació gratuïta de Whatsapp, Messenger, Slack, Skype i altres a www.meetfranz.com\/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "He afegit {count} serveis a Franz! Obtén l'aplicació gratuïta de Whatsapp, Messenger, Slack, Skype i altres a www.meetfranz.com\/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Digues als teus amics i col·legues l'increïble que és Ferdi i ajuda'ns a còrrer la veu ", | 19 | "feature.shareFranz.text" : "Digues als teus amics i col·legues l'increïble que és Franz i ajuda'ns a còrrer la veu ", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "No es pot connectar amb els serveis en lÃnia de Franz", | 23 | "global.api.unhealthy" : "No es pot connectar amb els serveis en lÃnia de Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "No esteu connectat a Internet.", | 25 | "global.notConnectedToTheInternet" : "No esteu connectat a Internet.", |
17 | "global.spellchecker.useDefault" : "Utilitzar el predeterminat del sistema ({default})", | 26 | "global.spellchecker.useDefault" : "Utilitzar el predeterminat del sistema ({default})", |
18 | "global.spellchecking.autodetect" : "Detectar l'idioma automà ticament", | 27 | "global.spellchecking.autodetect" : "Detectar l'idioma automà ticament", |
19 | "global.spellchecking.autodetect.short" : "Automà tic", | 28 | "global.spellchecking.autodetect.short" : "Automà tic", |
20 | "global.spellchecking.language" : "Corrector ortogrà fic", | 29 | "global.spellchecking.language" : "Corrector ortogrà fic", |
21 | "import.headline" : "Importa els teus serveis Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Serveis que encara no s'admeten a Ferdi 5", | 31 | "import.headline" : "Importa els teus serveis Franz 4", |
32 | "import.notSupportedHeadline" : "Serveis que encara no s'admeten a Franz 5", | ||
23 | "import.skip.label" : "Vull afegir serveis manualment", | 33 | "import.skip.label" : "Vull afegir serveis manualment", |
24 | "import.submit.label" : "Importa serveis", | 34 | "import.submit.label" : "Importa serveis", |
25 | "infobar.buttonChangelog" : "Que hi ha de nou?", | 35 | "infobar.buttonChangelog" : "Que hi ha de nou?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Recarrega els serveis", | 37 | "infobar.buttonReloadServices" : "Recarrega els serveis", |
28 | "infobar.requiredRequestsFailed" : "No s'han pogut carregar els serveis i la informació de l'usuari", | 38 | "infobar.requiredRequestsFailed" : "No s'han pogut carregar els serveis i la informació de l'usuari", |
29 | "infobar.servicesUpdated" : "Els teus serveis s'han actualitzat.", | 39 | "infobar.servicesUpdated" : "Els teus serveis s'han actualitzat.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Hi ha disponible una nova actualització per a Franz.", | 41 | "infobar.updateAvailable" : "Hi ha disponible una nova actualització per a Franz.", |
31 | "invite.email.label" : "Correu electrònic", | 42 | "invite.email.label" : "Correu electrònic", |
32 | "invite.headline.friends" : "Convida a tres dels teus amics o companys", | 43 | "invite.headline.friends" : "Convida a tres dels teus amics o companys", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "La teva sessió ha caducat, torna-la a iniciar.", | 54 | "login.serverLogout" : "La teva sessió ha caducat, torna-la a iniciar.", |
44 | "login.submit.label" : "Accedir", | 55 | "login.submit.label" : "Accedir", |
45 | "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.", | 56 | "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Sobre Franz", | 59 | "menu.app.about" : "Sobre Franz", |
47 | "menu.app.announcement" : "Què hi ha de nou?", | 60 | "menu.app.announcement" : "Què hi ha de nou?", |
48 | "menu.app.checkForUpdates" : "Comprova si hi ha actualitzacions", | 61 | "menu.app.checkForUpdates" : "Comprova si hi ha actualitzacions", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Fitxer", | 81 | "menu.file" : "Fitxer", |
69 | "menu.help" : "Ajuda", | 82 | "menu.help" : "Ajuda", |
70 | "menu.help.changelog" : "Registre de canvis", | 83 | "menu.help.changelog" : "Registre de canvis", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Conegueu-ne més detalls", | 87 | "menu.help.learnMore" : "Conegueu-ne més detalls", |
72 | "menu.help.privacy" : "Declaració de privacitat", | 88 | "menu.help.privacy" : "Declaració de privacitat", |
73 | "menu.help.support" : "Suport", | 89 | "menu.help.support" : "Suport", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Afegeix un servei...", | 93 | "menu.services.addNewService" : "Afegeix un servei...", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Visualitza", | 96 | "menu.view" : "Visualitza", |
80 | "menu.view.enterFullScreen" : "Inicia la pantalla completa", | 97 | "menu.view.enterFullScreen" : "Inicia la pantalla completa", |
81 | "menu.view.exitFullScreen" : "Surt de pantalla completa", | 98 | "menu.view.exitFullScreen" : "Surt de pantalla completa", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Activa serveis per a desenvolupadors", | 102 | "menu.view.toggleDevTools" : "Activa serveis per a desenvolupadors", |
86 | "menu.view.toggleFullScreen" : "Activa la pantalla completa", | 103 | "menu.view.toggleFullScreen" : "Activa la pantalla completa", |
87 | "menu.view.toggleServiceDevTools" : "Habilita les eines de desenvolupador de serveis", | 104 | "menu.view.toggleServiceDevTools" : "Habilita les eines de desenvolupador de serveis", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Amplia", | 106 | "menu.view.zoomIn" : "Amplia", |
89 | "menu.view.zoomOut" : "Redueix", | 107 | "menu.view.zoomOut" : "Redueix", |
90 | "menu.window" : "Finestra", | 108 | "menu.window" : "Finestra", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Enviar", | 121 | "password.submit.label" : "Enviar", |
104 | "password.successInfo" : "Comproveu el vostre correu electrònic", | 122 | "password.successInfo" : "Comproveu el vostre correu electrònic", |
105 | "premiumFeature.button.upgradeAccount" : "Millorar el teu compte", | 123 | "premiumFeature.button.upgradeAccount" : "Millorar el teu compte", |
106 | "pricing.headline" : "Donar suport a Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "No vull donar suport al desenvolupament de Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Vull donar suport al desenvolupament de Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Seleccioneu el vostre pla de suport", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Recarrega {name}", | 151 | "service.crashHandler.action" : "Recarrega {name}", |
111 | "service.crashHandler.autoReload" : "Intentant restablir automà ticament {name} en {seconds} segons", | 152 | "service.crashHandler.autoReload" : "Intentant restablir automà ticament {name} en {seconds} segons", |
112 | "service.crashHandler.headline" : "Oh no!", | 153 | "service.crashHandler.headline" : "Oh no!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh no!", | 159 | "service.errorHandler.headline" : "Oh no!", |
119 | "service.errorHandler.message" : "Error", | 160 | "service.errorHandler.message" : "Error", |
120 | "service.errorHandler.text" : "{name} ha fallat al carregar", | 161 | "service.errorHandler.text" : "{name} ha fallat al carregar", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "Introducció", | 168 | "services.getStarted" : "Introducció", |
123 | "services.welcome" : "Benvingut a Franz", | 169 | "services.welcome" : "Benvingut a Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Canvia la contrasenya", | 181 | "settings.account.headlinePassword" : "Canvia la contrasenya", |
136 | "settings.account.headlineProfile" : "Actualitza el perfil", | 182 | "settings.account.headlineProfile" : "Actualitza el perfil", |
137 | "settings.account.headlineSubscription" : "La vostra subscripció", | 183 | "settings.account.headlineSubscription" : "La vostra subscripció", |
138 | "settings.account.headlineUpgrade" : "Actualitzeu el vostre compte i doneu suport a Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Descarregar", | 186 | "settings.account.invoiceDownload" : "Descarregar", |
140 | "settings.account.manageSubscription.label" : "Gestioneu la vostra subscripció", | 187 | "settings.account.manageSubscription.label" : "Gestioneu la vostra subscripció", |
141 | "settings.account.successInfo" : "S'han desat els canvis", | 188 | "settings.account.successInfo" : "S'han desat els canvis", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Torna a provar-ho", | 192 | "settings.account.tryReloadServices" : "Torna a provar-ho", |
143 | "settings.account.tryReloadUserInfoRequest" : "Torna a provar-ho", | 193 | "settings.account.tryReloadUserInfoRequest" : "Torna a provar-ho", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "No s'ha pogut carregar la informació de l'usuari", | 195 | "settings.account.userInfoRequestFailed" : "No s'ha pogut carregar la informació de l'usuari", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Buida la memòria cau", | 197 | "settings.app.buttonClearAllCache" : "Buida la memòria cau", |
146 | "settings.app.buttonInstallUpdate" : "Reinicia i instal·la l'actualització", | 198 | "settings.app.buttonInstallUpdate" : "Reinicia i instal·la l'actualització", |
147 | "settings.app.buttonSearchForUpdate" : "Comprova si hi ha actualitzacions", | 199 | "settings.app.buttonSearchForUpdate" : "Comprova si hi ha actualitzacions", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Uneix-te al Cantó Fosc", | 205 | "settings.app.form.darkMode" : "Uneix-te al Cantó Fosc", |
154 | "settings.app.form.enableGPUAcceleration" : "Activar acceleració GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Activar acceleració GPU", |
155 | "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogrà fica", | 207 | "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogrà fica", |
156 | "settings.app.form.enableSystemTray" : "Mostra Ferdi a la safata del sistema", | 208 | "settings.app.form.enableSystemTray" : "Mostra Franz a la safata del sistema", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Idioma", | 210 | "settings.app.form.language" : "Idioma", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimitza Ferdi a la safata del sistema", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimitza Ferdi a la safata del sistema", |
159 | "settings.app.form.runInBackground" : "Mantén a Ferdi en segon pla en tancar la finestra", | 212 | "settings.app.form.runInBackground" : "Mantén a Ferdi en segon pla en tancar la finestra", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Els vostres serveis", | 235 | "settings.navigation.yourServices" : "Els vostres serveis", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Tots els serveis", | 237 | "settings.recipes.all" : "Tots els serveis", |
185 | "settings.recipes.dev" : "Desenvolupament", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Serveis disponibles", | 245 | "settings.recipes.headline" : "Serveis disponibles", |
187 | "settings.recipes.missingService" : "Trobes a faltar algun servei?", | 246 | "settings.recipes.missingService" : "Trobes a faltar algun servei?", |
188 | "settings.recipes.mostPopular" : "Els més populars", | 247 | "settings.recipes.mostPopular" : "Els més populars", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Configuració", | 334 | "sidebar.settings" : "Configuració", |
276 | "sidebar.unmuteApp" : "Activar notificacions i à udio", | 335 | "sidebar.unmuteApp" : "Activar notificacions i à udio", |
277 | "signup.company.label" : "Empresa", | ||
278 | "signup.email.label" : "Correu electrònic", | 336 | "signup.email.label" : "Correu electrònic", |
279 | "signup.emailDuplicate" : "Ja existeix un usuari amb aquesta adreça de correu electrònic", | 337 | "signup.emailDuplicate" : "Ja existeix un usuari amb aquesta adreça de correu electrònic", |
280 | "signup.firstname.label" : "Nom", | 338 | "signup.firstname.label" : "Nom", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "gratuït", | 358 | "subscription.type.free" : "gratuït", |
301 | "subscription.type.month" : "mes", | 359 | "subscription.type.month" : "mes", |
302 | "subscription.type.year" : "any", | 360 | "subscription.type.year" : "any", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Cancel·la", | 367 | "subscriptionPopup.buttonCancel" : "Cancel·la", |
304 | "subscriptionPopup.buttonDone" : "Fet", | 368 | "subscriptionPopup.buttonDone" : "Fet", |
305 | "tabs.item.deleteService" : "Suprimeix el servei", | 369 | "tabs.item.deleteService" : "Suprimeix el servei", |
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json index e36f10d5e..5a4c4c428 100644 --- a/src/i18n/locales/cs.json +++ b/src/i18n/locales/cs.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Obnovit", | 2 | "app.errorHandler.action" : "Obnovit", |
3 | "app.errorHandler.headline" : "Něco se pokazilo", | 3 | "app.errorHandler.headline" : "Něco se pokazilo", |
4 | "feature.announcements.changelog.headline" : "Změny ve Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Změny ve Franz {version}", |
5 | "feature.delayApp.action" : "PodpoÅ™ Ferdi a zÃskej Supporter licenci", | 5 | "feature.delayApp.headline" : "Kup si Franz Supporter licenci a nebudeÅ¡ už muset Äekat", |
6 | "feature.delayApp.headline" : "Kup si Ferdi Supporter licenci a nebudeÅ¡ už muset Äekat", | 6 | "feature.delayApp.text" : "Franz bude pokraÄovat v {seconds} sekundách.", |
7 | "feature.delayApp.text" : "Ferdi bude pokraÄovat v {seconds} sekundách.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "PodpoÅ™ Franz a zÃskej Supporter licenci", | ||
11 | "feature.delayApp.upgrade.actionShort" : "VylepÅ¡i si svůj úÄet", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Poslat jako e-mail", | 13 | "feature.shareFranz.action.email" : "Poslat jako e-mail", |
9 | "feature.shareFranz.action.facebook" : "SdÃlet na Facebooku", | 14 | "feature.shareFranz.action.facebook" : "SdÃlet na Facebooku", |
10 | "feature.shareFranz.action.twitter" : "SdÃlet na Twitteru", | 15 | "feature.shareFranz.action.twitter" : "SdÃlet na Twitteru", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "SpoleÄnÄ› je Franz jeÅ¡tÄ› lepÅ¡Ã!", |
12 | "feature.shareFranz.shareText.email" : "PÅ™idali jsme {count} služeb do Franze. ZÃskejte zdarma aplikace pro WhatsApp, Messenger, SLack, Skype a dalÅ¡Ã na www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "PÅ™idali jsme {count} služeb do Franze. ZÃskejte zdarma aplikace pro WhatsApp, Messenger, SLack, Skype a dalÅ¡Ã na www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
15 | "global.api.unhealthy" : "Nemůžeme připojit Ferdi k online službám", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Nemůžeme připojit Franz k online službám", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Připojenà k internetu nenà k dispozici.", | 25 | "global.notConnectedToTheInternet" : "Připojenà k internetu nenà k dispozici.", |
17 | "global.spellchecker.useDefault" : "Use System Default ({default})", | 26 | "global.spellchecker.useDefault" : "Use System Default ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Oprava překlepů jazyka", | 29 | "global.spellchecking.language" : "Oprava překlepů jazyka", |
21 | "import.headline" : "Importovat služby z Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Služby nejsou podporovány ve verzi Ferdi 5", | 31 | "import.headline" : "Importovat služby z Franz 4", |
32 | "import.notSupportedHeadline" : "Služby nejsou podporovány ve verzi Franz 5", | ||
23 | "import.skip.label" : "Chci pÅ™idat službu ruÄnÄ›", | 33 | "import.skip.label" : "Chci pÅ™idat službu ruÄnÄ›", |
24 | "import.submit.label" : "Importovat služby", | 34 | "import.submit.label" : "Importovat služby", |
25 | "infobar.buttonChangelog" : "Co je nového?", | 35 | "infobar.buttonChangelog" : "Co je nového?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Obnovit služby", | 37 | "infobar.buttonReloadServices" : "Obnovit služby", |
28 | "infobar.requiredRequestsFailed" : "Nenà možné nahrát služby a informace o uživateli", | 38 | "infobar.requiredRequestsFailed" : "Nenà možné nahrát služby a informace o uživateli", |
29 | "infobar.servicesUpdated" : "Vaše služby byly aktualizovány", | 39 | "infobar.servicesUpdated" : "Vaše služby byly aktualizovány", |
30 | "infobar.updateAvailable" : "Nová aktualizace Ferdi je k dispozici", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Nová aktualizace Franz je k dispozici", | ||
31 | "invite.email.label" : "E-mailová adresa", | 42 | "invite.email.label" : "E-mailová adresa", |
32 | "invite.headline.friends" : "Pozvěte 3 přátele nebo kolegy", | 43 | "invite.headline.friends" : "Pozvěte 3 přátele nebo kolegy", |
33 | "invite.name.label" : "Jméno", | 44 | "invite.name.label" : "Jméno", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Sezenà vypršelo, je třeba se znovu přihlásit.", | 54 | "login.serverLogout" : "Sezenà vypršelo, je třeba se znovu přihlásit.", |
44 | "login.submit.label" : "Přihlásit se", | 55 | "login.submit.label" : "Přihlásit se", |
45 | "login.tokenExpired" : "Sezenà vyprÅ¡elo, prosÃm pÅ™ihlaste se znovu", | 56 | "login.tokenExpired" : "Sezenà vyprÅ¡elo, prosÃm pÅ™ihlaste se znovu", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "O aplikaci", | 59 | "menu.app.about" : "O aplikaci", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "Zkontrolovat aktualizace", | 61 | "menu.app.checkForUpdates" : "Zkontrolovat aktualizace", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Soubor", | 81 | "menu.file" : "Soubor", |
69 | "menu.help" : "Nápověda", | 82 | "menu.help" : "Nápověda", |
70 | "menu.help.changelog" : "Seznam změn", | 83 | "menu.help.changelog" : "Seznam změn", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "DozvÄ›dÄ›t se vÃce", | 87 | "menu.help.learnMore" : "DozvÄ›dÄ›t se vÃce", |
72 | "menu.help.privacy" : "Prohlášenà o ochranÄ› soukromÃ", | 88 | "menu.help.privacy" : "Prohlášenà o ochranÄ› soukromÃ", |
73 | "menu.help.support" : "Podpora", | 89 | "menu.help.support" : "Podpora", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Přidat novou službu...", | 93 | "menu.services.addNewService" : "Přidat novou službu...", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "ZobrazenÃ", | 96 | "menu.view" : "ZobrazenÃ", |
80 | "menu.view.enterFullScreen" : "Spustit režim celé obrazovky", | 97 | "menu.view.enterFullScreen" : "Spustit režim celé obrazovky", |
81 | "menu.view.exitFullScreen" : "UkonÄit celoobrazovkový režim", | 98 | "menu.view.exitFullScreen" : "UkonÄit celoobrazovkový režim", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Zobrazit Vývojářské nástroje", | 102 | "menu.view.toggleDevTools" : "Zobrazit Vývojářské nástroje", |
86 | "menu.view.toggleFullScreen" : "Přepnout na celou obrazovku", | 103 | "menu.view.toggleFullScreen" : "Přepnout na celou obrazovku", |
87 | "menu.view.toggleServiceDevTools" : "Zobrazit Vývojářské nástroje pro službu", | 104 | "menu.view.toggleServiceDevTools" : "Zobrazit Vývojářské nástroje pro službu", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "PřiblÞit", | 106 | "menu.view.zoomIn" : "PřiblÞit", |
89 | "menu.view.zoomOut" : "Oddálit", | 107 | "menu.view.zoomOut" : "Oddálit", |
90 | "menu.window" : "Okno", | 108 | "menu.window" : "Okno", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Odeslat", | 121 | "password.submit.label" : "Odeslat", |
104 | "password.successInfo" : "ProsÃm, zkontrolujte svůj e-mail", | 122 | "password.successInfo" : "ProsÃm, zkontrolujte svůj e-mail", |
105 | "premiumFeature.button.upgradeAccount" : "VylepÅ¡i si svůj úÄet", | 123 | "premiumFeature.button.upgradeAccount" : "VylepÅ¡i si svůj úÄet", |
106 | "pricing.headline" : "Podpořit Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Nechci podporovat vývoj aplikace Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Chci podpořit vývoj aplikace Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Vyberte váš plán podpory", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "NaÄÃst znovu {name}", | 151 | "service.crashHandler.action" : "NaÄÃst znovu {name}", |
111 | "service.crashHandler.autoReload" : "Pokus o automatické obnovenà {name} za {seconds} sekund", | 152 | "service.crashHandler.autoReload" : "Pokus o automatické obnovenà {name} za {seconds} sekund", |
112 | "service.crashHandler.headline" : "Ale ne!", | 153 | "service.crashHandler.headline" : "Ale ne!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Ale ne!", | 159 | "service.errorHandler.headline" : "Ale ne!", |
119 | "service.errorHandler.message" : "Chyba", | 160 | "service.errorHandler.message" : "Chyba", |
120 | "service.errorHandler.text" : "{name} se nepodaÅ™ilo naÄÃst.", | 161 | "service.errorHandler.text" : "{name} se nepodaÅ™ilo naÄÃst.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "ZaÄnÄ›me", | 168 | "services.getStarted" : "ZaÄnÄ›me", |
123 | "services.welcome" : "VÃtejte v programu Franz", | 169 | "services.welcome" : "VÃtejte v programu Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Změnit heslo", | 181 | "settings.account.headlinePassword" : "Změnit heslo", |
136 | "settings.account.headlineProfile" : "Aktualizovat profil", | 182 | "settings.account.headlineProfile" : "Aktualizovat profil", |
137 | "settings.account.headlineSubscription" : "Vaše předplatné", | 183 | "settings.account.headlineSubscription" : "Vaše předplatné", |
138 | "settings.account.headlineUpgrade" : "Aktualizujte svůj úÄet a podpoÅ™te Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Stáhnout", | 186 | "settings.account.invoiceDownload" : "Stáhnout", |
140 | "settings.account.manageSubscription.label" : "Spravovat vaše předplatné", | 187 | "settings.account.manageSubscription.label" : "Spravovat vaše předplatné", |
141 | "settings.account.successInfo" : "Vaše změny byly uloženy", | 188 | "settings.account.successInfo" : "Vaše změny byly uloženy", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Zkusit opět", | 192 | "settings.account.tryReloadServices" : "Zkusit opět", |
143 | "settings.account.tryReloadUserInfoRequest" : "Zkusit znovu", | 193 | "settings.account.tryReloadUserInfoRequest" : "Zkusit znovu", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Nelze naÄÃst informace o uživateli.", | 195 | "settings.account.userInfoRequestFailed" : "Nelze naÄÃst informace o uživateli.", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Vyprázdnit mezipaměti", | 197 | "settings.app.buttonClearAllCache" : "Vyprázdnit mezipaměti", |
146 | "settings.app.buttonInstallUpdate" : "Restartovat a nainstalovat aktualizace", | 198 | "settings.app.buttonInstallUpdate" : "Restartovat a nainstalovat aktualizace", |
147 | "settings.app.buttonSearchForUpdate" : "Zkontrolovat aktualizace", | 199 | "settings.app.buttonSearchForUpdate" : "Zkontrolovat aktualizace", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Připoj se k Temné straně", | 205 | "settings.app.form.darkMode" : "Připoj se k Temné straně", |
154 | "settings.app.form.enableGPUAcceleration" : "Aktivovat GPU zrychlenÃ", | 206 | "settings.app.form.enableGPUAcceleration" : "Aktivovat GPU zrychlenÃ", |
155 | "settings.app.form.enableSpellchecking" : "Zapnout kontrolu pravopisu", | 207 | "settings.app.form.enableSpellchecking" : "Zapnout kontrolu pravopisu", |
156 | "settings.app.form.enableSystemTray" : "Zobrazit Ferdi v systémové liště", | 208 | "settings.app.form.enableSystemTray" : "Zobrazit Franz v systémové liště", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Jazyk", | 210 | "settings.app.form.language" : "Jazyk", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimalizovat Ferdi do systémové lišty", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimalizovat Ferdi do systémové lišty", |
159 | "settings.app.form.runInBackground" : "Ponechat Franze v pozadà pÅ™i zavÃránà okna", | 212 | "settings.app.form.runInBackground" : "Ponechat Franze v pozadà pÅ™i zavÃránà okna", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Vaše služby", | 235 | "settings.navigation.yourServices" : "Vaše služby", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Všechny služby", | 237 | "settings.recipes.all" : "Všechny služby", |
185 | "settings.recipes.dev" : "Vývoj", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Dostupné služby", | 245 | "settings.recipes.headline" : "Dostupné služby", |
187 | "settings.recipes.missingService" : "ChybÄ›jÃcà služba?", | 246 | "settings.recipes.missingService" : "ChybÄ›jÃcà služba?", |
188 | "settings.recipes.mostPopular" : "NejpopulárnÄ›jÅ¡Ã", | 247 | "settings.recipes.mostPopular" : "NejpopulárnÄ›jÅ¡Ã", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "NastavenÃ", | 334 | "sidebar.settings" : "NastavenÃ", |
276 | "sidebar.unmuteApp" : "Zapnout upozorněnà a zvuky", | 335 | "sidebar.unmuteApp" : "Zapnout upozorněnà a zvuky", |
277 | "signup.company.label" : "SpoleÄnost", | ||
278 | "signup.email.label" : "Emailová adresa", | 336 | "signup.email.label" : "Emailová adresa", |
279 | "signup.emailDuplicate" : "Uživatel s touto emailovou adresou již existuje", | 337 | "signup.emailDuplicate" : "Uživatel s touto emailovou adresou již existuje", |
280 | "signup.firstname.label" : "Jméno", | 338 | "signup.firstname.label" : "Jméno", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "zdarma", | 358 | "subscription.type.free" : "zdarma", |
301 | "subscription.type.month" : "mÄ›sÃc", | 359 | "subscription.type.month" : "mÄ›sÃc", |
302 | "subscription.type.year" : "rok", | 360 | "subscription.type.year" : "rok", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Zrušit", | 367 | "subscriptionPopup.buttonCancel" : "Zrušit", |
304 | "subscriptionPopup.buttonDone" : "DokonÄit", | 368 | "subscriptionPopup.buttonDone" : "DokonÄit", |
305 | "tabs.item.deleteService" : "Odstranit službu", | 369 | "tabs.item.deleteService" : "Odstranit službu", |
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 42cfb9ad1..06bdaabfe 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json | |||
@@ -1,23 +1,33 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Neu laden", | 2 | "app.errorHandler.action" : "Neu laden", |
3 | "app.errorHandler.headline" : "Es ist ein Fehler aufgetreten", | 3 | "app.errorHandler.headline" : "Es ist ein Fehler aufgetreten", |
4 | "feature.announcements.changelog.headline" : "Was ist neu in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Was ist neu in Franz {version}", |
5 | "feature.delayApp.action" : "Hol dir Ferdi Premium!", | 5 | "feature.delayApp.headline" : "Erspare dir das Warten mit Franz Premium!", |
6 | "feature.delayApp.headline" : "Erspare dir das Warten mit Ferdi Premium!", | ||
7 | "feature.delayApp.text" : "In {seconds} Sekunden geht's weiter!", | 6 | "feature.delayApp.text" : "In {seconds} Sekunden geht's weiter!", |
7 | "feature.delayApp.trial.action" : "Ja, ich möchte Franz Professional 14 Tage gratis testen", | ||
8 | "feature.delayApp.trial.actionShort" : "Aktiviere die kostenlose Franz Professional Testlizenz", | ||
9 | "feature.delayApp.trial.headline" : "Hol dir die kostenlose Franz Professional Testlizenz und es geht ohne Warten weiter!", | ||
10 | "feature.delayApp.upgrade.action" : "Hol dir Franz Premium!", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Account upgraden", | ||
12 | "feature.serviceLimit.limitReached" : "Du hast {amount} von {limit} in deiner Lizenz inkludierten Services hinzugefügt. Bitte führe ein Upgrade deines Accounts durch, um mehr Services hinzuzufügen.", | ||
8 | "feature.shareFranz.action.email" : "Als E-Mail senden", | 13 | "feature.shareFranz.action.email" : "Als E-Mail senden", |
9 | "feature.shareFranz.action.facebook" : "Auf Facebook teilen", | 14 | "feature.shareFranz.action.facebook" : "Auf Facebook teilen", |
10 | "feature.shareFranz.action.twitter" : "Auf Twitter teilen", | 15 | "feature.shareFranz.action.twitter" : "Auf Twitter teilen", |
11 | "feature.shareFranz.headline" : "Gemeinsam ist Ferdi noch besser!", | 16 | "feature.shareFranz.headline" : "Gemeinsam ist Franz noch besser!", |
12 | "feature.shareFranz.shareText.email" : "Ich habe {count} Services zu Ferdi hinzugefügt! Hol dir jetzt die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Ich habe {count} Services zu Franz hinzugefügt! Hol dir jetzt die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Ich habe {count} Services zu Ferdi hinzugefügt! Hol dir die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Ich habe {count} Services zu Franz hinzugefügt! Hol dir die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Bitte erzähle deinen Freunden und Kolleginnen, warum du Ferdi toll findest.", | 19 | "feature.shareFranz.text" : "Bitte erzähle deinen Freunden und Kolleginnen, warum du Franz toll findest.", |
20 | "feature.todos.premium.info" : "Franz ToDos sind jetzt für Premium User verfügbar!", | ||
21 | "feature.todos.premium.rollout" : "Alle anderen müssen sich noch ein wenig gedulden.", | ||
22 | "feature.todos.premium.upgrade" : "Account Upgrade", | ||
15 | "global.api.unhealthy" : "Verbindung zum Franz-Online-Service fehlgeschlagen", | 23 | "global.api.unhealthy" : "Verbindung zum Franz-Online-Service fehlgeschlagen", |
24 | "global.franzProRequired" : "Franz Professional benötigt", | ||
16 | "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.", | 25 | "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.", |
17 | "global.spellchecker.useDefault" : "Standard benutzen ({default})", | 26 | "global.spellchecker.useDefault" : "Standard benutzen ({default})", |
18 | "global.spellchecking.autodetect" : "Sprache automatisch erkennen", | 27 | "global.spellchecking.autodetect" : "Sprache automatisch erkennen", |
19 | "global.spellchecking.autodetect.short" : "Automatisch", | 28 | "global.spellchecking.autodetect.short" : "Automatisch", |
20 | "global.spellchecking.language" : "Sprache für Rechtschreibprüfung", | 29 | "global.spellchecking.language" : "Sprache für Rechtschreibprüfung", |
30 | "global.upgradeButton.upgradeToPro" : "Upgrade zu Franz Professional", | ||
21 | "import.headline" : "Deine Franz-4-Dienste importieren", | 31 | "import.headline" : "Deine Franz-4-Dienste importieren", |
22 | "import.notSupportedHeadline" : "Dienste, die noch nicht von Ferdi 5 unterstützt werden", | 32 | "import.notSupportedHeadline" : "Dienste, die noch nicht von Ferdi 5 unterstützt werden", |
23 | "import.skip.label" : "Ich möchte Dienste selbst hinzufügen", | 33 | "import.skip.label" : "Ich möchte Dienste selbst hinzufügen", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Dienste neu laden", | 37 | "infobar.buttonReloadServices" : "Dienste neu laden", |
28 | "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden", | 38 | "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden", |
29 | "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.", | 39 | "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.", |
30 | "infobar.updateAvailable" : "Eine neue Version von Ferdi ist verfügbar!", | 40 | "infobar.trialActivated" : "Deine kostenlose Testlizenz wurde erfolgreich aktiviert. Viel Spaß!", |
41 | "infobar.updateAvailable" : "Eine neue Version von Franz ist verfügbar!", | ||
31 | "invite.email.label" : "E-Mail-Adresse", | 42 | "invite.email.label" : "E-Mail-Adresse", |
32 | "invite.headline.friends" : "Lade drei Freunde oder Kolleginnen ein!", | 43 | "invite.headline.friends" : "Lade drei Freunde oder Kolleginnen ein!", |
33 | "invite.name.label" : "Name", | 44 | "invite.name.label" : "Name", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", | 54 | "login.serverLogout" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", |
44 | "login.submit.label" : "Anmelden", | 55 | "login.submit.label" : "Anmelden", |
45 | "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", | 56 | "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", |
57 | "menu.Todoss.closeTodosDrawer" : "ToDos schließen", | ||
58 | "menu.Todoss.openTodosDrawer" : "ToDos öffnen", | ||
46 | "menu.app.about" : "Ãœber Franz", | 59 | "menu.app.about" : "Ãœber Franz", |
47 | "menu.app.announcement" : "Was ist neu?", | 60 | "menu.app.announcement" : "Was ist neu?", |
48 | "menu.app.checkForUpdates" : "Nach Updates suchen", | 61 | "menu.app.checkForUpdates" : "Nach Updates suchen", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Datei", | 81 | "menu.file" : "Datei", |
69 | "menu.help" : "Hilfe", | 82 | "menu.help" : "Hilfe", |
70 | "menu.help.changelog" : "Changelog", | 83 | "menu.help.changelog" : "Changelog", |
84 | "menu.help.debugInfo" : "Debugging-Information anzeigen", | ||
85 | "menu.help.debugInfoCopiedBody" : "Deine Debugging-Information wurde in die Zwischenablage kopiert.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debugging-Information", | ||
71 | "menu.help.learnMore" : "Mehr erfahren", | 87 | "menu.help.learnMore" : "Mehr erfahren", |
72 | "menu.help.privacy" : "Datenschutzerklärung", | 88 | "menu.help.privacy" : "Datenschutzerklärung", |
73 | "menu.help.support" : "Hilfe", | 89 | "menu.help.support" : "Hilfe", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Vorheriger Dienst", | 92 | "menu.services.activatePreviousService" : "Vorheriger Dienst", |
77 | "menu.services.addNewService" : "Dienst hinzufügen", | 93 | "menu.services.addNewService" : "Dienst hinzufügen", |
78 | "menu.services.setNextServiceActive" : "Nächster Dienst", | 94 | "menu.services.setNextServiceActive" : "Nächster Dienst", |
95 | "menu.todos" : "ToDos", | ||
79 | "menu.view" : "Darstellung", | 96 | "menu.view" : "Darstellung", |
80 | "menu.view.enterFullScreen" : "Vollbildmodus", | 97 | "menu.view.enterFullScreen" : "Vollbildmodus", |
81 | "menu.view.exitFullScreen" : "Vollbildmodus aus", | 98 | "menu.view.exitFullScreen" : "Vollbildmodus aus", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Entwicklertools anzeigen", | 102 | "menu.view.toggleDevTools" : "Entwicklertools anzeigen", |
86 | "menu.view.toggleFullScreen" : "Vollbildmodus umschalten", | 103 | "menu.view.toggleFullScreen" : "Vollbildmodus umschalten", |
87 | "menu.view.toggleServiceDevTools" : "Entwicklertools für Dienst anzeigen", | 104 | "menu.view.toggleServiceDevTools" : "Entwicklertools für Dienst anzeigen", |
105 | "menu.view.toggleTodosDevTools" : "ToDos Developer Tools umschalten", | ||
88 | "menu.view.zoomIn" : "Vergrößern", | 106 | "menu.view.zoomIn" : "Vergrößern", |
89 | "menu.view.zoomOut" : "Verkleinern", | 107 | "menu.view.zoomOut" : "Verkleinern", |
90 | "menu.window" : "Fenster", | 108 | "menu.window" : "Fenster", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Absenden", | 121 | "password.submit.label" : "Absenden", |
104 | "password.successInfo" : "Wir haben Dir eine E-Mail mit weiteren Anweisungen geschickt.", | 122 | "password.successInfo" : "Wir haben Dir eine E-Mail mit weiteren Anweisungen geschickt.", |
105 | "premiumFeature.button.upgradeAccount" : "Account upgraden", | 123 | "premiumFeature.button.upgradeAccount" : "Account upgraden", |
106 | "pricing.headline" : "Ferdi unterstützen", | 124 | "pricing.features.adFree" : "Keine Werbung", |
107 | "pricing.link.skipPayment" : "Ich möchte die Entwicklung von Ferdi nicht unterstützen.", | 125 | "pricing.features.appDelays" : "Keine unnötigen Unterbrechungen", |
108 | "pricing.submit.label" : "Ich möchte die Entwicklung von Ferdi unterstützen.", | 126 | "pricing.features.customWebsites" : "Hinzufügen von eigenen Websites", |
109 | "pricing.support.label" : "Wie möchtest Du Ferdi unterstützen?", | 127 | "pricing.features.onPremise" : "On-premise & andere Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Rechtschreibprüfung", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Integration von Services über Drittanbieter", | ||
132 | "pricing.features.unlimitedServices" : "Unbegrenztes hinzufügen von Services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal monatlich", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal jährlich", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional monatlich", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional jährlich", | ||
142 | "pricing.trial.cta.accept" : "Ja, Upgrade zu Franz Professional durchführen", | ||
143 | "pricing.trial.cta.skip" : "Weiter zu Franz!", | ||
144 | "pricing.trial.error" : "Tut uns leid, wir konnten deine kostenlose Testlizenz nicht aktivieren.", | ||
145 | "pricing.trial.features.headline" : "Franz Professional beinhaltet:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Dein persönliches Willkommensangebot:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Deine kostenlose Testlizenz endet automatisch nach 14 Tagen", | ||
149 | "pricing.trial.terms.headline" : "Ohne Bindung, ohne Haken", | ||
150 | "pricing.trial.terms.noCreditCard" : "Keine Kreditkarte notwendig", | ||
110 | "service.crashHandler.action" : "{name} neu laden", | 151 | "service.crashHandler.action" : "{name} neu laden", |
111 | "service.crashHandler.autoReload" : "{name} wird in {seconds} Sekunden automatisch wiederhergestellt", | 152 | "service.crashHandler.autoReload" : "{name} wird in {seconds} Sekunden automatisch wiederhergestellt", |
112 | "service.crashHandler.headline" : "Oh nein!", | 153 | "service.crashHandler.headline" : "Oh nein!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh nein!", | 159 | "service.errorHandler.headline" : "Oh nein!", |
119 | "service.errorHandler.message" : "Fehler", | 160 | "service.errorHandler.message" : "Fehler", |
120 | "service.errorHandler.text" : "{name} konnte nicht geladen werden.", | 161 | "service.errorHandler.text" : "{name} konnte nicht geladen werden.", |
162 | "service.restrictedHandler.action" : "Account Upgrade", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional benötigt", | ||
164 | "service.restrictedHandler.customUrl.text" : "Bitte ein Upgrade zu Franz Professional durchführen um benutzerdefinierte URLs und Self Hosted Services verwenden zu können.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "Du hast deine maximale Anzahl an Services erreicht.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Bitte führe eine Upgrade deines Accounts durch um mehr als {count} Services verwenden zu können.", | ||
121 | "service.webviewLoader.loading" : "Lade", | 167 | "service.webviewLoader.loading" : "Lade", |
122 | "services.getStarted" : "Los geht's!", | 168 | "services.getStarted" : "Los geht's!", |
123 | "services.welcome" : "Willkommen bei Franz!", | 169 | "services.welcome" : "Willkommen bei Franz!", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Passwort ändern", | 181 | "settings.account.headlinePassword" : "Passwort ändern", |
136 | "settings.account.headlineProfile" : "Profil aktualisieren", | 182 | "settings.account.headlineProfile" : "Profil aktualisieren", |
137 | "settings.account.headlineSubscription" : "Dein Abonnement", | 183 | "settings.account.headlineSubscription" : "Dein Abonnement", |
138 | "settings.account.headlineUpgrade" : "Dein Konto upgraden & Ferdi unterstützen", | 184 | "settings.account.headlineTrialUpgrade" : "Hol dir die kostenlose 14-tägige Franz Professional Testlizenz!", |
185 | "settings.account.headlineUpgradeAccount" : "Hol dir ein Upgrade deines Accounts und bekomme alle Features von Franz!", | ||
139 | "settings.account.invoiceDownload" : "Herunterladen", | 186 | "settings.account.invoiceDownload" : "Herunterladen", |
140 | "settings.account.manageSubscription.label" : "Dein Abonnement verwalten", | 187 | "settings.account.manageSubscription.label" : "Dein Abonnement verwalten", |
141 | "settings.account.successInfo" : "Deine Änderungen wurden gespeichert", | 188 | "settings.account.successInfo" : "Deine Änderungen wurden gespeichert", |
189 | "settings.account.trial" : "Kostenlose Testlizenz", | ||
190 | "settings.account.trialEndsIn" : "Deine kostenlose Testlizenz endet in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Bitte aktualisiere deine Zahlungsinformation damit du {license} nach der kostenlosen Testphase weiter nutzen kannst.", | ||
142 | "settings.account.tryReloadServices" : "Erneut versuchen", | 192 | "settings.account.tryReloadServices" : "Erneut versuchen", |
143 | "settings.account.tryReloadUserInfoRequest" : "Erneut versuchen", | 193 | "settings.account.tryReloadUserInfoRequest" : "Erneut versuchen", |
194 | "settings.account.upgradeToPro.label" : "Upgrade zu Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Benutzerinformationen konnten nicht geladen werden", | 195 | "settings.account.userInfoRequestFailed" : "Benutzerinformationen konnten nicht geladen werden", |
196 | "settings.account.yourLicense" : "Deine Franz Lizenz", | ||
145 | "settings.app.buttonClearAllCache" : "Cache leeren", | 197 | "settings.app.buttonClearAllCache" : "Cache leeren", |
146 | "settings.app.buttonInstallUpdate" : "Neu starten & Update installieren", | 198 | "settings.app.buttonInstallUpdate" : "Neu starten & Update installieren", |
147 | "settings.app.buttonSearchForUpdate" : "Nach Updates suchen", | 199 | "settings.app.buttonSearchForUpdate" : "Nach Updates suchen", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Die dunkle Seite erwartet dich! (Dark Mode)", | 205 | "settings.app.form.darkMode" : "Die dunkle Seite erwartet dich! (Dark Mode)", |
154 | "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren", | 206 | "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren", |
155 | "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren", | 207 | "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren", |
156 | "settings.app.form.enableSystemTray" : "Ferdi im Infobereich anzeigen", | 208 | "settings.app.form.enableSystemTray" : "Franz im Infobereich anzeigen", |
209 | "settings.app.form.enableTodos" : "Franz Todos aktivieren", | ||
157 | "settings.app.form.language" : "Sprache", | 210 | "settings.app.form.language" : "Sprache", |
158 | "settings.app.form.minimizeToSystemTray" : "Ferdi in den Infobereich minimieren", | 211 | "settings.app.form.minimizeToSystemTray" : "Ferdi in den Infobereich minimieren", |
159 | "settings.app.form.runInBackground" : "Ferdi im Hintergrund behalten, wenn das Fenster geschlossen wird", | 212 | "settings.app.form.runInBackground" : "Ferdi im Hintergrund behalten, wenn das Fenster geschlossen wird", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Deine Dienste", | 235 | "settings.navigation.yourServices" : "Deine Dienste", |
183 | "settings.navigation.yourWorkspaces" : "Deine Workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Deine Workspaces", |
184 | "settings.recipes.all" : "Alle Dienste", | 237 | "settings.recipes.all" : "Alle Dienste", |
185 | "settings.recipes.dev" : "Entwicklung", | 238 | "settings.recipes.custom" : "Eigene Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Benutzerdefinierte Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Eigene Recipes", | ||
242 | "settings.recipes.customService.intro" : "Um ein benutzerdefiniertes Service hinzuzufügen, kopiere das Service Recipe nach:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Entwicklerdokumentation", | ||
244 | "settings.recipes.customService.openFolder" : "Ordner öffnen", | ||
186 | "settings.recipes.headline" : "Verfügbare Dienste", | 245 | "settings.recipes.headline" : "Verfügbare Dienste", |
187 | "settings.recipes.missingService" : "Fehlt ein Dienst?", | 246 | "settings.recipes.missingService" : "Fehlt ein Dienst?", |
188 | "settings.recipes.mostPopular" : "Am beliebtesten", | 247 | "settings.recipes.mostPopular" : "Am beliebtesten", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Workspaces öffnen", | 333 | "sidebar.openWorkspaceDrawer" : "Workspaces öffnen", |
275 | "sidebar.settings" : "Einstellungen", | 334 | "sidebar.settings" : "Einstellungen", |
276 | "sidebar.unmuteApp" : "Benachrichtigungen & Audio aktivieren", | 335 | "sidebar.unmuteApp" : "Benachrichtigungen & Audio aktivieren", |
277 | "signup.company.label" : "Firma", | ||
278 | "signup.email.label" : "E-Mail-Adresse", | 336 | "signup.email.label" : "E-Mail-Adresse", |
279 | "signup.emailDuplicate" : "Es existiert bereits ein Benutzer mit dieser E-Mail Adresse.", | 337 | "signup.emailDuplicate" : "Es existiert bereits ein Benutzer mit dieser E-Mail Adresse.", |
280 | "signup.firstname.label" : "Vorname", | 338 | "signup.firstname.label" : "Vorname", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "kostenlos", | 358 | "subscription.type.free" : "kostenlos", |
301 | "subscription.type.month" : "Monat", | 359 | "subscription.type.month" : "Monat", |
302 | "subscription.type.year" : "Jahr", | 360 | "subscription.type.year" : "Jahr", |
361 | "subscription.cta.activateTrial" : "Ja, kostenlose Franz Professional Testlizenz starten", | ||
362 | "subscription.cta.allOptions" : "Alle Optionen anzeigen", | ||
363 | "subscription.cta.choosePlan" : "Wähle deine Lizenz", | ||
364 | "subscription.includedProFeatures" : "Die Franz Professional Lizenz beinhaltet:", | ||
365 | "subscription.teaser.includedFeatures" : "Bezahlte Franz Lizenzen beinhalten:", | ||
366 | "subscription.teaser.intro" : "Franz 5 ist voll gepackt mit vielen neuen Features, damit du für jegliche kommunikative Eventualität gerüstet bist. Nimm dir was du brauchst und leg los!", | ||
303 | "subscriptionPopup.buttonCancel" : "Abbrechen", | 367 | "subscriptionPopup.buttonCancel" : "Abbrechen", |
304 | "subscriptionPopup.buttonDone" : "Fertig", | 368 | "subscriptionPopup.buttonDone" : "Fertig", |
305 | "tabs.item.deleteService" : "Dienst löschen", | 369 | "tabs.item.deleteService" : "Dienst löschen", |
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json index 7d0e075cc..2dd778434 100644 --- a/src/i18n/locales/defaultMessages.json +++ b/src/i18n/locales/defaultMessages.json | |||
@@ -443,55 +443,120 @@ | |||
443 | { | 443 | { |
444 | "descriptors": [ | 444 | "descriptors": [ |
445 | { | 445 | { |
446 | "defaultMessage": "!!!Support Ferdi", | 446 | "defaultMessage": "!!!Franz Professional", |
447 | "end": { | 447 | "end": { |
448 | "column": 3, | 448 | "column": 3, |
449 | "line": 16 | 449 | "line": 18 |
450 | }, | 450 | }, |
451 | "file": "src/components/auth/Pricing.js", | 451 | "file": "src/components/auth/Pricing.js", |
452 | "id": "pricing.headline", | 452 | "id": "pricing.trial.headline", |
453 | "start": { | 453 | "start": { |
454 | "column": 12, | 454 | "column": 12, |
455 | "line": 13 | 455 | "line": 15 |
456 | } | 456 | } |
457 | }, | 457 | }, |
458 | { | 458 | { |
459 | "defaultMessage": "!!!Select your support plan", | 459 | "defaultMessage": "!!!Your personal welcome offer:", |
460 | "end": { | 460 | "end": { |
461 | "column": 3, | 461 | "column": 3, |
462 | "line": 20 | 462 | "line": 22 |
463 | }, | 463 | }, |
464 | "file": "src/components/auth/Pricing.js", | 464 | "file": "src/components/auth/Pricing.js", |
465 | "id": "pricing.support.label", | 465 | "id": "pricing.trial.subheadline", |
466 | "start": { | 466 | "start": { |
467 | "column": 23, | 467 | "column": 17, |
468 | "line": 17 | 468 | "line": 19 |
469 | } | 469 | } |
470 | }, | 470 | }, |
471 | { | 471 | { |
472 | "defaultMessage": "!!!Support the development of Ferdi", | 472 | "defaultMessage": "!!!No strings attached", |
473 | "end": { | 473 | "end": { |
474 | "column": 3, | 474 | "column": 3, |
475 | "line": 24 | 475 | "line": 26 |
476 | }, | 476 | }, |
477 | "file": "src/components/auth/Pricing.js", | 477 | "file": "src/components/auth/Pricing.js", |
478 | "id": "pricing.submit.label", | 478 | "id": "pricing.trial.terms.headline", |
479 | "start": { | ||
480 | "column": 29, | ||
481 | "line": 23 | ||
482 | } | ||
483 | }, | ||
484 | { | ||
485 | "defaultMessage": "!!!No credit card required", | ||
486 | "end": { | ||
487 | "column": 3, | ||
488 | "line": 30 | ||
489 | }, | ||
490 | "file": "src/components/auth/Pricing.js", | ||
491 | "id": "pricing.trial.terms.noCreditCard", | ||
492 | "start": { | ||
493 | "column": 16, | ||
494 | "line": 27 | ||
495 | } | ||
496 | }, | ||
497 | { | ||
498 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", | ||
499 | "end": { | ||
500 | "column": 3, | ||
501 | "line": 34 | ||
502 | }, | ||
503 | "file": "src/components/auth/Pricing.js", | ||
504 | "id": "pricing.trial.terms.automaticTrialEnd", | ||
479 | "start": { | 505 | "start": { |
480 | "column": 21, | 506 | "column": 21, |
481 | "line": 21 | 507 | "line": 31 |
482 | } | 508 | } |
483 | }, | 509 | }, |
484 | { | 510 | { |
485 | "defaultMessage": "!!!I don't want to support the development of Ferdi.", | 511 | "defaultMessage": "!!!Sorry, we could not activate your trial!", |
486 | "end": { | 512 | "end": { |
487 | "column": 3, | 513 | "column": 3, |
488 | "line": 28 | 514 | "line": 38 |
489 | }, | 515 | }, |
490 | "file": "src/components/auth/Pricing.js", | 516 | "file": "src/components/auth/Pricing.js", |
491 | "id": "pricing.link.skipPayment", | 517 | "id": "pricing.trial.error", |
492 | "start": { | 518 | "start": { |
493 | "column": 15, | 519 | "column": 19, |
494 | "line": 25 | 520 | "line": 35 |
521 | } | ||
522 | }, | ||
523 | { | ||
524 | "defaultMessage": "!!!Yes, upgrade my account to Franz Professional", | ||
525 | "end": { | ||
526 | "column": 3, | ||
527 | "line": 42 | ||
528 | }, | ||
529 | "file": "src/components/auth/Pricing.js", | ||
530 | "id": "pricing.trial.cta.accept", | ||
531 | "start": { | ||
532 | "column": 13, | ||
533 | "line": 39 | ||
534 | } | ||
535 | }, | ||
536 | { | ||
537 | "defaultMessage": "!!!Continue to Franz", | ||
538 | "end": { | ||
539 | "column": 3, | ||
540 | "line": 46 | ||
541 | }, | ||
542 | "file": "src/components/auth/Pricing.js", | ||
543 | "id": "pricing.trial.cta.skip", | ||
544 | "start": { | ||
545 | "column": 11, | ||
546 | "line": 43 | ||
547 | } | ||
548 | }, | ||
549 | { | ||
550 | "defaultMessage": "!!!Franz Professional includes:", | ||
551 | "end": { | ||
552 | "column": 3, | ||
553 | "line": 50 | ||
554 | }, | ||
555 | "file": "src/components/auth/Pricing.js", | ||
556 | "id": "pricing.trial.features.headline", | ||
557 | "start": { | ||
558 | "column": 20, | ||
559 | "line": 47 | ||
495 | } | 560 | } |
496 | } | 561 | } |
497 | ], | 562 | ], |
@@ -503,156 +568,143 @@ | |||
503 | "defaultMessage": "!!!Sign up", | 568 | "defaultMessage": "!!!Sign up", |
504 | "end": { | 569 | "end": { |
505 | "column": 3, | 570 | "column": 3, |
506 | "line": 21 | 571 | "line": 20 |
507 | }, | 572 | }, |
508 | "file": "src/components/auth/Signup.js", | 573 | "file": "src/components/auth/Signup.js", |
509 | "id": "signup.headline", | 574 | "id": "signup.headline", |
510 | "start": { | 575 | "start": { |
511 | "column": 12, | 576 | "column": 12, |
512 | "line": 18 | 577 | "line": 17 |
513 | } | 578 | } |
514 | }, | 579 | }, |
515 | { | 580 | { |
516 | "defaultMessage": "!!!Firstname", | 581 | "defaultMessage": "!!!Firstname", |
517 | "end": { | 582 | "end": { |
518 | "column": 3, | 583 | "column": 3, |
519 | "line": 25 | 584 | "line": 24 |
520 | }, | 585 | }, |
521 | "file": "src/components/auth/Signup.js", | 586 | "file": "src/components/auth/Signup.js", |
522 | "id": "signup.firstname.label", | 587 | "id": "signup.firstname.label", |
523 | "start": { | 588 | "start": { |
524 | "column": 18, | 589 | "column": 18, |
525 | "line": 22 | 590 | "line": 21 |
526 | } | 591 | } |
527 | }, | 592 | }, |
528 | { | 593 | { |
529 | "defaultMessage": "!!!Lastname", | 594 | "defaultMessage": "!!!Lastname", |
530 | "end": { | 595 | "end": { |
531 | "column": 3, | 596 | "column": 3, |
532 | "line": 29 | 597 | "line": 28 |
533 | }, | 598 | }, |
534 | "file": "src/components/auth/Signup.js", | 599 | "file": "src/components/auth/Signup.js", |
535 | "id": "signup.lastname.label", | 600 | "id": "signup.lastname.label", |
536 | "start": { | 601 | "start": { |
537 | "column": 17, | 602 | "column": 17, |
538 | "line": 26 | 603 | "line": 25 |
539 | } | 604 | } |
540 | }, | 605 | }, |
541 | { | 606 | { |
542 | "defaultMessage": "!!!Email address", | 607 | "defaultMessage": "!!!Email address", |
543 | "end": { | 608 | "end": { |
544 | "column": 3, | 609 | "column": 3, |
545 | "line": 33 | 610 | "line": 32 |
546 | }, | 611 | }, |
547 | "file": "src/components/auth/Signup.js", | 612 | "file": "src/components/auth/Signup.js", |
548 | "id": "signup.email.label", | 613 | "id": "signup.email.label", |
549 | "start": { | 614 | "start": { |
550 | "column": 14, | 615 | "column": 14, |
551 | "line": 30 | 616 | "line": 29 |
552 | } | ||
553 | }, | ||
554 | { | ||
555 | "defaultMessage": "!!!Company", | ||
556 | "end": { | ||
557 | "column": 3, | ||
558 | "line": 37 | ||
559 | }, | ||
560 | "file": "src/components/auth/Signup.js", | ||
561 | "id": "signup.company.label", | ||
562 | "start": { | ||
563 | "column": 16, | ||
564 | "line": 34 | ||
565 | } | 617 | } |
566 | }, | 618 | }, |
567 | { | 619 | { |
568 | "defaultMessage": "!!!Password", | 620 | "defaultMessage": "!!!Password", |
569 | "end": { | 621 | "end": { |
570 | "column": 3, | 622 | "column": 3, |
571 | "line": 41 | 623 | "line": 40 |
572 | }, | 624 | }, |
573 | "file": "src/components/auth/Signup.js", | 625 | "file": "src/components/auth/Signup.js", |
574 | "id": "signup.password.label", | 626 | "id": "signup.password.label", |
575 | "start": { | 627 | "start": { |
576 | "column": 17, | 628 | "column": 17, |
577 | "line": 38 | 629 | "line": 37 |
578 | } | 630 | } |
579 | }, | 631 | }, |
580 | { | 632 | { |
581 | "defaultMessage": "!!!By creating a Ferdi account you accept the", | 633 | "defaultMessage": "!!!By creating a Ferdi account you accept the", |
582 | "end": { | 634 | "end": { |
583 | "column": 3, | 635 | "column": 3, |
584 | "line": 45 | 636 | "line": 44 |
585 | }, | 637 | }, |
586 | "file": "src/components/auth/Signup.js", | 638 | "file": "src/components/auth/Signup.js", |
587 | "id": "signup.legal.info", | 639 | "id": "signup.legal.info", |
588 | "start": { | 640 | "start": { |
589 | "column": 13, | 641 | "column": 13, |
590 | "line": 42 | 642 | "line": 41 |
591 | } | 643 | } |
592 | }, | 644 | }, |
593 | { | 645 | { |
594 | "defaultMessage": "!!!Terms of service", | 646 | "defaultMessage": "!!!Terms of service", |
595 | "end": { | 647 | "end": { |
596 | "column": 3, | 648 | "column": 3, |
597 | "line": 49 | 649 | "line": 48 |
598 | }, | 650 | }, |
599 | "file": "src/components/auth/Signup.js", | 651 | "file": "src/components/auth/Signup.js", |
600 | "id": "signup.legal.terms", | 652 | "id": "signup.legal.terms", |
601 | "start": { | 653 | "start": { |
602 | "column": 9, | 654 | "column": 9, |
603 | "line": 46 | 655 | "line": 45 |
604 | } | 656 | } |
605 | }, | 657 | }, |
606 | { | 658 | { |
607 | "defaultMessage": "!!!Privacy Statement", | 659 | "defaultMessage": "!!!Privacy Statement", |
608 | "end": { | 660 | "end": { |
609 | "column": 3, | 661 | "column": 3, |
610 | "line": 53 | 662 | "line": 52 |
611 | }, | 663 | }, |
612 | "file": "src/components/auth/Signup.js", | 664 | "file": "src/components/auth/Signup.js", |
613 | "id": "signup.legal.privacy", | 665 | "id": "signup.legal.privacy", |
614 | "start": { | 666 | "start": { |
615 | "column": 11, | 667 | "column": 11, |
616 | "line": 50 | 668 | "line": 49 |
617 | } | 669 | } |
618 | }, | 670 | }, |
619 | { | 671 | { |
620 | "defaultMessage": "!!!Create account", | 672 | "defaultMessage": "!!!Create account", |
621 | "end": { | 673 | "end": { |
622 | "column": 3, | 674 | "column": 3, |
623 | "line": 57 | 675 | "line": 56 |
624 | }, | 676 | }, |
625 | "file": "src/components/auth/Signup.js", | 677 | "file": "src/components/auth/Signup.js", |
626 | "id": "signup.submit.label", | 678 | "id": "signup.submit.label", |
627 | "start": { | 679 | "start": { |
628 | "column": 21, | 680 | "column": 21, |
629 | "line": 54 | 681 | "line": 53 |
630 | } | 682 | } |
631 | }, | 683 | }, |
632 | { | 684 | { |
633 | "defaultMessage": "!!!Already have an account, sign in?", | 685 | "defaultMessage": "!!!Already have an account, sign in?", |
634 | "end": { | 686 | "end": { |
635 | "column": 3, | 687 | "column": 3, |
636 | "line": 61 | 688 | "line": 60 |
637 | }, | 689 | }, |
638 | "file": "src/components/auth/Signup.js", | 690 | "file": "src/components/auth/Signup.js", |
639 | "id": "signup.link.login", | 691 | "id": "signup.link.login", |
640 | "start": { | 692 | "start": { |
641 | "column": 13, | 693 | "column": 13, |
642 | "line": 58 | 694 | "line": 57 |
643 | } | 695 | } |
644 | }, | 696 | }, |
645 | { | 697 | { |
646 | "defaultMessage": "!!!A user with that email address already exists", | 698 | "defaultMessage": "!!!A user with that email address already exists", |
647 | "end": { | 699 | "end": { |
648 | "column": 3, | 700 | "column": 3, |
649 | "line": 65 | 701 | "line": 64 |
650 | }, | 702 | }, |
651 | "file": "src/components/auth/Signup.js", | 703 | "file": "src/components/auth/Signup.js", |
652 | "id": "signup.emailDuplicate", | 704 | "id": "signup.emailDuplicate", |
653 | "start": { | 705 | "start": { |
654 | "column": 18, | 706 | "column": 18, |
655 | "line": 62 | 707 | "line": 61 |
656 | } | 708 | } |
657 | } | 709 | } |
658 | ], | 710 | ], |
@@ -695,33 +747,33 @@ | |||
695 | "defaultMessage": "!!!Your services have been updated.", | 747 | "defaultMessage": "!!!Your services have been updated.", |
696 | "end": { | 748 | "end": { |
697 | "column": 3, | 749 | "column": 3, |
698 | "line": 28 | 750 | "line": 31 |
699 | }, | 751 | }, |
700 | "file": "src/components/layout/AppLayout.js", | 752 | "file": "src/components/layout/AppLayout.js", |
701 | "id": "infobar.servicesUpdated", | 753 | "id": "infobar.servicesUpdated", |
702 | "start": { | 754 | "start": { |
703 | "column": 19, | 755 | "column": 19, |
704 | "line": 25 | 756 | "line": 28 |
705 | } | 757 | } |
706 | }, | 758 | }, |
707 | { | 759 | { |
708 | "defaultMessage": "!!!Reload services", | 760 | "defaultMessage": "!!!Reload services", |
709 | "end": { | 761 | "end": { |
710 | "column": 3, | 762 | "column": 3, |
711 | "line": 32 | 763 | "line": 35 |
712 | }, | 764 | }, |
713 | "file": "src/components/layout/AppLayout.js", | 765 | "file": "src/components/layout/AppLayout.js", |
714 | "id": "infobar.buttonReloadServices", | 766 | "id": "infobar.buttonReloadServices", |
715 | "start": { | 767 | "start": { |
716 | "column": 24, | 768 | "column": 24, |
717 | "line": 29 | 769 | "line": 32 |
718 | } | 770 | } |
719 | }, | 771 | }, |
720 | { | 772 | { |
721 | "defaultMessage": "!!!Could not load services and user information", | 773 | "defaultMessage": "!!!Could not load services and user information", |
722 | "end": { | 774 | "end": { |
723 | "column": 3, | 775 | "column": 3, |
724 | "line": 36 | 776 | "line": 39 |
725 | }, | 777 | }, |
726 | "file": "src/components/layout/AppLayout.js", | 778 | "file": "src/components/layout/AppLayout.js", |
727 | "id": "infobar.requiredRequestsFailed", | 779 | "id": "infobar.requiredRequestsFailed", |
@@ -933,29 +985,99 @@ | |||
933 | { | 985 | { |
934 | "descriptors": [ | 986 | "descriptors": [ |
935 | { | 987 | { |
936 | "defaultMessage": "!!!Welcome to Ferdi", | 988 | "defaultMessage": "!!!You have reached your service limit.", |
937 | "end": { | 989 | "end": { |
938 | "column": 3, | 990 | "column": 3, |
939 | "line": 14 | 991 | "line": 14 |
940 | }, | 992 | }, |
993 | "file": "src/components/services/content/ServiceRestricted.js", | ||
994 | "id": "service.restrictedHandler.serviceLimit.headline", | ||
995 | "start": { | ||
996 | "column": 24, | ||
997 | "line": 11 | ||
998 | } | ||
999 | }, | ||
1000 | { | ||
1001 | "defaultMessage": "!!!Please upgrade your account to use more than {count} services.", | ||
1002 | "end": { | ||
1003 | "column": 3, | ||
1004 | "line": 18 | ||
1005 | }, | ||
1006 | "file": "src/components/services/content/ServiceRestricted.js", | ||
1007 | "id": "service.restrictedHandler.serviceLimit.text", | ||
1008 | "start": { | ||
1009 | "column": 20, | ||
1010 | "line": 15 | ||
1011 | } | ||
1012 | }, | ||
1013 | { | ||
1014 | "defaultMessage": "!!!Franz Professional Plan required", | ||
1015 | "end": { | ||
1016 | "column": 3, | ||
1017 | "line": 22 | ||
1018 | }, | ||
1019 | "file": "src/components/services/content/ServiceRestricted.js", | ||
1020 | "id": "service.restrictedHandler.customUrl.headline", | ||
1021 | "start": { | ||
1022 | "column": 21, | ||
1023 | "line": 19 | ||
1024 | } | ||
1025 | }, | ||
1026 | { | ||
1027 | "defaultMessage": "!!!Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
1028 | "end": { | ||
1029 | "column": 3, | ||
1030 | "line": 26 | ||
1031 | }, | ||
1032 | "file": "src/components/services/content/ServiceRestricted.js", | ||
1033 | "id": "service.restrictedHandler.customUrl.text", | ||
1034 | "start": { | ||
1035 | "column": 17, | ||
1036 | "line": 23 | ||
1037 | } | ||
1038 | }, | ||
1039 | { | ||
1040 | "defaultMessage": "!!!Upgrade Account", | ||
1041 | "end": { | ||
1042 | "column": 3, | ||
1043 | "line": 30 | ||
1044 | }, | ||
1045 | "file": "src/components/services/content/ServiceRestricted.js", | ||
1046 | "id": "service.restrictedHandler.action", | ||
1047 | "start": { | ||
1048 | "column": 10, | ||
1049 | "line": 27 | ||
1050 | } | ||
1051 | } | ||
1052 | ], | ||
1053 | "path": "src/components/services/content/ServiceRestricted.json" | ||
1054 | }, | ||
1055 | { | ||
1056 | "descriptors": [ | ||
1057 | { | ||
1058 | "defaultMessage": "!!!Welcome to Ferdi", | ||
1059 | "end": { | ||
1060 | "column": 3, | ||
1061 | "line": 17 | ||
1062 | }, | ||
941 | "file": "src/components/services/content/Services.js", | 1063 | "file": "src/components/services/content/Services.js", |
942 | "id": "services.welcome", | 1064 | "id": "services.welcome", |
943 | "start": { | 1065 | "start": { |
944 | "column": 11, | 1066 | "column": 11, |
945 | "line": 11 | 1067 | "line": 14 |
946 | } | 1068 | } |
947 | }, | 1069 | }, |
948 | { | 1070 | { |
949 | "defaultMessage": "!!!Get started", | 1071 | "defaultMessage": "!!!Get started", |
950 | "end": { | 1072 | "end": { |
951 | "column": 3, | 1073 | "column": 3, |
952 | "line": 18 | 1074 | "line": 21 |
953 | }, | 1075 | }, |
954 | "file": "src/components/services/content/Services.js", | 1076 | "file": "src/components/services/content/Services.js", |
955 | "id": "services.getStarted", | 1077 | "id": "services.getStarted", |
956 | "start": { | 1078 | "start": { |
957 | "column": 14, | 1079 | "column": 14, |
958 | "line": 15 | 1080 | "line": 18 |
959 | } | 1081 | } |
960 | }, | 1082 | }, |
961 | { | 1083 | { |
@@ -1172,38 +1294,25 @@ | |||
1172 | "defaultMessage": "!!!Account", | 1294 | "defaultMessage": "!!!Account", |
1173 | "end": { | 1295 | "end": { |
1174 | "column": 3, | 1296 | "column": 3, |
1175 | "line": 17 | 1297 | "line": 21 |
1176 | }, | 1298 | }, |
1177 | "file": "src/components/settings/account/AccountDashboard.js", | 1299 | "file": "src/components/settings/account/AccountDashboard.js", |
1178 | "id": "settings.account.headline", | 1300 | "id": "settings.account.headline", |
1179 | "start": { | 1301 | "start": { |
1180 | "column": 12, | 1302 | "column": 12, |
1181 | "line": 14 | 1303 | "line": 18 |
1182 | } | 1304 | } |
1183 | }, | 1305 | }, |
1184 | { | 1306 | { |
1185 | "defaultMessage": "!!!Your Subscription", | 1307 | "defaultMessage": "!!!Your Subscription", |
1186 | "end": { | 1308 | "end": { |
1187 | "column": 3, | 1309 | "column": 3, |
1188 | "line": 21 | 1310 | "line": 25 |
1189 | }, | 1311 | }, |
1190 | "file": "src/components/settings/account/AccountDashboard.js", | 1312 | "file": "src/components/settings/account/AccountDashboard.js", |
1191 | "id": "settings.account.headlineSubscription", | 1313 | "id": "settings.account.headlineSubscription", |
1192 | "start": { | 1314 | "start": { |
1193 | "column": 24, | 1315 | "column": 24, |
1194 | "line": 18 | ||
1195 | } | ||
1196 | }, | ||
1197 | { | ||
1198 | "defaultMessage": "!!!Upgrade your Account", | ||
1199 | "end": { | ||
1200 | "column": 3, | ||
1201 | "line": 25 | ||
1202 | }, | ||
1203 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1204 | "id": "settings.account.headlineUpgrade", | ||
1205 | "start": { | ||
1206 | "column": 19, | ||
1207 | "line": 22 | 1316 | "line": 22 |
1208 | } | 1317 | } |
1209 | }, | 1318 | }, |
@@ -1234,133 +1343,198 @@ | |||
1234 | } | 1343 | } |
1235 | }, | 1344 | }, |
1236 | { | 1345 | { |
1237 | "defaultMessage": "!!!Basic Account", | 1346 | "defaultMessage": "!!!Upgrade to Franz Professional", |
1238 | "end": { | 1347 | "end": { |
1239 | "column": 3, | 1348 | "column": 3, |
1240 | "line": 37 | 1349 | "line": 37 |
1241 | }, | 1350 | }, |
1242 | "file": "src/components/settings/account/AccountDashboard.js", | 1351 | "file": "src/components/settings/account/AccountDashboard.js", |
1352 | "id": "settings.account.upgradeToPro.label", | ||
1353 | "start": { | ||
1354 | "column": 23, | ||
1355 | "line": 34 | ||
1356 | } | ||
1357 | }, | ||
1358 | { | ||
1359 | "defaultMessage": "!!!Basic Account", | ||
1360 | "end": { | ||
1361 | "column": 3, | ||
1362 | "line": 41 | ||
1363 | }, | ||
1364 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1243 | "id": "settings.account.accountType.basic", | 1365 | "id": "settings.account.accountType.basic", |
1244 | "start": { | 1366 | "start": { |
1245 | "column": 20, | 1367 | "column": 20, |
1246 | "line": 34 | 1368 | "line": 38 |
1247 | } | 1369 | } |
1248 | }, | 1370 | }, |
1249 | { | 1371 | { |
1250 | "defaultMessage": "!!!Premium Supporter Account", | 1372 | "defaultMessage": "!!!Premium Supporter Account", |
1251 | "end": { | 1373 | "end": { |
1252 | "column": 3, | 1374 | "column": 3, |
1253 | "line": 41 | 1375 | "line": 45 |
1254 | }, | 1376 | }, |
1255 | "file": "src/components/settings/account/AccountDashboard.js", | 1377 | "file": "src/components/settings/account/AccountDashboard.js", |
1256 | "id": "settings.account.accountType.premium", | 1378 | "id": "settings.account.accountType.premium", |
1257 | "start": { | 1379 | "start": { |
1258 | "column": 22, | 1380 | "column": 22, |
1259 | "line": 38 | 1381 | "line": 42 |
1260 | } | 1382 | } |
1261 | }, | 1383 | }, |
1262 | { | 1384 | { |
1263 | "defaultMessage": "!!!Edit Account", | 1385 | "defaultMessage": "!!!Edit Account", |
1264 | "end": { | 1386 | "end": { |
1265 | "column": 3, | 1387 | "column": 3, |
1266 | "line": 45 | 1388 | "line": 49 |
1267 | }, | 1389 | }, |
1268 | "file": "src/components/settings/account/AccountDashboard.js", | 1390 | "file": "src/components/settings/account/AccountDashboard.js", |
1269 | "id": "settings.account.account.editButton", | 1391 | "id": "settings.account.account.editButton", |
1270 | "start": { | 1392 | "start": { |
1271 | "column": 21, | 1393 | "column": 21, |
1272 | "line": 42 | 1394 | "line": 46 |
1273 | } | 1395 | } |
1274 | }, | 1396 | }, |
1275 | { | 1397 | { |
1276 | "defaultMessage": "!!Invoices", | 1398 | "defaultMessage": "!!Invoices", |
1277 | "end": { | 1399 | "end": { |
1278 | "column": 3, | 1400 | "column": 3, |
1279 | "line": 49 | 1401 | "line": 53 |
1280 | }, | 1402 | }, |
1281 | "file": "src/components/settings/account/AccountDashboard.js", | 1403 | "file": "src/components/settings/account/AccountDashboard.js", |
1282 | "id": "settings.account.headlineInvoices", | 1404 | "id": "settings.account.headlineInvoices", |
1283 | "start": { | 1405 | "start": { |
1284 | "column": 18, | 1406 | "column": 18, |
1285 | "line": 46 | 1407 | "line": 50 |
1286 | } | 1408 | } |
1287 | }, | 1409 | }, |
1288 | { | 1410 | { |
1289 | "defaultMessage": "!!!Download", | 1411 | "defaultMessage": "!!!Download", |
1290 | "end": { | 1412 | "end": { |
1291 | "column": 3, | 1413 | "column": 3, |
1292 | "line": 53 | 1414 | "line": 57 |
1293 | }, | 1415 | }, |
1294 | "file": "src/components/settings/account/AccountDashboard.js", | 1416 | "file": "src/components/settings/account/AccountDashboard.js", |
1295 | "id": "settings.account.invoiceDownload", | 1417 | "id": "settings.account.invoiceDownload", |
1296 | "start": { | 1418 | "start": { |
1297 | "column": 19, | 1419 | "column": 19, |
1298 | "line": 50 | 1420 | "line": 54 |
1299 | } | 1421 | } |
1300 | }, | 1422 | }, |
1301 | { | 1423 | { |
1302 | "defaultMessage": "!!!Could not load user information", | 1424 | "defaultMessage": "!!!Could not load user information", |
1303 | "end": { | 1425 | "end": { |
1304 | "column": 3, | 1426 | "column": 3, |
1305 | "line": 57 | 1427 | "line": 61 |
1306 | }, | 1428 | }, |
1307 | "file": "src/components/settings/account/AccountDashboard.js", | 1429 | "file": "src/components/settings/account/AccountDashboard.js", |
1308 | "id": "settings.account.userInfoRequestFailed", | 1430 | "id": "settings.account.userInfoRequestFailed", |
1309 | "start": { | 1431 | "start": { |
1310 | "column": 25, | 1432 | "column": 25, |
1311 | "line": 54 | 1433 | "line": 58 |
1312 | } | 1434 | } |
1313 | }, | 1435 | }, |
1314 | { | 1436 | { |
1315 | "defaultMessage": "!!!Try again", | 1437 | "defaultMessage": "!!!Try again", |
1316 | "end": { | 1438 | "end": { |
1317 | "column": 3, | 1439 | "column": 3, |
1318 | "line": 61 | 1440 | "line": 65 |
1319 | }, | 1441 | }, |
1320 | "file": "src/components/settings/account/AccountDashboard.js", | 1442 | "file": "src/components/settings/account/AccountDashboard.js", |
1321 | "id": "settings.account.tryReloadUserInfoRequest", | 1443 | "id": "settings.account.tryReloadUserInfoRequest", |
1322 | "start": { | 1444 | "start": { |
1323 | "column": 28, | 1445 | "column": 28, |
1324 | "line": 58 | 1446 | "line": 62 |
1325 | } | 1447 | } |
1326 | }, | 1448 | }, |
1327 | { | 1449 | { |
1328 | "defaultMessage": "!!!Delete account", | 1450 | "defaultMessage": "!!!Delete account", |
1329 | "end": { | 1451 | "end": { |
1330 | "column": 3, | 1452 | "column": 3, |
1331 | "line": 65 | 1453 | "line": 69 |
1332 | }, | 1454 | }, |
1333 | "file": "src/components/settings/account/AccountDashboard.js", | 1455 | "file": "src/components/settings/account/AccountDashboard.js", |
1334 | "id": "settings.account.deleteAccount", | 1456 | "id": "settings.account.deleteAccount", |
1335 | "start": { | 1457 | "start": { |
1336 | "column": 17, | 1458 | "column": 17, |
1337 | "line": 62 | 1459 | "line": 66 |
1338 | } | 1460 | } |
1339 | }, | 1461 | }, |
1340 | { | 1462 | { |
1341 | "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", | 1463 | "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", |
1342 | "end": { | 1464 | "end": { |
1343 | "column": 3, | 1465 | "column": 3, |
1344 | "line": 69 | 1466 | "line": 73 |
1345 | }, | 1467 | }, |
1346 | "file": "src/components/settings/account/AccountDashboard.js", | 1468 | "file": "src/components/settings/account/AccountDashboard.js", |
1347 | "id": "settings.account.deleteInfo", | 1469 | "id": "settings.account.deleteInfo", |
1348 | "start": { | 1470 | "start": { |
1349 | "column": 14, | 1471 | "column": 14, |
1350 | "line": 66 | 1472 | "line": 70 |
1351 | } | 1473 | } |
1352 | }, | 1474 | }, |
1353 | { | 1475 | { |
1354 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 1476 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", |
1355 | "end": { | 1477 | "end": { |
1356 | "column": 3, | 1478 | "column": 3, |
1357 | "line": 73 | 1479 | "line": 77 |
1358 | }, | 1480 | }, |
1359 | "file": "src/components/settings/account/AccountDashboard.js", | 1481 | "file": "src/components/settings/account/AccountDashboard.js", |
1360 | "id": "settings.account.deleteEmailSent", | 1482 | "id": "settings.account.deleteEmailSent", |
1361 | "start": { | 1483 | "start": { |
1362 | "column": 19, | 1484 | "column": 19, |
1363 | "line": 70 | 1485 | "line": 74 |
1486 | } | ||
1487 | }, | ||
1488 | { | ||
1489 | "defaultMessage": "!!!Free Trial", | ||
1490 | "end": { | ||
1491 | "column": 3, | ||
1492 | "line": 81 | ||
1493 | }, | ||
1494 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1495 | "id": "settings.account.trial", | ||
1496 | "start": { | ||
1497 | "column": 9, | ||
1498 | "line": 78 | ||
1499 | } | ||
1500 | }, | ||
1501 | { | ||
1502 | "defaultMessage": "!!!Your Franz License:", | ||
1503 | "end": { | ||
1504 | "column": 3, | ||
1505 | "line": 85 | ||
1506 | }, | ||
1507 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1508 | "id": "settings.account.yourLicense", | ||
1509 | "start": { | ||
1510 | "column": 15, | ||
1511 | "line": 82 | ||
1512 | } | ||
1513 | }, | ||
1514 | { | ||
1515 | "defaultMessage": "!!!Your free trial ends in {duration}.", | ||
1516 | "end": { | ||
1517 | "column": 3, | ||
1518 | "line": 89 | ||
1519 | }, | ||
1520 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1521 | "id": "settings.account.trialEndsIn", | ||
1522 | "start": { | ||
1523 | "column": 15, | ||
1524 | "line": 86 | ||
1525 | } | ||
1526 | }, | ||
1527 | { | ||
1528 | "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", | ||
1529 | "end": { | ||
1530 | "column": 3, | ||
1531 | "line": 93 | ||
1532 | }, | ||
1533 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1534 | "id": "settings.account.trialUpdateBillingInfo", | ||
1535 | "start": { | ||
1536 | "column": 33, | ||
1537 | "line": 90 | ||
1364 | } | 1538 | } |
1365 | } | 1539 | } |
1366 | ], | 1540 | ], |
@@ -1372,104 +1546,104 @@ | |||
1372 | "defaultMessage": "!!!Available services", | 1546 | "defaultMessage": "!!!Available services", |
1373 | "end": { | 1547 | "end": { |
1374 | "column": 3, | 1548 | "column": 3, |
1375 | "line": 16 | 1549 | "line": 17 |
1376 | }, | 1550 | }, |
1377 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1551 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1378 | "id": "settings.navigation.availableServices", | 1552 | "id": "settings.navigation.availableServices", |
1379 | "start": { | 1553 | "start": { |
1380 | "column": 21, | 1554 | "column": 21, |
1381 | "line": 13 | 1555 | "line": 14 |
1382 | } | 1556 | } |
1383 | }, | 1557 | }, |
1384 | { | 1558 | { |
1385 | "defaultMessage": "!!!Your services", | 1559 | "defaultMessage": "!!!Your services", |
1386 | "end": { | 1560 | "end": { |
1387 | "column": 3, | 1561 | "column": 3, |
1388 | "line": 20 | 1562 | "line": 21 |
1389 | }, | 1563 | }, |
1390 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1564 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1391 | "id": "settings.navigation.yourServices", | 1565 | "id": "settings.navigation.yourServices", |
1392 | "start": { | 1566 | "start": { |
1393 | "column": 16, | 1567 | "column": 16, |
1394 | "line": 17 | 1568 | "line": 18 |
1395 | } | 1569 | } |
1396 | }, | 1570 | }, |
1397 | { | 1571 | { |
1398 | "defaultMessage": "!!!Your workspaces", | 1572 | "defaultMessage": "!!!Your workspaces", |
1399 | "end": { | 1573 | "end": { |
1400 | "column": 3, | 1574 | "column": 3, |
1401 | "line": 24 | 1575 | "line": 25 |
1402 | }, | 1576 | }, |
1403 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1577 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1404 | "id": "settings.navigation.yourWorkspaces", | 1578 | "id": "settings.navigation.yourWorkspaces", |
1405 | "start": { | 1579 | "start": { |
1406 | "column": 18, | 1580 | "column": 18, |
1407 | "line": 21 | 1581 | "line": 22 |
1408 | } | 1582 | } |
1409 | }, | 1583 | }, |
1410 | { | 1584 | { |
1411 | "defaultMessage": "!!!Account", | 1585 | "defaultMessage": "!!!Account", |
1412 | "end": { | 1586 | "end": { |
1413 | "column": 3, | 1587 | "column": 3, |
1414 | "line": 28 | 1588 | "line": 29 |
1415 | }, | 1589 | }, |
1416 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1590 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1417 | "id": "settings.navigation.account", | 1591 | "id": "settings.navigation.account", |
1418 | "start": { | 1592 | "start": { |
1419 | "column": 11, | 1593 | "column": 11, |
1420 | "line": 25 | 1594 | "line": 26 |
1421 | } | 1595 | } |
1422 | }, | 1596 | }, |
1423 | { | 1597 | { |
1424 | "defaultMessage": "!!!Manage Team", | 1598 | "defaultMessage": "!!!Manage Team", |
1425 | "end": { | 1599 | "end": { |
1426 | "column": 3, | 1600 | "column": 3, |
1427 | "line": 32 | 1601 | "line": 33 |
1428 | }, | 1602 | }, |
1429 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1603 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1430 | "id": "settings.navigation.team", | 1604 | "id": "settings.navigation.team", |
1431 | "start": { | 1605 | "start": { |
1432 | "column": 8, | 1606 | "column": 8, |
1433 | "line": 29 | 1607 | "line": 30 |
1434 | } | 1608 | } |
1435 | }, | 1609 | }, |
1436 | { | 1610 | { |
1437 | "defaultMessage": "!!!Settings", | 1611 | "defaultMessage": "!!!Settings", |
1438 | "end": { | 1612 | "end": { |
1439 | "column": 3, | 1613 | "column": 3, |
1440 | "line": 36 | 1614 | "line": 37 |
1441 | }, | 1615 | }, |
1442 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1616 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1443 | "id": "settings.navigation.settings", | 1617 | "id": "settings.navigation.settings", |
1444 | "start": { | 1618 | "start": { |
1445 | "column": 12, | 1619 | "column": 12, |
1446 | "line": 33 | 1620 | "line": 34 |
1447 | } | 1621 | } |
1448 | }, | 1622 | }, |
1449 | { | 1623 | { |
1450 | "defaultMessage": "!!!Invite Friends", | 1624 | "defaultMessage": "!!!Invite Friends", |
1451 | "end": { | 1625 | "end": { |
1452 | "column": 3, | 1626 | "column": 3, |
1453 | "line": 40 | 1627 | "line": 41 |
1454 | }, | 1628 | }, |
1455 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1629 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1456 | "id": "settings.navigation.inviteFriends", | 1630 | "id": "settings.navigation.inviteFriends", |
1457 | "start": { | 1631 | "start": { |
1458 | "column": 17, | 1632 | "column": 17, |
1459 | "line": 37 | 1633 | "line": 38 |
1460 | } | 1634 | } |
1461 | }, | 1635 | }, |
1462 | { | 1636 | { |
1463 | "defaultMessage": "!!!Logout", | 1637 | "defaultMessage": "!!!Logout", |
1464 | "end": { | 1638 | "end": { |
1465 | "column": 3, | 1639 | "column": 3, |
1466 | "line": 44 | 1640 | "line": 45 |
1467 | }, | 1641 | }, |
1468 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1642 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1469 | "id": "settings.navigation.logout", | 1643 | "id": "settings.navigation.logout", |
1470 | "start": { | 1644 | "start": { |
1471 | "column": 10, | 1645 | "column": 10, |
1472 | "line": 41 | 1646 | "line": 42 |
1473 | } | 1647 | } |
1474 | } | 1648 | } |
1475 | ], | 1649 | ], |
@@ -1481,104 +1655,182 @@ | |||
1481 | "defaultMessage": "!!!Available Services", | 1655 | "defaultMessage": "!!!Available Services", |
1482 | "end": { | 1656 | "end": { |
1483 | "column": 3, | 1657 | "column": 3, |
1484 | "line": 18 | 1658 | "line": 23 |
1485 | }, | 1659 | }, |
1486 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1660 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1487 | "id": "settings.recipes.headline", | 1661 | "id": "settings.recipes.headline", |
1488 | "start": { | 1662 | "start": { |
1489 | "column": 12, | 1663 | "column": 12, |
1490 | "line": 15 | 1664 | "line": 20 |
1491 | } | 1665 | } |
1492 | }, | 1666 | }, |
1493 | { | 1667 | { |
1494 | "defaultMessage": "!!!Search service", | 1668 | "defaultMessage": "!!!Search service", |
1495 | "end": { | 1669 | "end": { |
1496 | "column": 3, | 1670 | "column": 3, |
1497 | "line": 22 | 1671 | "line": 27 |
1498 | }, | 1672 | }, |
1499 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1673 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1500 | "id": "settings.searchService", | 1674 | "id": "settings.searchService", |
1501 | "start": { | 1675 | "start": { |
1502 | "column": 17, | 1676 | "column": 17, |
1503 | "line": 19 | 1677 | "line": 24 |
1504 | } | 1678 | } |
1505 | }, | 1679 | }, |
1506 | { | 1680 | { |
1507 | "defaultMessage": "!!!Most popular", | 1681 | "defaultMessage": "!!!Most popular", |
1508 | "end": { | 1682 | "end": { |
1509 | "column": 3, | 1683 | "column": 3, |
1510 | "line": 26 | 1684 | "line": 31 |
1511 | }, | 1685 | }, |
1512 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1686 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1513 | "id": "settings.recipes.mostPopular", | 1687 | "id": "settings.recipes.mostPopular", |
1514 | "start": { | 1688 | "start": { |
1515 | "column": 22, | 1689 | "column": 22, |
1516 | "line": 23 | 1690 | "line": 28 |
1517 | } | 1691 | } |
1518 | }, | 1692 | }, |
1519 | { | 1693 | { |
1520 | "defaultMessage": "!!!All services", | 1694 | "defaultMessage": "!!!All services", |
1521 | "end": { | 1695 | "end": { |
1522 | "column": 3, | 1696 | "column": 3, |
1523 | "line": 30 | 1697 | "line": 35 |
1524 | }, | 1698 | }, |
1525 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1699 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1526 | "id": "settings.recipes.all", | 1700 | "id": "settings.recipes.all", |
1527 | "start": { | 1701 | "start": { |
1528 | "column": 14, | 1702 | "column": 14, |
1529 | "line": 27 | 1703 | "line": 32 |
1530 | } | 1704 | } |
1531 | }, | 1705 | }, |
1532 | { | 1706 | { |
1533 | "defaultMessage": "!!!Development", | 1707 | "defaultMessage": "!!!Custom Services", |
1534 | "end": { | 1708 | "end": { |
1535 | "column": 3, | 1709 | "column": 3, |
1536 | "line": 34 | 1710 | "line": 39 |
1537 | }, | 1711 | }, |
1538 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1712 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1539 | "id": "settings.recipes.dev", | 1713 | "id": "settings.recipes.custom", |
1540 | "start": { | 1714 | "start": { |
1541 | "column": 14, | 1715 | "column": 17, |
1542 | "line": 31 | 1716 | "line": 36 |
1543 | } | 1717 | } |
1544 | }, | 1718 | }, |
1545 | { | 1719 | { |
1546 | "defaultMessage": "!!!Sorry, but no service matched your search term.", | 1720 | "defaultMessage": "!!!Sorry, but no service matched your search term.", |
1547 | "end": { | 1721 | "end": { |
1548 | "column": 3, | 1722 | "column": 3, |
1549 | "line": 38 | 1723 | "line": 43 |
1550 | }, | 1724 | }, |
1551 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1725 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1552 | "id": "settings.recipes.nothingFound", | 1726 | "id": "settings.recipes.nothingFound", |
1553 | "start": { | 1727 | "start": { |
1554 | "column": 16, | 1728 | "column": 16, |
1555 | "line": 35 | 1729 | "line": 40 |
1556 | } | 1730 | } |
1557 | }, | 1731 | }, |
1558 | { | 1732 | { |
1559 | "defaultMessage": "!!!Service successfully added", | 1733 | "defaultMessage": "!!!Service successfully added", |
1560 | "end": { | 1734 | "end": { |
1561 | "column": 3, | 1735 | "column": 3, |
1562 | "line": 42 | 1736 | "line": 47 |
1563 | }, | 1737 | }, |
1564 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1738 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1565 | "id": "settings.recipes.servicesSuccessfulAddedInfo", | 1739 | "id": "settings.recipes.servicesSuccessfulAddedInfo", |
1566 | "start": { | 1740 | "start": { |
1567 | "column": 31, | 1741 | "column": 31, |
1568 | "line": 39 | 1742 | "line": 44 |
1569 | } | 1743 | } |
1570 | }, | 1744 | }, |
1571 | { | 1745 | { |
1572 | "defaultMessage": "!!!Missing a service?", | 1746 | "defaultMessage": "!!!Missing a service?", |
1573 | "end": { | 1747 | "end": { |
1574 | "column": 3, | 1748 | "column": 3, |
1575 | "line": 46 | 1749 | "line": 51 |
1576 | }, | 1750 | }, |
1577 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 1751 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
1578 | "id": "settings.recipes.missingService", | 1752 | "id": "settings.recipes.missingService", |
1579 | "start": { | 1753 | "start": { |
1580 | "column": 18, | 1754 | "column": 18, |
1581 | "line": 43 | 1755 | "line": 48 |
1756 | } | ||
1757 | }, | ||
1758 | { | ||
1759 | "defaultMessage": "!!!To add a custom service, copy the recipe folder into:", | ||
1760 | "end": { | ||
1761 | "column": 3, | ||
1762 | "line": 55 | ||
1763 | }, | ||
1764 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
1765 | "id": "settings.recipes.customService.intro", | ||
1766 | "start": { | ||
1767 | "column": 21, | ||
1768 | "line": 52 | ||
1769 | } | ||
1770 | }, | ||
1771 | { | ||
1772 | "defaultMessage": "!!!Open directory", | ||
1773 | "end": { | ||
1774 | "column": 3, | ||
1775 | "line": 59 | ||
1776 | }, | ||
1777 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
1778 | "id": "settings.recipes.customService.openFolder", | ||
1779 | "start": { | ||
1780 | "column": 14, | ||
1781 | "line": 56 | ||
1782 | } | ||
1783 | }, | ||
1784 | { | ||
1785 | "defaultMessage": "!!!Developer Documentation", | ||
1786 | "end": { | ||
1787 | "column": 3, | ||
1788 | "line": 63 | ||
1789 | }, | ||
1790 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
1791 | "id": "settings.recipes.customService.openDevDocs", | ||
1792 | "start": { | ||
1793 | "column": 15, | ||
1794 | "line": 60 | ||
1795 | } | ||
1796 | }, | ||
1797 | { | ||
1798 | "defaultMessage": "!!!Custom 3rd Party Recipes", | ||
1799 | "end": { | ||
1800 | "column": 3, | ||
1801 | "line": 67 | ||
1802 | }, | ||
1803 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
1804 | "id": "settings.recipes.customService.headline.customRecipes", | ||
1805 | "start": { | ||
1806 | "column": 25, | ||
1807 | "line": 64 | ||
1808 | } | ||
1809 | }, | ||
1810 | { | ||
1811 | "defaultMessage": "!!!Community 3rd Party Recipes", | ||
1812 | "end": { | ||
1813 | "column": 3, | ||
1814 | "line": 71 | ||
1815 | }, | ||
1816 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
1817 | "id": "settings.recipes.customService.headline.communityRecipes", | ||
1818 | "start": { | ||
1819 | "column": 28, | ||
1820 | "line": 68 | ||
1821 | } | ||
1822 | }, | ||
1823 | { | ||
1824 | "defaultMessage": "!!!Your Development Service Recipes", | ||
1825 | "end": { | ||
1826 | "column": 3, | ||
1827 | "line": 75 | ||
1828 | }, | ||
1829 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
1830 | "id": "settings.recipes.customService.headline.devRecipes", | ||
1831 | "start": { | ||
1832 | "column": 22, | ||
1833 | "line": 72 | ||
1582 | } | 1834 | } |
1583 | } | 1835 | } |
1584 | ], | 1836 | ], |
@@ -1590,286 +1842,286 @@ | |||
1590 | "defaultMessage": "!!!Save service", | 1842 | "defaultMessage": "!!!Save service", |
1591 | "end": { | 1843 | "end": { |
1592 | "column": 3, | 1844 | "column": 3, |
1593 | "line": 25 | 1845 | "line": 27 |
1594 | }, | 1846 | }, |
1595 | "file": "src/components/settings/services/EditServiceForm.js", | 1847 | "file": "src/components/settings/services/EditServiceForm.js", |
1596 | "id": "settings.service.form.saveButton", | 1848 | "id": "settings.service.form.saveButton", |
1597 | "start": { | 1849 | "start": { |
1598 | "column": 15, | 1850 | "column": 15, |
1599 | "line": 22 | 1851 | "line": 24 |
1600 | } | 1852 | } |
1601 | }, | 1853 | }, |
1602 | { | 1854 | { |
1603 | "defaultMessage": "!!!Delete Service", | 1855 | "defaultMessage": "!!!Delete Service", |
1604 | "end": { | 1856 | "end": { |
1605 | "column": 3, | 1857 | "column": 3, |
1606 | "line": 29 | 1858 | "line": 31 |
1607 | }, | 1859 | }, |
1608 | "file": "src/components/settings/services/EditServiceForm.js", | 1860 | "file": "src/components/settings/services/EditServiceForm.js", |
1609 | "id": "settings.service.form.deleteButton", | 1861 | "id": "settings.service.form.deleteButton", |
1610 | "start": { | 1862 | "start": { |
1611 | "column": 17, | 1863 | "column": 17, |
1612 | "line": 26 | 1864 | "line": 28 |
1613 | } | 1865 | } |
1614 | }, | 1866 | }, |
1615 | { | 1867 | { |
1616 | "defaultMessage": "!!!Available services", | 1868 | "defaultMessage": "!!!Available services", |
1617 | "end": { | 1869 | "end": { |
1618 | "column": 3, | 1870 | "column": 3, |
1619 | "line": 33 | 1871 | "line": 35 |
1620 | }, | 1872 | }, |
1621 | "file": "src/components/settings/services/EditServiceForm.js", | 1873 | "file": "src/components/settings/services/EditServiceForm.js", |
1622 | "id": "settings.service.form.availableServices", | 1874 | "id": "settings.service.form.availableServices", |
1623 | "start": { | 1875 | "start": { |
1624 | "column": 21, | 1876 | "column": 21, |
1625 | "line": 30 | 1877 | "line": 32 |
1626 | } | 1878 | } |
1627 | }, | 1879 | }, |
1628 | { | 1880 | { |
1629 | "defaultMessage": "!!!Your services", | 1881 | "defaultMessage": "!!!Your services", |
1630 | "end": { | 1882 | "end": { |
1631 | "column": 3, | 1883 | "column": 3, |
1632 | "line": 37 | 1884 | "line": 39 |
1633 | }, | 1885 | }, |
1634 | "file": "src/components/settings/services/EditServiceForm.js", | 1886 | "file": "src/components/settings/services/EditServiceForm.js", |
1635 | "id": "settings.service.form.yourServices", | 1887 | "id": "settings.service.form.yourServices", |
1636 | "start": { | 1888 | "start": { |
1637 | "column": 16, | 1889 | "column": 16, |
1638 | "line": 34 | 1890 | "line": 36 |
1639 | } | 1891 | } |
1640 | }, | 1892 | }, |
1641 | { | 1893 | { |
1642 | "defaultMessage": "!!!Add {name}", | 1894 | "defaultMessage": "!!!Add {name}", |
1643 | "end": { | 1895 | "end": { |
1644 | "column": 3, | 1896 | "column": 3, |
1645 | "line": 41 | 1897 | "line": 43 |
1646 | }, | 1898 | }, |
1647 | "file": "src/components/settings/services/EditServiceForm.js", | 1899 | "file": "src/components/settings/services/EditServiceForm.js", |
1648 | "id": "settings.service.form.addServiceHeadline", | 1900 | "id": "settings.service.form.addServiceHeadline", |
1649 | "start": { | 1901 | "start": { |
1650 | "column": 22, | 1902 | "column": 22, |
1651 | "line": 38 | 1903 | "line": 40 |
1652 | } | 1904 | } |
1653 | }, | 1905 | }, |
1654 | { | 1906 | { |
1655 | "defaultMessage": "!!!Edit {name}", | 1907 | "defaultMessage": "!!!Edit {name}", |
1656 | "end": { | 1908 | "end": { |
1657 | "column": 3, | 1909 | "column": 3, |
1658 | "line": 45 | 1910 | "line": 47 |
1659 | }, | 1911 | }, |
1660 | "file": "src/components/settings/services/EditServiceForm.js", | 1912 | "file": "src/components/settings/services/EditServiceForm.js", |
1661 | "id": "settings.service.form.editServiceHeadline", | 1913 | "id": "settings.service.form.editServiceHeadline", |
1662 | "start": { | 1914 | "start": { |
1663 | "column": 23, | 1915 | "column": 23, |
1664 | "line": 42 | 1916 | "line": 44 |
1665 | } | 1917 | } |
1666 | }, | 1918 | }, |
1667 | { | 1919 | { |
1668 | "defaultMessage": "!!!Hosted", | 1920 | "defaultMessage": "!!!Hosted", |
1669 | "end": { | 1921 | "end": { |
1670 | "column": 3, | 1922 | "column": 3, |
1671 | "line": 49 | 1923 | "line": 51 |
1672 | }, | 1924 | }, |
1673 | "file": "src/components/settings/services/EditServiceForm.js", | 1925 | "file": "src/components/settings/services/EditServiceForm.js", |
1674 | "id": "settings.service.form.tabHosted", | 1926 | "id": "settings.service.form.tabHosted", |
1675 | "start": { | 1927 | "start": { |
1676 | "column": 13, | 1928 | "column": 13, |
1677 | "line": 46 | 1929 | "line": 48 |
1678 | } | 1930 | } |
1679 | }, | 1931 | }, |
1680 | { | 1932 | { |
1681 | "defaultMessage": "!!!Self hosted âï¸", | 1933 | "defaultMessage": "!!!Self hosted âï¸", |
1682 | "end": { | 1934 | "end": { |
1683 | "column": 3, | 1935 | "column": 3, |
1684 | "line": 53 | 1936 | "line": 55 |
1685 | }, | 1937 | }, |
1686 | "file": "src/components/settings/services/EditServiceForm.js", | 1938 | "file": "src/components/settings/services/EditServiceForm.js", |
1687 | "id": "settings.service.form.tabOnPremise", | 1939 | "id": "settings.service.form.tabOnPremise", |
1688 | "start": { | 1940 | "start": { |
1689 | "column": 16, | 1941 | "column": 16, |
1690 | "line": 50 | 1942 | "line": 52 |
1691 | } | 1943 | } |
1692 | }, | 1944 | }, |
1693 | { | 1945 | { |
1694 | "defaultMessage": "!!!Use the hosted {name} service.", | 1946 | "defaultMessage": "!!!Use the hosted {name} service.", |
1695 | "end": { | 1947 | "end": { |
1696 | "column": 3, | 1948 | "column": 3, |
1697 | "line": 57 | 1949 | "line": 59 |
1698 | }, | 1950 | }, |
1699 | "file": "src/components/settings/services/EditServiceForm.js", | 1951 | "file": "src/components/settings/services/EditServiceForm.js", |
1700 | "id": "settings.service.form.useHostedService", | 1952 | "id": "settings.service.form.useHostedService", |
1701 | "start": { | 1953 | "start": { |
1702 | "column": 20, | 1954 | "column": 20, |
1703 | "line": 54 | 1955 | "line": 56 |
1704 | } | 1956 | } |
1705 | }, | 1957 | }, |
1706 | { | 1958 | { |
1707 | "defaultMessage": "!!!Could not validate custom {name} server.", | 1959 | "defaultMessage": "!!!Could not validate custom {name} server.", |
1708 | "end": { | 1960 | "end": { |
1709 | "column": 3, | 1961 | "column": 3, |
1710 | "line": 61 | 1962 | "line": 63 |
1711 | }, | 1963 | }, |
1712 | "file": "src/components/settings/services/EditServiceForm.js", | 1964 | "file": "src/components/settings/services/EditServiceForm.js", |
1713 | "id": "settings.service.form.customUrlValidationError", | 1965 | "id": "settings.service.form.customUrlValidationError", |
1714 | "start": { | 1966 | "start": { |
1715 | "column": 28, | 1967 | "column": 28, |
1716 | "line": 58 | 1968 | "line": 60 |
1717 | } | 1969 | } |
1718 | }, | 1970 | }, |
1719 | { | 1971 | { |
1720 | "defaultMessage": "!!!To add self hosted services, you need a Ferdi Premium Supporter Account.", | 1972 | "defaultMessage": "!!!To add self hosted services, you need a Ferdi Premium Supporter Account.", |
1721 | "end": { | 1973 | "end": { |
1722 | "column": 3, | 1974 | "column": 3, |
1723 | "line": 65 | 1975 | "line": 67 |
1724 | }, | 1976 | }, |
1725 | "file": "src/components/settings/services/EditServiceForm.js", | 1977 | "file": "src/components/settings/services/EditServiceForm.js", |
1726 | "id": "settings.service.form.customUrlPremiumInfo", | 1978 | "id": "settings.service.form.customUrlPremiumInfo", |
1727 | "start": { | 1979 | "start": { |
1728 | "column": 24, | 1980 | "column": 24, |
1729 | "line": 62 | 1981 | "line": 64 |
1730 | } | 1982 | } |
1731 | }, | 1983 | }, |
1732 | { | 1984 | { |
1733 | "defaultMessage": "!!!Upgrade your account", | 1985 | "defaultMessage": "!!!Upgrade your account", |
1734 | "end": { | 1986 | "end": { |
1735 | "column": 3, | 1987 | "column": 3, |
1736 | "line": 69 | 1988 | "line": 71 |
1737 | }, | 1989 | }, |
1738 | "file": "src/components/settings/services/EditServiceForm.js", | 1990 | "file": "src/components/settings/services/EditServiceForm.js", |
1739 | "id": "settings.service.form.customUrlUpgradeAccount", | 1991 | "id": "settings.service.form.customUrlUpgradeAccount", |
1740 | "start": { | 1992 | "start": { |
1741 | "column": 27, | 1993 | "column": 27, |
1742 | "line": 66 | 1994 | "line": 68 |
1743 | } | 1995 | } |
1744 | }, | 1996 | }, |
1745 | { | 1997 | { |
1746 | "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", | 1998 | "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", |
1747 | "end": { | 1999 | "end": { |
1748 | "column": 3, | 2000 | "column": 3, |
1749 | "line": 73 | 2001 | "line": 75 |
1750 | }, | 2002 | }, |
1751 | "file": "src/components/settings/services/EditServiceForm.js", | 2003 | "file": "src/components/settings/services/EditServiceForm.js", |
1752 | "id": "settings.service.form.indirectMessageInfo", | 2004 | "id": "settings.service.form.indirectMessageInfo", |
1753 | "start": { | 2005 | "start": { |
1754 | "column": 23, | 2006 | "column": 23, |
1755 | "line": 70 | 2007 | "line": 72 |
1756 | } | 2008 | } |
1757 | }, | 2009 | }, |
1758 | { | 2010 | { |
1759 | "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", | 2011 | "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", |
1760 | "end": { | 2012 | "end": { |
1761 | "column": 3, | 2013 | "column": 3, |
1762 | "line": 77 | 2014 | "line": 79 |
1763 | }, | 2015 | }, |
1764 | "file": "src/components/settings/services/EditServiceForm.js", | 2016 | "file": "src/components/settings/services/EditServiceForm.js", |
1765 | "id": "settings.service.form.isMutedInfo", | 2017 | "id": "settings.service.form.isMutedInfo", |
1766 | "start": { | 2018 | "start": { |
1767 | "column": 15, | 2019 | "column": 15, |
1768 | "line": 74 | 2020 | "line": 76 |
1769 | } | 2021 | } |
1770 | }, | 2022 | }, |
1771 | { | 2023 | { |
1772 | "defaultMessage": "!!!Notifications", | 2024 | "defaultMessage": "!!!Notifications", |
1773 | "end": { | 2025 | "end": { |
1774 | "column": 3, | 2026 | "column": 3, |
1775 | "line": 81 | 2027 | "line": 83 |
1776 | }, | 2028 | }, |
1777 | "file": "src/components/settings/services/EditServiceForm.js", | 2029 | "file": "src/components/settings/services/EditServiceForm.js", |
1778 | "id": "settings.service.form.headlineNotifications", | 2030 | "id": "settings.service.form.headlineNotifications", |
1779 | "start": { | 2031 | "start": { |
1780 | "column": 25, | 2032 | "column": 25, |
1781 | "line": 78 | 2033 | "line": 80 |
1782 | } | 2034 | } |
1783 | }, | 2035 | }, |
1784 | { | 2036 | { |
1785 | "defaultMessage": "!!!Unread message badges", | 2037 | "defaultMessage": "!!!Unread message badges", |
1786 | "end": { | 2038 | "end": { |
1787 | "column": 3, | 2039 | "column": 3, |
1788 | "line": 85 | 2040 | "line": 87 |
1789 | }, | 2041 | }, |
1790 | "file": "src/components/settings/services/EditServiceForm.js", | 2042 | "file": "src/components/settings/services/EditServiceForm.js", |
1791 | "id": "settings.service.form.headlineBadges", | 2043 | "id": "settings.service.form.headlineBadges", |
1792 | "start": { | 2044 | "start": { |
1793 | "column": 18, | 2045 | "column": 18, |
1794 | "line": 82 | 2046 | "line": 84 |
1795 | } | 2047 | } |
1796 | }, | 2048 | }, |
1797 | { | 2049 | { |
1798 | "defaultMessage": "!!!General", | 2050 | "defaultMessage": "!!!General", |
1799 | "end": { | 2051 | "end": { |
1800 | "column": 3, | 2052 | "column": 3, |
1801 | "line": 89 | 2053 | "line": 91 |
1802 | }, | 2054 | }, |
1803 | "file": "src/components/settings/services/EditServiceForm.js", | 2055 | "file": "src/components/settings/services/EditServiceForm.js", |
1804 | "id": "settings.service.form.headlineGeneral", | 2056 | "id": "settings.service.form.headlineGeneral", |
1805 | "start": { | 2057 | "start": { |
1806 | "column": 19, | 2058 | "column": 19, |
1807 | "line": 86 | 2059 | "line": 88 |
1808 | } | 2060 | } |
1809 | }, | 2061 | }, |
1810 | { | 2062 | { |
1811 | "defaultMessage": "!!!Delete", | 2063 | "defaultMessage": "!!!Delete", |
1812 | "end": { | 2064 | "end": { |
1813 | "column": 3, | 2065 | "column": 3, |
1814 | "line": 93 | 2066 | "line": 95 |
1815 | }, | 2067 | }, |
1816 | "file": "src/components/settings/services/EditServiceForm.js", | 2068 | "file": "src/components/settings/services/EditServiceForm.js", |
1817 | "id": "settings.service.form.iconDelete", | 2069 | "id": "settings.service.form.iconDelete", |
1818 | "start": { | 2070 | "start": { |
1819 | "column": 14, | 2071 | "column": 14, |
1820 | "line": 90 | 2072 | "line": 92 |
1821 | } | 2073 | } |
1822 | }, | 2074 | }, |
1823 | { | 2075 | { |
1824 | "defaultMessage": "!!!Drop your image, or click here", | 2076 | "defaultMessage": "!!!Drop your image, or click here", |
1825 | "end": { | 2077 | "end": { |
1826 | "column": 3, | 2078 | "column": 3, |
1827 | "line": 97 | 2079 | "line": 99 |
1828 | }, | 2080 | }, |
1829 | "file": "src/components/settings/services/EditServiceForm.js", | 2081 | "file": "src/components/settings/services/EditServiceForm.js", |
1830 | "id": "settings.service.form.iconUpload", | 2082 | "id": "settings.service.form.iconUpload", |
1831 | "start": { | 2083 | "start": { |
1832 | "column": 14, | 2084 | "column": 14, |
1833 | "line": 94 | 2085 | "line": 96 |
1834 | } | 2086 | } |
1835 | }, | 2087 | }, |
1836 | { | 2088 | { |
1837 | "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", | 2089 | "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", |
1838 | "end": { | 2090 | "end": { |
1839 | "column": 3, | 2091 | "column": 3, |
1840 | "line": 101 | 2092 | "line": 103 |
1841 | }, | 2093 | }, |
1842 | "file": "src/components/settings/services/EditServiceForm.js", | 2094 | "file": "src/components/settings/services/EditServiceForm.js", |
1843 | "id": "settings.service.form.proxy.headline", | 2095 | "id": "settings.service.form.proxy.headline", |
1844 | "start": { | 2096 | "start": { |
1845 | "column": 17, | 2097 | "column": 17, |
1846 | "line": 98 | 2098 | "line": 100 |
1847 | } | 2099 | } |
1848 | }, | 2100 | }, |
1849 | { | 2101 | { |
1850 | "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", | 2102 | "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", |
1851 | "end": { | 2103 | "end": { |
1852 | "column": 3, | 2104 | "column": 3, |
1853 | "line": 105 | 2105 | "line": 107 |
1854 | }, | 2106 | }, |
1855 | "file": "src/components/settings/services/EditServiceForm.js", | 2107 | "file": "src/components/settings/services/EditServiceForm.js", |
1856 | "id": "settings.service.form.proxy.restartInfo", | 2108 | "id": "settings.service.form.proxy.restartInfo", |
1857 | "start": { | 2109 | "start": { |
1858 | "column": 20, | 2110 | "column": 20, |
1859 | "line": 102 | 2111 | "line": 104 |
1860 | } | 2112 | } |
1861 | }, | 2113 | }, |
1862 | { | 2114 | { |
1863 | "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", | 2115 | "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", |
1864 | "end": { | 2116 | "end": { |
1865 | "column": 3, | 2117 | "column": 3, |
1866 | "line": 109 | 2118 | "line": 111 |
1867 | }, | 2119 | }, |
1868 | "file": "src/components/settings/services/EditServiceForm.js", | 2120 | "file": "src/components/settings/services/EditServiceForm.js", |
1869 | "id": "settings.service.form.proxy.info", | 2121 | "id": "settings.service.form.proxy.info", |
1870 | "start": { | 2122 | "start": { |
1871 | "column": 13, | 2123 | "column": 13, |
1872 | "line": 106 | 2124 | "line": 108 |
1873 | } | 2125 | } |
1874 | } | 2126 | } |
1875 | ], | 2127 | ], |
@@ -1982,117 +2234,117 @@ | |||
1982 | "defaultMessage": "!!!Your services", | 2234 | "defaultMessage": "!!!Your services", |
1983 | "end": { | 2235 | "end": { |
1984 | "column": 3, | 2236 | "column": 3, |
1985 | "line": 17 | 2237 | "line": 18 |
1986 | }, | 2238 | }, |
1987 | "file": "src/components/settings/services/ServicesDashboard.js", | 2239 | "file": "src/components/settings/services/ServicesDashboard.js", |
1988 | "id": "settings.services.headline", | 2240 | "id": "settings.services.headline", |
1989 | "start": { | 2241 | "start": { |
1990 | "column": 12, | 2242 | "column": 12, |
1991 | "line": 14 | 2243 | "line": 15 |
1992 | } | 2244 | } |
1993 | }, | 2245 | }, |
1994 | { | 2246 | { |
1995 | "defaultMessage": "!!!Search service", | 2247 | "defaultMessage": "!!!Search service", |
1996 | "end": { | 2248 | "end": { |
1997 | "column": 3, | 2249 | "column": 3, |
1998 | "line": 21 | 2250 | "line": 22 |
1999 | }, | 2251 | }, |
2000 | "file": "src/components/settings/services/ServicesDashboard.js", | 2252 | "file": "src/components/settings/services/ServicesDashboard.js", |
2001 | "id": "settings.searchService", | 2253 | "id": "settings.searchService", |
2002 | "start": { | 2254 | "start": { |
2003 | "column": 17, | 2255 | "column": 17, |
2004 | "line": 18 | 2256 | "line": 19 |
2005 | } | 2257 | } |
2006 | }, | 2258 | }, |
2007 | { | 2259 | { |
2008 | "defaultMessage": "!!!You haven't added any services yet.", | 2260 | "defaultMessage": "!!!You haven't added any services yet.", |
2009 | "end": { | 2261 | "end": { |
2010 | "column": 3, | 2262 | "column": 3, |
2011 | "line": 25 | 2263 | "line": 26 |
2012 | }, | 2264 | }, |
2013 | "file": "src/components/settings/services/ServicesDashboard.js", | 2265 | "file": "src/components/settings/services/ServicesDashboard.js", |
2014 | "id": "settings.services.noServicesAdded", | 2266 | "id": "settings.services.noServicesAdded", |
2015 | "start": { | 2267 | "start": { |
2016 | "column": 19, | 2268 | "column": 19, |
2017 | "line": 22 | 2269 | "line": 23 |
2018 | } | 2270 | } |
2019 | }, | 2271 | }, |
2020 | { | 2272 | { |
2021 | "defaultMessage": "!!!Sorry, but no service matched your search term.", | 2273 | "defaultMessage": "!!!Sorry, but no service matched your search term.", |
2022 | "end": { | 2274 | "end": { |
2023 | "column": 3, | 2275 | "column": 3, |
2024 | "line": 29 | 2276 | "line": 30 |
2025 | }, | 2277 | }, |
2026 | "file": "src/components/settings/services/ServicesDashboard.js", | 2278 | "file": "src/components/settings/services/ServicesDashboard.js", |
2027 | "id": "settings.recipes.nothingFound", | 2279 | "id": "settings.recipes.nothingFound", |
2028 | "start": { | 2280 | "start": { |
2029 | "column": 18, | 2281 | "column": 18, |
2030 | "line": 26 | 2282 | "line": 27 |
2031 | } | 2283 | } |
2032 | }, | 2284 | }, |
2033 | { | 2285 | { |
2034 | "defaultMessage": "!!!Discover services", | 2286 | "defaultMessage": "!!!Discover services", |
2035 | "end": { | 2287 | "end": { |
2036 | "column": 3, | 2288 | "column": 3, |
2037 | "line": 33 | 2289 | "line": 34 |
2038 | }, | 2290 | }, |
2039 | "file": "src/components/settings/services/ServicesDashboard.js", | 2291 | "file": "src/components/settings/services/ServicesDashboard.js", |
2040 | "id": "settings.services.discoverServices", | 2292 | "id": "settings.services.discoverServices", |
2041 | "start": { | 2293 | "start": { |
2042 | "column": 20, | 2294 | "column": 20, |
2043 | "line": 30 | 2295 | "line": 31 |
2044 | } | 2296 | } |
2045 | }, | 2297 | }, |
2046 | { | 2298 | { |
2047 | "defaultMessage": "!!!Could not load your services", | 2299 | "defaultMessage": "!!!Could not load your services", |
2048 | "end": { | 2300 | "end": { |
2049 | "column": 3, | 2301 | "column": 3, |
2050 | "line": 37 | 2302 | "line": 38 |
2051 | }, | 2303 | }, |
2052 | "file": "src/components/settings/services/ServicesDashboard.js", | 2304 | "file": "src/components/settings/services/ServicesDashboard.js", |
2053 | "id": "settings.services.servicesRequestFailed", | 2305 | "id": "settings.services.servicesRequestFailed", |
2054 | "start": { | 2306 | "start": { |
2055 | "column": 25, | 2307 | "column": 25, |
2056 | "line": 34 | 2308 | "line": 35 |
2057 | } | 2309 | } |
2058 | }, | 2310 | }, |
2059 | { | 2311 | { |
2060 | "defaultMessage": "!!!Try again", | 2312 | "defaultMessage": "!!!Try again", |
2061 | "end": { | 2313 | "end": { |
2062 | "column": 3, | 2314 | "column": 3, |
2063 | "line": 41 | 2315 | "line": 42 |
2064 | }, | 2316 | }, |
2065 | "file": "src/components/settings/services/ServicesDashboard.js", | 2317 | "file": "src/components/settings/services/ServicesDashboard.js", |
2066 | "id": "settings.account.tryReloadServices", | 2318 | "id": "settings.account.tryReloadServices", |
2067 | "start": { | 2319 | "start": { |
2068 | "column": 21, | 2320 | "column": 21, |
2069 | "line": 38 | 2321 | "line": 39 |
2070 | } | 2322 | } |
2071 | }, | 2323 | }, |
2072 | { | 2324 | { |
2073 | "defaultMessage": "!!!Your changes have been saved", | 2325 | "defaultMessage": "!!!Your changes have been saved", |
2074 | "end": { | 2326 | "end": { |
2075 | "column": 3, | 2327 | "column": 3, |
2076 | "line": 45 | 2328 | "line": 46 |
2077 | }, | 2329 | }, |
2078 | "file": "src/components/settings/services/ServicesDashboard.js", | 2330 | "file": "src/components/settings/services/ServicesDashboard.js", |
2079 | "id": "settings.services.updatedInfo", | 2331 | "id": "settings.services.updatedInfo", |
2080 | "start": { | 2332 | "start": { |
2081 | "column": 15, | 2333 | "column": 15, |
2082 | "line": 42 | 2334 | "line": 43 |
2083 | } | 2335 | } |
2084 | }, | 2336 | }, |
2085 | { | 2337 | { |
2086 | "defaultMessage": "!!!Service has been deleted", | 2338 | "defaultMessage": "!!!Service has been deleted", |
2087 | "end": { | 2339 | "end": { |
2088 | "column": 3, | 2340 | "column": 3, |
2089 | "line": 49 | 2341 | "line": 50 |
2090 | }, | 2342 | }, |
2091 | "file": "src/components/settings/services/ServicesDashboard.js", | 2343 | "file": "src/components/settings/services/ServicesDashboard.js", |
2092 | "id": "settings.services.deletedInfo", | 2344 | "id": "settings.services.deletedInfo", |
2093 | "start": { | 2345 | "start": { |
2094 | "column": 15, | 2346 | "column": 15, |
2095 | "line": 46 | 2347 | "line": 47 |
2096 | } | 2348 | } |
2097 | } | 2349 | } |
2098 | ], | 2350 | ], |
@@ -2356,78 +2608,78 @@ | |||
2356 | "defaultMessage": "!!!Team", | 2608 | "defaultMessage": "!!!Team", |
2357 | "end": { | 2609 | "end": { |
2358 | "column": 3, | 2610 | "column": 3, |
2359 | "line": 17 | 2611 | "line": 20 |
2360 | }, | 2612 | }, |
2361 | "file": "src/components/settings/team/TeamDashboard.js", | 2613 | "file": "src/components/settings/team/TeamDashboard.js", |
2362 | "id": "settings.team.headline", | 2614 | "id": "settings.team.headline", |
2363 | "start": { | 2615 | "start": { |
2364 | "column": 12, | 2616 | "column": 12, |
2365 | "line": 14 | 2617 | "line": 17 |
2366 | } | 2618 | } |
2367 | }, | 2619 | }, |
2368 | { | 2620 | { |
2369 | "defaultMessage": "!!!Ferdi for Teams", | 2621 | "defaultMessage": "!!!Ferdi for Teams", |
2370 | "end": { | 2622 | "end": { |
2371 | "column": 3, | 2623 | "column": 3, |
2372 | "line": 21 | 2624 | "line": 24 |
2373 | }, | 2625 | }, |
2374 | "file": "src/components/settings/team/TeamDashboard.js", | 2626 | "file": "src/components/settings/team/TeamDashboard.js", |
2375 | "id": "settings.team.contentHeadline", | 2627 | "id": "settings.team.contentHeadline", |
2376 | "start": { | 2628 | "start": { |
2377 | "column": 19, | 2629 | "column": 19, |
2378 | "line": 18 | 2630 | "line": 21 |
2379 | } | 2631 | } |
2380 | }, | 2632 | }, |
2381 | { | 2633 | { |
2382 | "defaultMessage": "!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", | 2634 | "defaultMessage": "!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", |
2383 | "end": { | 2635 | "end": { |
2384 | "column": 3, | 2636 | "column": 3, |
2385 | "line": 25 | 2637 | "line": 28 |
2386 | }, | 2638 | }, |
2387 | "file": "src/components/settings/team/TeamDashboard.js", | 2639 | "file": "src/components/settings/team/TeamDashboard.js", |
2388 | "id": "settings.team.intro", | 2640 | "id": "settings.team.intro", |
2389 | "start": { | 2641 | "start": { |
2390 | "column": 9, | 2642 | "column": 9, |
2391 | "line": 22 | 2643 | "line": 25 |
2392 | } | 2644 | } |
2393 | }, | 2645 | }, |
2394 | { | 2646 | { |
2395 | "defaultMessage": "!!!Ferdi for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", | 2647 | "defaultMessage": "!!!Ferdi for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", |
2396 | "end": { | 2648 | "end": { |
2397 | "column": 3, | 2649 | "column": 3, |
2398 | "line": 29 | 2650 | "line": 32 |
2399 | }, | 2651 | }, |
2400 | "file": "src/components/settings/team/TeamDashboard.js", | 2652 | "file": "src/components/settings/team/TeamDashboard.js", |
2401 | "id": "settings.team.copy", | 2653 | "id": "settings.team.copy", |
2402 | "start": { | 2654 | "start": { |
2403 | "column": 8, | 2655 | "column": 8, |
2404 | "line": 26 | 2656 | "line": 29 |
2405 | } | 2657 | } |
2406 | }, | 2658 | }, |
2407 | { | 2659 | { |
2408 | "defaultMessage": "!!!Manage your Team on meetfranz.com", | 2660 | "defaultMessage": "!!!Manage your Team on meetfranz.com", |
2409 | "end": { | 2661 | "end": { |
2410 | "column": 3, | 2662 | "column": 3, |
2411 | "line": 33 | 2663 | "line": 36 |
2412 | }, | 2664 | }, |
2413 | "file": "src/components/settings/team/TeamDashboard.js", | 2665 | "file": "src/components/settings/team/TeamDashboard.js", |
2414 | "id": "settings.team.manageAction", | 2666 | "id": "settings.team.manageAction", |
2415 | "start": { | 2667 | "start": { |
2416 | "column": 16, | 2668 | "column": 16, |
2417 | "line": 30 | 2669 | "line": 33 |
2418 | } | 2670 | } |
2419 | }, | 2671 | }, |
2420 | { | 2672 | { |
2421 | "defaultMessage": "!!!Upgrade your Account", | 2673 | "defaultMessage": "!!!Upgrade your Account", |
2422 | "end": { | 2674 | "end": { |
2423 | "column": 3, | 2675 | "column": 3, |
2424 | "line": 37 | 2676 | "line": 40 |
2425 | }, | 2677 | }, |
2426 | "file": "src/components/settings/team/TeamDashboard.js", | 2678 | "file": "src/components/settings/team/TeamDashboard.js", |
2427 | "id": "settings.team.upgradeAction", | 2679 | "id": "settings.team.upgradeAction", |
2428 | "start": { | 2680 | "start": { |
2429 | "column": 17, | 2681 | "column": 17, |
2430 | "line": 34 | 2682 | "line": 37 |
2431 | } | 2683 | } |
2432 | } | 2684 | } |
2433 | ], | 2685 | ], |
@@ -2519,220 +2771,435 @@ | |||
2519 | { | 2771 | { |
2520 | "descriptors": [ | 2772 | "descriptors": [ |
2521 | { | 2773 | { |
2522 | "defaultMessage": "!!!Support the development of Franz", | 2774 | "defaultMessage": "!!!Choose your plan", |
2523 | "end": { | 2775 | "end": { |
2524 | "column": 3, | 2776 | "column": 3, |
2777 | "line": 16 | ||
2778 | }, | ||
2779 | "file": "src/components/subscription/SubscriptionForm.js", | ||
2780 | "id": "subscription.cta.choosePlan", | ||
2781 | "start": { | ||
2782 | "column": 21, | ||
2783 | "line": 13 | ||
2784 | } | ||
2785 | }, | ||
2786 | { | ||
2787 | "defaultMessage": "!!!Upgrade your account and get the full Franz experience", | ||
2788 | "end": { | ||
2789 | "column": 3, | ||
2790 | "line": 20 | ||
2791 | }, | ||
2792 | "file": "src/components/subscription/SubscriptionForm.js", | ||
2793 | "id": "settings.account.headlineUpgradeAccount", | ||
2794 | "start": { | ||
2795 | "column": 18, | ||
2525 | "line": 17 | 2796 | "line": 17 |
2797 | } | ||
2798 | }, | ||
2799 | { | ||
2800 | "defaultMessage": "!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
2801 | "end": { | ||
2802 | "column": 3, | ||
2803 | "line": 24 | ||
2526 | }, | 2804 | }, |
2527 | "file": "src/components/subscription/SubscriptionForm.js", | 2805 | "file": "src/components/subscription/SubscriptionForm.js", |
2528 | "id": "subscription.submit.label", | 2806 | "id": "subscription.teaser.intro", |
2807 | "start": { | ||
2808 | "column": 14, | ||
2809 | "line": 21 | ||
2810 | } | ||
2811 | }, | ||
2812 | { | ||
2813 | "defaultMessage": "!!!Paid Franz Plans include:", | ||
2814 | "end": { | ||
2815 | "column": 3, | ||
2816 | "line": 28 | ||
2817 | }, | ||
2818 | "file": "src/components/subscription/SubscriptionForm.js", | ||
2819 | "id": "subscription.teaser.includedFeatures", | ||
2820 | "start": { | ||
2821 | "column": 20, | ||
2822 | "line": 25 | ||
2823 | } | ||
2824 | } | ||
2825 | ], | ||
2826 | "path": "src/components/subscription/SubscriptionForm.json" | ||
2827 | }, | ||
2828 | { | ||
2829 | "descriptors": [ | ||
2830 | { | ||
2831 | "defaultMessage": "!!!Cancel", | ||
2832 | "end": { | ||
2833 | "column": 3, | ||
2834 | "line": 14 | ||
2835 | }, | ||
2836 | "file": "src/components/subscription/SubscriptionPopup.js", | ||
2837 | "id": "subscriptionPopup.buttonCancel", | ||
2838 | "start": { | ||
2839 | "column": 16, | ||
2840 | "line": 11 | ||
2841 | } | ||
2842 | }, | ||
2843 | { | ||
2844 | "defaultMessage": "!!!Done", | ||
2845 | "end": { | ||
2846 | "column": 3, | ||
2847 | "line": 18 | ||
2848 | }, | ||
2849 | "file": "src/components/subscription/SubscriptionPopup.js", | ||
2850 | "id": "subscriptionPopup.buttonDone", | ||
2851 | "start": { | ||
2852 | "column": 14, | ||
2853 | "line": 15 | ||
2854 | } | ||
2855 | } | ||
2856 | ], | ||
2857 | "path": "src/components/subscription/SubscriptionPopup.json" | ||
2858 | }, | ||
2859 | { | ||
2860 | "descriptors": [ | ||
2861 | { | ||
2862 | "defaultMessage": "!!!Yes, start the free Franz Professional trial", | ||
2863 | "end": { | ||
2864 | "column": 3, | ||
2865 | "line": 17 | ||
2866 | }, | ||
2867 | "file": "src/components/subscription/TrialForm.js", | ||
2868 | "id": "subscription.cta.activateTrial", | ||
2529 | "start": { | 2869 | "start": { |
2530 | "column": 21, | 2870 | "column": 21, |
2531 | "line": 14 | 2871 | "line": 14 |
2532 | } | 2872 | } |
2533 | }, | 2873 | }, |
2534 | { | 2874 | { |
2535 | "defaultMessage": "!!!Could not initialize payment form", | 2875 | "defaultMessage": "!!!See all options", |
2536 | "end": { | 2876 | "end": { |
2537 | "column": 3, | 2877 | "column": 3, |
2538 | "line": 21 | 2878 | "line": 21 |
2539 | }, | 2879 | }, |
2540 | "file": "src/components/subscription/SubscriptionForm.js", | 2880 | "file": "src/components/subscription/TrialForm.js", |
2541 | "id": "subscription.paymentSessionError", | 2881 | "id": "subscription.cta.allOptions", |
2542 | "start": { | 2882 | "start": { |
2543 | "column": 23, | 2883 | "column": 20, |
2544 | "line": 18 | 2884 | "line": 18 |
2545 | } | 2885 | } |
2546 | }, | 2886 | }, |
2547 | { | 2887 | { |
2548 | "defaultMessage": "!!!free", | 2888 | "defaultMessage": "!!!Get the free 14 day Franz Professional Trial", |
2549 | "end": { | 2889 | "end": { |
2550 | "column": 3, | 2890 | "column": 3, |
2551 | "line": 25 | 2891 | "line": 25 |
2552 | }, | 2892 | }, |
2553 | "file": "src/components/subscription/SubscriptionForm.js", | 2893 | "file": "src/components/subscription/TrialForm.js", |
2554 | "id": "subscription.type.free", | 2894 | "id": "settings.account.headlineTrialUpgrade", |
2555 | "start": { | 2895 | "start": { |
2556 | "column": 12, | 2896 | "column": 18, |
2557 | "line": 22 | 2897 | "line": 22 |
2558 | } | 2898 | } |
2559 | }, | 2899 | }, |
2560 | { | 2900 | { |
2561 | "defaultMessage": "!!!month", | 2901 | "defaultMessage": "!!!The Franz Professional Plan includes:", |
2562 | "end": { | 2902 | "end": { |
2563 | "column": 3, | 2903 | "column": 3, |
2564 | "line": 29 | 2904 | "line": 29 |
2565 | }, | 2905 | }, |
2566 | "file": "src/components/subscription/SubscriptionForm.js", | 2906 | "file": "src/components/subscription/TrialForm.js", |
2567 | "id": "subscription.type.month", | 2907 | "id": "subscription.includedProFeatures", |
2568 | "start": { | 2908 | "start": { |
2569 | "column": 15, | 2909 | "column": 20, |
2570 | "line": 26 | 2910 | "line": 26 |
2571 | } | 2911 | } |
2572 | }, | 2912 | }, |
2573 | { | 2913 | { |
2574 | "defaultMessage": "!!!year", | 2914 | "defaultMessage": "!!!No strings attached", |
2575 | "end": { | 2915 | "end": { |
2576 | "column": 3, | 2916 | "column": 3, |
2577 | "line": 33 | 2917 | "line": 33 |
2578 | }, | 2918 | }, |
2579 | "file": "src/components/subscription/SubscriptionForm.js", | 2919 | "file": "src/components/subscription/TrialForm.js", |
2580 | "id": "subscription.type.year", | 2920 | "id": "pricing.trial.terms.headline", |
2581 | "start": { | 2921 | "start": { |
2582 | "column": 14, | 2922 | "column": 29, |
2583 | "line": 30 | 2923 | "line": 30 |
2584 | } | 2924 | } |
2585 | }, | 2925 | }, |
2586 | { | 2926 | { |
2587 | "defaultMessage": "!!!The Ferdi Premium Supporter Account includes", | 2927 | "defaultMessage": "!!!No credit card required", |
2588 | "end": { | 2928 | "end": { |
2589 | "column": 3, | 2929 | "column": 3, |
2590 | "line": 37 | 2930 | "line": 37 |
2591 | }, | 2931 | }, |
2592 | "file": "src/components/subscription/SubscriptionForm.js", | 2932 | "file": "src/components/subscription/TrialForm.js", |
2593 | "id": "subscription.includedFeatures", | 2933 | "id": "pricing.trial.terms.noCreditCard", |
2594 | "start": { | 2934 | "start": { |
2595 | "column": 20, | 2935 | "column": 16, |
2596 | "line": 34 | 2936 | "line": 34 |
2597 | } | 2937 | } |
2598 | }, | 2938 | }, |
2599 | { | 2939 | { |
2600 | "defaultMessage": "!!!Add on-premise/hosted services like Mattermost", | 2940 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", |
2601 | "end": { | 2941 | "end": { |
2602 | "column": 3, | 2942 | "column": 3, |
2603 | "line": 41 | 2943 | "line": 41 |
2604 | }, | 2944 | }, |
2605 | "file": "src/components/subscription/SubscriptionForm.js", | 2945 | "file": "src/components/subscription/TrialForm.js", |
2606 | "id": "subscription.features.onpremise.mattermost", | 2946 | "id": "pricing.trial.terms.automaticTrialEnd", |
2607 | "start": { | 2947 | "start": { |
2608 | "column": 13, | 2948 | "column": 21, |
2609 | "line": 38 | 2949 | "line": 38 |
2610 | } | 2950 | } |
2611 | }, | 2951 | } |
2952 | ], | ||
2953 | "path": "src/components/subscription/TrialForm.json" | ||
2954 | }, | ||
2955 | { | ||
2956 | "descriptors": [ | ||
2612 | { | 2957 | { |
2613 | "defaultMessage": "!!!No app delays & nagging to upgrade license", | 2958 | "defaultMessage": "!!!Your trial was successfully activated. Happy messaging!", |
2614 | "end": { | 2959 | "end": { |
2615 | "column": 3, | 2960 | "column": 3, |
2616 | "line": 45 | 2961 | "line": 14 |
2617 | }, | 2962 | }, |
2618 | "file": "src/components/subscription/SubscriptionForm.js", | 2963 | "file": "src/components/TrialActivationInfoBar.js", |
2619 | "id": "subscription.features.noInterruptions", | 2964 | "id": "infobar.trialActivated", |
2620 | "start": { | 2965 | "start": { |
2621 | "column": 19, | 2966 | "column": 11, |
2622 | "line": 42 | 2967 | "line": 11 |
2968 | } | ||
2969 | } | ||
2970 | ], | ||
2971 | "path": "src/components/TrialActivationInfoBar.json" | ||
2972 | }, | ||
2973 | { | ||
2974 | "descriptors": [ | ||
2975 | { | ||
2976 | "defaultMessage": "!!!Get a Franz Supporter License", | ||
2977 | "end": { | ||
2978 | "column": 3, | ||
2979 | "line": 16 | ||
2980 | }, | ||
2981 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
2982 | "id": "feature.delayApp.upgrade.action", | ||
2983 | "start": { | ||
2984 | "column": 10, | ||
2985 | "line": 13 | ||
2623 | } | 2986 | } |
2624 | }, | 2987 | }, |
2625 | { | 2988 | { |
2626 | "defaultMessage": "!!!Proxy support for services", | 2989 | "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", |
2627 | "end": { | 2990 | "end": { |
2628 | "column": 3, | 2991 | "column": 3, |
2629 | "line": 49 | 2992 | "line": 20 |
2630 | }, | 2993 | }, |
2631 | "file": "src/components/subscription/SubscriptionForm.js", | 2994 | "file": "src/components/ui/ActivateTrialButton/index.js", |
2632 | "id": "subscription.features.proxy", | 2995 | "id": "feature.delayApp.trial.action", |
2633 | "start": { | 2996 | "start": { |
2634 | "column": 9, | 2997 | "column": 15, |
2635 | "line": 46 | 2998 | "line": 17 |
2636 | } | 2999 | } |
2637 | }, | 3000 | }, |
2638 | { | 3001 | { |
2639 | "defaultMessage": "!!!Support for Spellchecker", | 3002 | "defaultMessage": "!!!Upgrade account", |
2640 | "end": { | 3003 | "end": { |
2641 | "column": 3, | 3004 | "column": 3, |
2642 | "line": 53 | 3005 | "line": 24 |
2643 | }, | 3006 | }, |
2644 | "file": "src/components/subscription/SubscriptionForm.js", | 3007 | "file": "src/components/ui/ActivateTrialButton/index.js", |
2645 | "id": "subscription.features.spellchecker", | 3008 | "id": "feature.delayApp.upgrade.actionShort", |
2646 | "start": { | 3009 | "start": { |
2647 | "column": 16, | 3010 | "column": 15, |
2648 | "line": 50 | 3011 | "line": 21 |
2649 | } | 3012 | } |
2650 | }, | 3013 | }, |
2651 | { | 3014 | { |
2652 | "defaultMessage": "!!!Organize your services in workspaces", | 3015 | "defaultMessage": "!!!Activate the free Franz Professional trial", |
2653 | "end": { | 3016 | "end": { |
2654 | "column": 3, | 3017 | "column": 3, |
2655 | "line": 57 | 3018 | "line": 28 |
2656 | }, | 3019 | }, |
2657 | "file": "src/components/subscription/SubscriptionForm.js", | 3020 | "file": "src/components/ui/ActivateTrialButton/index.js", |
2658 | "id": "subscription.features.workspaces", | 3021 | "id": "feature.delayApp.trial.actionShort", |
2659 | "start": { | 3022 | "start": { |
2660 | "column": 14, | 3023 | "column": 20, |
2661 | "line": 54 | 3024 | "line": 25 |
2662 | } | 3025 | } |
2663 | }, | 3026 | }, |
2664 | { | 3027 | { |
2665 | "defaultMessage": "!!!No ads, ever!", | 3028 | "defaultMessage": "!!!No strings attached", |
2666 | "end": { | 3029 | "end": { |
2667 | "column": 3, | 3030 | "column": 3, |
2668 | "line": 61 | 3031 | "line": 32 |
2669 | }, | 3032 | }, |
2670 | "file": "src/components/subscription/SubscriptionForm.js", | 3033 | "file": "src/components/ui/ActivateTrialButton/index.js", |
2671 | "id": "subscription.features.ads", | 3034 | "id": "pricing.trial.terms.headline", |
2672 | "start": { | 3035 | "start": { |
2673 | "column": 7, | 3036 | "column": 29, |
2674 | "line": 58 | 3037 | "line": 29 |
2675 | } | 3038 | } |
2676 | }, | 3039 | }, |
2677 | { | 3040 | { |
2678 | "defaultMessage": "!!!coming soon", | 3041 | "defaultMessage": "!!!No credit card required", |
2679 | "end": { | 3042 | "end": { |
2680 | "column": 3, | 3043 | "column": 3, |
2681 | "line": 65 | 3044 | "line": 36 |
2682 | }, | 3045 | }, |
2683 | "file": "src/components/subscription/SubscriptionForm.js", | 3046 | "file": "src/components/ui/ActivateTrialButton/index.js", |
2684 | "id": "subscription.features.comingSoon", | 3047 | "id": "pricing.trial.terms.noCreditCard", |
2685 | "start": { | 3048 | "start": { |
2686 | "column": 14, | 3049 | "column": 16, |
2687 | "line": 62 | 3050 | "line": 33 |
2688 | } | 3051 | } |
2689 | }, | 3052 | }, |
2690 | { | 3053 | { |
2691 | "defaultMessage": "!!!EU residents: local sales tax may apply", | 3054 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", |
2692 | "end": { | 3055 | "end": { |
2693 | "column": 3, | 3056 | "column": 3, |
2694 | "line": 69 | 3057 | "line": 40 |
2695 | }, | 3058 | }, |
2696 | "file": "src/components/subscription/SubscriptionForm.js", | 3059 | "file": "src/components/ui/ActivateTrialButton/index.js", |
2697 | "id": "subscription.euTaxInfo", | 3060 | "id": "pricing.trial.terms.automaticTrialEnd", |
2698 | "start": { | 3061 | "start": { |
2699 | "column": 13, | 3062 | "column": 21, |
2700 | "line": 66 | 3063 | "line": 37 |
2701 | } | 3064 | } |
2702 | } | 3065 | } |
2703 | ], | 3066 | ], |
2704 | "path": "src/components/subscription/SubscriptionForm.json" | 3067 | "path": "src/components/ui/ActivateTrialButton/index.json" |
2705 | }, | 3068 | }, |
2706 | { | 3069 | { |
2707 | "descriptors": [ | 3070 | "descriptors": [ |
2708 | { | 3071 | { |
2709 | "defaultMessage": "!!!Cancel", | 3072 | "defaultMessage": "!!!Add unlimited services", |
2710 | "end": { | 3073 | "end": { |
2711 | "column": 3, | 3074 | "column": 3, |
2712 | "line": 14 | 3075 | "line": 11 |
2713 | }, | 3076 | }, |
2714 | "file": "src/components/subscription/SubscriptionPopup.js", | 3077 | "file": "src/components/ui/FeatureList.js", |
2715 | "id": "subscriptionPopup.buttonCancel", | 3078 | "id": "pricing.features.unlimitedServices", |
3079 | "start": { | ||
3080 | "column": 21, | ||
3081 | "line": 8 | ||
3082 | } | ||
3083 | }, | ||
3084 | { | ||
3085 | "defaultMessage": "!!!Spellchecker support", | ||
3086 | "end": { | ||
3087 | "column": 3, | ||
3088 | "line": 15 | ||
3089 | }, | ||
3090 | "file": "src/components/ui/FeatureList.js", | ||
3091 | "id": "pricing.features.spellchecker", | ||
2716 | "start": { | 3092 | "start": { |
2717 | "column": 16, | 3093 | "column": 16, |
2718 | "line": 11 | 3094 | "line": 12 |
2719 | } | 3095 | } |
2720 | }, | 3096 | }, |
2721 | { | 3097 | { |
2722 | "defaultMessage": "!!!Done", | 3098 | "defaultMessage": "!!!Workspaces", |
2723 | "end": { | 3099 | "end": { |
2724 | "column": 3, | 3100 | "column": 3, |
2725 | "line": 18 | 3101 | "line": 19 |
2726 | }, | 3102 | }, |
2727 | "file": "src/components/subscription/SubscriptionPopup.js", | 3103 | "file": "src/components/ui/FeatureList.js", |
2728 | "id": "subscriptionPopup.buttonDone", | 3104 | "id": "pricing.features.workspaces", |
2729 | "start": { | 3105 | "start": { |
2730 | "column": 14, | 3106 | "column": 14, |
2731 | "line": 15 | 3107 | "line": 16 |
3108 | } | ||
3109 | }, | ||
3110 | { | ||
3111 | "defaultMessage": "!!!Add Custom Websites", | ||
3112 | "end": { | ||
3113 | "column": 3, | ||
3114 | "line": 23 | ||
3115 | }, | ||
3116 | "file": "src/components/ui/FeatureList.js", | ||
3117 | "id": "pricing.features.customWebsites", | ||
3118 | "start": { | ||
3119 | "column": 18, | ||
3120 | "line": 20 | ||
3121 | } | ||
3122 | }, | ||
3123 | { | ||
3124 | "defaultMessage": "!!!On-premise & other Hosted Services", | ||
3125 | "end": { | ||
3126 | "column": 3, | ||
3127 | "line": 27 | ||
3128 | }, | ||
3129 | "file": "src/components/ui/FeatureList.js", | ||
3130 | "id": "pricing.features.onPremise", | ||
3131 | "start": { | ||
3132 | "column": 13, | ||
3133 | "line": 24 | ||
3134 | } | ||
3135 | }, | ||
3136 | { | ||
3137 | "defaultMessage": "!!!Install 3rd party services", | ||
3138 | "end": { | ||
3139 | "column": 3, | ||
3140 | "line": 31 | ||
3141 | }, | ||
3142 | "file": "src/components/ui/FeatureList.js", | ||
3143 | "id": "pricing.features.thirdPartyServices", | ||
3144 | "start": { | ||
3145 | "column": 22, | ||
3146 | "line": 28 | ||
3147 | } | ||
3148 | }, | ||
3149 | { | ||
3150 | "defaultMessage": "!!!Service Proxies", | ||
3151 | "end": { | ||
3152 | "column": 3, | ||
3153 | "line": 35 | ||
3154 | }, | ||
3155 | "file": "src/components/ui/FeatureList.js", | ||
3156 | "id": "pricing.features.serviceProxies", | ||
3157 | "start": { | ||
3158 | "column": 18, | ||
3159 | "line": 32 | ||
3160 | } | ||
3161 | }, | ||
3162 | { | ||
3163 | "defaultMessage": "!!!Team Management", | ||
3164 | "end": { | ||
3165 | "column": 3, | ||
3166 | "line": 39 | ||
3167 | }, | ||
3168 | "file": "src/components/ui/FeatureList.js", | ||
3169 | "id": "pricing.features.teamManagement", | ||
3170 | "start": { | ||
3171 | "column": 18, | ||
3172 | "line": 36 | ||
3173 | } | ||
3174 | }, | ||
3175 | { | ||
3176 | "defaultMessage": "!!!No Waiting Screens", | ||
3177 | "end": { | ||
3178 | "column": 3, | ||
3179 | "line": 43 | ||
3180 | }, | ||
3181 | "file": "src/components/ui/FeatureList.js", | ||
3182 | "id": "pricing.features.appDelays", | ||
3183 | "start": { | ||
3184 | "column": 13, | ||
3185 | "line": 40 | ||
3186 | } | ||
3187 | }, | ||
3188 | { | ||
3189 | "defaultMessage": "!!!Forever ad-free", | ||
3190 | "end": { | ||
3191 | "column": 3, | ||
3192 | "line": 47 | ||
3193 | }, | ||
3194 | "file": "src/components/ui/FeatureList.js", | ||
3195 | "id": "pricing.features.adFree", | ||
3196 | "start": { | ||
3197 | "column": 10, | ||
3198 | "line": 44 | ||
2732 | } | 3199 | } |
2733 | } | 3200 | } |
2734 | ], | 3201 | ], |
2735 | "path": "src/components/subscription/SubscriptionPopup.json" | 3202 | "path": "src/components/ui/FeatureList.json" |
2736 | }, | 3203 | }, |
2737 | { | 3204 | { |
2738 | "descriptors": [ | 3205 | "descriptors": [ |
@@ -2740,13 +3207,13 @@ | |||
2740 | "defaultMessage": "!!!Upgrade account", | 3207 | "defaultMessage": "!!!Upgrade account", |
2741 | "end": { | 3208 | "end": { |
2742 | "column": 3, | 3209 | "column": 3, |
2743 | "line": 17 | 3210 | "line": 19 |
2744 | }, | 3211 | }, |
2745 | "file": "src/components/ui/PremiumFeatureContainer/index.js", | 3212 | "file": "src/components/ui/PremiumFeatureContainer/index.js", |
2746 | "id": "premiumFeature.button.upgradeAccount", | 3213 | "id": "premiumFeature.button.upgradeAccount", |
2747 | "start": { | 3214 | "start": { |
2748 | "column": 10, | 3215 | "column": 10, |
2749 | "line": 14 | 3216 | "line": 16 |
2750 | } | 3217 | } |
2751 | } | 3218 | } |
2752 | ], | 3219 | ], |
@@ -2755,6 +3222,24 @@ | |||
2755 | { | 3222 | { |
2756 | "descriptors": [ | 3223 | "descriptors": [ |
2757 | { | 3224 | { |
3225 | "defaultMessage": "!!!Upgrade to Franz Professional", | ||
3226 | "end": { | ||
3227 | "column": 3, | ||
3228 | "line": 16 | ||
3229 | }, | ||
3230 | "file": "src/components/ui/UpgradeButton/index.js", | ||
3231 | "id": "global.upgradeButton.upgradeToPro", | ||
3232 | "start": { | ||
3233 | "column": 16, | ||
3234 | "line": 13 | ||
3235 | } | ||
3236 | } | ||
3237 | ], | ||
3238 | "path": "src/components/ui/UpgradeButton/index.json" | ||
3239 | }, | ||
3240 | { | ||
3241 | "descriptors": [ | ||
3242 | { | ||
2758 | "defaultMessage": "!!!Loading", | 3243 | "defaultMessage": "!!!Loading", |
2759 | "end": { | 3244 | "end": { |
2760 | "column": 3, | 3245 | "column": 3, |
@@ -3085,90 +3570,103 @@ | |||
3085 | "defaultMessage": "!!!Language", | 3570 | "defaultMessage": "!!!Language", |
3086 | "end": { | 3571 | "end": { |
3087 | "column": 3, | 3572 | "column": 3, |
3088 | "line": 51 | 3573 | "line": 47 |
3089 | }, | 3574 | }, |
3090 | "file": "src/containers/settings/EditSettingsScreen.js", | 3575 | "file": "src/containers/settings/EditSettingsScreen.js", |
3091 | "id": "settings.app.form.language", | 3576 | "id": "settings.app.form.language", |
3092 | "start": { | 3577 | "start": { |
3093 | "column": 12, | 3578 | "column": 12, |
3094 | "line": 48 | 3579 | "line": 44 |
3095 | } | 3580 | } |
3096 | }, | 3581 | }, |
3097 | { | 3582 | { |
3098 | "defaultMessage": "!!!Dark Mode", | 3583 | "defaultMessage": "!!!Dark Mode", |
3099 | "end": { | 3584 | "end": { |
3100 | "column": 3, | 3585 | "column": 3, |
3101 | "line": 55 | 3586 | "line": 51 |
3102 | }, | 3587 | }, |
3103 | "file": "src/containers/settings/EditSettingsScreen.js", | 3588 | "file": "src/containers/settings/EditSettingsScreen.js", |
3104 | "id": "settings.app.form.darkMode", | 3589 | "id": "settings.app.form.darkMode", |
3105 | "start": { | 3590 | "start": { |
3106 | "column": 12, | 3591 | "column": 12, |
3107 | "line": 52 | 3592 | "line": 48 |
3108 | } | 3593 | } |
3109 | }, | 3594 | }, |
3110 | { | 3595 | { |
3111 | "defaultMessage": "!!!Display disabled services tabs", | 3596 | "defaultMessage": "!!!Display disabled services tabs", |
3112 | "end": { | 3597 | "end": { |
3113 | "column": 3, | 3598 | "column": 3, |
3114 | "line": 59 | 3599 | "line": 55 |
3115 | }, | 3600 | }, |
3116 | "file": "src/containers/settings/EditSettingsScreen.js", | 3601 | "file": "src/containers/settings/EditSettingsScreen.js", |
3117 | "id": "settings.app.form.showDisabledServices", | 3602 | "id": "settings.app.form.showDisabledServices", |
3118 | "start": { | 3603 | "start": { |
3119 | "column": 24, | 3604 | "column": 24, |
3120 | "line": 56 | 3605 | "line": 52 |
3121 | } | 3606 | } |
3122 | }, | 3607 | }, |
3123 | { | 3608 | { |
3124 | "defaultMessage": "!!!Show unread message badge when notifications are disabled", | 3609 | "defaultMessage": "!!!Show unread message badge when notifications are disabled", |
3125 | "end": { | 3610 | "end": { |
3126 | "column": 3, | 3611 | "column": 3, |
3127 | "line": 63 | 3612 | "line": 59 |
3128 | }, | 3613 | }, |
3129 | "file": "src/containers/settings/EditSettingsScreen.js", | 3614 | "file": "src/containers/settings/EditSettingsScreen.js", |
3130 | "id": "settings.app.form.showMessagesBadgesWhenMuted", | 3615 | "id": "settings.app.form.showMessagesBadgesWhenMuted", |
3131 | "start": { | 3616 | "start": { |
3132 | "column": 29, | 3617 | "column": 29, |
3133 | "line": 60 | 3618 | "line": 56 |
3134 | } | 3619 | } |
3135 | }, | 3620 | }, |
3136 | { | 3621 | { |
3137 | "defaultMessage": "!!!Enable spell checking", | 3622 | "defaultMessage": "!!!Enable spell checking", |
3138 | "end": { | 3623 | "end": { |
3139 | "column": 3, | 3624 | "column": 3, |
3140 | "line": 67 | 3625 | "line": 63 |
3141 | }, | 3626 | }, |
3142 | "file": "src/containers/settings/EditSettingsScreen.js", | 3627 | "file": "src/containers/settings/EditSettingsScreen.js", |
3143 | "id": "settings.app.form.enableSpellchecking", | 3628 | "id": "settings.app.form.enableSpellchecking", |
3144 | "start": { | 3629 | "start": { |
3145 | "column": 23, | 3630 | "column": 23, |
3146 | "line": 64 | 3631 | "line": 60 |
3147 | } | 3632 | } |
3148 | }, | 3633 | }, |
3149 | { | 3634 | { |
3150 | "defaultMessage": "!!!Enable GPU Acceleration", | 3635 | "defaultMessage": "!!!Enable GPU Acceleration", |
3151 | "end": { | 3636 | "end": { |
3152 | "column": 3, | 3637 | "column": 3, |
3153 | "line": 71 | 3638 | "line": 67 |
3154 | }, | 3639 | }, |
3155 | "file": "src/containers/settings/EditSettingsScreen.js", | 3640 | "file": "src/containers/settings/EditSettingsScreen.js", |
3156 | "id": "settings.app.form.enableGPUAcceleration", | 3641 | "id": "settings.app.form.enableGPUAcceleration", |
3157 | "start": { | 3642 | "start": { |
3158 | "column": 25, | 3643 | "column": 25, |
3159 | "line": 68 | 3644 | "line": 64 |
3160 | } | 3645 | } |
3161 | }, | 3646 | }, |
3162 | { | 3647 | { |
3163 | "defaultMessage": "!!!Include beta versions", | 3648 | "defaultMessage": "!!!Include beta versions", |
3164 | "end": { | 3649 | "end": { |
3165 | "column": 3, | 3650 | "column": 3, |
3166 | "line": 75 | 3651 | "line": 71 |
3167 | }, | 3652 | }, |
3168 | "file": "src/containers/settings/EditSettingsScreen.js", | 3653 | "file": "src/containers/settings/EditSettingsScreen.js", |
3169 | "id": "settings.app.form.beta", | 3654 | "id": "settings.app.form.beta", |
3170 | "start": { | 3655 | "start": { |
3171 | "column": 8, | 3656 | "column": 8, |
3657 | "line": 68 | ||
3658 | } | ||
3659 | }, | ||
3660 | { | ||
3661 | "defaultMessage": "!!!Enable Franz Todos", | ||
3662 | "end": { | ||
3663 | "column": 3, | ||
3664 | "line": 75 | ||
3665 | }, | ||
3666 | "file": "src/containers/settings/EditSettingsScreen.js", | ||
3667 | "id": "settings.app.form.enableTodos", | ||
3668 | "start": { | ||
3669 | "column": 15, | ||
3172 | "line": 72 | 3670 | "line": 72 |
3173 | } | 3671 | } |
3174 | } | 3672 | } |
@@ -3321,39 +3819,65 @@ | |||
3321 | "defaultMessage": "!!!Please purchase license to skip waiting", | 3819 | "defaultMessage": "!!!Please purchase license to skip waiting", |
3322 | "end": { | 3820 | "end": { |
3323 | "column": 3, | 3821 | "column": 3, |
3324 | "line": 16 | 3822 | "line": 20 |
3325 | }, | 3823 | }, |
3326 | "file": "src/features/delayApp/Component.js", | 3824 | "file": "src/features/delayApp/Component.js", |
3327 | "id": "feature.delayApp.headline", | 3825 | "id": "feature.delayApp.headline", |
3328 | "start": { | 3826 | "start": { |
3329 | "column": 12, | 3827 | "column": 12, |
3330 | "line": 13 | 3828 | "line": 17 |
3331 | } | 3829 | } |
3332 | }, | 3830 | }, |
3333 | { | 3831 | { |
3334 | "defaultMessage": "!!!Get a Ferdi Supporter License", | 3832 | "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", |
3335 | "end": { | 3833 | "end": { |
3336 | "column": 3, | 3834 | "column": 3, |
3337 | "line": 20 | 3835 | "line": 24 |
3338 | }, | 3836 | }, |
3339 | "file": "src/features/delayApp/Component.js", | 3837 | "file": "src/features/delayApp/Component.js", |
3340 | "id": "feature.delayApp.action", | 3838 | "id": "feature.delayApp.trial.headline", |
3839 | "start": { | ||
3840 | "column": 17, | ||
3841 | "line": 21 | ||
3842 | } | ||
3843 | }, | ||
3844 | { | ||
3845 | "defaultMessage": "!!!Get a Franz Supporter License", | ||
3846 | "end": { | ||
3847 | "column": 3, | ||
3848 | "line": 28 | ||
3849 | }, | ||
3850 | "file": "src/features/delayApp/Component.js", | ||
3851 | "id": "feature.delayApp.upgrade.action", | ||
3341 | "start": { | 3852 | "start": { |
3342 | "column": 10, | 3853 | "column": 10, |
3343 | "line": 17 | 3854 | "line": 25 |
3855 | } | ||
3856 | }, | ||
3857 | { | ||
3858 | "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", | ||
3859 | "end": { | ||
3860 | "column": 3, | ||
3861 | "line": 32 | ||
3862 | }, | ||
3863 | "file": "src/features/delayApp/Component.js", | ||
3864 | "id": "feature.delayApp.trial.action", | ||
3865 | "start": { | ||
3866 | "column": 15, | ||
3867 | "line": 29 | ||
3344 | } | 3868 | } |
3345 | }, | 3869 | }, |
3346 | { | 3870 | { |
3347 | "defaultMessage": "!!!Ferdi will continue in {seconds} seconds.", | 3871 | "defaultMessage": "!!!Ferdi will continue in {seconds} seconds.", |
3348 | "end": { | 3872 | "end": { |
3349 | "column": 3, | 3873 | "column": 3, |
3350 | "line": 24 | 3874 | "line": 36 |
3351 | }, | 3875 | }, |
3352 | "file": "src/features/delayApp/Component.js", | 3876 | "file": "src/features/delayApp/Component.js", |
3353 | "id": "feature.delayApp.text", | 3877 | "id": "feature.delayApp.text", |
3354 | "start": { | 3878 | "start": { |
3355 | "column": 8, | 3879 | "column": 8, |
3356 | "line": 21 | 3880 | "line": 33 |
3357 | } | 3881 | } |
3358 | } | 3882 | } |
3359 | ], | 3883 | ], |
@@ -3362,94 +3886,143 @@ | |||
3362 | { | 3886 | { |
3363 | "descriptors": [ | 3887 | "descriptors": [ |
3364 | { | 3888 | { |
3365 | "defaultMessage": "!!!Ferdi is better together!", | 3889 | "defaultMessage": "!!!Changes in Franz {version}", |
3890 | "end": { | ||
3891 | "column": 3, | ||
3892 | "line": 23 | ||
3893 | }, | ||
3894 | "file": "src/features/serviceLimit/components/AnnouncementScreen.js", | ||
3895 | "id": "feature.announcements.changelog.headline", | ||
3896 | "start": { | ||
3897 | "column": 12, | ||
3898 | "line": 20 | ||
3899 | } | ||
3900 | } | ||
3901 | ], | ||
3902 | "path": "src/features/serviceLimit/components/AnnouncementScreen.json" | ||
3903 | }, | ||
3904 | { | ||
3905 | "descriptors": [ | ||
3906 | { | ||
3907 | "defaultMessage": "!!!You have added {amount} of {limit} services. Please upgrade your account to add more services.", | ||
3908 | "end": { | ||
3909 | "column": 3, | ||
3910 | "line": 14 | ||
3911 | }, | ||
3912 | "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", | ||
3913 | "id": "feature.serviceLimit.limitReached", | ||
3914 | "start": { | ||
3915 | "column": 16, | ||
3916 | "line": 11 | ||
3917 | } | ||
3918 | }, | ||
3919 | { | ||
3920 | "defaultMessage": "!!!Upgrade account", | ||
3366 | "end": { | 3921 | "end": { |
3367 | "column": 3, | 3922 | "column": 3, |
3368 | "line": 17 | 3923 | "line": 17 |
3369 | }, | 3924 | }, |
3925 | "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", | ||
3926 | "id": "premiumFeature.button.upgradeAccount", | ||
3927 | "start": { | ||
3928 | "column": 10, | ||
3929 | "line": 15 | ||
3930 | } | ||
3931 | } | ||
3932 | ], | ||
3933 | "path": "src/features/serviceLimit/components/LimitReachedInfobox.json" | ||
3934 | }, | ||
3935 | { | ||
3936 | "descriptors": [ | ||
3937 | { | ||
3938 | "defaultMessage": "!!!Franz is better together!", | ||
3939 | "end": { | ||
3940 | "column": 3, | ||
3941 | "line": 21 | ||
3942 | }, | ||
3370 | "file": "src/features/shareFranz/Component.js", | 3943 | "file": "src/features/shareFranz/Component.js", |
3371 | "id": "feature.shareFranz.headline", | 3944 | "id": "feature.shareFranz.headline", |
3372 | "start": { | 3945 | "start": { |
3373 | "column": 12, | 3946 | "column": 12, |
3374 | "line": 14 | 3947 | "line": 18 |
3375 | } | 3948 | } |
3376 | }, | 3949 | }, |
3377 | { | 3950 | { |
3378 | "defaultMessage": "!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 3951 | "defaultMessage": "!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", |
3379 | "end": { | 3952 | "end": { |
3380 | "column": 3, | 3953 | "column": 3, |
3381 | "line": 21 | 3954 | "line": 25 |
3382 | }, | 3955 | }, |
3383 | "file": "src/features/shareFranz/Component.js", | 3956 | "file": "src/features/shareFranz/Component.js", |
3384 | "id": "feature.shareFranz.text", | 3957 | "id": "feature.shareFranz.text", |
3385 | "start": { | 3958 | "start": { |
3386 | "column": 8, | 3959 | "column": 8, |
3387 | "line": 18 | 3960 | "line": 22 |
3388 | } | 3961 | } |
3389 | }, | 3962 | }, |
3390 | { | 3963 | { |
3391 | "defaultMessage": "!!!Share as email", | 3964 | "defaultMessage": "!!!Share as email", |
3392 | "end": { | 3965 | "end": { |
3393 | "column": 3, | 3966 | "column": 3, |
3394 | "line": 25 | 3967 | "line": 29 |
3395 | }, | 3968 | }, |
3396 | "file": "src/features/shareFranz/Component.js", | 3969 | "file": "src/features/shareFranz/Component.js", |
3397 | "id": "feature.shareFranz.action.email", | 3970 | "id": "feature.shareFranz.action.email", |
3398 | "start": { | 3971 | "start": { |
3399 | "column": 16, | 3972 | "column": 16, |
3400 | "line": 22 | 3973 | "line": 26 |
3401 | } | 3974 | } |
3402 | }, | 3975 | }, |
3403 | { | 3976 | { |
3404 | "defaultMessage": "!!!Share on Facebook", | 3977 | "defaultMessage": "!!!Share on Facebook", |
3405 | "end": { | 3978 | "end": { |
3406 | "column": 3, | 3979 | "column": 3, |
3407 | "line": 29 | 3980 | "line": 33 |
3408 | }, | 3981 | }, |
3409 | "file": "src/features/shareFranz/Component.js", | 3982 | "file": "src/features/shareFranz/Component.js", |
3410 | "id": "feature.shareFranz.action.facebook", | 3983 | "id": "feature.shareFranz.action.facebook", |
3411 | "start": { | 3984 | "start": { |
3412 | "column": 19, | 3985 | "column": 19, |
3413 | "line": 26 | 3986 | "line": 30 |
3414 | } | 3987 | } |
3415 | }, | 3988 | }, |
3416 | { | 3989 | { |
3417 | "defaultMessage": "!!!Share on Twitter", | 3990 | "defaultMessage": "!!!Share on Twitter", |
3418 | "end": { | 3991 | "end": { |
3419 | "column": 3, | 3992 | "column": 3, |
3420 | "line": 33 | 3993 | "line": 37 |
3421 | }, | 3994 | }, |
3422 | "file": "src/features/shareFranz/Component.js", | 3995 | "file": "src/features/shareFranz/Component.js", |
3423 | "id": "feature.shareFranz.action.twitter", | 3996 | "id": "feature.shareFranz.action.twitter", |
3424 | "start": { | 3997 | "start": { |
3425 | "column": 18, | 3998 | "column": 18, |
3426 | "line": 30 | 3999 | "line": 34 |
3427 | } | 4000 | } |
3428 | }, | 4001 | }, |
3429 | { | 4002 | { |
3430 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 4003 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
3431 | "end": { | 4004 | "end": { |
3432 | "column": 3, | 4005 | "column": 3, |
3433 | "line": 37 | 4006 | "line": 41 |
3434 | }, | 4007 | }, |
3435 | "file": "src/features/shareFranz/Component.js", | 4008 | "file": "src/features/shareFranz/Component.js", |
3436 | "id": "feature.shareFranz.shareText.email", | 4009 | "id": "feature.shareFranz.shareText.email", |
3437 | "start": { | 4010 | "start": { |
3438 | "column": 18, | 4011 | "column": 18, |
3439 | "line": 34 | 4012 | "line": 38 |
3440 | } | 4013 | } |
3441 | }, | 4014 | }, |
3442 | { | 4015 | { |
3443 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", | 4016 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", |
3444 | "end": { | 4017 | "end": { |
3445 | "column": 3, | 4018 | "column": 3, |
3446 | "line": 41 | 4019 | "line": 45 |
3447 | }, | 4020 | }, |
3448 | "file": "src/features/shareFranz/Component.js", | 4021 | "file": "src/features/shareFranz/Component.js", |
3449 | "id": "feature.shareFranz.shareText.twitter", | 4022 | "id": "feature.shareFranz.shareText.twitter", |
3450 | "start": { | 4023 | "start": { |
3451 | "column": 20, | 4024 | "column": 20, |
3452 | "line": 38 | 4025 | "line": 42 |
3453 | } | 4026 | } |
3454 | } | 4027 | } |
3455 | ], | 4028 | ], |
@@ -3458,6 +4031,50 @@ | |||
3458 | { | 4031 | { |
3459 | "descriptors": [ | 4032 | "descriptors": [ |
3460 | { | 4033 | { |
4034 | "defaultMessage": "!!!Franz Todos are available to premium users now!", | ||
4035 | "end": { | ||
4036 | "column": 3, | ||
4037 | "line": 21 | ||
4038 | }, | ||
4039 | "file": "src/features/todos/components/TodosWebview.js", | ||
4040 | "id": "feature.todos.premium.info", | ||
4041 | "start": { | ||
4042 | "column": 15, | ||
4043 | "line": 18 | ||
4044 | } | ||
4045 | }, | ||
4046 | { | ||
4047 | "defaultMessage": "!!!Upgrade Account", | ||
4048 | "end": { | ||
4049 | "column": 3, | ||
4050 | "line": 25 | ||
4051 | }, | ||
4052 | "file": "src/features/todos/components/TodosWebview.js", | ||
4053 | "id": "feature.todos.premium.upgrade", | ||
4054 | "start": { | ||
4055 | "column": 14, | ||
4056 | "line": 22 | ||
4057 | } | ||
4058 | }, | ||
4059 | { | ||
4060 | "defaultMessage": "!!!Everyone else will have to wait a little longer.", | ||
4061 | "end": { | ||
4062 | "column": 3, | ||
4063 | "line": 29 | ||
4064 | }, | ||
4065 | "file": "src/features/todos/components/TodosWebview.js", | ||
4066 | "id": "feature.todos.premium.rollout", | ||
4067 | "start": { | ||
4068 | "column": 15, | ||
4069 | "line": 26 | ||
4070 | } | ||
4071 | } | ||
4072 | ], | ||
4073 | "path": "src/features/todos/components/TodosWebview.json" | ||
4074 | }, | ||
4075 | { | ||
4076 | "descriptors": [ | ||
4077 | { | ||
3461 | "defaultMessage": "!!!Create workspace", | 4078 | "defaultMessage": "!!!Create workspace", |
3462 | "end": { | 4079 | "end": { |
3463 | "column": 3, | 4080 | "column": 3, |
@@ -3588,104 +4205,104 @@ | |||
3588 | "defaultMessage": "!!!Workspaces", | 4205 | "defaultMessage": "!!!Workspaces", |
3589 | "end": { | 4206 | "end": { |
3590 | "column": 3, | 4207 | "column": 3, |
3591 | "line": 18 | 4208 | "line": 20 |
3592 | }, | 4209 | }, |
3593 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4210 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3594 | "id": "workspaceDrawer.headline", | 4211 | "id": "workspaceDrawer.headline", |
3595 | "start": { | 4212 | "start": { |
3596 | "column": 12, | 4213 | "column": 12, |
3597 | "line": 15 | 4214 | "line": 17 |
3598 | } | 4215 | } |
3599 | }, | 4216 | }, |
3600 | { | 4217 | { |
3601 | "defaultMessage": "!!!All services", | 4218 | "defaultMessage": "!!!All services", |
3602 | "end": { | 4219 | "end": { |
3603 | "column": 3, | 4220 | "column": 3, |
3604 | "line": 22 | 4221 | "line": 24 |
3605 | }, | 4222 | }, |
3606 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4223 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3607 | "id": "workspaceDrawer.allServices", | 4224 | "id": "workspaceDrawer.allServices", |
3608 | "start": { | 4225 | "start": { |
3609 | "column": 15, | 4226 | "column": 15, |
3610 | "line": 19 | 4227 | "line": 21 |
3611 | } | 4228 | } |
3612 | }, | 4229 | }, |
3613 | { | 4230 | { |
3614 | "defaultMessage": "!!!Workspaces settings", | 4231 | "defaultMessage": "!!!Workspaces settings", |
3615 | "end": { | 4232 | "end": { |
3616 | "column": 3, | 4233 | "column": 3, |
3617 | "line": 26 | 4234 | "line": 28 |
3618 | }, | 4235 | }, |
3619 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4236 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3620 | "id": "workspaceDrawer.workspacesSettingsTooltip", | 4237 | "id": "workspaceDrawer.workspacesSettingsTooltip", |
3621 | "start": { | 4238 | "start": { |
3622 | "column": 29, | 4239 | "column": 29, |
3623 | "line": 23 | 4240 | "line": 25 |
3624 | } | 4241 | } |
3625 | }, | 4242 | }, |
3626 | { | 4243 | { |
3627 | "defaultMessage": "!!!Info about workspace feature", | 4244 | "defaultMessage": "!!!Info about workspace feature", |
3628 | "end": { | 4245 | "end": { |
3629 | "column": 3, | 4246 | "column": 3, |
3630 | "line": 30 | 4247 | "line": 32 |
3631 | }, | 4248 | }, |
3632 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4249 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3633 | "id": "workspaceDrawer.workspaceFeatureInfo", | 4250 | "id": "workspaceDrawer.workspaceFeatureInfo", |
3634 | "start": { | 4251 | "start": { |
3635 | "column": 24, | 4252 | "column": 24, |
3636 | "line": 27 | 4253 | "line": 29 |
3637 | } | 4254 | } |
3638 | }, | 4255 | }, |
3639 | { | 4256 | { |
3640 | "defaultMessage": "!!!Create your first workspace", | 4257 | "defaultMessage": "!!!Create your first workspace", |
3641 | "end": { | 4258 | "end": { |
3642 | "column": 3, | 4259 | "column": 3, |
3643 | "line": 34 | 4260 | "line": 36 |
3644 | }, | 4261 | }, |
3645 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4262 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3646 | "id": "workspaceDrawer.premiumCtaButtonLabel", | 4263 | "id": "workspaceDrawer.premiumCtaButtonLabel", |
3647 | "start": { | 4264 | "start": { |
3648 | "column": 25, | 4265 | "column": 25, |
3649 | "line": 31 | 4266 | "line": 33 |
3650 | } | 4267 | } |
3651 | }, | 4268 | }, |
3652 | { | 4269 | { |
3653 | "defaultMessage": "!!!Reactivate premium account", | 4270 | "defaultMessage": "!!!Reactivate premium account", |
3654 | "end": { | 4271 | "end": { |
3655 | "column": 3, | 4272 | "column": 3, |
3656 | "line": 38 | 4273 | "line": 40 |
3657 | }, | 4274 | }, |
3658 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4275 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3659 | "id": "workspaceDrawer.reactivatePremiumAccountLabel", | 4276 | "id": "workspaceDrawer.reactivatePremiumAccountLabel", |
3660 | "start": { | 4277 | "start": { |
3661 | "column": 28, | 4278 | "column": 28, |
3662 | "line": 35 | 4279 | "line": 37 |
3663 | } | 4280 | } |
3664 | }, | 4281 | }, |
3665 | { | 4282 | { |
3666 | "defaultMessage": "!!!add new workspace", | 4283 | "defaultMessage": "!!!add new workspace", |
3667 | "end": { | 4284 | "end": { |
3668 | "column": 3, | 4285 | "column": 3, |
3669 | "line": 42 | 4286 | "line": 44 |
3670 | }, | 4287 | }, |
3671 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4288 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3672 | "id": "workspaceDrawer.addNewWorkspaceLabel", | 4289 | "id": "workspaceDrawer.addNewWorkspaceLabel", |
3673 | "start": { | 4290 | "start": { |
3674 | "column": 24, | 4291 | "column": 24, |
3675 | "line": 39 | 4292 | "line": 41 |
3676 | } | 4293 | } |
3677 | }, | 4294 | }, |
3678 | { | 4295 | { |
3679 | "defaultMessage": "!!!Premium feature", | 4296 | "defaultMessage": "!!!Premium feature", |
3680 | "end": { | 4297 | "end": { |
3681 | "column": 3, | 4298 | "column": 3, |
3682 | "line": 46 | 4299 | "line": 48 |
3683 | }, | 4300 | }, |
3684 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 4301 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
3685 | "id": "workspaceDrawer.proFeatureBadge", | 4302 | "id": "workspaceDrawer.proFeatureBadge", |
3686 | "start": { | 4303 | "start": { |
3687 | "column": 23, | 4304 | "column": 23, |
3688 | "line": 43 | 4305 | "line": 45 |
3689 | } | 4306 | } |
3690 | } | 4307 | } |
3691 | ], | 4308 | ], |
@@ -3728,104 +4345,104 @@ | |||
3728 | "defaultMessage": "!!!Your workspaces", | 4345 | "defaultMessage": "!!!Your workspaces", |
3729 | "end": { | 4346 | "end": { |
3730 | "column": 3, | 4347 | "column": 3, |
3731 | "line": 20 | 4348 | "line": 22 |
3732 | }, | 4349 | }, |
3733 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4350 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3734 | "id": "settings.workspaces.headline", | 4351 | "id": "settings.workspaces.headline", |
3735 | "start": { | 4352 | "start": { |
3736 | "column": 12, | 4353 | "column": 12, |
3737 | "line": 17 | 4354 | "line": 19 |
3738 | } | 4355 | } |
3739 | }, | 4356 | }, |
3740 | { | 4357 | { |
3741 | "defaultMessage": "!!!You haven't added any workspaces yet.", | 4358 | "defaultMessage": "!!!You haven't added any workspaces yet.", |
3742 | "end": { | 4359 | "end": { |
3743 | "column": 3, | 4360 | "column": 3, |
3744 | "line": 24 | 4361 | "line": 26 |
3745 | }, | 4362 | }, |
3746 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4363 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3747 | "id": "settings.workspaces.noWorkspacesAdded", | 4364 | "id": "settings.workspaces.noWorkspacesAdded", |
3748 | "start": { | 4365 | "start": { |
3749 | "column": 19, | 4366 | "column": 19, |
3750 | "line": 21 | 4367 | "line": 23 |
3751 | } | 4368 | } |
3752 | }, | 4369 | }, |
3753 | { | 4370 | { |
3754 | "defaultMessage": "!!!Could not load your workspaces", | 4371 | "defaultMessage": "!!!Could not load your workspaces", |
3755 | "end": { | 4372 | "end": { |
3756 | "column": 3, | 4373 | "column": 3, |
3757 | "line": 28 | 4374 | "line": 30 |
3758 | }, | 4375 | }, |
3759 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4376 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3760 | "id": "settings.workspaces.workspacesRequestFailed", | 4377 | "id": "settings.workspaces.workspacesRequestFailed", |
3761 | "start": { | 4378 | "start": { |
3762 | "column": 27, | 4379 | "column": 27, |
3763 | "line": 25 | 4380 | "line": 27 |
3764 | } | 4381 | } |
3765 | }, | 4382 | }, |
3766 | { | 4383 | { |
3767 | "defaultMessage": "!!!Try again", | 4384 | "defaultMessage": "!!!Try again", |
3768 | "end": { | 4385 | "end": { |
3769 | "column": 3, | 4386 | "column": 3, |
3770 | "line": 32 | 4387 | "line": 34 |
3771 | }, | 4388 | }, |
3772 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4389 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3773 | "id": "settings.workspaces.tryReloadWorkspaces", | 4390 | "id": "settings.workspaces.tryReloadWorkspaces", |
3774 | "start": { | 4391 | "start": { |
3775 | "column": 23, | 4392 | "column": 23, |
3776 | "line": 29 | 4393 | "line": 31 |
3777 | } | 4394 | } |
3778 | }, | 4395 | }, |
3779 | { | 4396 | { |
3780 | "defaultMessage": "!!!Your changes have been saved", | 4397 | "defaultMessage": "!!!Your changes have been saved", |
3781 | "end": { | 4398 | "end": { |
3782 | "column": 3, | 4399 | "column": 3, |
3783 | "line": 36 | 4400 | "line": 38 |
3784 | }, | 4401 | }, |
3785 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4402 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3786 | "id": "settings.workspaces.updatedInfo", | 4403 | "id": "settings.workspaces.updatedInfo", |
3787 | "start": { | 4404 | "start": { |
3788 | "column": 15, | 4405 | "column": 15, |
3789 | "line": 33 | 4406 | "line": 35 |
3790 | } | 4407 | } |
3791 | }, | 4408 | }, |
3792 | { | 4409 | { |
3793 | "defaultMessage": "!!!Workspace has been deleted", | 4410 | "defaultMessage": "!!!Workspace has been deleted", |
3794 | "end": { | 4411 | "end": { |
3795 | "column": 3, | 4412 | "column": 3, |
3796 | "line": 40 | 4413 | "line": 42 |
3797 | }, | 4414 | }, |
3798 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4415 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3799 | "id": "settings.workspaces.deletedInfo", | 4416 | "id": "settings.workspaces.deletedInfo", |
3800 | "start": { | 4417 | "start": { |
3801 | "column": 15, | 4418 | "column": 15, |
3802 | "line": 37 | 4419 | "line": 39 |
3803 | } | 4420 | } |
3804 | }, | 4421 | }, |
3805 | { | 4422 | { |
3806 | "defaultMessage": "!!!Info about workspace feature", | 4423 | "defaultMessage": "!!!Info about workspace feature", |
3807 | "end": { | 4424 | "end": { |
3808 | "column": 3, | 4425 | "column": 3, |
3809 | "line": 44 | 4426 | "line": 46 |
3810 | }, | 4427 | }, |
3811 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4428 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3812 | "id": "settings.workspaces.workspaceFeatureInfo", | 4429 | "id": "settings.workspaces.workspaceFeatureInfo", |
3813 | "start": { | 4430 | "start": { |
3814 | "column": 24, | 4431 | "column": 24, |
3815 | "line": 41 | 4432 | "line": 43 |
3816 | } | 4433 | } |
3817 | }, | 4434 | }, |
3818 | { | 4435 | { |
3819 | "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", | 4436 | "defaultMessage": "!!!Less is More: Introducing Franz Workspaces", |
3820 | "end": { | 4437 | "end": { |
3821 | "column": 3, | 4438 | "column": 3, |
3822 | "line": 48 | 4439 | "line": 50 |
3823 | }, | 4440 | }, |
3824 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 4441 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
3825 | "id": "settings.workspaces.workspaceFeatureHeadline", | 4442 | "id": "settings.workspaces.workspaceFeatureHeadline", |
3826 | "start": { | 4443 | "start": { |
3827 | "column": 28, | 4444 | "column": 28, |
3828 | "line": 45 | 4445 | "line": 47 |
3829 | } | 4446 | } |
3830 | } | 4447 | } |
3831 | ], | 4448 | ], |
@@ -3852,6 +4469,146 @@ | |||
3852 | { | 4469 | { |
3853 | "descriptors": [ | 4470 | "descriptors": [ |
3854 | { | 4471 | { |
4472 | "defaultMessage": "!!!Franz Professional", | ||
4473 | "end": { | ||
4474 | "column": 3, | ||
4475 | "line": 8 | ||
4476 | }, | ||
4477 | "file": "src/helpers/plan-helpers.js", | ||
4478 | "id": "pricing.plan.pro", | ||
4479 | "start": { | ||
4480 | "column": 15, | ||
4481 | "line": 5 | ||
4482 | } | ||
4483 | }, | ||
4484 | { | ||
4485 | "defaultMessage": "!!!Franz Personal", | ||
4486 | "end": { | ||
4487 | "column": 3, | ||
4488 | "line": 12 | ||
4489 | }, | ||
4490 | "file": "src/helpers/plan-helpers.js", | ||
4491 | "id": "pricing.plan.personal", | ||
4492 | "start": { | ||
4493 | "column": 20, | ||
4494 | "line": 9 | ||
4495 | } | ||
4496 | }, | ||
4497 | { | ||
4498 | "defaultMessage": "!!!Franz Free", | ||
4499 | "end": { | ||
4500 | "column": 3, | ||
4501 | "line": 16 | ||
4502 | }, | ||
4503 | "file": "src/helpers/plan-helpers.js", | ||
4504 | "id": "pricing.plan.free", | ||
4505 | "start": { | ||
4506 | "column": 16, | ||
4507 | "line": 13 | ||
4508 | } | ||
4509 | }, | ||
4510 | { | ||
4511 | "defaultMessage": "!!!Franz Premium", | ||
4512 | "end": { | ||
4513 | "column": 3, | ||
4514 | "line": 20 | ||
4515 | }, | ||
4516 | "file": "src/helpers/plan-helpers.js", | ||
4517 | "id": "pricing.plan.legacy", | ||
4518 | "start": { | ||
4519 | "column": 18, | ||
4520 | "line": 17 | ||
4521 | } | ||
4522 | } | ||
4523 | ], | ||
4524 | "path": "src/helpers/plan-helpers.json" | ||
4525 | }, | ||
4526 | { | ||
4527 | "descriptors": [ | ||
4528 | { | ||
4529 | "defaultMessage": "!!!Franz Professional Yearly", | ||
4530 | "end": { | ||
4531 | "column": 3, | ||
4532 | "line": 8 | ||
4533 | }, | ||
4534 | "file": "src/helpers/pricing-helpers.js", | ||
4535 | "id": "pricing.plan.pro-yearly", | ||
4536 | "start": { | ||
4537 | "column": 22, | ||
4538 | "line": 5 | ||
4539 | } | ||
4540 | }, | ||
4541 | { | ||
4542 | "defaultMessage": "!!!Franz Professional Monthly", | ||
4543 | "end": { | ||
4544 | "column": 3, | ||
4545 | "line": 12 | ||
4546 | }, | ||
4547 | "file": "src/helpers/pricing-helpers.js", | ||
4548 | "id": "pricing.plan.pro-monthly", | ||
4549 | "start": { | ||
4550 | "column": 23, | ||
4551 | "line": 9 | ||
4552 | } | ||
4553 | }, | ||
4554 | { | ||
4555 | "defaultMessage": "!!!Franz Personal Yearly", | ||
4556 | "end": { | ||
4557 | "column": 3, | ||
4558 | "line": 16 | ||
4559 | }, | ||
4560 | "file": "src/helpers/pricing-helpers.js", | ||
4561 | "id": "pricing.plan.personal-yearly", | ||
4562 | "start": { | ||
4563 | "column": 27, | ||
4564 | "line": 13 | ||
4565 | } | ||
4566 | }, | ||
4567 | { | ||
4568 | "defaultMessage": "!!!Franz Personal Monthly", | ||
4569 | "end": { | ||
4570 | "column": 3, | ||
4571 | "line": 20 | ||
4572 | }, | ||
4573 | "file": "src/helpers/pricing-helpers.js", | ||
4574 | "id": "pricing.plan.personal-monthly", | ||
4575 | "start": { | ||
4576 | "column": 28, | ||
4577 | "line": 17 | ||
4578 | } | ||
4579 | }, | ||
4580 | { | ||
4581 | "defaultMessage": "!!!Franz Free", | ||
4582 | "end": { | ||
4583 | "column": 3, | ||
4584 | "line": 24 | ||
4585 | }, | ||
4586 | "file": "src/helpers/pricing-helpers.js", | ||
4587 | "id": "pricing.plan.free", | ||
4588 | "start": { | ||
4589 | "column": 16, | ||
4590 | "line": 21 | ||
4591 | } | ||
4592 | }, | ||
4593 | { | ||
4594 | "defaultMessage": "!!!Franz Premium", | ||
4595 | "end": { | ||
4596 | "column": 3, | ||
4597 | "line": 28 | ||
4598 | }, | ||
4599 | "file": "src/helpers/pricing-helpers.js", | ||
4600 | "id": "pricing.plan.legacy", | ||
4601 | "start": { | ||
4602 | "column": 18, | ||
4603 | "line": 25 | ||
4604 | } | ||
4605 | } | ||
4606 | ], | ||
4607 | "path": "src/helpers/pricing-helpers.json" | ||
4608 | }, | ||
4609 | { | ||
4610 | "descriptors": [ | ||
4611 | { | ||
3855 | "defaultMessage": "!!!Field is required", | 4612 | "defaultMessage": "!!!Field is required", |
3856 | "end": { | 4613 | "end": { |
3857 | "column": 3, | 4614 | "column": 3, |
@@ -3998,6 +4755,19 @@ | |||
3998 | "column": 39, | 4755 | "column": 39, |
3999 | "line": 24 | 4756 | "line": 24 |
4000 | } | 4757 | } |
4758 | }, | ||
4759 | { | ||
4760 | "defaultMessage": "!!!Franz Professional Required", | ||
4761 | "end": { | ||
4762 | "column": 3, | ||
4763 | "line": 31 | ||
4764 | }, | ||
4765 | "file": "src/i18n/globalMessages.js", | ||
4766 | "id": "global.franzProRequired", | ||
4767 | "start": { | ||
4768 | "column": 15, | ||
4769 | "line": 28 | ||
4770 | } | ||
4001 | } | 4771 | } |
4002 | ], | 4772 | ], |
4003 | "path": "src/i18n/globalMessages.json" | 4773 | "path": "src/i18n/globalMessages.json" |
@@ -4008,741 +4778,793 @@ | |||
4008 | "defaultMessage": "!!!Edit", | 4778 | "defaultMessage": "!!!Edit", |
4009 | "end": { | 4779 | "end": { |
4010 | "column": 3, | 4780 | "column": 3, |
4011 | "line": 17 | 4781 | "line": 21 |
4012 | }, | 4782 | }, |
4013 | "file": "src/lib/Menu.js", | 4783 | "file": "src/lib/Menu.js", |
4014 | "id": "menu.edit", | 4784 | "id": "menu.edit", |
4015 | "start": { | 4785 | "start": { |
4016 | "column": 8, | 4786 | "column": 8, |
4017 | "line": 14 | 4787 | "line": 18 |
4018 | } | 4788 | } |
4019 | }, | 4789 | }, |
4020 | { | 4790 | { |
4021 | "defaultMessage": "!!!Undo", | 4791 | "defaultMessage": "!!!Undo", |
4022 | "end": { | 4792 | "end": { |
4023 | "column": 3, | 4793 | "column": 3, |
4024 | "line": 21 | 4794 | "line": 25 |
4025 | }, | 4795 | }, |
4026 | "file": "src/lib/Menu.js", | 4796 | "file": "src/lib/Menu.js", |
4027 | "id": "menu.edit.undo", | 4797 | "id": "menu.edit.undo", |
4028 | "start": { | 4798 | "start": { |
4029 | "column": 8, | 4799 | "column": 8, |
4030 | "line": 18 | 4800 | "line": 22 |
4031 | } | 4801 | } |
4032 | }, | 4802 | }, |
4033 | { | 4803 | { |
4034 | "defaultMessage": "!!!Redo", | 4804 | "defaultMessage": "!!!Redo", |
4035 | "end": { | 4805 | "end": { |
4036 | "column": 3, | 4806 | "column": 3, |
4037 | "line": 25 | 4807 | "line": 29 |
4038 | }, | 4808 | }, |
4039 | "file": "src/lib/Menu.js", | 4809 | "file": "src/lib/Menu.js", |
4040 | "id": "menu.edit.redo", | 4810 | "id": "menu.edit.redo", |
4041 | "start": { | 4811 | "start": { |
4042 | "column": 8, | 4812 | "column": 8, |
4043 | "line": 22 | 4813 | "line": 26 |
4044 | } | 4814 | } |
4045 | }, | 4815 | }, |
4046 | { | 4816 | { |
4047 | "defaultMessage": "!!!Cut", | 4817 | "defaultMessage": "!!!Cut", |
4048 | "end": { | 4818 | "end": { |
4049 | "column": 3, | 4819 | "column": 3, |
4050 | "line": 29 | 4820 | "line": 33 |
4051 | }, | 4821 | }, |
4052 | "file": "src/lib/Menu.js", | 4822 | "file": "src/lib/Menu.js", |
4053 | "id": "menu.edit.cut", | 4823 | "id": "menu.edit.cut", |
4054 | "start": { | 4824 | "start": { |
4055 | "column": 7, | 4825 | "column": 7, |
4056 | "line": 26 | 4826 | "line": 30 |
4057 | } | 4827 | } |
4058 | }, | 4828 | }, |
4059 | { | 4829 | { |
4060 | "defaultMessage": "!!!Copy", | 4830 | "defaultMessage": "!!!Copy", |
4061 | "end": { | 4831 | "end": { |
4062 | "column": 3, | 4832 | "column": 3, |
4063 | "line": 33 | 4833 | "line": 37 |
4064 | }, | 4834 | }, |
4065 | "file": "src/lib/Menu.js", | 4835 | "file": "src/lib/Menu.js", |
4066 | "id": "menu.edit.copy", | 4836 | "id": "menu.edit.copy", |
4067 | "start": { | 4837 | "start": { |
4068 | "column": 8, | 4838 | "column": 8, |
4069 | "line": 30 | 4839 | "line": 34 |
4070 | } | 4840 | } |
4071 | }, | 4841 | }, |
4072 | { | 4842 | { |
4073 | "defaultMessage": "!!!Paste", | 4843 | "defaultMessage": "!!!Paste", |
4074 | "end": { | 4844 | "end": { |
4075 | "column": 3, | 4845 | "column": 3, |
4076 | "line": 37 | 4846 | "line": 41 |
4077 | }, | 4847 | }, |
4078 | "file": "src/lib/Menu.js", | 4848 | "file": "src/lib/Menu.js", |
4079 | "id": "menu.edit.paste", | 4849 | "id": "menu.edit.paste", |
4080 | "start": { | 4850 | "start": { |
4081 | "column": 9, | 4851 | "column": 9, |
4082 | "line": 34 | 4852 | "line": 38 |
4083 | } | 4853 | } |
4084 | }, | 4854 | }, |
4085 | { | 4855 | { |
4086 | "defaultMessage": "!!!Paste And Match Style", | 4856 | "defaultMessage": "!!!Paste And Match Style", |
4087 | "end": { | 4857 | "end": { |
4088 | "column": 3, | 4858 | "column": 3, |
4089 | "line": 41 | 4859 | "line": 45 |
4090 | }, | 4860 | }, |
4091 | "file": "src/lib/Menu.js", | 4861 | "file": "src/lib/Menu.js", |
4092 | "id": "menu.edit.pasteAndMatchStyle", | 4862 | "id": "menu.edit.pasteAndMatchStyle", |
4093 | "start": { | 4863 | "start": { |
4094 | "column": 22, | 4864 | "column": 22, |
4095 | "line": 38 | 4865 | "line": 42 |
4096 | } | 4866 | } |
4097 | }, | 4867 | }, |
4098 | { | 4868 | { |
4099 | "defaultMessage": "!!!Delete", | 4869 | "defaultMessage": "!!!Delete", |
4100 | "end": { | 4870 | "end": { |
4101 | "column": 3, | 4871 | "column": 3, |
4102 | "line": 45 | 4872 | "line": 49 |
4103 | }, | 4873 | }, |
4104 | "file": "src/lib/Menu.js", | 4874 | "file": "src/lib/Menu.js", |
4105 | "id": "menu.edit.delete", | 4875 | "id": "menu.edit.delete", |
4106 | "start": { | 4876 | "start": { |
4107 | "column": 10, | 4877 | "column": 10, |
4108 | "line": 42 | 4878 | "line": 46 |
4109 | } | 4879 | } |
4110 | }, | 4880 | }, |
4111 | { | 4881 | { |
4112 | "defaultMessage": "!!!Select All", | 4882 | "defaultMessage": "!!!Select All", |
4113 | "end": { | 4883 | "end": { |
4114 | "column": 3, | 4884 | "column": 3, |
4115 | "line": 49 | 4885 | "line": 53 |
4116 | }, | 4886 | }, |
4117 | "file": "src/lib/Menu.js", | 4887 | "file": "src/lib/Menu.js", |
4118 | "id": "menu.edit.selectAll", | 4888 | "id": "menu.edit.selectAll", |
4119 | "start": { | 4889 | "start": { |
4120 | "column": 13, | 4890 | "column": 13, |
4121 | "line": 46 | 4891 | "line": 50 |
4122 | } | 4892 | } |
4123 | }, | 4893 | }, |
4124 | { | 4894 | { |
4125 | "defaultMessage": "!!!Speech", | 4895 | "defaultMessage": "!!!Speech", |
4126 | "end": { | 4896 | "end": { |
4127 | "column": 3, | 4897 | "column": 3, |
4128 | "line": 53 | 4898 | "line": 57 |
4129 | }, | 4899 | }, |
4130 | "file": "src/lib/Menu.js", | 4900 | "file": "src/lib/Menu.js", |
4131 | "id": "menu.edit.speech", | 4901 | "id": "menu.edit.speech", |
4132 | "start": { | 4902 | "start": { |
4133 | "column": 10, | 4903 | "column": 10, |
4134 | "line": 50 | 4904 | "line": 54 |
4135 | } | 4905 | } |
4136 | }, | 4906 | }, |
4137 | { | 4907 | { |
4138 | "defaultMessage": "!!!Start Speaking", | 4908 | "defaultMessage": "!!!Start Speaking", |
4139 | "end": { | 4909 | "end": { |
4140 | "column": 3, | 4910 | "column": 3, |
4141 | "line": 57 | 4911 | "line": 61 |
4142 | }, | 4912 | }, |
4143 | "file": "src/lib/Menu.js", | 4913 | "file": "src/lib/Menu.js", |
4144 | "id": "menu.edit.startSpeaking", | 4914 | "id": "menu.edit.startSpeaking", |
4145 | "start": { | 4915 | "start": { |
4146 | "column": 17, | 4916 | "column": 17, |
4147 | "line": 54 | 4917 | "line": 58 |
4148 | } | 4918 | } |
4149 | }, | 4919 | }, |
4150 | { | 4920 | { |
4151 | "defaultMessage": "!!!Stop Speaking", | 4921 | "defaultMessage": "!!!Stop Speaking", |
4152 | "end": { | 4922 | "end": { |
4153 | "column": 3, | 4923 | "column": 3, |
4154 | "line": 61 | 4924 | "line": 65 |
4155 | }, | 4925 | }, |
4156 | "file": "src/lib/Menu.js", | 4926 | "file": "src/lib/Menu.js", |
4157 | "id": "menu.edit.stopSpeaking", | 4927 | "id": "menu.edit.stopSpeaking", |
4158 | "start": { | 4928 | "start": { |
4159 | "column": 16, | 4929 | "column": 16, |
4160 | "line": 58 | 4930 | "line": 62 |
4161 | } | 4931 | } |
4162 | }, | 4932 | }, |
4163 | { | 4933 | { |
4164 | "defaultMessage": "!!!Start Dictation", | 4934 | "defaultMessage": "!!!Start Dictation", |
4165 | "end": { | 4935 | "end": { |
4166 | "column": 3, | 4936 | "column": 3, |
4167 | "line": 65 | 4937 | "line": 69 |
4168 | }, | 4938 | }, |
4169 | "file": "src/lib/Menu.js", | 4939 | "file": "src/lib/Menu.js", |
4170 | "id": "menu.edit.startDictation", | 4940 | "id": "menu.edit.startDictation", |
4171 | "start": { | 4941 | "start": { |
4172 | "column": 18, | 4942 | "column": 18, |
4173 | "line": 62 | 4943 | "line": 66 |
4174 | } | 4944 | } |
4175 | }, | 4945 | }, |
4176 | { | 4946 | { |
4177 | "defaultMessage": "!!!Emoji & Symbols", | 4947 | "defaultMessage": "!!!Emoji & Symbols", |
4178 | "end": { | 4948 | "end": { |
4179 | "column": 3, | 4949 | "column": 3, |
4180 | "line": 69 | 4950 | "line": 73 |
4181 | }, | 4951 | }, |
4182 | "file": "src/lib/Menu.js", | 4952 | "file": "src/lib/Menu.js", |
4183 | "id": "menu.edit.emojiSymbols", | 4953 | "id": "menu.edit.emojiSymbols", |
4184 | "start": { | 4954 | "start": { |
4185 | "column": 16, | 4955 | "column": 16, |
4186 | "line": 66 | 4956 | "line": 70 |
4187 | } | 4957 | } |
4188 | }, | 4958 | }, |
4189 | { | 4959 | { |
4190 | "defaultMessage": "!!!Actual Size", | 4960 | "defaultMessage": "!!!Actual Size", |
4191 | "end": { | 4961 | "end": { |
4192 | "column": 3, | 4962 | "column": 3, |
4193 | "line": 73 | 4963 | "line": 77 |
4194 | }, | 4964 | }, |
4195 | "file": "src/lib/Menu.js", | 4965 | "file": "src/lib/Menu.js", |
4196 | "id": "menu.view.resetZoom", | 4966 | "id": "menu.view.resetZoom", |
4197 | "start": { | 4967 | "start": { |
4198 | "column": 13, | 4968 | "column": 13, |
4199 | "line": 70 | 4969 | "line": 74 |
4200 | } | 4970 | } |
4201 | }, | 4971 | }, |
4202 | { | 4972 | { |
4203 | "defaultMessage": "!!!Zoom In", | 4973 | "defaultMessage": "!!!Zoom In", |
4204 | "end": { | 4974 | "end": { |
4205 | "column": 3, | 4975 | "column": 3, |
4206 | "line": 77 | 4976 | "line": 81 |
4207 | }, | 4977 | }, |
4208 | "file": "src/lib/Menu.js", | 4978 | "file": "src/lib/Menu.js", |
4209 | "id": "menu.view.zoomIn", | 4979 | "id": "menu.view.zoomIn", |
4210 | "start": { | 4980 | "start": { |
4211 | "column": 10, | 4981 | "column": 10, |
4212 | "line": 74 | 4982 | "line": 78 |
4213 | } | 4983 | } |
4214 | }, | 4984 | }, |
4215 | { | 4985 | { |
4216 | "defaultMessage": "!!!Zoom Out", | 4986 | "defaultMessage": "!!!Zoom Out", |
4217 | "end": { | 4987 | "end": { |
4218 | "column": 3, | 4988 | "column": 3, |
4219 | "line": 81 | 4989 | "line": 85 |
4220 | }, | 4990 | }, |
4221 | "file": "src/lib/Menu.js", | 4991 | "file": "src/lib/Menu.js", |
4222 | "id": "menu.view.zoomOut", | 4992 | "id": "menu.view.zoomOut", |
4223 | "start": { | 4993 | "start": { |
4224 | "column": 11, | 4994 | "column": 11, |
4225 | "line": 78 | 4995 | "line": 82 |
4226 | } | 4996 | } |
4227 | }, | 4997 | }, |
4228 | { | 4998 | { |
4229 | "defaultMessage": "!!!Enter Full Screen", | 4999 | "defaultMessage": "!!!Enter Full Screen", |
4230 | "end": { | 5000 | "end": { |
4231 | "column": 3, | 5001 | "column": 3, |
4232 | "line": 85 | 5002 | "line": 89 |
4233 | }, | 5003 | }, |
4234 | "file": "src/lib/Menu.js", | 5004 | "file": "src/lib/Menu.js", |
4235 | "id": "menu.view.enterFullScreen", | 5005 | "id": "menu.view.enterFullScreen", |
4236 | "start": { | 5006 | "start": { |
4237 | "column": 19, | 5007 | "column": 19, |
4238 | "line": 82 | 5008 | "line": 86 |
4239 | } | 5009 | } |
4240 | }, | 5010 | }, |
4241 | { | 5011 | { |
4242 | "defaultMessage": "!!!Exit Full Screen", | 5012 | "defaultMessage": "!!!Exit Full Screen", |
4243 | "end": { | 5013 | "end": { |
4244 | "column": 3, | 5014 | "column": 3, |
4245 | "line": 89 | 5015 | "line": 93 |
4246 | }, | 5016 | }, |
4247 | "file": "src/lib/Menu.js", | 5017 | "file": "src/lib/Menu.js", |
4248 | "id": "menu.view.exitFullScreen", | 5018 | "id": "menu.view.exitFullScreen", |
4249 | "start": { | 5019 | "start": { |
4250 | "column": 18, | 5020 | "column": 18, |
4251 | "line": 86 | 5021 | "line": 90 |
4252 | } | 5022 | } |
4253 | }, | 5023 | }, |
4254 | { | 5024 | { |
4255 | "defaultMessage": "!!!Toggle Full Screen", | 5025 | "defaultMessage": "!!!Toggle Full Screen", |
4256 | "end": { | 5026 | "end": { |
4257 | "column": 3, | 5027 | "column": 3, |
4258 | "line": 93 | 5028 | "line": 97 |
4259 | }, | 5029 | }, |
4260 | "file": "src/lib/Menu.js", | 5030 | "file": "src/lib/Menu.js", |
4261 | "id": "menu.view.toggleFullScreen", | 5031 | "id": "menu.view.toggleFullScreen", |
4262 | "start": { | 5032 | "start": { |
4263 | "column": 20, | 5033 | "column": 20, |
4264 | "line": 90 | 5034 | "line": 94 |
4265 | } | 5035 | } |
4266 | }, | 5036 | }, |
4267 | { | 5037 | { |
4268 | "defaultMessage": "!!!Toggle Developer Tools", | 5038 | "defaultMessage": "!!!Toggle Developer Tools", |
4269 | "end": { | 5039 | "end": { |
4270 | "column": 3, | 5040 | "column": 3, |
4271 | "line": 97 | 5041 | "line": 101 |
4272 | }, | 5042 | }, |
4273 | "file": "src/lib/Menu.js", | 5043 | "file": "src/lib/Menu.js", |
4274 | "id": "menu.view.toggleDevTools", | 5044 | "id": "menu.view.toggleDevTools", |
4275 | "start": { | 5045 | "start": { |
4276 | "column": 18, | 5046 | "column": 18, |
4277 | "line": 94 | 5047 | "line": 98 |
5048 | } | ||
5049 | }, | ||
5050 | { | ||
5051 | "defaultMessage": "!!!Toggle Todos Developer Tools", | ||
5052 | "end": { | ||
5053 | "column": 3, | ||
5054 | "line": 105 | ||
5055 | }, | ||
5056 | "file": "src/lib/Menu.js", | ||
5057 | "id": "menu.view.toggleTodosDevTools", | ||
5058 | "start": { | ||
5059 | "column": 23, | ||
5060 | "line": 102 | ||
4278 | } | 5061 | } |
4279 | }, | 5062 | }, |
4280 | { | 5063 | { |
4281 | "defaultMessage": "!!!Toggle Service Developer Tools", | 5064 | "defaultMessage": "!!!Toggle Service Developer Tools", |
4282 | "end": { | 5065 | "end": { |
4283 | "column": 3, | 5066 | "column": 3, |
4284 | "line": 101 | 5067 | "line": 109 |
4285 | }, | 5068 | }, |
4286 | "file": "src/lib/Menu.js", | 5069 | "file": "src/lib/Menu.js", |
4287 | "id": "menu.view.toggleServiceDevTools", | 5070 | "id": "menu.view.toggleServiceDevTools", |
4288 | "start": { | 5071 | "start": { |
4289 | "column": 25, | 5072 | "column": 25, |
4290 | "line": 98 | 5073 | "line": 106 |
4291 | } | 5074 | } |
4292 | }, | 5075 | }, |
4293 | { | 5076 | { |
4294 | "defaultMessage": "!!!Reload Service", | 5077 | "defaultMessage": "!!!Reload Service", |
4295 | "end": { | 5078 | "end": { |
4296 | "column": 3, | 5079 | "column": 3, |
4297 | "line": 105 | 5080 | "line": 113 |
4298 | }, | 5081 | }, |
4299 | "file": "src/lib/Menu.js", | 5082 | "file": "src/lib/Menu.js", |
4300 | "id": "menu.view.reloadService", | 5083 | "id": "menu.view.reloadService", |
4301 | "start": { | 5084 | "start": { |
4302 | "column": 17, | 5085 | "column": 17, |
4303 | "line": 102 | 5086 | "line": 110 |
4304 | } | 5087 | } |
4305 | }, | 5088 | }, |
4306 | { | 5089 | { |
4307 | "defaultMessage": "!!!Reload Franz", | 5090 | "defaultMessage": "!!!Reload Franz", |
4308 | "end": { | 5091 | "end": { |
4309 | "column": 3, | 5092 | "column": 3, |
4310 | "line": 109 | 5093 | "line": 117 |
4311 | }, | 5094 | }, |
4312 | "file": "src/lib/Menu.js", | 5095 | "file": "src/lib/Menu.js", |
4313 | "id": "menu.view.reloadFranz", | 5096 | "id": "menu.view.reloadFranz", |
4314 | "start": { | 5097 | "start": { |
4315 | "column": 15, | 5098 | "column": 15, |
4316 | "line": 106 | 5099 | "line": 114 |
4317 | } | 5100 | } |
4318 | }, | 5101 | }, |
4319 | { | 5102 | { |
4320 | "defaultMessage": "!!!Minimize", | 5103 | "defaultMessage": "!!!Minimize", |
4321 | "end": { | 5104 | "end": { |
4322 | "column": 3, | 5105 | "column": 3, |
4323 | "line": 113 | 5106 | "line": 121 |
4324 | }, | 5107 | }, |
4325 | "file": "src/lib/Menu.js", | 5108 | "file": "src/lib/Menu.js", |
4326 | "id": "menu.window.minimize", | 5109 | "id": "menu.window.minimize", |
4327 | "start": { | 5110 | "start": { |
4328 | "column": 12, | 5111 | "column": 12, |
4329 | "line": 110 | 5112 | "line": 118 |
4330 | } | 5113 | } |
4331 | }, | 5114 | }, |
4332 | { | 5115 | { |
4333 | "defaultMessage": "!!!Close", | 5116 | "defaultMessage": "!!!Close", |
4334 | "end": { | 5117 | "end": { |
4335 | "column": 3, | 5118 | "column": 3, |
4336 | "line": 117 | 5119 | "line": 125 |
4337 | }, | 5120 | }, |
4338 | "file": "src/lib/Menu.js", | 5121 | "file": "src/lib/Menu.js", |
4339 | "id": "menu.window.close", | 5122 | "id": "menu.window.close", |
4340 | "start": { | 5123 | "start": { |
4341 | "column": 9, | 5124 | "column": 9, |
4342 | "line": 114 | 5125 | "line": 122 |
4343 | } | 5126 | } |
4344 | }, | 5127 | }, |
4345 | { | 5128 | { |
4346 | "defaultMessage": "!!!Learn More", | 5129 | "defaultMessage": "!!!Learn More", |
4347 | "end": { | 5130 | "end": { |
4348 | "column": 3, | 5131 | "column": 3, |
4349 | "line": 121 | 5132 | "line": 129 |
4350 | }, | 5133 | }, |
4351 | "file": "src/lib/Menu.js", | 5134 | "file": "src/lib/Menu.js", |
4352 | "id": "menu.help.learnMore", | 5135 | "id": "menu.help.learnMore", |
4353 | "start": { | 5136 | "start": { |
4354 | "column": 13, | 5137 | "column": 13, |
4355 | "line": 118 | 5138 | "line": 126 |
4356 | } | 5139 | } |
4357 | }, | 5140 | }, |
4358 | { | 5141 | { |
4359 | "defaultMessage": "!!!Changelog", | 5142 | "defaultMessage": "!!!Changelog", |
4360 | "end": { | 5143 | "end": { |
4361 | "column": 3, | 5144 | "column": 3, |
4362 | "line": 125 | 5145 | "line": 133 |
4363 | }, | 5146 | }, |
4364 | "file": "src/lib/Menu.js", | 5147 | "file": "src/lib/Menu.js", |
4365 | "id": "menu.help.changelog", | 5148 | "id": "menu.help.changelog", |
4366 | "start": { | 5149 | "start": { |
4367 | "column": 13, | 5150 | "column": 13, |
4368 | "line": 122 | 5151 | "line": 130 |
4369 | } | 5152 | } |
4370 | }, | 5153 | }, |
4371 | { | 5154 | { |
4372 | "defaultMessage": "!!!Support", | 5155 | "defaultMessage": "!!!Support", |
4373 | "end": { | 5156 | "end": { |
4374 | "column": 3, | 5157 | "column": 3, |
4375 | "line": 129 | 5158 | "line": 137 |
4376 | }, | 5159 | }, |
4377 | "file": "src/lib/Menu.js", | 5160 | "file": "src/lib/Menu.js", |
4378 | "id": "menu.help.support", | 5161 | "id": "menu.help.support", |
4379 | "start": { | 5162 | "start": { |
4380 | "column": 11, | 5163 | "column": 11, |
4381 | "line": 126 | 5164 | "line": 134 |
4382 | } | 5165 | } |
4383 | }, | 5166 | }, |
4384 | { | 5167 | { |
4385 | "defaultMessage": "!!!Copy Debug Information", | 5168 | "defaultMessage": "!!!Copy Debug Information", |
4386 | "end": { | 5169 | "end": { |
4387 | "column": 3, | 5170 | "column": 3, |
4388 | "line": 133 | 5171 | "line": 141 |
4389 | }, | 5172 | }, |
4390 | "file": "src/lib/Menu.js", | 5173 | "file": "src/lib/Menu.js", |
4391 | "id": "menu.help.debugInfo", | 5174 | "id": "menu.help.debugInfo", |
4392 | "start": { | 5175 | "start": { |
4393 | "column": 13, | 5176 | "column": 13, |
4394 | "line": 130 | 5177 | "line": 138 |
4395 | } | 5178 | } |
4396 | }, | 5179 | }, |
4397 | { | 5180 | { |
4398 | "defaultMessage": "!!!Ferdi Debug Information", | 5181 | "defaultMessage": "!!!Ferdi Debug Information", |
4399 | "end": { | 5182 | "end": { |
4400 | "column": 3, | 5183 | "column": 3, |
4401 | "line": 137 | 5184 | "line": 145 |
4402 | }, | 5185 | }, |
4403 | "file": "src/lib/Menu.js", | 5186 | "file": "src/lib/Menu.js", |
4404 | "id": "menu.help.debugInfoCopiedHeadline", | 5187 | "id": "menu.help.debugInfoCopiedHeadline", |
4405 | "start": { | 5188 | "start": { |
4406 | "column": 27, | 5189 | "column": 27, |
4407 | "line": 134 | 5190 | "line": 142 |
4408 | } | 5191 | } |
4409 | }, | 5192 | }, |
4410 | { | 5193 | { |
4411 | "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", | 5194 | "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", |
4412 | "end": { | 5195 | "end": { |
4413 | "column": 3, | 5196 | "column": 3, |
4414 | "line": 141 | 5197 | "line": 149 |
4415 | }, | 5198 | }, |
4416 | "file": "src/lib/Menu.js", | 5199 | "file": "src/lib/Menu.js", |
4417 | "id": "menu.help.debugInfoCopiedBody", | 5200 | "id": "menu.help.debugInfoCopiedBody", |
4418 | "start": { | 5201 | "start": { |
4419 | "column": 23, | 5202 | "column": 23, |
4420 | "line": 138 | 5203 | "line": 146 |
4421 | } | 5204 | } |
4422 | }, | 5205 | }, |
4423 | { | 5206 | { |
4424 | "defaultMessage": "!!!Terms of Service", | 5207 | "defaultMessage": "!!!Terms of Service", |
4425 | "end": { | 5208 | "end": { |
4426 | "column": 3, | 5209 | "column": 3, |
4427 | "line": 145 | 5210 | "line": 153 |
4428 | }, | 5211 | }, |
4429 | "file": "src/lib/Menu.js", | 5212 | "file": "src/lib/Menu.js", |
4430 | "id": "menu.help.tos", | 5213 | "id": "menu.help.tos", |
4431 | "start": { | 5214 | "start": { |
4432 | "column": 7, | 5215 | "column": 7, |
4433 | "line": 142 | 5216 | "line": 150 |
4434 | } | 5217 | } |
4435 | }, | 5218 | }, |
4436 | { | 5219 | { |
4437 | "defaultMessage": "!!!Privacy Statement", | 5220 | "defaultMessage": "!!!Privacy Statement", |
4438 | "end": { | 5221 | "end": { |
4439 | "column": 3, | 5222 | "column": 3, |
4440 | "line": 149 | 5223 | "line": 157 |
4441 | }, | 5224 | }, |
4442 | "file": "src/lib/Menu.js", | 5225 | "file": "src/lib/Menu.js", |
4443 | "id": "menu.help.privacy", | 5226 | "id": "menu.help.privacy", |
4444 | "start": { | 5227 | "start": { |
4445 | "column": 11, | 5228 | "column": 11, |
4446 | "line": 146 | 5229 | "line": 154 |
4447 | } | 5230 | } |
4448 | }, | 5231 | }, |
4449 | { | 5232 | { |
4450 | "defaultMessage": "!!!File", | 5233 | "defaultMessage": "!!!File", |
4451 | "end": { | 5234 | "end": { |
4452 | "column": 3, | 5235 | "column": 3, |
4453 | "line": 153 | 5236 | "line": 161 |
4454 | }, | 5237 | }, |
4455 | "file": "src/lib/Menu.js", | 5238 | "file": "src/lib/Menu.js", |
4456 | "id": "menu.file", | 5239 | "id": "menu.file", |
4457 | "start": { | 5240 | "start": { |
4458 | "column": 8, | 5241 | "column": 8, |
4459 | "line": 150 | 5242 | "line": 158 |
4460 | } | 5243 | } |
4461 | }, | 5244 | }, |
4462 | { | 5245 | { |
4463 | "defaultMessage": "!!!View", | 5246 | "defaultMessage": "!!!View", |
4464 | "end": { | 5247 | "end": { |
4465 | "column": 3, | 5248 | "column": 3, |
4466 | "line": 157 | 5249 | "line": 165 |
4467 | }, | 5250 | }, |
4468 | "file": "src/lib/Menu.js", | 5251 | "file": "src/lib/Menu.js", |
4469 | "id": "menu.view", | 5252 | "id": "menu.view", |
4470 | "start": { | 5253 | "start": { |
4471 | "column": 8, | 5254 | "column": 8, |
4472 | "line": 154 | 5255 | "line": 162 |
4473 | } | 5256 | } |
4474 | }, | 5257 | }, |
4475 | { | 5258 | { |
4476 | "defaultMessage": "!!!Services", | 5259 | "defaultMessage": "!!!Services", |
4477 | "end": { | 5260 | "end": { |
4478 | "column": 3, | 5261 | "column": 3, |
4479 | "line": 161 | 5262 | "line": 169 |
4480 | }, | 5263 | }, |
4481 | "file": "src/lib/Menu.js", | 5264 | "file": "src/lib/Menu.js", |
4482 | "id": "menu.services", | 5265 | "id": "menu.services", |
4483 | "start": { | 5266 | "start": { |
4484 | "column": 12, | 5267 | "column": 12, |
4485 | "line": 158 | 5268 | "line": 166 |
4486 | } | 5269 | } |
4487 | }, | 5270 | }, |
4488 | { | 5271 | { |
4489 | "defaultMessage": "!!!Window", | 5272 | "defaultMessage": "!!!Window", |
4490 | "end": { | 5273 | "end": { |
4491 | "column": 3, | 5274 | "column": 3, |
4492 | "line": 165 | 5275 | "line": 173 |
4493 | }, | 5276 | }, |
4494 | "file": "src/lib/Menu.js", | 5277 | "file": "src/lib/Menu.js", |
4495 | "id": "menu.window", | 5278 | "id": "menu.window", |
4496 | "start": { | 5279 | "start": { |
4497 | "column": 10, | 5280 | "column": 10, |
4498 | "line": 162 | 5281 | "line": 170 |
4499 | } | 5282 | } |
4500 | }, | 5283 | }, |
4501 | { | 5284 | { |
4502 | "defaultMessage": "!!!Help", | 5285 | "defaultMessage": "!!!Help", |
4503 | "end": { | 5286 | "end": { |
4504 | "column": 3, | 5287 | "column": 3, |
4505 | "line": 169 | 5288 | "line": 177 |
4506 | }, | 5289 | }, |
4507 | "file": "src/lib/Menu.js", | 5290 | "file": "src/lib/Menu.js", |
4508 | "id": "menu.help", | 5291 | "id": "menu.help", |
4509 | "start": { | 5292 | "start": { |
4510 | "column": 8, | 5293 | "column": 8, |
4511 | "line": 166 | 5294 | "line": 174 |
4512 | } | 5295 | } |
4513 | }, | 5296 | }, |
4514 | { | 5297 | { |
4515 | "defaultMessage": "!!!About Franz", | 5298 | "defaultMessage": "!!!About Franz", |
4516 | "end": { | 5299 | "end": { |
4517 | "column": 3, | 5300 | "column": 3, |
4518 | "line": 173 | 5301 | "line": 181 |
4519 | }, | 5302 | }, |
4520 | "file": "src/lib/Menu.js", | 5303 | "file": "src/lib/Menu.js", |
4521 | "id": "menu.app.about", | 5304 | "id": "menu.app.about", |
4522 | "start": { | 5305 | "start": { |
4523 | "column": 9, | 5306 | "column": 9, |
4524 | "line": 170 | 5307 | "line": 178 |
4525 | } | 5308 | } |
4526 | }, | 5309 | }, |
4527 | { | 5310 | { |
4528 | "defaultMessage": "!!!What's new?", | 5311 | "defaultMessage": "!!!What's new?", |
4529 | "end": { | 5312 | "end": { |
4530 | "column": 3, | 5313 | "column": 3, |
4531 | "line": 177 | 5314 | "line": 185 |
4532 | }, | 5315 | }, |
4533 | "file": "src/lib/Menu.js", | 5316 | "file": "src/lib/Menu.js", |
4534 | "id": "menu.app.announcement", | 5317 | "id": "menu.app.announcement", |
4535 | "start": { | 5318 | "start": { |
4536 | "column": 16, | 5319 | "column": 16, |
4537 | "line": 174 | 5320 | "line": 182 |
4538 | } | 5321 | } |
4539 | }, | 5322 | }, |
4540 | { | 5323 | { |
4541 | "defaultMessage": "!!!Settings", | 5324 | "defaultMessage": "!!!Settings", |
4542 | "end": { | 5325 | "end": { |
4543 | "column": 3, | 5326 | "column": 3, |
4544 | "line": 181 | 5327 | "line": 189 |
4545 | }, | 5328 | }, |
4546 | "file": "src/lib/Menu.js", | 5329 | "file": "src/lib/Menu.js", |
4547 | "id": "menu.app.settings", | 5330 | "id": "menu.app.settings", |
4548 | "start": { | 5331 | "start": { |
4549 | "column": 12, | 5332 | "column": 12, |
4550 | "line": 178 | 5333 | "line": 186 |
4551 | } | 5334 | } |
4552 | }, | 5335 | }, |
4553 | { | 5336 | { |
4554 | "defaultMessage": "!!!Check for updates", | 5337 | "defaultMessage": "!!!Check for updates", |
4555 | "end": { | 5338 | "end": { |
4556 | "column": 3, | 5339 | "column": 3, |
4557 | "line": 185 | 5340 | "line": 193 |
4558 | }, | 5341 | }, |
4559 | "file": "src/lib/Menu.js", | 5342 | "file": "src/lib/Menu.js", |
4560 | "id": "menu.app.checkForUpdates", | 5343 | "id": "menu.app.checkForUpdates", |
4561 | "start": { | 5344 | "start": { |
4562 | "column": 19, | 5345 | "column": 19, |
4563 | "line": 182 | 5346 | "line": 190 |
4564 | } | 5347 | } |
4565 | }, | 5348 | }, |
4566 | { | 5349 | { |
4567 | "defaultMessage": "!!!Hide", | 5350 | "defaultMessage": "!!!Hide", |
4568 | "end": { | 5351 | "end": { |
4569 | "column": 3, | 5352 | "column": 3, |
4570 | "line": 189 | 5353 | "line": 197 |
4571 | }, | 5354 | }, |
4572 | "file": "src/lib/Menu.js", | 5355 | "file": "src/lib/Menu.js", |
4573 | "id": "menu.app.hide", | 5356 | "id": "menu.app.hide", |
4574 | "start": { | 5357 | "start": { |
4575 | "column": 8, | 5358 | "column": 8, |
4576 | "line": 186 | 5359 | "line": 194 |
4577 | } | 5360 | } |
4578 | }, | 5361 | }, |
4579 | { | 5362 | { |
4580 | "defaultMessage": "!!!Hide Others", | 5363 | "defaultMessage": "!!!Hide Others", |
4581 | "end": { | 5364 | "end": { |
4582 | "column": 3, | 5365 | "column": 3, |
4583 | "line": 193 | 5366 | "line": 201 |
4584 | }, | 5367 | }, |
4585 | "file": "src/lib/Menu.js", | 5368 | "file": "src/lib/Menu.js", |
4586 | "id": "menu.app.hideOthers", | 5369 | "id": "menu.app.hideOthers", |
4587 | "start": { | 5370 | "start": { |
4588 | "column": 14, | 5371 | "column": 14, |
4589 | "line": 190 | 5372 | "line": 198 |
4590 | } | 5373 | } |
4591 | }, | 5374 | }, |
4592 | { | 5375 | { |
4593 | "defaultMessage": "!!!Unhide", | 5376 | "defaultMessage": "!!!Unhide", |
4594 | "end": { | 5377 | "end": { |
4595 | "column": 3, | 5378 | "column": 3, |
4596 | "line": 197 | 5379 | "line": 205 |
4597 | }, | 5380 | }, |
4598 | "file": "src/lib/Menu.js", | 5381 | "file": "src/lib/Menu.js", |
4599 | "id": "menu.app.unhide", | 5382 | "id": "menu.app.unhide", |
4600 | "start": { | 5383 | "start": { |
4601 | "column": 10, | 5384 | "column": 10, |
4602 | "line": 194 | 5385 | "line": 202 |
4603 | } | 5386 | } |
4604 | }, | 5387 | }, |
4605 | { | 5388 | { |
4606 | "defaultMessage": "!!!Quit", | 5389 | "defaultMessage": "!!!Quit", |
4607 | "end": { | 5390 | "end": { |
4608 | "column": 3, | 5391 | "column": 3, |
4609 | "line": 201 | 5392 | "line": 209 |
4610 | }, | 5393 | }, |
4611 | "file": "src/lib/Menu.js", | 5394 | "file": "src/lib/Menu.js", |
4612 | "id": "menu.app.quit", | 5395 | "id": "menu.app.quit", |
4613 | "start": { | 5396 | "start": { |
4614 | "column": 8, | 5397 | "column": 8, |
4615 | "line": 198 | 5398 | "line": 206 |
4616 | } | 5399 | } |
4617 | }, | 5400 | }, |
4618 | { | 5401 | { |
4619 | "defaultMessage": "!!!Add New Service...", | 5402 | "defaultMessage": "!!!Add New Service...", |
4620 | "end": { | 5403 | "end": { |
4621 | "column": 3, | 5404 | "column": 3, |
4622 | "line": 205 | 5405 | "line": 213 |
4623 | }, | 5406 | }, |
4624 | "file": "src/lib/Menu.js", | 5407 | "file": "src/lib/Menu.js", |
4625 | "id": "menu.services.addNewService", | 5408 | "id": "menu.services.addNewService", |
4626 | "start": { | 5409 | "start": { |
4627 | "column": 17, | 5410 | "column": 17, |
4628 | "line": 202 | 5411 | "line": 210 |
4629 | } | 5412 | } |
4630 | }, | 5413 | }, |
4631 | { | 5414 | { |
4632 | "defaultMessage": "!!!Add New Workspace...", | 5415 | "defaultMessage": "!!!Add New Workspace...", |
4633 | "end": { | 5416 | "end": { |
4634 | "column": 3, | 5417 | "column": 3, |
4635 | "line": 209 | 5418 | "line": 217 |
4636 | }, | 5419 | }, |
4637 | "file": "src/lib/Menu.js", | 5420 | "file": "src/lib/Menu.js", |
4638 | "id": "menu.workspaces.addNewWorkspace", | 5421 | "id": "menu.workspaces.addNewWorkspace", |
4639 | "start": { | 5422 | "start": { |
4640 | "column": 19, | 5423 | "column": 19, |
4641 | "line": 206 | 5424 | "line": 214 |
4642 | } | 5425 | } |
4643 | }, | 5426 | }, |
4644 | { | 5427 | { |
4645 | "defaultMessage": "!!!Open workspace drawer", | 5428 | "defaultMessage": "!!!Open workspace drawer", |
4646 | "end": { | 5429 | "end": { |
4647 | "column": 3, | 5430 | "column": 3, |
4648 | "line": 213 | 5431 | "line": 221 |
4649 | }, | 5432 | }, |
4650 | "file": "src/lib/Menu.js", | 5433 | "file": "src/lib/Menu.js", |
4651 | "id": "menu.workspaces.openWorkspaceDrawer", | 5434 | "id": "menu.workspaces.openWorkspaceDrawer", |
4652 | "start": { | 5435 | "start": { |
4653 | "column": 23, | 5436 | "column": 23, |
4654 | "line": 210 | 5437 | "line": 218 |
4655 | } | 5438 | } |
4656 | }, | 5439 | }, |
4657 | { | 5440 | { |
4658 | "defaultMessage": "!!!Close workspace drawer", | 5441 | "defaultMessage": "!!!Close workspace drawer", |
4659 | "end": { | 5442 | "end": { |
4660 | "column": 3, | 5443 | "column": 3, |
4661 | "line": 217 | 5444 | "line": 225 |
4662 | }, | 5445 | }, |
4663 | "file": "src/lib/Menu.js", | 5446 | "file": "src/lib/Menu.js", |
4664 | "id": "menu.workspaces.closeWorkspaceDrawer", | 5447 | "id": "menu.workspaces.closeWorkspaceDrawer", |
4665 | "start": { | 5448 | "start": { |
4666 | "column": 24, | 5449 | "column": 24, |
4667 | "line": 214 | 5450 | "line": 222 |
4668 | } | 5451 | } |
4669 | }, | 5452 | }, |
4670 | { | 5453 | { |
4671 | "defaultMessage": "!!!Activate next service...", | 5454 | "defaultMessage": "!!!Activate next service...", |
4672 | "end": { | 5455 | "end": { |
4673 | "column": 3, | 5456 | "column": 3, |
4674 | "line": 221 | 5457 | "line": 229 |
4675 | }, | 5458 | }, |
4676 | "file": "src/lib/Menu.js", | 5459 | "file": "src/lib/Menu.js", |
4677 | "id": "menu.services.setNextServiceActive", | 5460 | "id": "menu.services.setNextServiceActive", |
4678 | "start": { | 5461 | "start": { |
4679 | "column": 23, | 5462 | "column": 23, |
4680 | "line": 218 | 5463 | "line": 226 |
4681 | } | 5464 | } |
4682 | }, | 5465 | }, |
4683 | { | 5466 | { |
4684 | "defaultMessage": "!!!Activate previous service...", | 5467 | "defaultMessage": "!!!Activate previous service...", |
4685 | "end": { | 5468 | "end": { |
4686 | "column": 3, | 5469 | "column": 3, |
4687 | "line": 225 | 5470 | "line": 233 |
4688 | }, | 5471 | }, |
4689 | "file": "src/lib/Menu.js", | 5472 | "file": "src/lib/Menu.js", |
4690 | "id": "menu.services.activatePreviousService", | 5473 | "id": "menu.services.activatePreviousService", |
4691 | "start": { | 5474 | "start": { |
4692 | "column": 27, | 5475 | "column": 27, |
4693 | "line": 222 | 5476 | "line": 230 |
4694 | } | 5477 | } |
4695 | }, | 5478 | }, |
4696 | { | 5479 | { |
4697 | "defaultMessage": "!!!Disable notifications & audio", | 5480 | "defaultMessage": "!!!Disable notifications & audio", |
4698 | "end": { | 5481 | "end": { |
4699 | "column": 3, | 5482 | "column": 3, |
4700 | "line": 229 | 5483 | "line": 237 |
4701 | }, | 5484 | }, |
4702 | "file": "src/lib/Menu.js", | 5485 | "file": "src/lib/Menu.js", |
4703 | "id": "sidebar.muteApp", | 5486 | "id": "sidebar.muteApp", |
4704 | "start": { | 5487 | "start": { |
4705 | "column": 11, | 5488 | "column": 11, |
4706 | "line": 226 | 5489 | "line": 234 |
4707 | } | 5490 | } |
4708 | }, | 5491 | }, |
4709 | { | 5492 | { |
4710 | "defaultMessage": "!!!Enable notifications & audio", | 5493 | "defaultMessage": "!!!Enable notifications & audio", |
4711 | "end": { | 5494 | "end": { |
4712 | "column": 3, | 5495 | "column": 3, |
4713 | "line": 233 | 5496 | "line": 241 |
4714 | }, | 5497 | }, |
4715 | "file": "src/lib/Menu.js", | 5498 | "file": "src/lib/Menu.js", |
4716 | "id": "sidebar.unmuteApp", | 5499 | "id": "sidebar.unmuteApp", |
4717 | "start": { | 5500 | "start": { |
4718 | "column": 13, | 5501 | "column": 13, |
4719 | "line": 230 | 5502 | "line": 238 |
4720 | } | 5503 | } |
4721 | }, | 5504 | }, |
4722 | { | 5505 | { |
4723 | "defaultMessage": "!!!Workspaces", | 5506 | "defaultMessage": "!!!Workspaces", |
4724 | "end": { | 5507 | "end": { |
4725 | "column": 3, | 5508 | "column": 3, |
4726 | "line": 237 | 5509 | "line": 245 |
4727 | }, | 5510 | }, |
4728 | "file": "src/lib/Menu.js", | 5511 | "file": "src/lib/Menu.js", |
4729 | "id": "menu.workspaces", | 5512 | "id": "menu.workspaces", |
4730 | "start": { | 5513 | "start": { |
4731 | "column": 14, | 5514 | "column": 14, |
4732 | "line": 234 | 5515 | "line": 242 |
4733 | } | 5516 | } |
4734 | }, | 5517 | }, |
4735 | { | 5518 | { |
4736 | "defaultMessage": "!!!Default", | 5519 | "defaultMessage": "!!!Default", |
4737 | "end": { | 5520 | "end": { |
4738 | "column": 3, | 5521 | "column": 3, |
4739 | "line": 241 | 5522 | "line": 249 |
4740 | }, | 5523 | }, |
4741 | "file": "src/lib/Menu.js", | 5524 | "file": "src/lib/Menu.js", |
4742 | "id": "menu.workspaces.defaultWorkspace", | 5525 | "id": "menu.workspaces.defaultWorkspace", |
4743 | "start": { | 5526 | "start": { |
4744 | "column": 20, | 5527 | "column": 20, |
4745 | "line": 238 | 5528 | "line": 246 |
5529 | } | ||
5530 | }, | ||
5531 | { | ||
5532 | "defaultMessage": "!!!Todos", | ||
5533 | "end": { | ||
5534 | "column": 3, | ||
5535 | "line": 253 | ||
5536 | }, | ||
5537 | "file": "src/lib/Menu.js", | ||
5538 | "id": "menu.todos", | ||
5539 | "start": { | ||
5540 | "column": 9, | ||
5541 | "line": 250 | ||
5542 | } | ||
5543 | }, | ||
5544 | { | ||
5545 | "defaultMessage": "!!!Open Todos drawer", | ||
5546 | "end": { | ||
5547 | "column": 3, | ||
5548 | "line": 257 | ||
5549 | }, | ||
5550 | "file": "src/lib/Menu.js", | ||
5551 | "id": "menu.Todoss.openTodosDrawer", | ||
5552 | "start": { | ||
5553 | "column": 19, | ||
5554 | "line": 254 | ||
5555 | } | ||
5556 | }, | ||
5557 | { | ||
5558 | "defaultMessage": "!!!Close Todos drawer", | ||
5559 | "end": { | ||
5560 | "column": 3, | ||
5561 | "line": 261 | ||
5562 | }, | ||
5563 | "file": "src/lib/Menu.js", | ||
5564 | "id": "menu.Todoss.closeTodosDrawer", | ||
5565 | "start": { | ||
5566 | "column": 20, | ||
5567 | "line": 258 | ||
4746 | } | 5568 | } |
4747 | } | 5569 | } |
4748 | ], | 5570 | ], |
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json index d02f78dbd..40f8eac2f 100644 --- a/src/i18n/locales/el.json +++ b/src/i18n/locales/el.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "ΕπαναφόÏτωση", | 2 | "app.errorHandler.action" : "ΕπαναφόÏτωση", |
3 | "app.errorHandler.headline" : "Κάτι δεν λειτουÏγεί", | 3 | "app.errorHandler.headline" : "Κάτι δεν λειτουÏγεί", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Get a Ferdi Supporter License", | 5 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
6 | "feature.delayApp.headline" : "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text" : "Franz θα συνεχίσει σε {seconds} δευτεÏόλεπτα.", |
7 | "feature.delayApp.text" : "Ferdi θα συνεχίσει σε {seconds} δευτεÏόλεπτα.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Get a Franz Supporter License", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Send as email", | 13 | "feature.shareFranz.action.email" : "Send as email", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 14 | "feature.shareFranz.action.facebook" : "Share on Facebook", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 15 | "feature.shareFranz.action.twitter" : "Share on Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Δεν είναι δυνατή η σÏνδεση με τις ζωντανÎÏ‚ υπηÏεσίες του Franz", | 23 | "global.api.unhealthy" : "Δεν είναι δυνατή η σÏνδεση με τις ζωντανÎÏ‚ υπηÏεσίες του Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Έχετε αποσυνδεθεί από το Διαδίκτυο", | 25 | "global.notConnectedToTheInternet" : "Έχετε αποσυνδεθεί από το Διαδίκτυο", |
17 | "global.spellchecker.useDefault" : "Use System Default ({default})", | 26 | "global.spellchecker.useDefault" : "Use System Default ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Spell checking language", | 29 | "global.spellchecking.language" : "Spell checking language", |
21 | "import.headline" : "Εισαγάγετε τις υπηÏεσίες σας Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "ΥπηÏεσίες που δεν υποστηÏίζονται ακόμα στο Ferdi 5", | 31 | "import.headline" : "Εισαγάγετε τις υπηÏεσίες σας Franz 4", |
32 | "import.notSupportedHeadline" : "ΥπηÏεσίες που δεν υποστηÏίζονται ακόμα στο Franz 5", | ||
23 | "import.skip.label" : "ΘÎλω να Ï€ÏοσθÎσω υπηÏεσίες χειÏοκίνητα", | 33 | "import.skip.label" : "ΘÎλω να Ï€ÏοσθÎσω υπηÏεσίες χειÏοκίνητα", |
24 | "import.submit.label" : "Εισαγωγή υπηÏεσιών", | 34 | "import.submit.label" : "Εισαγωγή υπηÏεσιών", |
25 | "infobar.buttonChangelog" : "Τι νÎο υπάÏχει;", | 35 | "infobar.buttonChangelog" : "Τι νÎο υπάÏχει;", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "ΑνανÎωση υπηÏεσιών", | 37 | "infobar.buttonReloadServices" : "ΑνανÎωση υπηÏεσιών", |
28 | "infobar.requiredRequestsFailed" : "Δεν ήταν δυνατή η φόÏτωση υπηÏεσιών και πληÏοφοÏιών χÏηστών", | 38 | "infobar.requiredRequestsFailed" : "Δεν ήταν δυνατή η φόÏτωση υπηÏεσιών και πληÏοφοÏιών χÏηστών", |
29 | "infobar.servicesUpdated" : "Οι υπηÏεσίες σας Îχουν ενημεÏωθεί.", | 39 | "infobar.servicesUpdated" : "Οι υπηÏεσίες σας Îχουν ενημεÏωθεί.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "ΥπάÏχει διαθÎσιμη μια νÎα ενημÎÏωση για τον Franz.", | 41 | "infobar.updateAvailable" : "ΥπάÏχει διαθÎσιμη μια νÎα ενημÎÏωση για τον Franz.", |
31 | "invite.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", | 42 | "invite.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", |
32 | "invite.headline.friends" : "Î ÏοσκαλÎστε 3 από τους φίλους ή τους συναδÎλφους σας", | 43 | "invite.headline.friends" : "Î ÏοσκαλÎστε 3 από τους φίλους ή τους συναδÎλφους σας", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", | 54 | "login.serverLogout" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", |
44 | "login.submit.label" : "ΣÏνδεση", | 55 | "login.submit.label" : "ΣÏνδεση", |
45 | "login.tokenExpired" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", | 56 | "login.tokenExpired" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Σχετικά με το Franz", | 59 | "menu.app.about" : "Σχετικά με το Franz", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "Έλεγχος για ενημεÏώσεις", | 61 | "menu.app.checkForUpdates" : "Έλεγχος για ενημεÏώσεις", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "ΑÏχείο", | 81 | "menu.file" : "ΑÏχείο", |
69 | "menu.help" : "Βοήθεια", | 82 | "menu.help" : "Βοήθεια", |
70 | "menu.help.changelog" : "Î Ïόσφατες αλλαγÎÏ‚", | 83 | "menu.help.changelog" : "Î Ïόσφατες αλλαγÎÏ‚", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Μάθετε πεÏισσότεÏα", | 87 | "menu.help.learnMore" : "Μάθετε πεÏισσότεÏα", |
72 | "menu.help.privacy" : "Δήλωση αποÏÏήτου", | 88 | "menu.help.privacy" : "Δήλωση αποÏÏήτου", |
73 | "menu.help.support" : "ΥποστήÏιξη", | 89 | "menu.help.support" : "ΥποστήÏιξη", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "ÎÎα ΥπηÏεσία", | 93 | "menu.services.addNewService" : "ÎÎα ΥπηÏεσία", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Î Ïοβολή", | 96 | "menu.view" : "Î Ïοβολή", |
80 | "menu.view.enterFullScreen" : "ΠλήÏης Οθόνη", | 97 | "menu.view.enterFullScreen" : "ΠλήÏης Οθόνη", |
81 | "menu.view.exitFullScreen" : "Έξοδος από πλήÏη οθόνη", | 98 | "menu.view.exitFullScreen" : "Έξοδος από πλήÏη οθόνη", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Άνοιγμα ΕÏγαλειοθήκη Î ÏογÏαμματιστών", | 102 | "menu.view.toggleDevTools" : "Άνοιγμα ΕÏγαλειοθήκη Î ÏογÏαμματιστών", |
86 | "menu.view.toggleFullScreen" : "ΛειτουÏγία πλήÏους οθόνης", | 103 | "menu.view.toggleFullScreen" : "ΛειτουÏγία πλήÏους οθόνης", |
87 | "menu.view.toggleServiceDevTools" : "ΛειτουÏγεία ΥπηÏεσίασ ΕÏγαλειοθήκης Î ÏογÏαμματιστών", | 104 | "menu.view.toggleServiceDevTools" : "ΛειτουÏγεία ΥπηÏεσίασ ΕÏγαλειοθήκης Î ÏογÏαμματιστών", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "ΜεγÎθυνση", | 106 | "menu.view.zoomIn" : "ΜεγÎθυνση", |
89 | "menu.view.zoomOut" : "ΣμίκÏυνση", | 107 | "menu.view.zoomOut" : "ΣμίκÏυνση", |
90 | "menu.window" : "ΠαÏάθυÏο", | 108 | "menu.window" : "ΠαÏάθυÏο", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Υποβολή", | 121 | "password.submit.label" : "Υποβολή", |
104 | "password.successInfo" : "ΕλÎγξτε το email σας", | 122 | "password.successInfo" : "ΕλÎγξτε το email σας", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
106 | "pricing.headline" : "ΥποστηÏίξτε το Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Δεν θÎλω να βοηθήσω στην ανάπτυξη του Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "ΘÎλω να βοηθήσω στην ανάπτυξη του Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "ΕπιλÎξτε το πακÎτο υποστήÏιξης", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "ΕπαναφόÏτωση {name}", | 151 | "service.crashHandler.action" : "ΕπαναφόÏτωση {name}", |
111 | "service.crashHandler.autoReload" : "Γίνεται Ï€Ïοσπάθεια αυτόματης ανάκτησης του {name} σε {seconds} δευτεÏόλεπτα", | 152 | "service.crashHandler.autoReload" : "Γίνεται Ï€Ïοσπάθεια αυτόματης ανάκτησης του {name} σε {seconds} δευτεÏόλεπτα", |
112 | "service.crashHandler.headline" : "Ω, όχι!", | 153 | "service.crashHandler.headline" : "Ω, όχι!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Ω, όχι!", | 159 | "service.errorHandler.headline" : "Ω, όχι!", |
119 | "service.errorHandler.message" : "Σφάλμα", | 160 | "service.errorHandler.message" : "Σφάλμα", |
120 | "service.errorHandler.text" : "{name} has failed to load.", | 161 | "service.errorHandler.text" : "{name} has failed to load.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "Ξεκινήστε", | 168 | "services.getStarted" : "Ξεκινήστε", |
123 | "services.welcome" : "Καλώς οÏίσατε στον Franz", | 169 | "services.welcome" : "Καλώς οÏίσατε στον Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Αλλαγή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης", | 181 | "settings.account.headlinePassword" : "Αλλαγή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης", |
136 | "settings.account.headlineProfile" : "ΕνημÎÏωση Ï€Ïοφίλ", | 182 | "settings.account.headlineProfile" : "ΕνημÎÏωση Ï€Ïοφίλ", |
137 | "settings.account.headlineSubscription" : "Η συνδÏομή σας", | 183 | "settings.account.headlineSubscription" : "Η συνδÏομή σας", |
138 | "settings.account.headlineUpgrade" : "Αναβάθμιση του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ±Ï‚ και υποστήÏιξη Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Λήψη", | 186 | "settings.account.invoiceDownload" : "Λήψη", |
140 | "settings.account.manageSubscription.label" : "ΔιαχείÏιση της συνδÏομής σας", | 187 | "settings.account.manageSubscription.label" : "ΔιαχείÏιση της συνδÏομής σας", |
141 | "settings.account.successInfo" : "Οι αλλαγÎÏ‚ σας Îχουν αποθηκευτεί", | 188 | "settings.account.successInfo" : "Οι αλλαγÎÏ‚ σας Îχουν αποθηκευτεί", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Δοκιμάστε ξανά", | 192 | "settings.account.tryReloadServices" : "Δοκιμάστε ξανά", |
143 | "settings.account.tryReloadUserInfoRequest" : "Δοκιμάστε ξανά", | 193 | "settings.account.tryReloadUserInfoRequest" : "Δοκιμάστε ξανά", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Δεν ήταν δυνατή η φόÏτωση πληÏοφοÏιών χÏήστη", | 195 | "settings.account.userInfoRequestFailed" : "Δεν ήταν δυνατή η φόÏτωση πληÏοφοÏιών χÏήστη", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "ΚαθαÏισμός λανθάνουσας μνήμης", | 197 | "settings.app.buttonClearAllCache" : "ΚαθαÏισμός λανθάνουσας μνήμης", |
146 | "settings.app.buttonInstallUpdate" : "Επανεκκίνηση & εγκατάσταση ενημεÏώσεων", | 198 | "settings.app.buttonInstallUpdate" : "Επανεκκίνηση & εγκατάσταση ενημεÏώσεων", |
147 | "settings.app.buttonSearchForUpdate" : "Έλεγχος για ενημεÏώσεις", | 199 | "settings.app.buttonSearchForUpdate" : "Έλεγχος για ενημεÏώσεις", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Join the Dark Side", | 205 | "settings.app.form.darkMode" : "Join the Dark Side", |
154 | "settings.app.form.enableGPUAcceleration" : "ΕνεÏγοποιήση Ενίσχυσης GPU ", | 206 | "settings.app.form.enableGPUAcceleration" : "ΕνεÏγοποιήση Ενίσχυσης GPU ", |
155 | "settings.app.form.enableSpellchecking" : "ΕνεÏγοποίηση οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Îγχου", | 207 | "settings.app.form.enableSpellchecking" : "ΕνεÏγοποίηση οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Îγχου", |
156 | "settings.app.form.enableSystemTray" : "Εμφάνιση του Ferdi στη γÏαμμή ειδοποιήσεων", | 208 | "settings.app.form.enableSystemTray" : "Εμφάνιση του Franz στη γÏαμμή ειδοποιήσεων", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Γλώσσα", | 210 | "settings.app.form.language" : "Γλώσσα", |
158 | "settings.app.form.minimizeToSystemTray" : "Ελαχιστοποίηση του Ferdi στη γÏαμμή ειδοποιήσεων", | 211 | "settings.app.form.minimizeToSystemTray" : "Ελαχιστοποίηση του Ferdi στη γÏαμμή ειδοποιήσεων", |
159 | "settings.app.form.runInBackground" : "ΚÏατήστε το Ferdi στο παÏασκήνιο κατά το κλείσιμο του παÏαθÏÏου", | 212 | "settings.app.form.runInBackground" : "ΚÏατήστε το Ferdi στο παÏασκήνιο κατά το κλείσιμο του παÏαθÏÏου", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Οι υπηÏεσίες σας", | 235 | "settings.navigation.yourServices" : "Οι υπηÏεσίες σας", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Όλες οι υπηÏεσίες", | 237 | "settings.recipes.all" : "Όλες οι υπηÏεσίες", |
185 | "settings.recipes.dev" : "Ανάπτυξη", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "ΔιαθÎσιμες υπηÏεσίες", | 245 | "settings.recipes.headline" : "ΔιαθÎσιμες υπηÏεσίες", |
187 | "settings.recipes.missingService" : "Λείπει κάποια υπηÏεσία;", | 246 | "settings.recipes.missingService" : "Λείπει κάποια υπηÏεσία;", |
188 | "settings.recipes.mostPopular" : "Τα πιο δημοφιλή", | 247 | "settings.recipes.mostPopular" : "Τα πιο δημοφιλή", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Ρυθμίσεις", | 334 | "sidebar.settings" : "Ρυθμίσεις", |
276 | "sidebar.unmuteApp" : "ΕνεÏγοποίηση ειδοποιήσεων & ήχου", | 335 | "sidebar.unmuteApp" : "ΕνεÏγοποίηση ειδοποιήσεων & ήχου", |
277 | "signup.company.label" : "ΕταιÏεία", | ||
278 | "signup.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", | 336 | "signup.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", |
279 | "signup.emailDuplicate" : "Ένας χÏήστης με τη συγκεκÏιμÎνη διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου υπάÏχει ήδη", | 337 | "signup.emailDuplicate" : "Ένας χÏήστης με τη συγκεκÏιμÎνη διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου υπάÏχει ήδη", |
280 | "signup.firstname.label" : "Όνομα", | 338 | "signup.firstname.label" : "Όνομα", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "δωÏεάν", | 358 | "subscription.type.free" : "δωÏεάν", |
301 | "subscription.type.month" : "μήνας", | 359 | "subscription.type.month" : "μήνας", |
302 | "subscription.type.year" : "Îτος", | 360 | "subscription.type.year" : "Îτος", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "ΑκÏÏωση", | 367 | "subscriptionPopup.buttonCancel" : "ΑκÏÏωση", |
304 | "subscriptionPopup.buttonDone" : "Έγινε", | 368 | "subscriptionPopup.buttonDone" : "Έγινε", |
305 | "tabs.item.deleteService" : "ΔιαγÏαφή υπηÏεσίας", | 369 | "tabs.item.deleteService" : "ΔιαγÏαφή υπηÏεσίας", |
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 74fc7427a..55de9bdeb 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action": "Reload", | 2 | "app.errorHandler.action": "Reload", |
3 | "app.errorHandler.headline": "Something went wrong", | 3 | "app.errorHandler.headline": "Something went wrong", |
4 | "feature.announcements.changelog.headline": "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline": "Changes in Franz {version}", |
5 | "feature.delayApp.action": "Get a Ferdi Supporter License", | 5 | "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting", |
6 | "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text": "Franz will continue in {seconds} seconds.", |
7 | "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", | 7 | "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort": "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline": "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action": "Get a Franz Supporter License", | ||
11 | "feature.delayApp.upgrade.actionShort": "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email": "Send as email", | 13 | "feature.shareFranz.action.email": "Send as email", |
9 | "feature.shareFranz.action.facebook": "Share on Facebook", | 14 | "feature.shareFranz.action.facebook": "Share on Facebook", |
10 | "feature.shareFranz.action.twitter": "Share on Twitter", | 15 | "feature.shareFranz.action.twitter": "Share on Twitter", |
11 | "feature.shareFranz.headline": "Ferdi is better together!", | 16 | "feature.shareFranz.headline": "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", |
14 | "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text": "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
15 | "global.api.unhealthy": "Can't connect to Ferdi online services", | 20 | "feature.todos.premium.info": "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout": "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade": "Upgrade Account", | ||
23 | "global.api.unhealthy": "Can't connect to Franz online services", | ||
24 | "global.franzProRequired": "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet": "You are not connected to the internet.", | 25 | "global.notConnectedToTheInternet": "You are not connected to the internet.", |
17 | "global.spellchecker.useDefault": "Use System Default ({default})", | 26 | "global.spellchecker.useDefault": "Use System Default ({default})", |
18 | "global.spellchecking.autodetect": "Detect language automatically", | 27 | "global.spellchecking.autodetect": "Detect language automatically", |
19 | "global.spellchecking.autodetect.short": "Automatic", | 28 | "global.spellchecking.autodetect.short": "Automatic", |
20 | "global.spellchecking.language": "Spell checking language", | 29 | "global.spellchecking.language": "Spell checking language", |
21 | "import.headline": "Import your Ferdi 4 services", | 30 | "global.upgradeButton.upgradeToPro": "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", | 31 | "import.headline": "Import your Franz 4 services", |
32 | "import.notSupportedHeadline": "Services not yet supported in Franz 5", | ||
23 | "import.skip.label": "I want to add services manually", | 33 | "import.skip.label": "I want to add services manually", |
24 | "import.submit.label": "Import services", | 34 | "import.submit.label": "Import services", |
25 | "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", | 35 | "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", |
@@ -28,7 +38,8 @@ | |||
28 | "infobar.buttonReloadServices": "Reload services", | 38 | "infobar.buttonReloadServices": "Reload services", |
29 | "infobar.requiredRequestsFailed": "Could not load services and user information", | 39 | "infobar.requiredRequestsFailed": "Could not load services and user information", |
30 | "infobar.servicesUpdated": "Your services have been updated.", | 40 | "infobar.servicesUpdated": "Your services have been updated.", |
31 | "infobar.updateAvailable": "A new update for Ferdi is available.", | 41 | "infobar.trialActivated": "Your trial was successfully activated. Happy messaging!", |
42 | "infobar.updateAvailable": "A new update for Franz is available.", | ||
32 | "invite.email.label": "Email address", | 43 | "invite.email.label": "Email address", |
33 | "invite.headline.friends": "Invite 3 of your friends or colleagues", | 44 | "invite.headline.friends": "Invite 3 of your friends or colleagues", |
34 | "invite.name.label": "Name", | 45 | "invite.name.label": "Name", |
@@ -46,6 +57,8 @@ | |||
46 | "login.serverLogout": "Your session expired, please login again.", | 57 | "login.serverLogout": "Your session expired, please login again.", |
47 | "login.submit.label": "Sign in", | 58 | "login.submit.label": "Sign in", |
48 | "login.tokenExpired": "Your session expired, please login again.", | 59 | "login.tokenExpired": "Your session expired, please login again.", |
60 | "menu.Todoss.closeTodosDrawer": "Close Todos drawer", | ||
61 | "menu.Todoss.openTodosDrawer": "Open Todos drawer", | ||
49 | "menu.app.about": "About Franz", | 62 | "menu.app.about": "About Franz", |
50 | "menu.app.announcement": "What's new?", | 63 | "menu.app.announcement": "What's new?", |
51 | "menu.app.checkForUpdates": "Check for updates", | 64 | "menu.app.checkForUpdates": "Check for updates", |
@@ -82,6 +95,7 @@ | |||
82 | "menu.services.activatePreviousService": "Activate previous service", | 95 | "menu.services.activatePreviousService": "Activate previous service", |
83 | "menu.services.addNewService": "Add New Service...", | 96 | "menu.services.addNewService": "Add New Service...", |
84 | "menu.services.setNextServiceActive": "Activate next service", | 97 | "menu.services.setNextServiceActive": "Activate next service", |
98 | "menu.todos": "Todos", | ||
85 | "menu.view": "View", | 99 | "menu.view": "View", |
86 | "menu.view.enterFullScreen": "Enter Full Screen", | 100 | "menu.view.enterFullScreen": "Enter Full Screen", |
87 | "menu.view.exitFullScreen": "Exit Full Screen", | 101 | "menu.view.exitFullScreen": "Exit Full Screen", |
@@ -91,6 +105,7 @@ | |||
91 | "menu.view.toggleDevTools": "Toggle Developer Tools", | 105 | "menu.view.toggleDevTools": "Toggle Developer Tools", |
92 | "menu.view.toggleFullScreen": "Toggle Full Screen", | 106 | "menu.view.toggleFullScreen": "Toggle Full Screen", |
93 | "menu.view.toggleServiceDevTools": "Toggle Service Developer Tools", | 107 | "menu.view.toggleServiceDevTools": "Toggle Service Developer Tools", |
108 | "menu.view.toggleTodosDevTools": "Toggle Todos Developer Tools", | ||
94 | "menu.view.zoomIn": "Zoom In", | 109 | "menu.view.zoomIn": "Zoom In", |
95 | "menu.view.zoomOut": "Zoom Out", | 110 | "menu.view.zoomOut": "Zoom Out", |
96 | "menu.window": "Window", | 111 | "menu.window": "Window", |
@@ -109,10 +124,33 @@ | |||
109 | "password.submit.label": "Submit", | 124 | "password.submit.label": "Submit", |
110 | "password.successInfo": "Please check your email", | 125 | "password.successInfo": "Please check your email", |
111 | "premiumFeature.button.upgradeAccount": "Upgrade account", | 126 | "premiumFeature.button.upgradeAccount": "Upgrade account", |
112 | "pricing.headline": "Support Ferdi", | 127 | "pricing.features.adFree": "Forever ad-free", |
113 | "pricing.link.skipPayment": "I don't want to support the development of Ferdi.", | 128 | "pricing.features.appDelays": "No Waiting Screens", |
114 | "pricing.submit.label": "I want to support the development of Ferdi", | 129 | "pricing.features.customWebsites": "Add Custom Websites", |
115 | "pricing.support.label": "Select your support plan", | 130 | "pricing.features.onPremise": "On-premise & other Hosted Services", |
131 | "pricing.features.serviceProxies": "Service Proxies", | ||
132 | "pricing.features.spellchecker": "Spellchecker support", | ||
133 | "pricing.features.teamManagement": "Team Management", | ||
134 | "pricing.features.thirdPartyServices": "Install 3rd party services", | ||
135 | "pricing.features.unlimitedServices": "Add unlimited services", | ||
136 | "pricing.features.workspaces": "Workspaces", | ||
137 | "pricing.plan.free": "Franz Free", | ||
138 | "pricing.plan.legacy": "Franz Premium", | ||
139 | "pricing.plan.personal": "Franz Personal", | ||
140 | "pricing.plan.personal-monthly": "Franz Personal Monthly", | ||
141 | "pricing.plan.personal-yearly": "Franz Personal Yearly", | ||
142 | "pricing.plan.pro": "Franz Professional", | ||
143 | "pricing.plan.pro-monthly": "Franz Professional Monthly", | ||
144 | "pricing.plan.pro-yearly": "Franz Professional Yearly", | ||
145 | "pricing.trial.cta.accept": "Yes, upgrade my account to Franz Professional", | ||
146 | "pricing.trial.cta.skip": "Continue to Franz", | ||
147 | "pricing.trial.error": "Sorry, we could not activate your trial!", | ||
148 | "pricing.trial.features.headline": "Franz Professional includes:", | ||
149 | "pricing.trial.headline": "Franz Professional", | ||
150 | "pricing.trial.subheadline": "Your personal welcome offer:", | ||
151 | "pricing.trial.terms.automaticTrialEnd": "Your free trial ends automatically after 14 days", | ||
152 | "pricing.trial.terms.headline": "No strings attached", | ||
153 | "pricing.trial.terms.noCreditCard": "No credit card required", | ||
116 | "service.crashHandler.action": "Reload {name}", | 154 | "service.crashHandler.action": "Reload {name}", |
117 | "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", | 155 | "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", |
118 | "service.crashHandler.headline": "Oh no!", | 156 | "service.crashHandler.headline": "Oh no!", |
@@ -124,6 +162,11 @@ | |||
124 | "service.errorHandler.headline": "Oh no!", | 162 | "service.errorHandler.headline": "Oh no!", |
125 | "service.errorHandler.message": "Error", | 163 | "service.errorHandler.message": "Error", |
126 | "service.errorHandler.text": "{name} has failed to load.", | 164 | "service.errorHandler.text": "{name} has failed to load.", |
165 | "service.restrictedHandler.action": "Upgrade Account", | ||
166 | "service.restrictedHandler.customUrl.headline": "Franz Professional Plan required", | ||
167 | "service.restrictedHandler.customUrl.text": "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
168 | "service.restrictedHandler.serviceLimit.headline": "You have reached your service limit.", | ||
169 | "service.restrictedHandler.serviceLimit.text": "Please upgrade your account to use more than {count} services.", | ||
127 | "service.webviewLoader.loading": "Loading", | 170 | "service.webviewLoader.loading": "Loading", |
128 | "services.getStarted": "Get started", | 171 | "services.getStarted": "Get started", |
129 | "services.login": "Please login to use Ferdi.", | 172 | "services.login": "Please login to use Ferdi.", |
@@ -143,13 +186,19 @@ | |||
143 | "settings.account.headlinePassword": "Change password", | 186 | "settings.account.headlinePassword": "Change password", |
144 | "settings.account.headlineProfile": "Update profile", | 187 | "settings.account.headlineProfile": "Update profile", |
145 | "settings.account.headlineSubscription": "Your subscription", | 188 | "settings.account.headlineSubscription": "Your subscription", |
146 | "settings.account.headlineUpgrade": "Upgrade your account & support Ferdi", | 189 | "settings.account.headlineTrialUpgrade": "Get the free 14 day Franz Professional Trial", |
190 | "settings.account.headlineUpgradeAccount": "Upgrade your account & get the full Franz experience", | ||
147 | "settings.account.invoiceDownload": "Download", | 191 | "settings.account.invoiceDownload": "Download", |
148 | "settings.account.manageSubscription.label": "Manage your subscription", | 192 | "settings.account.manageSubscription.label": "Manage your subscription", |
149 | "settings.account.successInfo": "Your changes have been saved", | 193 | "settings.account.successInfo": "Your changes have been saved", |
194 | "settings.account.trial": "Free Trial", | ||
195 | "settings.account.trialEndsIn": "Your free trial ends in {duration}.", | ||
196 | "settings.account.trialUpdateBillingInfo": "Please update your billing info to continue using {license} after your trial period.", | ||
150 | "settings.account.tryReloadServices": "Try again", | 197 | "settings.account.tryReloadServices": "Try again", |
151 | "settings.account.tryReloadUserInfoRequest": "Try again", | 198 | "settings.account.tryReloadUserInfoRequest": "Try again", |
199 | "settings.account.upgradeToPro.label": "Upgrade to Franz Professional", | ||
152 | "settings.account.userInfoRequestFailed": "Could not load user information", | 200 | "settings.account.userInfoRequestFailed": "Could not load user information", |
201 | "settings.account.yourLicense": "Your Franz License", | ||
153 | "settings.app.buttonClearAllCache": "Clear cache", | 202 | "settings.app.buttonClearAllCache": "Clear cache", |
154 | "settings.app.buttonInstallUpdate": "Restart & install update", | 203 | "settings.app.buttonInstallUpdate": "Restart & install update", |
155 | "settings.app.buttonSearchForUpdate": "Check for updates", | 204 | "settings.app.buttonSearchForUpdate": "Check for updates", |
@@ -161,7 +210,8 @@ | |||
161 | "settings.app.form.darkMode": "Join the Dark Side", | 210 | "settings.app.form.darkMode": "Join the Dark Side", |
162 | "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", | 211 | "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", |
163 | "settings.app.form.enableSpellchecking": "Enable spell checking", | 212 | "settings.app.form.enableSpellchecking": "Enable spell checking", |
164 | "settings.app.form.enableSystemTray": "Show Ferdi in system tray", | 213 | "settings.app.form.enableSystemTray": "Show Franz in system tray", |
214 | "settings.app.form.enableTodos": "Enable Franz Todos", | ||
165 | "settings.app.form.language": "Language", | 215 | "settings.app.form.language": "Language", |
166 | "settings.app.form.minimizeToSystemTray": "Minimize Ferdi to system tray", | 216 | "settings.app.form.minimizeToSystemTray": "Minimize Ferdi to system tray", |
167 | "settings.app.form.runInBackground": "Keep Ferdi in background when closing the window", | 217 | "settings.app.form.runInBackground": "Keep Ferdi in background when closing the window", |
@@ -192,7 +242,13 @@ | |||
192 | "settings.navigation.yourServices": "Your services", | 242 | "settings.navigation.yourServices": "Your services", |
193 | "settings.navigation.yourWorkspaces": "Your workspaces", | 243 | "settings.navigation.yourWorkspaces": "Your workspaces", |
194 | "settings.recipes.all": "All services", | 244 | "settings.recipes.all": "All services", |
195 | "settings.recipes.dev": "Development", | 245 | "settings.recipes.custom": "Custom Services", |
246 | "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", | ||
247 | "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes", | ||
248 | "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", | ||
249 | "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", | ||
250 | "settings.recipes.customService.openDevDocs": "Developer Documentation", | ||
251 | "settings.recipes.customService.openFolder": "Open folder", | ||
196 | "settings.recipes.headline": "Available services", | 252 | "settings.recipes.headline": "Available services", |
197 | "settings.recipes.missingService": "Missing a service?", | 253 | "settings.recipes.missingService": "Missing a service?", |
198 | "settings.recipes.mostPopular": "Most popular", | 254 | "settings.recipes.mostPopular": "Most popular", |
@@ -284,7 +340,6 @@ | |||
284 | "sidebar.openWorkspaceDrawer": "Open workspace drawer", | 340 | "sidebar.openWorkspaceDrawer": "Open workspace drawer", |
285 | "sidebar.settings": "Settings", | 341 | "sidebar.settings": "Settings", |
286 | "sidebar.unmuteApp": "Enable notifications & audio", | 342 | "sidebar.unmuteApp": "Enable notifications & audio", |
287 | "signup.company.label": "Company", | ||
288 | "signup.email.label": "Email address", | 343 | "signup.email.label": "Email address", |
289 | "signup.emailDuplicate": "A user with that email address already exists", | 344 | "signup.emailDuplicate": "A user with that email address already exists", |
290 | "signup.firstname.label": "First Name", | 345 | "signup.firstname.label": "First Name", |
@@ -310,6 +365,12 @@ | |||
310 | "subscription.type.free": "free", | 365 | "subscription.type.free": "free", |
311 | "subscription.type.month": "month", | 366 | "subscription.type.month": "month", |
312 | "subscription.type.year": "year", | 367 | "subscription.type.year": "year", |
368 | "subscription.cta.activateTrial": "Yes, start the free Franz Professional trial", | ||
369 | "subscription.cta.allOptions": "See all options", | ||
370 | "subscription.cta.choosePlan": "Choose your plan", | ||
371 | "subscription.includedProFeatures": "The Franz Professional Plan includes:", | ||
372 | "subscription.teaser.includedFeatures": "Paid Franz Plans include:", | ||
373 | "subscription.teaser.intro": "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
313 | "subscriptionPopup.buttonCancel": "Cancel", | 374 | "subscriptionPopup.buttonCancel": "Cancel", |
314 | "subscriptionPopup.buttonDone": "Done", | 375 | "subscriptionPopup.buttonDone": "Done", |
315 | "tabs.item.deleteService": "Delete service", | 376 | "tabs.item.deleteService": "Delete service", |
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index ebee8bcc5..48b68a893 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Actualizar", | 2 | "app.errorHandler.action" : "Actualizar", |
3 | "app.errorHandler.headline" : "Algo salió mal", | 3 | "app.errorHandler.headline" : "Algo salió mal", |
4 | "feature.announcements.changelog.headline" : "Cambios en Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Cambios en Franz {version}", |
5 | "feature.delayApp.action" : "Consigue una Licencia de Soporte de Franz", | 5 | "feature.delayApp.headline" : "Por favor compra una Licencia de Soporte de Franz para omitir la espera", |
6 | "feature.delayApp.headline" : "Por favor compra una Licencia de Soporte de Ferdi para omitir la espera", | 6 | "feature.delayApp.text" : "Franz continuará en {seconds} segundos.", |
7 | "feature.delayApp.text" : "Ferdi continuará en {seconds} segundos.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Consigue una Licencia de Soporte de Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Mejora tu cuenta", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Enviar como correo", | 13 | "feature.shareFranz.action.email" : "Enviar como correo", |
9 | "feature.shareFranz.action.facebook" : "Compartir en Facebook", | 14 | "feature.shareFranz.action.facebook" : "Compartir en Facebook", |
10 | "feature.shareFranz.action.twitter" : "Compartir en Twitter", | 15 | "feature.shareFranz.action.twitter" : "Compartir en Twitter", |
11 | "feature.shareFranz.headline" : "¡Juntos mejoramos Franz!", | 16 | "feature.shareFranz.headline" : "¡Juntos mejoramos Franz!", |
12 | "feature.shareFranz.shareText.email" : "¡He añadido {count} servicios a Franz! Obtén la aplicación gratuita para WhatsApp, Messenger, Slack, Skype en www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "¡He añadido {count} servicios a Franz! Obtén la aplicación gratuita para WhatsApp, Messenger, Slack, Skype en www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "He agregado {count} servicios a Franz! Obtené la aplicación gratuita de WhatsApp, Messenger, Slack, Skype y co en www.meetfranz.com\/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "He agregado {count} servicios a Franz! Obtené la aplicación gratuita de WhatsApp, Messenger, Slack, Skype y co en www.meetfranz.com\/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Dile a tus amigos y colegas lo asombroso que es Ferdi y ayúdanos a correr la voz.", | 19 | "feature.shareFranz.text" : "Dile a tus amigos y colegas lo asombroso que es Franz y ayúdanos a correr la voz.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "No es posible conectarse a los servicios en lÃnea de Franz.", | 23 | "global.api.unhealthy" : "No es posible conectarse a los servicios en lÃnea de Franz.", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "No estás conectado a Internet", | 25 | "global.notConnectedToTheInternet" : "No estás conectado a Internet", |
17 | "global.spellchecker.useDefault" : "Utilizar estándar del sistema ({default})", | 26 | "global.spellchecker.useDefault" : "Utilizar estándar del sistema ({default})", |
18 | "global.spellchecking.autodetect" : "Detectar el idioma automáticamente", | 27 | "global.spellchecking.autodetect" : "Detectar el idioma automáticamente", |
19 | "global.spellchecking.autodetect.short" : "Automático", | 28 | "global.spellchecking.autodetect.short" : "Automático", |
20 | "global.spellchecking.language" : "Corrector de ortografÃa", | 29 | "global.spellchecking.language" : "Corrector de ortografÃa", |
21 | "import.headline" : "Importa tus servicios de Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Servicios aún no admitidos en Ferdi 5", | 31 | "import.headline" : "Importa tus servicios de Franz 4", |
32 | "import.notSupportedHeadline" : "Servicios aún no admitidos en Franz 5", | ||
23 | "import.skip.label" : "Quiero agregar servicios manualmente", | 33 | "import.skip.label" : "Quiero agregar servicios manualmente", |
24 | "import.submit.label" : "Importar servicios", | 34 | "import.submit.label" : "Importar servicios", |
25 | "infobar.buttonChangelog" : "¿Qué hay de nuevo?", | 35 | "infobar.buttonChangelog" : "¿Qué hay de nuevo?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Recargar servicios", | 37 | "infobar.buttonReloadServices" : "Recargar servicios", |
28 | "infobar.requiredRequestsFailed" : "No se han podido cargar los servicios ni la información de usuario", | 38 | "infobar.requiredRequestsFailed" : "No se han podido cargar los servicios ni la información de usuario", |
29 | "infobar.servicesUpdated" : "Tus servicios han sido actualizados.", | 39 | "infobar.servicesUpdated" : "Tus servicios han sido actualizados.", |
30 | "infobar.updateAvailable" : "Una nueva actualización de Ferdi está disponible", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Una nueva actualización de Franz está disponible", | ||
31 | "invite.email.label" : "Dirección de correo electrónico", | 42 | "invite.email.label" : "Dirección de correo electrónico", |
32 | "invite.headline.friends" : "Invita a 3 de tus amigos o compañeros", | 43 | "invite.headline.friends" : "Invita a 3 de tus amigos o compañeros", |
33 | "invite.name.label" : "Nombre", | 44 | "invite.name.label" : "Nombre", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Tu sesión ha expirado, por favor inicia la sesión de nuevo.", | 54 | "login.serverLogout" : "Tu sesión ha expirado, por favor inicia la sesión de nuevo.", |
44 | "login.submit.label" : "Iniciar sesión", | 55 | "login.submit.label" : "Iniciar sesión", |
45 | "login.tokenExpired" : "Tu sesión ha expirado, por favor inicia sesión de nuevo.", | 56 | "login.tokenExpired" : "Tu sesión ha expirado, por favor inicia sesión de nuevo.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Acerca de Franz", | 59 | "menu.app.about" : "Acerca de Franz", |
47 | "menu.app.announcement" : "¿Qué hay de nuevo?", | 60 | "menu.app.announcement" : "¿Qué hay de nuevo?", |
48 | "menu.app.checkForUpdates" : "Comprobar actualizaciones", | 61 | "menu.app.checkForUpdates" : "Comprobar actualizaciones", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Archivo", | 81 | "menu.file" : "Archivo", |
69 | "menu.help" : "Ayuda", | 82 | "menu.help" : "Ayuda", |
70 | "menu.help.changelog" : "Registro de cambios", | 83 | "menu.help.changelog" : "Registro de cambios", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Conocer más", | 87 | "menu.help.learnMore" : "Conocer más", |
72 | "menu.help.privacy" : "Declaración de privacidad", | 88 | "menu.help.privacy" : "Declaración de privacidad", |
73 | "menu.help.support" : "Soporte", | 89 | "menu.help.support" : "Soporte", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activa el servicio previo", | 92 | "menu.services.activatePreviousService" : "Activa el servicio previo", |
77 | "menu.services.addNewService" : "Añadir Nuevo Servicio...", | 93 | "menu.services.addNewService" : "Añadir Nuevo Servicio...", |
78 | "menu.services.setNextServiceActive" : "Activa el siguiente servicio", | 94 | "menu.services.setNextServiceActive" : "Activa el siguiente servicio", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Mostrar", | 96 | "menu.view" : "Mostrar", |
80 | "menu.view.enterFullScreen" : "Pasar a pantalla completa", | 97 | "menu.view.enterFullScreen" : "Pasar a pantalla completa", |
81 | "menu.view.exitFullScreen" : "Salir de Pantalla Completa", | 98 | "menu.view.exitFullScreen" : "Salir de Pantalla Completa", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Activar las Herramientas para Desarrolladores", | 102 | "menu.view.toggleDevTools" : "Activar las Herramientas para Desarrolladores", |
86 | "menu.view.toggleFullScreen" : "Cambiar a Pantalla Completa", | 103 | "menu.view.toggleFullScreen" : "Cambiar a Pantalla Completa", |
87 | "menu.view.toggleServiceDevTools" : "Mostrar Herramientas de Servicios para Desarrolladores", | 104 | "menu.view.toggleServiceDevTools" : "Mostrar Herramientas de Servicios para Desarrolladores", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Ampliar", | 106 | "menu.view.zoomIn" : "Ampliar", |
89 | "menu.view.zoomOut" : "Reducir", | 107 | "menu.view.zoomOut" : "Reducir", |
90 | "menu.window" : "Ventana", | 108 | "menu.window" : "Ventana", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Enviar", | 121 | "password.submit.label" : "Enviar", |
104 | "password.successInfo" : "Por favor revisa tu correo electrónico", | 122 | "password.successInfo" : "Por favor revisa tu correo electrónico", |
105 | "premiumFeature.button.upgradeAccount" : "Mejora tu cuenta", | 123 | "premiumFeature.button.upgradeAccount" : "Mejora tu cuenta", |
106 | "pricing.headline" : "Apoya a Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "No quiero apoyar el desarrollo de Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Quiero apoyar el desarrollo de Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Selecciona tu plan de soporte", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Espacios de trabajo", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Recargar {name}", | 151 | "service.crashHandler.action" : "Recargar {name}", |
111 | "service.crashHandler.autoReload" : "Intentando recuperar automáticamente {name} en {seconds} segundos", | 152 | "service.crashHandler.autoReload" : "Intentando recuperar automáticamente {name} en {seconds} segundos", |
112 | "service.crashHandler.headline" : "¡Oh, no!", | 153 | "service.crashHandler.headline" : "¡Oh, no!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "¡Oh, no!", | 159 | "service.errorHandler.headline" : "¡Oh, no!", |
119 | "service.errorHandler.message" : "Error", | 160 | "service.errorHandler.message" : "Error", |
120 | "service.errorHandler.text" : "{name} ha fallado la carga", | 161 | "service.errorHandler.text" : "{name} ha fallado la carga", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Cargando", | 167 | "service.webviewLoader.loading" : "Cargando", |
122 | "services.getStarted" : "Primeros pasos", | 168 | "services.getStarted" : "Primeros pasos", |
123 | "services.welcome" : "Bienvenido a Franz", | 169 | "services.welcome" : "Bienvenido a Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Cambiar contraseña", | 181 | "settings.account.headlinePassword" : "Cambiar contraseña", |
136 | "settings.account.headlineProfile" : "Actualizar perfil", | 182 | "settings.account.headlineProfile" : "Actualizar perfil", |
137 | "settings.account.headlineSubscription" : "Tu suscripción", | 183 | "settings.account.headlineSubscription" : "Tu suscripción", |
138 | "settings.account.headlineUpgrade" : "Actualiza tu cuenta y apoya a Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Descargar", | 186 | "settings.account.invoiceDownload" : "Descargar", |
140 | "settings.account.manageSubscription.label" : "Administra tu suscripción", | 187 | "settings.account.manageSubscription.label" : "Administra tu suscripción", |
141 | "settings.account.successInfo" : "Tus cambios han sido guardados", | 188 | "settings.account.successInfo" : "Tus cambios han sido guardados", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Intentar de nuevo", | 192 | "settings.account.tryReloadServices" : "Intentar de nuevo", |
143 | "settings.account.tryReloadUserInfoRequest" : "Intenta de nuevo", | 193 | "settings.account.tryReloadUserInfoRequest" : "Intenta de nuevo", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "No se pudo cargar la información de usuario", | 195 | "settings.account.userInfoRequestFailed" : "No se pudo cargar la información de usuario", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Limpiar caché", | 197 | "settings.app.buttonClearAllCache" : "Limpiar caché", |
146 | "settings.app.buttonInstallUpdate" : "Reiniciar e instalar actualizaciones", | 198 | "settings.app.buttonInstallUpdate" : "Reiniciar e instalar actualizaciones", |
147 | "settings.app.buttonSearchForUpdate" : "Buscar actualizaciones", | 199 | "settings.app.buttonSearchForUpdate" : "Buscar actualizaciones", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Únete al Lado Oscuro", | 205 | "settings.app.form.darkMode" : "Únete al Lado Oscuro", |
154 | "settings.app.form.enableGPUAcceleration" : "Habilitar aceleración de GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Habilitar aceleración de GPU", |
155 | "settings.app.form.enableSpellchecking" : "Activar corrección ortográfica", | 207 | "settings.app.form.enableSpellchecking" : "Activar corrección ortográfica", |
156 | "settings.app.form.enableSystemTray" : "Mostrar Ferdi en la bandeja del sistema", | 208 | "settings.app.form.enableSystemTray" : "Mostrar Franz en la bandeja del sistema", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Idioma", | 210 | "settings.app.form.language" : "Idioma", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimizar Ferdi a la bandeja del sistema", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimizar Ferdi a la bandeja del sistema", |
159 | "settings.app.form.runInBackground" : "Mantener Ferdi en segundo plano al cerrar la ventana", | 212 | "settings.app.form.runInBackground" : "Mantener Ferdi en segundo plano al cerrar la ventana", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Tus servicios", | 235 | "settings.navigation.yourServices" : "Tus servicios", |
183 | "settings.navigation.yourWorkspaces" : "Tus espacios de trabajo", | 236 | "settings.navigation.yourWorkspaces" : "Tus espacios de trabajo", |
184 | "settings.recipes.all" : "Todos los servicios", | 237 | "settings.recipes.all" : "Todos los servicios", |
185 | "settings.recipes.dev" : "Desarrollo", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Servicios disponibles", | 245 | "settings.recipes.headline" : "Servicios disponibles", |
187 | "settings.recipes.missingService" : "¿Echas de menos algún servicio?", | 246 | "settings.recipes.missingService" : "¿Echas de menos algún servicio?", |
188 | "settings.recipes.mostPopular" : "Más populares", | 247 | "settings.recipes.mostPopular" : "Más populares", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Configuración", | 334 | "sidebar.settings" : "Configuración", |
276 | "sidebar.unmuteApp" : "Activar notificaciones y sonido", | 335 | "sidebar.unmuteApp" : "Activar notificaciones y sonido", |
277 | "signup.company.label" : "CompañÃa", | ||
278 | "signup.email.label" : "Dirección de correo electrónico", | 336 | "signup.email.label" : "Dirección de correo electrónico", |
279 | "signup.emailDuplicate" : "Ya existe un usuario con esa dirección de correo electrónico", | 337 | "signup.emailDuplicate" : "Ya existe un usuario con esa dirección de correo electrónico", |
280 | "signup.firstname.label" : "Nombre", | 338 | "signup.firstname.label" : "Nombre", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "gratis", | 358 | "subscription.type.free" : "gratis", |
301 | "subscription.type.month" : "mes", | 359 | "subscription.type.month" : "mes", |
302 | "subscription.type.year" : "año", | 360 | "subscription.type.year" : "año", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Cancelar", | 367 | "subscriptionPopup.buttonCancel" : "Cancelar", |
304 | "subscriptionPopup.buttonDone" : "Listo", | 368 | "subscriptionPopup.buttonDone" : "Listo", |
305 | "tabs.item.deleteService" : "Borrar servicio", | 369 | "tabs.item.deleteService" : "Borrar servicio", |
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 608eee52a..f98a060cd 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json | |||
@@ -1,23 +1,33 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Recharger", | 2 | "app.errorHandler.action" : "Actualiser", |
3 | "app.errorHandler.headline" : "Une erreur s'est produite", | 3 | "app.errorHandler.headline" : "On dirait que quelque chose ne va pas", |
4 | "feature.announcements.changelog.headline" : "Changements dans Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Les nouveaux changements dans Franz {version}", |
5 | "feature.delayApp.action" : "Obtenez une licence de Supporter Franz", | 5 | "feature.delayApp.headline" : "Achetez la licence Franz pour ne plus avoir de temps d'attente", |
6 | "feature.delayApp.headline" : "Achetez une licence de Supporter Ferdi pour ne plus avoir de temps d'attente", | 6 | "feature.delayApp.text" : "Franz s'ouvrira dans {seconds} secondes.", |
7 | "feature.delayApp.text" : "Ferdi reprendra dans {seconds} secondes.", | 7 | "feature.delayApp.trial.action" : "Oui, je veux les 14 jours d'essai gratuits de Franz Professionnel", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Acheter une license Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Augmenter le niveau de mon compte", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Envoyer par mail", | 13 | "feature.shareFranz.action.email" : "Envoyer par mail", |
9 | "feature.shareFranz.action.facebook" : "Partager sur Facebook", | 14 | "feature.shareFranz.action.facebook" : "Partager sur Facebook", |
10 | "feature.shareFranz.action.twitter" : "Partager sur Twitter", | 15 | "feature.shareFranz.action.twitter" : "Partager sur Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi est meilleur quand on est tous ensemble !", | 16 | "feature.shareFranz.headline" : "Franz est meilleur quand on est ensemble !", |
12 | "feature.shareFranz.shareText.email" : "J'ai ajouté {count} services à Ferdi ! Télécharger l'appli gratuite pour WhatsApp, Messenger, Skype et cie sur www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "J'ai ajouté {count} services sur Franz ! Télécharger l'appli gratuite pour WhatsApp, Messenger, Skype et autres sur www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "J'ai ajouté {count} services à Franz! Télécharge l'application gratuite pour WhatsApp, Messenger, Slack, Skype et compagnie sur www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "J'ai ajouté {count} services à Franz! Télécharge l'application gratuite pour WhatsApp, Messenger, Slack, Skype et autres sur www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Dites à vos amis et collègues a quel point Ferdi est super et aidez nous à faire passer le mot.", | 19 | "feature.shareFranz.text" : "Dites à vos amis et collègues a quel point Franz est super et aidez nous à faire passer le mot.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz", | 23 | "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.", | 25 | "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.", |
17 | "global.spellchecker.useDefault" : "Par défaut ({default})", | 26 | "global.spellchecker.useDefault" : "Par défaut ({default})", |
18 | "global.spellchecking.autodetect" : "Detecter automatiquement la langue", | 27 | "global.spellchecking.autodetect" : "Detecter automatiquement la langue", |
19 | "global.spellchecking.autodetect.short" : "Automatiquement", | 28 | "global.spellchecking.autodetect.short" : "Automatiquement", |
20 | "global.spellchecking.language" : "Langue de la vérification orthographique", | 29 | "global.spellchecking.language" : "Langue de la vérification orthographique", |
30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", | ||
21 | "import.headline" : "Importez vos services depuis la version 4 de Franz.", | 31 | "import.headline" : "Importez vos services depuis la version 4 de Franz.", |
22 | "import.notSupportedHeadline" : "Ces services ne sont pas encore supportés par la version 5 de Franz", | 32 | "import.notSupportedHeadline" : "Ces services ne sont pas encore supportés par la version 5 de Franz", |
23 | "import.skip.label" : "Je veux ajouter des services manuellement", | 33 | "import.skip.label" : "Je veux ajouter des services manuellement", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Recharger les services", | 37 | "infobar.buttonReloadServices" : "Recharger les services", |
28 | "infobar.requiredRequestsFailed" : "Impossible d'accéder aux services et informations de l'utilisateur", | 38 | "infobar.requiredRequestsFailed" : "Impossible d'accéder aux services et informations de l'utilisateur", |
29 | "infobar.servicesUpdated" : "Vos services ont été mis à jour.", | 39 | "infobar.servicesUpdated" : "Vos services ont été mis à jour.", |
30 | "infobar.updateAvailable" : "Une nouvelle mise à jour de Ferdi est disponible.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Une nouvelle mise à jour de Franz est disponible.", | ||
31 | "invite.email.label" : "Adresse Email", | 42 | "invite.email.label" : "Adresse Email", |
32 | "invite.headline.friends" : "Invitez 3 amis ou collègues", | 43 | "invite.headline.friends" : "Invitez 3 amis ou collègues", |
33 | "invite.name.label" : "Nom", | 44 | "invite.name.label" : "Nom", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Votre session a expiré. Reconnectez-vous s'il vous plaît.", | 54 | "login.serverLogout" : "Votre session a expiré. Reconnectez-vous s'il vous plaît.", |
44 | "login.submit.label" : "Se connecter", | 55 | "login.submit.label" : "Se connecter", |
45 | "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", | 56 | "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "À propos de Franz", | 59 | "menu.app.about" : "À propos de Franz", |
47 | "menu.app.announcement" : "Quoi de neuf ? ", | 60 | "menu.app.announcement" : "Quoi de neuf ? ", |
48 | "menu.app.checkForUpdates" : "Vérifier les mises à jour", | 61 | "menu.app.checkForUpdates" : "Vérifier les mises à jour", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Fichier", | 81 | "menu.file" : "Fichier", |
69 | "menu.help" : "Aide", | 82 | "menu.help" : "Aide", |
70 | "menu.help.changelog" : "Liste des modifications", | 83 | "menu.help.changelog" : "Liste des modifications", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "En savoir plus", | 87 | "menu.help.learnMore" : "En savoir plus", |
72 | "menu.help.privacy" : "Déclaration de confidentialité", | 88 | "menu.help.privacy" : "Déclaration de confidentialité", |
73 | "menu.help.support" : "Assistance", | 89 | "menu.help.support" : "Assistance", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activer le service précédent", | 92 | "menu.services.activatePreviousService" : "Activer le service précédent", |
77 | "menu.services.addNewService" : "Ajouter un nouveau service...", | 93 | "menu.services.addNewService" : "Ajouter un nouveau service...", |
78 | "menu.services.setNextServiceActive" : "Activer le service suivant", | 94 | "menu.services.setNextServiceActive" : "Activer le service suivant", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Aperçu", | 96 | "menu.view" : "Aperçu", |
80 | "menu.view.enterFullScreen" : "Entrer en mode plein écran", | 97 | "menu.view.enterFullScreen" : "Entrer en mode plein écran", |
81 | "menu.view.exitFullScreen" : "Sortir du mode plein écran", | 98 | "menu.view.exitFullScreen" : "Sortir du mode plein écran", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Activer les outils développeur", | 102 | "menu.view.toggleDevTools" : "Activer les outils développeur", |
86 | "menu.view.toggleFullScreen" : "Activer \/ désactiver le mode plein écran", | 103 | "menu.view.toggleFullScreen" : "Activer \/ désactiver le mode plein écran", |
87 | "menu.view.toggleServiceDevTools" : "Activer les outils de développement WebKit", | 104 | "menu.view.toggleServiceDevTools" : "Activer les outils de développement WebKit", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Zoom Avant", | 106 | "menu.view.zoomIn" : "Zoom Avant", |
89 | "menu.view.zoomOut" : "Zoom Arrière", | 107 | "menu.view.zoomOut" : "Zoom Arrière", |
90 | "menu.window" : "Fenêtre", | 108 | "menu.window" : "Fenêtre", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Soumettre", | 121 | "password.submit.label" : "Soumettre", |
104 | "password.successInfo" : "Merci de consulter vos emails", | 122 | "password.successInfo" : "Merci de consulter vos emails", |
105 | "premiumFeature.button.upgradeAccount" : "Augmenter le niveau de mon compte", | 123 | "premiumFeature.button.upgradeAccount" : "Augmenter le niveau de mon compte", |
106 | "pricing.headline" : "Soutenez Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Je veux soutenir le développement de Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Sélectionnez votre plan de soutien", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Espace de travail", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Recharger {name}", | 151 | "service.crashHandler.action" : "Recharger {name}", |
111 | "service.crashHandler.autoReload" : "Tentative de restauration automatique de {name} dans {seconds} secondes", | 152 | "service.crashHandler.autoReload" : "Tentative de restauration automatique de {name} dans {seconds} secondes", |
112 | "service.crashHandler.headline" : "Oh non !", | 153 | "service.crashHandler.headline" : "Oh non !", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh non !", | 159 | "service.errorHandler.headline" : "Oh non !", |
119 | "service.errorHandler.message" : "Erreur", | 160 | "service.errorHandler.message" : "Erreur", |
120 | "service.errorHandler.text" : "Le chargement de {name} a échoué.", | 161 | "service.errorHandler.text" : "Le chargement de {name} a échoué.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Chargement (c'est l'heure du café...)", | 167 | "service.webviewLoader.loading" : "Chargement (c'est l'heure du café...)", |
122 | "services.getStarted" : "Commencer", | 168 | "services.getStarted" : "Commencer", |
123 | "services.welcome" : "Bienvenue dans Franz", | 169 | "services.welcome" : "Bienvenue dans Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Changer le mot de passe", | 181 | "settings.account.headlinePassword" : "Changer le mot de passe", |
136 | "settings.account.headlineProfile" : "Mettre à jour le profil", | 182 | "settings.account.headlineProfile" : "Mettre à jour le profil", |
137 | "settings.account.headlineSubscription" : "Votre abonnement", | 183 | "settings.account.headlineSubscription" : "Votre abonnement", |
138 | "settings.account.headlineUpgrade" : "Améliorez votre compte et soutenez Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Télécharger", | 186 | "settings.account.invoiceDownload" : "Télécharger", |
140 | "settings.account.manageSubscription.label" : "Gérer votre abonnement", | 187 | "settings.account.manageSubscription.label" : "Gérer votre abonnement", |
141 | "settings.account.successInfo" : "Vos modifications ont été enregistrées", | 188 | "settings.account.successInfo" : "Vos modifications ont été enregistrées", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Réessayer", | 192 | "settings.account.tryReloadServices" : "Réessayer", |
143 | "settings.account.tryReloadUserInfoRequest" : "Réessayer", | 193 | "settings.account.tryReloadUserInfoRequest" : "Réessayer", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Impossible de charger les informations de l'utilisateur", | 195 | "settings.account.userInfoRequestFailed" : "Impossible de charger les informations de l'utilisateur", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Vider le cache", | 197 | "settings.app.buttonClearAllCache" : "Vider le cache", |
146 | "settings.app.buttonInstallUpdate" : "Redémarrer et installer la mise à jour", | 198 | "settings.app.buttonInstallUpdate" : "Redémarrer et installer la mise à jour", |
147 | "settings.app.buttonSearchForUpdate" : "Vérifier les mises à jour", | 199 | "settings.app.buttonSearchForUpdate" : "Vérifier les mises à jour", |
@@ -150,10 +202,11 @@ | |||
150 | "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan", | 202 | "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan", |
151 | "settings.app.form.autoLaunchOnStart" : "Lancer Ferdi au démarrage", | 203 | "settings.app.form.autoLaunchOnStart" : "Lancer Ferdi au démarrage", |
152 | "settings.app.form.beta" : "Accepter les versions bêta", | 204 | "settings.app.form.beta" : "Accepter les versions bêta", |
153 | "settings.app.form.darkMode" : "Rejoins le côté obscur", | 205 | "settings.app.form.darkMode" : "Activer le thème sombre", |
154 | "settings.app.form.enableGPUAcceleration" : "Activer l'accélération GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Activer l'accélération GPU", |
155 | "settings.app.form.enableSpellchecking" : "Activer la vérification orthographique", | 207 | "settings.app.form.enableSpellchecking" : "Activer la vérification orthographique", |
156 | "settings.app.form.enableSystemTray" : "Afficher Ferdi dans la barre d'état système", | 208 | "settings.app.form.enableSystemTray" : "Afficher Franz dans la barre d'état système", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Langue", | 210 | "settings.app.form.language" : "Langue", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimiser Ferdi dans la zone de notification", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimiser Ferdi dans la zone de notification", |
159 | "settings.app.form.runInBackground" : "Garder Ferdi ouvert en arrière-plan à la fermeture de la fenêtre", | 212 | "settings.app.form.runInBackground" : "Garder Ferdi ouvert en arrière-plan à la fermeture de la fenêtre", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Vos services", | 235 | "settings.navigation.yourServices" : "Vos services", |
183 | "settings.navigation.yourWorkspaces" : "Tes espaces de travail", | 236 | "settings.navigation.yourWorkspaces" : "Tes espaces de travail", |
184 | "settings.recipes.all" : "Tous les services", | 237 | "settings.recipes.all" : "Tous les services", |
185 | "settings.recipes.dev" : "Développement", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Services disponibles", | 245 | "settings.recipes.headline" : "Services disponibles", |
187 | "settings.recipes.missingService" : "Un service est manquant ?", | 246 | "settings.recipes.missingService" : "Un service est manquant ?", |
188 | "settings.recipes.mostPopular" : "Les plus populaires", | 247 | "settings.recipes.mostPopular" : "Les plus populaires", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Ouvrir l'espace de travail", | 333 | "sidebar.openWorkspaceDrawer" : "Ouvrir l'espace de travail", |
275 | "sidebar.settings" : "Paramètres", | 334 | "sidebar.settings" : "Paramètres", |
276 | "sidebar.unmuteApp" : "Activer les notifications et les sons", | 335 | "sidebar.unmuteApp" : "Activer les notifications et les sons", |
277 | "signup.company.label" : "Entreprise", | ||
278 | "signup.email.label" : "Adresse email", | 336 | "signup.email.label" : "Adresse email", |
279 | "signup.emailDuplicate" : "Cette adresse email est déjà utilisée", | 337 | "signup.emailDuplicate" : "Cette adresse email est déjà utilisée", |
280 | "signup.firstname.label" : "Prénom", | 338 | "signup.firstname.label" : "Prénom", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "gratuit", | 358 | "subscription.type.free" : "gratuit", |
301 | "subscription.type.month" : "mois", | 359 | "subscription.type.month" : "mois", |
302 | "subscription.type.year" : "année", | 360 | "subscription.type.year" : "année", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Annuler", | 367 | "subscriptionPopup.buttonCancel" : "Annuler", |
304 | "subscriptionPopup.buttonDone" : "Terminé", | 368 | "subscriptionPopup.buttonDone" : "Terminé", |
305 | "tabs.item.deleteService" : "Supprimer le service", | 369 | "tabs.item.deleteService" : "Supprimer le service", |
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json index 75c4c268a..f274c6eff 100644 --- a/src/i18n/locales/ga.json +++ b/src/i18n/locales/ga.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Athlódáil", | 2 | "app.errorHandler.action" : "Athlódáil", |
3 | "app.errorHandler.headline" : "Something went wrong", | 3 | "app.errorHandler.headline" : "Something went wrong", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Get a Ferdi Supporter License", | 5 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
6 | "feature.delayApp.headline" : "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
7 | "feature.delayApp.text" : "Ferdi will continue in {seconds} seconds.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Get a Franz Supporter License", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Send as email", | 13 | "feature.shareFranz.action.email" : "Send as email", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 14 | "feature.shareFranz.action.facebook" : "Share on Facebook", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 15 | "feature.shareFranz.action.twitter" : "Share on Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
15 | "global.api.unhealthy" : "Nà féidir nascadh le seirbhÃsà Ferdi ar lÃne", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Nà féidir nascadh le seirbhÃsà Franz ar lÃne", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "NÃl tú nasctha leis an IdirlÃon.", | 25 | "global.notConnectedToTheInternet" : "NÃl tú nasctha leis an IdirlÃon.", |
17 | "global.spellchecker.useDefault" : "Use System Default ({default})", | 26 | "global.spellchecker.useDefault" : "Use System Default ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Spell checking language", | 29 | "global.spellchecking.language" : "Spell checking language", |
21 | "import.headline" : "Iompórtáil do sheirbhÃsà Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "NÃl na seirbhÃsà seo taca ag Ferdi 5 go fóill", | 31 | "import.headline" : "Iompórtáil do sheirbhÃsà Franz 4", |
32 | "import.notSupportedHeadline" : "NÃl na seirbhÃsà seo taca ag Franz 5 go fóill", | ||
23 | "import.skip.label" : "Ba mhaith liom seirbhÃsà a chur de láimh", | 33 | "import.skip.label" : "Ba mhaith liom seirbhÃsà a chur de láimh", |
24 | "import.submit.label" : "Iompórtáil seirbhÃsÃ", | 34 | "import.submit.label" : "Iompórtáil seirbhÃsÃ", |
25 | "infobar.buttonChangelog" : "Cad atá nua?", | 35 | "infobar.buttonChangelog" : "Cad atá nua?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Athlódáil seirbhÃsÃ", | 37 | "infobar.buttonReloadServices" : "Athlódáil seirbhÃsÃ", |
28 | "infobar.requiredRequestsFailed" : "Nà féidir seirbhÃsà agus eolas úsáideora a lódáil", | 38 | "infobar.requiredRequestsFailed" : "Nà féidir seirbhÃsà agus eolas úsáideora a lódáil", |
29 | "infobar.servicesUpdated" : "NuashonraÃodh do sheirbhÃsÃ.", | 39 | "infobar.servicesUpdated" : "NuashonraÃodh do sheirbhÃsÃ.", |
30 | "infobar.updateAvailable" : "Tá nuashonrú nua do Ferdi ar fáil.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Tá nuashonrú nua do Franz ar fáil.", | ||
31 | "invite.email.label" : "Seoladh rÃomhphoist", | 42 | "invite.email.label" : "Seoladh rÃomhphoist", |
32 | "invite.headline.friends" : "Tabhair cuireadh do thriúr chara nó chomhghleacaÃ", | 43 | "invite.headline.friends" : "Tabhair cuireadh do thriúr chara nó chomhghleacaÃ", |
33 | "invite.name.label" : "Ainm", | 44 | "invite.name.label" : "Ainm", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "D'éag do sheisiún, logáil isteach arÃs le do thoil.", | 54 | "login.serverLogout" : "D'éag do sheisiún, logáil isteach arÃs le do thoil.", |
44 | "login.submit.label" : "Logáil isteach", | 55 | "login.submit.label" : "Logáil isteach", |
45 | "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arÃs le do thoil.", | 56 | "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arÃs le do thoil.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Faoi Franz", | 59 | "menu.app.about" : "Faoi Franz", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "Cuardaigh le nuashonruithe", | 61 | "menu.app.checkForUpdates" : "Cuardaigh le nuashonruithe", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Comhad", | 81 | "menu.file" : "Comhad", |
69 | "menu.help" : "Cabhair", | 82 | "menu.help" : "Cabhair", |
70 | "menu.help.changelog" : "Athruithe", | 83 | "menu.help.changelog" : "Athruithe", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Tuilleadh eolais", | 87 | "menu.help.learnMore" : "Tuilleadh eolais", |
72 | "menu.help.privacy" : "Ráiteas phrÃobháideachais", | 88 | "menu.help.privacy" : "Ráiteas phrÃobháideachais", |
73 | "menu.help.support" : "TacaÃocht", | 89 | "menu.help.support" : "TacaÃocht", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Cuir seirbhÃs nua leis", | 93 | "menu.services.addNewService" : "Cuir seirbhÃs nua leis", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Amharc", | 96 | "menu.view" : "Amharc", |
80 | "menu.view.enterFullScreen" : "Cuir isteach mód lánscáileáin", | 97 | "menu.view.enterFullScreen" : "Cuir isteach mód lánscáileáin", |
81 | "menu.view.exitFullScreen" : "Scoir mód lánscáileáin", | 98 | "menu.view.exitFullScreen" : "Scoir mód lánscáileáin", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Scoránaigh uirlis forbróra", | 102 | "menu.view.toggleDevTools" : "Scoránaigh uirlis forbróra", |
86 | "menu.view.toggleFullScreen" : "Scoránaigh mód lánscáileáin", | 103 | "menu.view.toggleFullScreen" : "Scoránaigh mód lánscáileáin", |
87 | "menu.view.toggleServiceDevTools" : "Scoránaigh uirlis forbróra seirbhÃse", | 104 | "menu.view.toggleServiceDevTools" : "Scoránaigh uirlis forbróra seirbhÃse", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Zúmáil isteach", | 106 | "menu.view.zoomIn" : "Zúmáil isteach", |
89 | "menu.view.zoomOut" : "Zúmáil amach", | 107 | "menu.view.zoomOut" : "Zúmáil amach", |
90 | "menu.window" : "Fuinneog", | 108 | "menu.window" : "Fuinneog", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Cuir isteach", | 121 | "password.submit.label" : "Cuir isteach", |
104 | "password.successInfo" : "Seiceáil do chuid rÃomhphoist le do thoil", | 122 | "password.successInfo" : "Seiceáil do chuid rÃomhphoist le do thoil", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
106 | "pricing.headline" : "Tabhair tacaÃocht do Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "NÃor mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Ba mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz.", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Conas ar mhaith leat tacú le Franz?", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Athlódáil {name}", | 151 | "service.crashHandler.action" : "Athlódáil {name}", |
111 | "service.crashHandler.autoReload" : "Ag iarraidh {name} a thabhairt ar ais go huathoibrÃoch i gceann {seconds} shoicind", | 152 | "service.crashHandler.autoReload" : "Ag iarraidh {name} a thabhairt ar ais go huathoibrÃoch i gceann {seconds} shoicind", |
112 | "service.crashHandler.headline" : "Oró, nà hea!", | 153 | "service.crashHandler.headline" : "Oró, nà hea!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oró, nà hea!", | 159 | "service.errorHandler.headline" : "Oró, nà hea!", |
119 | "service.errorHandler.message" : "Earráid", | 160 | "service.errorHandler.message" : "Earráid", |
120 | "service.errorHandler.text" : "{name} has failed to load.", | 161 | "service.errorHandler.text" : "{name} has failed to load.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "Cuir tús", | 168 | "services.getStarted" : "Cuir tús", |
123 | "services.welcome" : "Fáilte go Franz", | 169 | "services.welcome" : "Fáilte go Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Athraigh pasfhocal", | 181 | "settings.account.headlinePassword" : "Athraigh pasfhocal", |
136 | "settings.account.headlineProfile" : "Nuashonraigh próifÃl", | 182 | "settings.account.headlineProfile" : "Nuashonraigh próifÃl", |
137 | "settings.account.headlineSubscription" : "Do shÃntiús", | 183 | "settings.account.headlineSubscription" : "Do shÃntiús", |
138 | "settings.account.headlineUpgrade" : "Uasghrádaigh do chuntas chun tacaÃocht a thabhairt do Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Ãoslódáil", | 186 | "settings.account.invoiceDownload" : "Ãoslódáil", |
140 | "settings.account.manageSubscription.label" : "Bainistigh do shÃntiús", | 187 | "settings.account.manageSubscription.label" : "Bainistigh do shÃntiús", |
141 | "settings.account.successInfo" : "Sábháladh do chuid athruithe", | 188 | "settings.account.successInfo" : "Sábháladh do chuid athruithe", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Atriail", | 192 | "settings.account.tryReloadServices" : "Atriail", |
143 | "settings.account.tryReloadUserInfoRequest" : "Atriail", | 193 | "settings.account.tryReloadUserInfoRequest" : "Atriail", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Nà féidir eolas úsáideora a lódáil", | 195 | "settings.account.userInfoRequestFailed" : "Nà féidir eolas úsáideora a lódáil", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Glan taisce", | 197 | "settings.app.buttonClearAllCache" : "Glan taisce", |
146 | "settings.app.buttonInstallUpdate" : "Atosaigh ⊠suiteáil nuashonrú", | 198 | "settings.app.buttonInstallUpdate" : "Atosaigh ⊠suiteáil nuashonrú", |
147 | "settings.app.buttonSearchForUpdate" : "Cuardaigh le nuashonruithe", | 199 | "settings.app.buttonSearchForUpdate" : "Cuardaigh le nuashonruithe", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Join the Dark Side", | 205 | "settings.app.form.darkMode" : "Join the Dark Side", |
154 | "settings.app.form.enableGPUAcceleration" : "Cumasaigh luasghéarú APG", | 206 | "settings.app.form.enableGPUAcceleration" : "Cumasaigh luasghéarú APG", |
155 | "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe", | 207 | "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe", |
156 | "settings.app.form.enableSystemTray" : "Taispeáin Ferdi i dtráidire an chórais", | 208 | "settings.app.form.enableSystemTray" : "Taispeáin Franz i dtráidire an chórais", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Teanga", | 210 | "settings.app.form.language" : "Teanga", |
158 | "settings.app.form.minimizeToSystemTray" : "Ãoslaghdaigh Ferdi chuig tráidire an chórais", | 211 | "settings.app.form.minimizeToSystemTray" : "Ãoslaghdaigh Ferdi chuig tráidire an chórais", |
159 | "settings.app.form.runInBackground" : "Coimeád Ferdi sa chúlra nuair a dhúntar an fhuinneog", | 212 | "settings.app.form.runInBackground" : "Coimeád Ferdi sa chúlra nuair a dhúntar an fhuinneog", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Do sheirbhÃsÃ", | 235 | "settings.navigation.yourServices" : "Do sheirbhÃsÃ", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Gach seirbhÃs", | 237 | "settings.recipes.all" : "Gach seirbhÃs", |
185 | "settings.recipes.dev" : "Forbairt", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "SeirbhÃsà le fáil", | 245 | "settings.recipes.headline" : "SeirbhÃsà le fáil", |
187 | "settings.recipes.missingService" : "SeirbhÃs ar iarraidh?", | 246 | "settings.recipes.missingService" : "SeirbhÃs ar iarraidh?", |
188 | "settings.recipes.mostPopular" : "Is coitianta", | 247 | "settings.recipes.mostPopular" : "Is coitianta", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Socruithe", | 334 | "sidebar.settings" : "Socruithe", |
276 | "sidebar.unmuteApp" : "Cumasaigh fógraà ⊠fuaim", | 335 | "sidebar.unmuteApp" : "Cumasaigh fógraà ⊠fuaim", |
277 | "signup.company.label" : "Comhlacht", | ||
278 | "signup.email.label" : "Seoladh rÃomhphoist", | 336 | "signup.email.label" : "Seoladh rÃomhphoist", |
279 | "signup.emailDuplicate" : "Tá úsáideoir leis an seoladh rÃomhphoist sin cheana féin", | 337 | "signup.emailDuplicate" : "Tá úsáideoir leis an seoladh rÃomhphoist sin cheana féin", |
280 | "signup.firstname.label" : "Céadainm", | 338 | "signup.firstname.label" : "Céadainm", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "saor in aisce", | 358 | "subscription.type.free" : "saor in aisce", |
301 | "subscription.type.month" : "mÃ", | 359 | "subscription.type.month" : "mÃ", |
302 | "subscription.type.year" : "bliain", | 360 | "subscription.type.year" : "bliain", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Cealaigh", | 367 | "subscriptionPopup.buttonCancel" : "Cealaigh", |
304 | "subscriptionPopup.buttonDone" : "Déanta", | 368 | "subscriptionPopup.buttonDone" : "Déanta", |
305 | "tabs.item.deleteService" : "Scrios seirbhÃs", | 369 | "tabs.item.deleteService" : "Scrios seirbhÃs", |
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json index f77c4a185..cb2e3e88c 100644 --- a/src/i18n/locales/hr.json +++ b/src/i18n/locales/hr.json | |||
@@ -1,23 +1,33 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Ponovno uÄitavanje", | 2 | "app.errorHandler.action" : "Ponovno uÄitavanje", |
3 | "app.errorHandler.headline" : "Something went wrong", | 3 | "app.errorHandler.headline" : "Something went wrong", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Get a Ferdi Supporter License", | 5 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
6 | "feature.delayApp.headline" : "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
7 | "feature.delayApp.text" : "Ferdi will continue in {seconds} seconds.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Get a Franz Supporter License", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Send as email", | 13 | "feature.shareFranz.action.email" : "Send as email", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 14 | "feature.shareFranz.action.facebook" : "Share on Facebook", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 15 | "feature.shareFranz.action.twitter" : "Share on Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Nije se moguće povezati na Francove on-line servise. ", | 23 | "global.api.unhealthy" : "Nije se moguće povezati na Francove on-line servise. ", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Sada ste povezani s internetom. ", | 25 | "global.notConnectedToTheInternet" : "Sada ste povezani s internetom. ", |
17 | "global.spellchecker.useDefault" : "Use System Default ({default})", | 26 | "global.spellchecker.useDefault" : "Use System Default ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Spell checking language", | 29 | "global.spellchecking.language" : "Spell checking language", |
30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", | ||
21 | "import.headline" : "Uvezite svoje Franc 4 servise. ", | 31 | "import.headline" : "Uvezite svoje Franc 4 servise. ", |
22 | "import.notSupportedHeadline" : "Franc 5 trenutno ne podržava taj servis", | 32 | "import.notSupportedHeadline" : "Franc 5 trenutno ne podržava taj servis", |
23 | "import.skip.label" : "Želim ruÄno dodati ove usluge", | 33 | "import.skip.label" : "Želim ruÄno dodati ove usluge", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Ponovo uÄitaj servise", | 37 | "infobar.buttonReloadServices" : "Ponovo uÄitaj servise", |
28 | "infobar.requiredRequestsFailed" : "Nemoguće uÄitati servise i korisniÄke informacije", | 38 | "infobar.requiredRequestsFailed" : "Nemoguće uÄitati servise i korisniÄke informacije", |
29 | "infobar.servicesUpdated" : "Vaši servisi su ažurirani. ", | 39 | "infobar.servicesUpdated" : "Vaši servisi su ažurirani. ", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Novo ažuriranje Franz-a je dostupno. ", | 41 | "infobar.updateAvailable" : "Novo ažuriranje Franz-a je dostupno. ", |
31 | "invite.email.label" : "Vaša e-adresa:", | 42 | "invite.email.label" : "Vaša e-adresa:", |
32 | "invite.headline.friends" : "Pozovite 3 vaša prijatelja ili kolege", | 43 | "invite.headline.friends" : "Pozovite 3 vaša prijatelja ili kolege", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", | 54 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", |
44 | "login.submit.label" : "Prijavite se", | 55 | "login.submit.label" : "Prijavite se", |
45 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", | 56 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "O aplikaciji", | 59 | "menu.app.about" : "O aplikaciji", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "Potraži ažuriranja", | 61 | "menu.app.checkForUpdates" : "Potraži ažuriranja", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "File", | 81 | "menu.file" : "File", |
69 | "menu.help" : "Help", | 82 | "menu.help" : "Help", |
70 | "menu.help.changelog" : "Changelog", | 83 | "menu.help.changelog" : "Changelog", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Learn More", | 87 | "menu.help.learnMore" : "Learn More", |
72 | "menu.help.privacy" : "Izjava o privatnosti ", | 88 | "menu.help.privacy" : "Izjava o privatnosti ", |
73 | "menu.help.support" : "Support", | 89 | "menu.help.support" : "Support", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Add New Service...", | 93 | "menu.services.addNewService" : "Add New Service...", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "View", | 96 | "menu.view" : "View", |
80 | "menu.view.enterFullScreen" : "Enter Full Screen", | 97 | "menu.view.enterFullScreen" : "Enter Full Screen", |
81 | "menu.view.exitFullScreen" : "Exit Full Screen", | 98 | "menu.view.exitFullScreen" : "Exit Full Screen", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 102 | "menu.view.toggleDevTools" : "Toggle Developer Tools", |
86 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 103 | "menu.view.toggleFullScreen" : "Toggle Full Screen", |
87 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 104 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Zoom In", | 106 | "menu.view.zoomIn" : "Zoom In", |
89 | "menu.view.zoomOut" : "Zoom Out", | 107 | "menu.view.zoomOut" : "Zoom Out", |
90 | "menu.window" : "Window", | 108 | "menu.window" : "Window", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Pošalji", | 121 | "password.submit.label" : "Pošalji", |
104 | "password.successInfo" : "Molimo Vas da provjerite svoju e-mail adresu", | 122 | "password.successInfo" : "Molimo Vas da provjerite svoju e-mail adresu", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
106 | "pricing.headline" : "Podržite Ferdi aplikaciju", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Ne želim da podržim razvoj Franz-a.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Želim da podržim razvoj Franz-a.", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Izaberite vaš plan za podržavanje", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Osvježi okvir", | 151 | "service.crashHandler.action" : "Osvježi okvir", |
111 | "service.crashHandler.autoReload" : "Pokušati ću automatski povratiti {ime} u {sekundi} sekundi", | 152 | "service.crashHandler.autoReload" : "Pokušati ću automatski povratiti {ime} u {sekundi} sekundi", |
112 | "service.crashHandler.headline" : "O, ne! ", | 153 | "service.crashHandler.headline" : "O, ne! ", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "O, ne! ", | 159 | "service.errorHandler.headline" : "O, ne! ", |
119 | "service.errorHandler.message" : "Greška", | 160 | "service.errorHandler.message" : "Greška", |
120 | "service.errorHandler.text" : "{name} has failed to load.", | 161 | "service.errorHandler.text" : "{name} has failed to load.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "ZapoÄnimo!", | 168 | "services.getStarted" : "ZapoÄnimo!", |
123 | "services.welcome" : "Dobrodošli u Franz", | 169 | "services.welcome" : "Dobrodošli u Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Promijenite lozinku", | 181 | "settings.account.headlinePassword" : "Promijenite lozinku", |
136 | "settings.account.headlineProfile" : "Ažurirajte profil", | 182 | "settings.account.headlineProfile" : "Ažurirajte profil", |
137 | "settings.account.headlineSubscription" : "Vaša pretplata", | 183 | "settings.account.headlineSubscription" : "Vaša pretplata", |
138 | "settings.account.headlineUpgrade" : "Nadogradite raÄun i podržite Franc", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Preuzmite", | 186 | "settings.account.invoiceDownload" : "Preuzmite", |
140 | "settings.account.manageSubscription.label" : "Upravljajte pretplatama", | 187 | "settings.account.manageSubscription.label" : "Upravljajte pretplatama", |
141 | "settings.account.successInfo" : "Vaše promjene su spremljene", | 188 | "settings.account.successInfo" : "Vaše promjene su spremljene", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Pokušajte ponovno", | 192 | "settings.account.tryReloadServices" : "Pokušajte ponovno", |
143 | "settings.account.tryReloadUserInfoRequest" : "Pokušajte ponovno", | 193 | "settings.account.tryReloadUserInfoRequest" : "Pokušajte ponovno", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Nije moguće uÄitati informacije o korisniku", | 195 | "settings.account.userInfoRequestFailed" : "Nije moguće uÄitati informacije o korisniku", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "OÄisti memoriju", | 197 | "settings.app.buttonClearAllCache" : "OÄisti memoriju", |
146 | "settings.app.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje", | 198 | "settings.app.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje", |
147 | "settings.app.buttonSearchForUpdate" : "Potraži ažuriranja", | 199 | "settings.app.buttonSearchForUpdate" : "Potraži ažuriranja", |
@@ -154,6 +206,7 @@ | |||
154 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 206 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", |
155 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", | 207 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", |
156 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", | 208 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Jezik", | 210 | "settings.app.form.language" : "Jezik", |
158 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", | 211 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", |
159 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", | 212 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Vaše usluge", | 235 | "settings.navigation.yourServices" : "Vaše usluge", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Sve usluge", | 237 | "settings.recipes.all" : "Sve usluge", |
185 | "settings.recipes.dev" : "Razvoj", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Dostupne usluge", | 245 | "settings.recipes.headline" : "Dostupne usluge", |
187 | "settings.recipes.missingService" : "Da li neki servis nedostaje?", | 246 | "settings.recipes.missingService" : "Da li neki servis nedostaje?", |
188 | "settings.recipes.mostPopular" : "Najpopularniji", | 247 | "settings.recipes.mostPopular" : "Najpopularniji", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Postavke", | 334 | "sidebar.settings" : "Postavke", |
276 | "sidebar.unmuteApp" : "Omogući obavijesti i zvuk", | 335 | "sidebar.unmuteApp" : "Omogući obavijesti i zvuk", |
277 | "signup.company.label" : "Tvrtka", | ||
278 | "signup.email.label" : "Vaša e-adresa", | 336 | "signup.email.label" : "Vaša e-adresa", |
279 | "signup.emailDuplicate" : "Već postoji korisnik s tom e-mail adresom", | 337 | "signup.emailDuplicate" : "Već postoji korisnik s tom e-mail adresom", |
280 | "signup.firstname.label" : "Ime", | 338 | "signup.firstname.label" : "Ime", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "Imate raÄun? Prijavite se.", | 344 | "signup.link.login" : "Imate raÄun? Prijavite se.", |
287 | "signup.password.label" : "Lozinka", | 345 | "signup.password.label" : "Lozinka", |
288 | "signup.submit.label" : "Napravite novi raÄun", | 346 | "signup.submit.label" : "Napravite novi raÄun", |
289 | "subscription.euTaxInfo" : "EU državljani, upozerenje: Moguće taksiranje ", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Bez reklama, doživotno!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "Dolazi uskoro", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Proxy support for services", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće: ", | ||
298 | "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", | ||
299 | "subscription.submit.label" : "Želim da podržim razvoj Franca. ", | ||
300 | "subscription.type.free" : "Slobodno", | ||
301 | "subscription.type.month" : "mjesec", | ||
302 | "subscription.type.year" : "godina", | ||
303 | "subscriptionPopup.buttonCancel" : "Odustani", | 353 | "subscriptionPopup.buttonCancel" : "Odustani", |
304 | "subscriptionPopup.buttonDone" : "Završeno", | 354 | "subscriptionPopup.buttonDone" : "Završeno", |
305 | "tabs.item.deleteService" : "Izbriši servis", | 355 | "tabs.item.deleteService" : "Izbriši servis", |
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json index 50f5e72d3..d90a7245a 100644 --- a/src/i18n/locales/hu.json +++ b/src/i18n/locales/hu.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Újratöltés", | 2 | "app.errorHandler.action" : "Újratöltés", |
3 | "app.errorHandler.headline" : "Valami nem jött össze", | 3 | "app.errorHandler.headline" : "Valami nem jött össze", |
4 | "feature.announcements.changelog.headline" : "Ferdi {version} változásai", | 4 | "feature.announcements.changelog.headline" : "Franz {version} változásai", |
5 | "feature.delayApp.action" : "Szerezz egy Ferdi Támogatói Liszencet", | ||
6 | "feature.delayApp.headline" : "Kérjük vásárolj egy Franc Támogatói Liszencet a várakozás átugrásához", | 5 | "feature.delayApp.headline" : "Kérjük vásárolj egy Franc Támogatói Liszencet a várakozás átugrásához", |
7 | "feature.delayApp.text" : "A Ferdi továbblép {seconds} másodperc múlva.", | 6 | "feature.delayApp.text" : "A Franz továbblép {seconds} másodperc múlva.", |
7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", | ||
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Szerezz egy Franz Támogatói Liszencet", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Fiók frissÃtése", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Küldés email-ben", | 13 | "feature.shareFranz.action.email" : "Küldés email-ben", |
9 | "feature.shareFranz.action.facebook" : "Megosztás Facebook-on", | 14 | "feature.shareFranz.action.facebook" : "Megosztás Facebook-on", |
10 | "feature.shareFranz.action.twitter" : "Megosztás Twitter-en", | 15 | "feature.shareFranz.action.twitter" : "Megosztás Twitter-en", |
11 | "feature.shareFranz.headline" : "A Ferdi barátokkal együtt mégjobb!", | 16 | "feature.shareFranz.headline" : "A Ferdi barátokkal együtt mégjobb!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
15 | "global.api.unhealthy" : "Nem lehet csatlakozni a Ferdi online szolgáltatáshoz", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Nem lehet csatlakozni a Franz online szolgáltatáshoz", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Nincs hálózati kapcsolat.", | 25 | "global.notConnectedToTheInternet" : "Nincs hálózati kapcsolat.", |
17 | "global.spellchecker.useDefault" : "Rendszer alapbeállÃtás használata ({default})", | 26 | "global.spellchecker.useDefault" : "Rendszer alapbeállÃtás használata ({default})", |
18 | "global.spellchecking.autodetect" : "Automatikus nyelvdetektálás", | 27 | "global.spellchecking.autodetect" : "Automatikus nyelvdetektálás", |
19 | "global.spellchecking.autodetect.short" : "Automatikus", | 28 | "global.spellchecking.autodetect.short" : "Automatikus", |
20 | "global.spellchecking.language" : "HelyesÃrás-ellenÅ‘rzÅ‘ nyelve", | 29 | "global.spellchecking.language" : "HelyesÃrás-ellenÅ‘rzÅ‘ nyelve", |
21 | "import.headline" : "Importáld szolgáltatásaidat a Ferdi 4-ből", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Még nem támogatott szolgáltatások a Ferdi 5-ben", | 31 | "import.headline" : "Importáld szolgáltatásaidat a Franz 4-ből", |
32 | "import.notSupportedHeadline" : "Még nem támogatott szolgáltatások a Franz 5-ben", | ||
23 | "import.skip.label" : "Manuálisan szeretném hozzáadni a szolgáltatásokat", | 33 | "import.skip.label" : "Manuálisan szeretném hozzáadni a szolgáltatásokat", |
24 | "import.submit.label" : "Szolgáltatások importálása", | 34 | "import.submit.label" : "Szolgáltatások importálása", |
25 | "infobar.buttonChangelog" : "Mi változott?", | 35 | "infobar.buttonChangelog" : "Mi változott?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Szolgáltatások újratöltése", | 37 | "infobar.buttonReloadServices" : "Szolgáltatások újratöltése", |
28 | "infobar.requiredRequestsFailed" : "Szolgáltatások és felhasználói információk nem tölthetők be", | 38 | "infobar.requiredRequestsFailed" : "Szolgáltatások és felhasználói információk nem tölthetők be", |
29 | "infobar.servicesUpdated" : "A szolgáltatások frissÃtésre kerültek.", | 39 | "infobar.servicesUpdated" : "A szolgáltatások frissÃtésre kerültek.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Új frissÃtés érhetÅ‘ el a Franz-hoz.", | 41 | "infobar.updateAvailable" : "Új frissÃtés érhetÅ‘ el a Franz-hoz.", |
31 | "invite.email.label" : "Email cÃm", | 42 | "invite.email.label" : "Email cÃm", |
32 | "invite.headline.friends" : "HÃvd meg 3 barátodat vagy kollégádat", | 43 | "invite.headline.friends" : "HÃvd meg 3 barátodat vagy kollégádat", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "A munkamenet lejárt, kérlek lépj be újra.", | 54 | "login.serverLogout" : "A munkamenet lejárt, kérlek lépj be újra.", |
44 | "login.submit.label" : "Bejelentkezés", | 55 | "login.submit.label" : "Bejelentkezés", |
45 | "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.", | 56 | "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Névjegy", | 59 | "menu.app.about" : "Névjegy", |
47 | "menu.app.announcement" : "Mi újság?", | 60 | "menu.app.announcement" : "Mi újság?", |
48 | "menu.app.checkForUpdates" : "FrissÃtések keresése", | 61 | "menu.app.checkForUpdates" : "FrissÃtések keresése", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Fájl", | 81 | "menu.file" : "Fájl", |
69 | "menu.help" : "Súgó", | 82 | "menu.help" : "Súgó", |
70 | "menu.help.changelog" : "Változások listája", | 83 | "menu.help.changelog" : "Változások listája", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Tudjon meg többet", | 87 | "menu.help.learnMore" : "Tudjon meg többet", |
72 | "menu.help.privacy" : "Adatvédelmi Nyilatkozatot", | 88 | "menu.help.privacy" : "Adatvédelmi Nyilatkozatot", |
73 | "menu.help.support" : "Támogatás", | 89 | "menu.help.support" : "Támogatás", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Előző szolgáltatás", | 92 | "menu.services.activatePreviousService" : "Előző szolgáltatás", |
77 | "menu.services.addNewService" : "Új szolgáltatás hozzáadása...", | 93 | "menu.services.addNewService" : "Új szolgáltatás hozzáadása...", |
78 | "menu.services.setNextServiceActive" : "Következő szolgáltatás", | 94 | "menu.services.setNextServiceActive" : "Következő szolgáltatás", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Nézet", | 96 | "menu.view" : "Nézet", |
80 | "menu.view.enterFullScreen" : "Kilépés a teljes képernyős módból", | 97 | "menu.view.enterFullScreen" : "Kilépés a teljes képernyős módból", |
81 | "menu.view.exitFullScreen" : "Kilépés a teljes képernyős módból", | 98 | "menu.view.exitFullScreen" : "Kilépés a teljes képernyős módból", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Fejlesztői eszközök ki\/bekapcsolása", | 102 | "menu.view.toggleDevTools" : "Fejlesztői eszközök ki\/bekapcsolása", |
86 | "menu.view.toggleFullScreen" : "Teljes képernyős mód ki\/bekapcsolása", | 103 | "menu.view.toggleFullScreen" : "Teljes képernyős mód ki\/bekapcsolása", |
87 | "menu.view.toggleServiceDevTools" : "Szolgáltatás Fejlesztői Eszközök ki\/bekapcsolása", | 104 | "menu.view.toggleServiceDevTools" : "Szolgáltatás Fejlesztői Eszközök ki\/bekapcsolása", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "NagyÃtás", | 106 | "menu.view.zoomIn" : "NagyÃtás", |
89 | "menu.view.zoomOut" : "KicsinyÃtés", | 107 | "menu.view.zoomOut" : "KicsinyÃtés", |
90 | "menu.window" : "Ablak", | 108 | "menu.window" : "Ablak", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Küldés", | 121 | "password.submit.label" : "Küldés", |
104 | "password.successInfo" : "Ellenőrizd az email fiókodat", | 122 | "password.successInfo" : "Ellenőrizd az email fiókodat", |
105 | "premiumFeature.button.upgradeAccount" : "Fiók frissÃtése", | 123 | "premiumFeature.button.upgradeAccount" : "Fiók frissÃtése", |
106 | "pricing.headline" : "Támogasd a Franz-ot", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Nem szeretném támogatni a Ferdi fejlesztését.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Támogatni szeretném a Ferdi fejlesztését", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Válaszd ki a támogatás módját", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Munkaterületek", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "{name} újratöltése", | 151 | "service.crashHandler.action" : "{name} újratöltése", |
111 | "service.crashHandler.autoReload" : "{name} automatikusan helyreállÃtása {seconds} másodpercen belül", | 152 | "service.crashHandler.autoReload" : "{name} automatikusan helyreállÃtása {seconds} másodpercen belül", |
112 | "service.crashHandler.headline" : "Jajj ne!", | 153 | "service.crashHandler.headline" : "Jajj ne!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Jajj ne!", | 159 | "service.errorHandler.headline" : "Jajj ne!", |
119 | "service.errorHandler.message" : "Hiba", | 160 | "service.errorHandler.message" : "Hiba", |
120 | "service.errorHandler.text" : "{name} nem tudott betöltődni.", | 161 | "service.errorHandler.text" : "{name} nem tudott betöltődni.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Betöltés", | 167 | "service.webviewLoader.loading" : "Betöltés", |
122 | "services.getStarted" : "Kezdj hozzá", | 168 | "services.getStarted" : "Kezdj hozzá", |
123 | "services.welcome" : "Üdvözöl a Franz", | 169 | "services.welcome" : "Üdvözöl a Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Jelszócsere", | 181 | "settings.account.headlinePassword" : "Jelszócsere", |
136 | "settings.account.headlineProfile" : "Profil frissÃtése", | 182 | "settings.account.headlineProfile" : "Profil frissÃtése", |
137 | "settings.account.headlineSubscription" : "Előfizetésed", | 183 | "settings.account.headlineSubscription" : "Előfizetésed", |
138 | "settings.account.headlineUpgrade" : "FrissÃtsd fiókod és támogasd a Franz-ot", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Letöltés", | 186 | "settings.account.invoiceDownload" : "Letöltés", |
140 | "settings.account.manageSubscription.label" : "Előfizetés kezelése", | 187 | "settings.account.manageSubscription.label" : "Előfizetés kezelése", |
141 | "settings.account.successInfo" : "A módosÃtásokat elmentettük", | 188 | "settings.account.successInfo" : "A módosÃtásokat elmentettük", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Próbáld újra", | 192 | "settings.account.tryReloadServices" : "Próbáld újra", |
143 | "settings.account.tryReloadUserInfoRequest" : "Próbáld újra", | 193 | "settings.account.tryReloadUserInfoRequest" : "Próbáld újra", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "A felhasználói adatok betöltése sikertelen", | 195 | "settings.account.userInfoRequestFailed" : "A felhasználói adatok betöltése sikertelen", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "GyorsÃtótár törlése", | 197 | "settings.app.buttonClearAllCache" : "GyorsÃtótár törlése", |
146 | "settings.app.buttonInstallUpdate" : "ÚjraindÃtás és frissÃtések telepÃtése", | 198 | "settings.app.buttonInstallUpdate" : "ÚjraindÃtás és frissÃtések telepÃtése", |
147 | "settings.app.buttonSearchForUpdate" : "FrissÃtések keresése", | 199 | "settings.app.buttonSearchForUpdate" : "FrissÃtések keresése", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Csatlakozz a Sötét Oldalhoz", | 205 | "settings.app.form.darkMode" : "Csatlakozz a Sötét Oldalhoz", |
154 | "settings.app.form.enableGPUAcceleration" : "Hardveres gyorsÃtás engedélyezése", | 206 | "settings.app.form.enableGPUAcceleration" : "Hardveres gyorsÃtás engedélyezése", |
155 | "settings.app.form.enableSpellchecking" : "HelyesÃrás-ellenÅ‘rzés engedélyezése", | 207 | "settings.app.form.enableSpellchecking" : "HelyesÃrás-ellenÅ‘rzés engedélyezése", |
156 | "settings.app.form.enableSystemTray" : "Ferdi mutatása a tálcán", | 208 | "settings.app.form.enableSystemTray" : "Franz mutatása a tálcán", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Nyelv", | 210 | "settings.app.form.language" : "Nyelv", |
158 | "settings.app.form.minimizeToSystemTray" : "Ferdi kicsinyÃtése a tálcára", | 211 | "settings.app.form.minimizeToSystemTray" : "Ferdi kicsinyÃtése a tálcára", |
159 | "settings.app.form.runInBackground" : "Ferdi fusson a háttérben az ablak bezárásakor", | 212 | "settings.app.form.runInBackground" : "Ferdi fusson a háttérben az ablak bezárásakor", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Szolgáltatásaid", | 235 | "settings.navigation.yourServices" : "Szolgáltatásaid", |
183 | "settings.navigation.yourWorkspaces" : "Munkaterületeid", | 236 | "settings.navigation.yourWorkspaces" : "Munkaterületeid", |
184 | "settings.recipes.all" : "Összes szolgáltatás", | 237 | "settings.recipes.all" : "Összes szolgáltatás", |
185 | "settings.recipes.dev" : "Fejlesztés", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Elérhető szolgáltatások", | 245 | "settings.recipes.headline" : "Elérhető szolgáltatások", |
187 | "settings.recipes.missingService" : "Hiányzik egy szolgáltatás?", | 246 | "settings.recipes.missingService" : "Hiányzik egy szolgáltatás?", |
188 | "settings.recipes.mostPopular" : "Legnépszerűbb", | 247 | "settings.recipes.mostPopular" : "Legnépszerűbb", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Munkaterület panel megnyitása", | 333 | "sidebar.openWorkspaceDrawer" : "Munkaterület panel megnyitása", |
275 | "sidebar.settings" : "BeállÃtások", | 334 | "sidebar.settings" : "BeállÃtások", |
276 | "sidebar.unmuteApp" : "ÉrtesÃtések és hangok engedélyezése", | 335 | "sidebar.unmuteApp" : "ÉrtesÃtések és hangok engedélyezése", |
277 | "signup.company.label" : "Cég", | ||
278 | "signup.email.label" : "Email cÃm", | 336 | "signup.email.label" : "Email cÃm", |
279 | "signup.emailDuplicate" : "Ezzel az e-mail cÃmmel már létezik felhasználó", | 337 | "signup.emailDuplicate" : "Ezzel az e-mail cÃmmel már létezik felhasználó", |
280 | "signup.firstname.label" : "Keresztnév", | 338 | "signup.firstname.label" : "Keresztnév", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "ingyenes", | 358 | "subscription.type.free" : "ingyenes", |
301 | "subscription.type.month" : "hónap", | 359 | "subscription.type.month" : "hónap", |
302 | "subscription.type.year" : "év", | 360 | "subscription.type.year" : "év", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Mégsem", | 367 | "subscriptionPopup.buttonCancel" : "Mégsem", |
304 | "subscriptionPopup.buttonDone" : "Kész", | 368 | "subscriptionPopup.buttonDone" : "Kész", |
305 | "tabs.item.deleteService" : "Szolgáltatás törlése", | 369 | "tabs.item.deleteService" : "Szolgáltatás törlése", |
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json index 437be8e5c..c27e96acb 100644 --- a/src/i18n/locales/id.json +++ b/src/i18n/locales/id.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Muat Ulang", | 2 | "app.errorHandler.action" : "Muat Ulang", |
3 | "app.errorHandler.headline" : "Terjadi kesalahan", | 3 | "app.errorHandler.headline" : "Terjadi kesalahan", |
4 | "feature.announcements.changelog.headline" : "Perubahan dalam Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Perubahan dalam Franz {version}", |
5 | "feature.delayApp.action" : "Dapatkan Lisensi Pendukung Franz", | 5 | "feature.delayApp.headline" : "Beli Lisensi Pendukung Franz agar tidak perlu menunggu", |
6 | "feature.delayApp.headline" : "Beli Lisensi Pendukung Ferdi agar tidak perlu menunggu", | 6 | "feature.delayApp.text" : "Franz akan melanjutkan dalam {seconds} detik.", |
7 | "feature.delayApp.text" : "Ferdi akan melanjutkan dalam {seconds} detik.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Dapatkan Lisensi Pendukung Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Tingkatkan akun", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Kirim sebagai email", | 13 | "feature.shareFranz.action.email" : "Kirim sebagai email", |
9 | "feature.shareFranz.action.facebook" : "Bagikan di Facebook", | 14 | "feature.shareFranz.action.facebook" : "Bagikan di Facebook", |
10 | "feature.shareFranz.action.twitter" : "Bagikan di Twitter", | 15 | "feature.shareFranz.action.twitter" : "Bagikan di Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi lebih baik bersama!", | 16 | "feature.shareFranz.headline" : "Ferdi lebih baik bersama!", |
12 | "feature.shareFranz.shareText.email" : "Saya telah menambahkan layanan {count} ke Franz! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan co di www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Saya telah menambahkan layanan {count} ke Franz! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan co di www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Saya telah menambahkan {count} layanan di Franz! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan lainnya di www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Saya telah menambahkan {count} layanan di Franz! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan lainnya di www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Beri tahu teman dan kolega Anda betapa hebatnya Ferdi dan bantu kami menyebarkan berita.", | 19 | "feature.shareFranz.text" : "Beri tahu teman dan kolega Anda betapa hebatnya Franz dan bantu kami menyebarkan berita.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Tidak dapat tersambung ke layanan Franz", | 23 | "global.api.unhealthy" : "Tidak dapat tersambung ke layanan Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Anda tidak tersambung ke internet.", | 25 | "global.notConnectedToTheInternet" : "Anda tidak tersambung ke internet.", |
17 | "global.spellchecker.useDefault" : "Gunakan Bawaan Sistem ({default})", | 26 | "global.spellchecker.useDefault" : "Gunakan Bawaan Sistem ({default})", |
18 | "global.spellchecking.autodetect" : "Deteksi bahasa secara otomatis", | 27 | "global.spellchecking.autodetect" : "Deteksi bahasa secara otomatis", |
19 | "global.spellchecking.autodetect.short" : "Otomatis", | 28 | "global.spellchecking.autodetect.short" : "Otomatis", |
20 | "global.spellchecking.language" : "Periksa ejaan", | 29 | "global.spellchecking.language" : "Periksa ejaan", |
21 | "import.headline" : "Impor layanan Ferdi 4 Anda", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Layanan belum didukung di Ferdi 5", | 31 | "import.headline" : "Impor layanan Franz 4 Anda", |
32 | "import.notSupportedHeadline" : "Layanan belum didukung di Franz 5", | ||
23 | "import.skip.label" : "Saya ingin menambahkan layanan secara manual", | 33 | "import.skip.label" : "Saya ingin menambahkan layanan secara manual", |
24 | "import.submit.label" : "Impor layanan", | 34 | "import.submit.label" : "Impor layanan", |
25 | "infobar.buttonChangelog" : "Yang baru", | 35 | "infobar.buttonChangelog" : "Yang baru", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Muat ulang layanan", | 37 | "infobar.buttonReloadServices" : "Muat ulang layanan", |
28 | "infobar.requiredRequestsFailed" : "Gagal memuat layanan dan informasi pengguna", | 38 | "infobar.requiredRequestsFailed" : "Gagal memuat layanan dan informasi pengguna", |
29 | "infobar.servicesUpdated" : "Layanan Anda telah diperbarui", | 39 | "infobar.servicesUpdated" : "Layanan Anda telah diperbarui", |
30 | "infobar.updateAvailable" : "Versi baru Ferdi tersedia.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Versi baru Franz tersedia.", | ||
31 | "invite.email.label" : "Alamat email", | 42 | "invite.email.label" : "Alamat email", |
32 | "invite.headline.friends" : "Undang 3 teman atau kolega Anda", | 43 | "invite.headline.friends" : "Undang 3 teman atau kolega Anda", |
33 | "invite.name.label" : "Nama", | 44 | "invite.name.label" : "Nama", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Sesi Anda telah berakhir, silakan masuk kembali.", | 54 | "login.serverLogout" : "Sesi Anda telah berakhir, silakan masuk kembali.", |
44 | "login.submit.label" : "Masuk", | 55 | "login.submit.label" : "Masuk", |
45 | "login.tokenExpired" : "Sesi Anda telah kedaluwarsa, silakan masuk kembali.", | 56 | "login.tokenExpired" : "Sesi Anda telah kedaluwarsa, silakan masuk kembali.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Tentang Franz", | 59 | "menu.app.about" : "Tentang Franz", |
47 | "menu.app.announcement" : "Yang baru", | 60 | "menu.app.announcement" : "Yang baru", |
48 | "menu.app.checkForUpdates" : "Periksa versi baru", | 61 | "menu.app.checkForUpdates" : "Periksa versi baru", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Berkas", | 81 | "menu.file" : "Berkas", |
69 | "menu.help" : "Bantuan", | 82 | "menu.help" : "Bantuan", |
70 | "menu.help.changelog" : "Log Perubahan", | 83 | "menu.help.changelog" : "Log Perubahan", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Pelajari Lebih Lanjut", | 87 | "menu.help.learnMore" : "Pelajari Lebih Lanjut", |
72 | "menu.help.privacy" : "Pernyataan Privasi", | 88 | "menu.help.privacy" : "Pernyataan Privasi", |
73 | "menu.help.support" : "Dukungan", | 89 | "menu.help.support" : "Dukungan", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Aktifkan layanan sebelumnya", | 92 | "menu.services.activatePreviousService" : "Aktifkan layanan sebelumnya", |
77 | "menu.services.addNewService" : "Tambahkan Layanan Baru...", | 93 | "menu.services.addNewService" : "Tambahkan Layanan Baru...", |
78 | "menu.services.setNextServiceActive" : "Aktifkan layanan berikutnya", | 94 | "menu.services.setNextServiceActive" : "Aktifkan layanan berikutnya", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Tampilan", | 96 | "menu.view" : "Tampilan", |
80 | "menu.view.enterFullScreen" : "Masuk ke Mode Layar Penuh", | 97 | "menu.view.enterFullScreen" : "Masuk ke Mode Layar Penuh", |
81 | "menu.view.exitFullScreen" : "Keluar dari Layar Penuh", | 98 | "menu.view.exitFullScreen" : "Keluar dari Layar Penuh", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Aktif\/Nonaktifkan alat pengembang", | 102 | "menu.view.toggleDevTools" : "Aktif\/Nonaktifkan alat pengembang", |
86 | "menu.view.toggleFullScreen" : "Aktif\/Nonaktifkan Layar Penuh", | 103 | "menu.view.toggleFullScreen" : "Aktif\/Nonaktifkan Layar Penuh", |
87 | "menu.view.toggleServiceDevTools" : "Aktif\/Nonaktifkan layanan alat pengembang", | 104 | "menu.view.toggleServiceDevTools" : "Aktif\/Nonaktifkan layanan alat pengembang", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Perbesar", | 106 | "menu.view.zoomIn" : "Perbesar", |
89 | "menu.view.zoomOut" : "Perkecil", | 107 | "menu.view.zoomOut" : "Perkecil", |
90 | "menu.window" : "Jendela", | 108 | "menu.window" : "Jendela", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Kirim", | 121 | "password.submit.label" : "Kirim", |
104 | "password.successInfo" : "Periksa email Anda", | 122 | "password.successInfo" : "Periksa email Anda", |
105 | "premiumFeature.button.upgradeAccount" : "Tingkatkan akun", | 123 | "premiumFeature.button.upgradeAccount" : "Tingkatkan akun", |
106 | "pricing.headline" : "Dukung Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Saya tidak ingin mendukung pengembangan Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Saya ingin mendukung pengembangan Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Pilih paket dukungan Anda", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Ruang kerja", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Muat Ulang {name}", | 151 | "service.crashHandler.action" : "Muat Ulang {name}", |
111 | "service.crashHandler.autoReload" : "Mencoba memulihkan {name} secara otomatis dalam {seconds} detik", | 152 | "service.crashHandler.autoReload" : "Mencoba memulihkan {name} secara otomatis dalam {seconds} detik", |
112 | "service.crashHandler.headline" : "Ya Ampun!", | 153 | "service.crashHandler.headline" : "Ya Ampun!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh tidak!", | 159 | "service.errorHandler.headline" : "Oh tidak!", |
119 | "service.errorHandler.message" : "Kesalahan", | 160 | "service.errorHandler.message" : "Kesalahan", |
120 | "service.errorHandler.text" : "{name} gagal dimuat", | 161 | "service.errorHandler.text" : "{name} gagal dimuat", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Memuat", | 167 | "service.webviewLoader.loading" : "Memuat", |
122 | "services.getStarted" : "Memulai", | 168 | "services.getStarted" : "Memulai", |
123 | "services.welcome" : "Selamat datang di Franz", | 169 | "services.welcome" : "Selamat datang di Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Ubah sandi", | 181 | "settings.account.headlinePassword" : "Ubah sandi", |
136 | "settings.account.headlineProfile" : "Perbarui profil", | 182 | "settings.account.headlineProfile" : "Perbarui profil", |
137 | "settings.account.headlineSubscription" : "Langganan Anda", | 183 | "settings.account.headlineSubscription" : "Langganan Anda", |
138 | "settings.account.headlineUpgrade" : "Tingkatkan akun Anda & dukung Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Unduh", | 186 | "settings.account.invoiceDownload" : "Unduh", |
140 | "settings.account.manageSubscription.label" : "Kelola langganan Anda", | 187 | "settings.account.manageSubscription.label" : "Kelola langganan Anda", |
141 | "settings.account.successInfo" : "Perubahan Anda telah disimpan", | 188 | "settings.account.successInfo" : "Perubahan Anda telah disimpan", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Coba lagi", | 192 | "settings.account.tryReloadServices" : "Coba lagi", |
143 | "settings.account.tryReloadUserInfoRequest" : "Coba lagi", | 193 | "settings.account.tryReloadUserInfoRequest" : "Coba lagi", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Gagal memuat informasi pengguna", | 195 | "settings.account.userInfoRequestFailed" : "Gagal memuat informasi pengguna", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Bersihkan singgahan", | 197 | "settings.app.buttonClearAllCache" : "Bersihkan singgahan", |
146 | "settings.app.buttonInstallUpdate" : "Mulai ulang dan instal versi baru", | 198 | "settings.app.buttonInstallUpdate" : "Mulai ulang dan instal versi baru", |
147 | "settings.app.buttonSearchForUpdate" : "Periksa pembaruan", | 199 | "settings.app.buttonSearchForUpdate" : "Periksa pembaruan", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Sisi Kelam menunggu Anda (Mode Gelap)", | 205 | "settings.app.form.darkMode" : "Sisi Kelam menunggu Anda (Mode Gelap)", |
154 | "settings.app.form.enableGPUAcceleration" : "Aktifkan Akselerasi GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Aktifkan Akselerasi GPU", |
155 | "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan", | 207 | "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan", |
156 | "settings.app.form.enableSystemTray" : "Tampilkan Ferdi di baki sistem", | 208 | "settings.app.form.enableSystemTray" : "Tampilkan Franz di baki sistem", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Bahasa", | 210 | "settings.app.form.language" : "Bahasa", |
158 | "settings.app.form.minimizeToSystemTray" : "Perkecil Ferdi ke baki sistem", | 211 | "settings.app.form.minimizeToSystemTray" : "Perkecil Ferdi ke baki sistem", |
159 | "settings.app.form.runInBackground" : "Tetap jalankan Ferdi di latar belakang saat menutup jendela", | 212 | "settings.app.form.runInBackground" : "Tetap jalankan Ferdi di latar belakang saat menutup jendela", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Layanan Anda", | 235 | "settings.navigation.yourServices" : "Layanan Anda", |
183 | "settings.navigation.yourWorkspaces" : "Ruang kerja Anda", | 236 | "settings.navigation.yourWorkspaces" : "Ruang kerja Anda", |
184 | "settings.recipes.all" : "Semua layanan", | 237 | "settings.recipes.all" : "Semua layanan", |
185 | "settings.recipes.dev" : "Pengembangan", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Layanan tersedia", | 245 | "settings.recipes.headline" : "Layanan tersedia", |
187 | "settings.recipes.missingService" : "Layanan tidak tersedia?", | 246 | "settings.recipes.missingService" : "Layanan tidak tersedia?", |
188 | "settings.recipes.mostPopular" : "Terpopuler", | 247 | "settings.recipes.mostPopular" : "Terpopuler", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Buka laci ruang kerja", | 333 | "sidebar.openWorkspaceDrawer" : "Buka laci ruang kerja", |
275 | "sidebar.settings" : "Pengaturan", | 334 | "sidebar.settings" : "Pengaturan", |
276 | "sidebar.unmuteApp" : "Aktifkan pemberitahuan", | 335 | "sidebar.unmuteApp" : "Aktifkan pemberitahuan", |
277 | "signup.company.label" : "Perusahaan", | ||
278 | "signup.email.label" : "Alamat email", | 336 | "signup.email.label" : "Alamat email", |
279 | "signup.emailDuplicate" : "Pengguna dengan alamat email ini sudah ada", | 337 | "signup.emailDuplicate" : "Pengguna dengan alamat email ini sudah ada", |
280 | "signup.firstname.label" : "Nama Depan", | 338 | "signup.firstname.label" : "Nama Depan", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "Sudah punya akun, masuk?", | 344 | "signup.link.login" : "Sudah punya akun, masuk?", |
287 | "signup.password.label" : "Sandi", | 345 | "signup.password.label" : "Sandi", |
288 | "signup.submit.label" : "Buat akun", | 346 | "signup.submit.label" : "Buat akun", |
289 | "subscription.euTaxInfo" : "Warga UE: pajak penjualan lokal mungkin berlaku", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Tanpa iklan, selamanya!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "segera hadir", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "Tanpa menunggu dan ditanya untuk meningkatkan lisensi", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Integrasi layanan hosted, misalnya Mattermost", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Dukungan proksi untuk layanan", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Dukungan pengecek ejaan", | ||
296 | "subscription.features.workspaces" : "Kelola layanan Anda dalam ruang kerja", | ||
297 | "subscription.includedFeatures" : "Ferdi Premium Supporter Account berbayar menyertakan", | ||
298 | "subscription.paymentSessionError" : "Tidak bisa menginisialisasi formulir pembayaran", | ||
299 | "subscription.submit.label" : "Saya ingin mendukung pengembangan Franz", | ||
300 | "subscription.type.free" : "gratis", | ||
301 | "subscription.type.month" : "bulan", | ||
302 | "subscription.type.year" : "tahun", | ||
303 | "subscriptionPopup.buttonCancel" : "Batalkan", | 353 | "subscriptionPopup.buttonCancel" : "Batalkan", |
304 | "subscriptionPopup.buttonDone" : "Selesai", | 354 | "subscriptionPopup.buttonDone" : "Selesai", |
305 | "tabs.item.deleteService" : "Hapus layanan", | 355 | "tabs.item.deleteService" : "Hapus layanan", |
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 8492193fd..4f5cd39ad 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Ricarica", | 2 | "app.errorHandler.action" : "Ricarica", |
3 | "app.errorHandler.headline" : "Qualcosa è andato storto", | 3 | "app.errorHandler.headline" : "Qualcosa è andato storto", |
4 | "feature.announcements.changelog.headline" : "Modifiche in Ferdi {Version}", | 4 | "feature.announcements.changelog.headline" : "Modifiche in Franz {Version}", |
5 | "feature.delayApp.action" : "Ricevi una Licenza Supporter di Franz", | 5 | "feature.delayApp.headline" : "Per favore, compra una Licenza Supporter di Franz per saltare l'attesa", |
6 | "feature.delayApp.headline" : "Per favore, compra una Licenza Supporter di Ferdi per saltare l'attesa", | 6 | "feature.delayApp.text" : "Franz continuerà tra {seconds} secondi.", |
7 | "feature.delayApp.text" : "Ferdi continuerà tra {seconds} secondi.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Ricevi una Licenza Supporter di Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Effettua l'upgrade del tuo account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Manda come email", | 13 | "feature.shareFranz.action.email" : "Manda come email", |
9 | "feature.shareFranz.action.facebook" : "Condividi su Facebook", | 14 | "feature.shareFranz.action.facebook" : "Condividi su Facebook", |
10 | "feature.shareFranz.action.twitter" : "Condividi su Twitter", | 15 | "feature.shareFranz.action.twitter" : "Condividi su Twitter", |
11 | "feature.shareFranz.headline" : "Franze è migliore insieme!", | 16 | "feature.shareFranz.headline" : "Franze è migliore insieme!", |
12 | "feature.shareFranz.shareText.email" : "Ho aggiunto {count} nuovi servizi a Franz! Scarica ora l'app gratuita per WhatsApp, Messenger, Slack, Skype e altri all'indirizzo www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Ho aggiunto {count} nuovi servizi a Franz! Scarica ora l'app gratuita per WhatsApp, Messenger, Slack, Skype e altri all'indirizzo www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Ho aggiunto {count} nuovi servizi a Franz! Scarica ora l’app gratuita per WhatsApp, Messenger, Slack, Skype e altri all’indirizzo www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Ho aggiunto {count} nuovi servizi a Franz! Scarica ora l’app gratuita per WhatsApp, Messenger, Slack, Skype e altri all’indirizzo www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Di’ ai tuoi amici e colleghi quanto Ferdi è fantastico e aiutaci a diffondere la parola.", | 19 | "feature.shareFranz.text" : "Di’ ai tuoi amici e colleghi quanto Franz è fantastico e aiutaci a diffondere la parola.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Impossibile connettersi ai servizi online di Franz", | 23 | "global.api.unhealthy" : "Impossibile connettersi ai servizi online di Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Non sei connesso a Internet.", | 25 | "global.notConnectedToTheInternet" : "Non sei connesso a Internet.", |
17 | "global.spellchecker.useDefault" : "Usa le impostazioni predefinite di sistema ({default})", | 26 | "global.spellchecker.useDefault" : "Usa le impostazioni predefinite di sistema ({default})", |
18 | "global.spellchecking.autodetect" : "Rileva automaticamente la lingua", | 27 | "global.spellchecking.autodetect" : "Rileva automaticamente la lingua", |
19 | "global.spellchecking.autodetect.short" : "Automatico", | 28 | "global.spellchecking.autodetect.short" : "Automatico", |
20 | "global.spellchecking.language" : "Lingua per controllo ortografico", | 29 | "global.spellchecking.language" : "Lingua per controllo ortografico", |
21 | "import.headline" : "Importa i servizi di Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Servizi non ancora supportati in Ferdi 5", | 31 | "import.headline" : "Importa i servizi di Franz 4", |
32 | "import.notSupportedHeadline" : "Servizi non ancora supportati in Franz 5", | ||
23 | "import.skip.label" : "Voglio aggiungere i servizi manualmente", | 33 | "import.skip.label" : "Voglio aggiungere i servizi manualmente", |
24 | "import.submit.label" : "Importa servizi", | 34 | "import.submit.label" : "Importa servizi", |
25 | "infobar.buttonChangelog" : "Cosa c'è di nuovo?", | 35 | "infobar.buttonChangelog" : "Cosa c'è di nuovo?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Ricarica servizi", | 37 | "infobar.buttonReloadServices" : "Ricarica servizi", |
28 | "infobar.requiredRequestsFailed" : "Impossibile caricare i servizi e le informazioni dell'utente", | 38 | "infobar.requiredRequestsFailed" : "Impossibile caricare i servizi e le informazioni dell'utente", |
29 | "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.", | 39 | "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "È disponibile un nuovo aggiornamento di Franz.", | 41 | "infobar.updateAvailable" : "È disponibile un nuovo aggiornamento di Franz.", |
31 | "invite.email.label" : "Indirizzo email", | 42 | "invite.email.label" : "Indirizzo email", |
32 | "invite.headline.friends" : "Invita 3 dei tuoi amici o colleghi", | 43 | "invite.headline.friends" : "Invita 3 dei tuoi amici o colleghi", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "La tua sessione è scaduta, per favore accedi di nuovo.", | 54 | "login.serverLogout" : "La tua sessione è scaduta, per favore accedi di nuovo.", |
44 | "login.submit.label" : "Accedi", | 55 | "login.submit.label" : "Accedi", |
45 | "login.tokenExpired" : "La tua sessione è scaduta, per favore accedi di nuovo.", | 56 | "login.tokenExpired" : "La tua sessione è scaduta, per favore accedi di nuovo.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Info su Franz", | 59 | "menu.app.about" : "Info su Franz", |
47 | "menu.app.announcement" : "Cosa c'è di nuovo?", | 60 | "menu.app.announcement" : "Cosa c'è di nuovo?", |
48 | "menu.app.checkForUpdates" : "Controlla aggiornamenti", | 61 | "menu.app.checkForUpdates" : "Controlla aggiornamenti", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "File", | 81 | "menu.file" : "File", |
69 | "menu.help" : "Aiuto", | 82 | "menu.help" : "Aiuto", |
70 | "menu.help.changelog" : "Changelog", | 83 | "menu.help.changelog" : "Changelog", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Maggiori Informazioni", | 87 | "menu.help.learnMore" : "Maggiori Informazioni", |
72 | "menu.help.privacy" : "Dichiarazione della Privacy", | 88 | "menu.help.privacy" : "Dichiarazione della Privacy", |
73 | "menu.help.support" : "Supporto", | 89 | "menu.help.support" : "Supporto", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Attiva servizio precedente", | 92 | "menu.services.activatePreviousService" : "Attiva servizio precedente", |
77 | "menu.services.addNewService" : "Aggiungi Nuovo Servizio...", | 93 | "menu.services.addNewService" : "Aggiungi Nuovo Servizio...", |
78 | "menu.services.setNextServiceActive" : "Attiva servizio seguente", | 94 | "menu.services.setNextServiceActive" : "Attiva servizio seguente", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Visualizza", | 96 | "menu.view" : "Visualizza", |
80 | "menu.view.enterFullScreen" : "Visualizza a Schermo Intero", | 97 | "menu.view.enterFullScreen" : "Visualizza a Schermo Intero", |
81 | "menu.view.exitFullScreen" : "Esci da Schermo Intero", | 98 | "menu.view.exitFullScreen" : "Esci da Schermo Intero", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Attiva\/Disattiva Strumenti Sviluppo", | 102 | "menu.view.toggleDevTools" : "Attiva\/Disattiva Strumenti Sviluppo", |
86 | "menu.view.toggleFullScreen" : "Attiva\/Disattiva Schermo Intero", | 103 | "menu.view.toggleFullScreen" : "Attiva\/Disattiva Schermo Intero", |
87 | "menu.view.toggleServiceDevTools" : "Attiva\/Disattiva Strumenti per Sviluppatori di Servizi", | 104 | "menu.view.toggleServiceDevTools" : "Attiva\/Disattiva Strumenti per Sviluppatori di Servizi", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Aumenta Zoom", | 106 | "menu.view.zoomIn" : "Aumenta Zoom", |
89 | "menu.view.zoomOut" : "Diminuisci Zoom", | 107 | "menu.view.zoomOut" : "Diminuisci Zoom", |
90 | "menu.window" : "Finestra", | 108 | "menu.window" : "Finestra", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Invia", | 121 | "password.submit.label" : "Invia", |
104 | "password.successInfo" : "Per favore controlla la tua email", | 122 | "password.successInfo" : "Per favore controlla la tua email", |
105 | "premiumFeature.button.upgradeAccount" : "Effettua l'upgrade del tuo account", | 123 | "premiumFeature.button.upgradeAccount" : "Effettua l'upgrade del tuo account", |
106 | "pricing.headline" : "Supporta Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Non voglio supportare lo sviluppo di Franz", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Voglio supportare lo sviluppo di Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Seleziona la modalità di supporto", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Ricarica {name}", | 151 | "service.crashHandler.action" : "Ricarica {name}", |
111 | "service.crashHandler.autoReload" : "Tentativo di ripristino automatico di {name} in {seconds} secondi", | 152 | "service.crashHandler.autoReload" : "Tentativo di ripristino automatico di {name} in {seconds} secondi", |
112 | "service.crashHandler.headline" : "Oh no!", | 153 | "service.crashHandler.headline" : "Oh no!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh no!", | 159 | "service.errorHandler.headline" : "Oh no!", |
119 | "service.errorHandler.message" : "Errore", | 160 | "service.errorHandler.message" : "Errore", |
120 | "service.errorHandler.text" : "{name} non si è caricato correttamente.", | 161 | "service.errorHandler.text" : "{name} non si è caricato correttamente.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Caricamento", | 167 | "service.webviewLoader.loading" : "Caricamento", |
122 | "services.getStarted" : "Iniziamo", | 168 | "services.getStarted" : "Iniziamo", |
123 | "services.welcome" : "Benvenuto su Franz", | 169 | "services.welcome" : "Benvenuto su Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Cambia password", | 181 | "settings.account.headlinePassword" : "Cambia password", |
136 | "settings.account.headlineProfile" : "Aggiorna profilo", | 182 | "settings.account.headlineProfile" : "Aggiorna profilo", |
137 | "settings.account.headlineSubscription" : "Il tuo abbonamento", | 183 | "settings.account.headlineSubscription" : "Il tuo abbonamento", |
138 | "settings.account.headlineUpgrade" : "Aggiorna il tuo account e supporta Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Scarica", | 186 | "settings.account.invoiceDownload" : "Scarica", |
140 | "settings.account.manageSubscription.label" : "Gestisci il tuo abbonamento", | 187 | "settings.account.manageSubscription.label" : "Gestisci il tuo abbonamento", |
141 | "settings.account.successInfo" : "Le tue modifiche sono state salvate", | 188 | "settings.account.successInfo" : "Le tue modifiche sono state salvate", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Prova di nuovo", | 192 | "settings.account.tryReloadServices" : "Prova di nuovo", |
143 | "settings.account.tryReloadUserInfoRequest" : "Riprova", | 193 | "settings.account.tryReloadUserInfoRequest" : "Riprova", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Impossibile caricare le informazioni dell'utente.", | 195 | "settings.account.userInfoRequestFailed" : "Impossibile caricare le informazioni dell'utente.", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Svuota la cache", | 197 | "settings.app.buttonClearAllCache" : "Svuota la cache", |
146 | "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", | 198 | "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", |
147 | "settings.app.buttonSearchForUpdate" : "Controlla aggiornamenti", | 199 | "settings.app.buttonSearchForUpdate" : "Controlla aggiornamenti", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Unisciti al Lato Oscuro.", | 205 | "settings.app.form.darkMode" : "Unisciti al Lato Oscuro.", |
154 | "settings.app.form.enableGPUAcceleration" : "Attiva Accelerazione GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Attiva Accelerazione GPU", |
155 | "settings.app.form.enableSpellchecking" : "Attiva controllo ortografico", | 207 | "settings.app.form.enableSpellchecking" : "Attiva controllo ortografico", |
156 | "settings.app.form.enableSystemTray" : "Mostra Ferdi nell'area di notifica", | 208 | "settings.app.form.enableSystemTray" : "Mostra Franz nell'area di notifica", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Lingua", | 210 | "settings.app.form.language" : "Lingua", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimizza Ferdi nell'area di notifica", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimizza Ferdi nell'area di notifica", |
159 | "settings.app.form.runInBackground" : "Mantieni Ferdi in esecuzione quando chiudi la finestra", | 212 | "settings.app.form.runInBackground" : "Mantieni Ferdi in esecuzione quando chiudi la finestra", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "I tuoi servizi", | 235 | "settings.navigation.yourServices" : "I tuoi servizi", |
183 | "settings.navigation.yourWorkspaces" : "I tuoi workspaces", | 236 | "settings.navigation.yourWorkspaces" : "I tuoi workspaces", |
184 | "settings.recipes.all" : "Tutti i servizi", | 237 | "settings.recipes.all" : "Tutti i servizi", |
185 | "settings.recipes.dev" : "Sviluppo", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Servizi disponibili", | 245 | "settings.recipes.headline" : "Servizi disponibili", |
187 | "settings.recipes.missingService" : "Manca un servizio?", | 246 | "settings.recipes.missingService" : "Manca un servizio?", |
188 | "settings.recipes.mostPopular" : "Più popolari", | 247 | "settings.recipes.mostPopular" : "Più popolari", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Apri il menu dei workspace", | 333 | "sidebar.openWorkspaceDrawer" : "Apri il menu dei workspace", |
275 | "sidebar.settings" : "Impostazioni", | 334 | "sidebar.settings" : "Impostazioni", |
276 | "sidebar.unmuteApp" : "Attiva notifiche e audio", | 335 | "sidebar.unmuteApp" : "Attiva notifiche e audio", |
277 | "signup.company.label" : "Società ", | ||
278 | "signup.email.label" : "Indirizzo email", | 336 | "signup.email.label" : "Indirizzo email", |
279 | "signup.emailDuplicate" : "Esiste già un utente con lo stesso indirizzo email", | 337 | "signup.emailDuplicate" : "Esiste già un utente con lo stesso indirizzo email", |
280 | "signup.firstname.label" : "Nome", | 338 | "signup.firstname.label" : "Nome", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "gratis", | 358 | "subscription.type.free" : "gratis", |
301 | "subscription.type.month" : "mese", | 359 | "subscription.type.month" : "mese", |
302 | "subscription.type.year" : "anno", | 360 | "subscription.type.year" : "anno", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Annulla", | 367 | "subscriptionPopup.buttonCancel" : "Annulla", |
304 | "subscriptionPopup.buttonDone" : "Fatto", | 368 | "subscriptionPopup.buttonDone" : "Fatto", |
305 | "tabs.item.deleteService" : "Elimina servizio", | 369 | "tabs.item.deleteService" : "Elimina servizio", |
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 611c1ec80..490b938d0 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json | |||
@@ -1,10 +1,15 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "å†èªã¿è¾¼ã¿", | 2 | "app.errorHandler.action" : "å†èªã¿è¾¼ã¿", |
3 | "app.errorHandler.headline" : "é–“é•ãˆã¦ã„る部分ãŒã‚ã‚Šã¾ã™", | 3 | "app.errorHandler.headline" : "é–“é•ãˆã¦ã„る部分ãŒã‚ã‚Šã¾ã™", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Franzサãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã™ã‚‹", | 5 | "feature.delayApp.headline" : "Franzã‚’ã™ãã«èµ·å‹•ã™ã‚‹ã«ã¯ã€Franz サãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã—ã¦ãã ã•ã„。", |
6 | "feature.delayApp.headline" : "Franzã‚’ã™ãã«èµ·å‹•ã™ã‚‹ã«ã¯ã€Ferdi サãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã—ã¦ãã ã•ã„。", | ||
7 | "feature.delayApp.text" : "Franzã¯ã‚ã¨{seconds}秒後ã«èµ·å‹•ã—ã¾ã™ã€‚", | 6 | "feature.delayApp.text" : "Franzã¯ã‚ã¨{seconds}秒後ã«èµ·å‹•ã—ã¾ã™ã€‚", |
7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", | ||
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Franzサãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã™ã‚‹", | ||
11 | "feature.delayApp.upgrade.actionShort" : "アカウントをアップグレード", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "メールã§é€ä¿¡", | 13 | "feature.shareFranz.action.email" : "メールã§é€ä¿¡", |
9 | "feature.shareFranz.action.facebook" : "Facebookã§ã‚·ã‚§ã‚¢", | 14 | "feature.shareFranz.action.facebook" : "Facebookã§ã‚·ã‚§ã‚¢", |
10 | "feature.shareFranz.action.twitter" : "Twitterã§ã‚·ã‚§ã‚¢", | 15 | "feature.shareFranz.action.twitter" : "Twitterã§ã‚·ã‚§ã‚¢", |
@@ -12,14 +17,19 @@ | |||
12 | "feature.shareFranz.shareText.email" : "Franzã§{count}個ã®ã‚µãƒ¼ãƒ“スを使ã£ã¦ã„ã¾ã™ï¼ã‚ãªãŸã‚‚Gmail, Messenger, Slack, Skypeãªã©ã®ã‚µãƒ¼ãƒ“スをFranzã§ä¸€å…ƒç®¡ç†ã—ã¾ã—ょã†ï¼ www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Franzã§{count}個ã®ã‚µãƒ¼ãƒ“スを使ã£ã¦ã„ã¾ã™ï¼ã‚ãªãŸã‚‚Gmail, Messenger, Slack, Skypeãªã©ã®ã‚µãƒ¼ãƒ“スをFranzã§ä¸€å…ƒç®¡ç†ã—ã¾ã—ょã†ï¼ www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "ã‚ãªãŸã®ãŠå‹é”ã«Franzã‚’æ•™ãˆã¦ã‚ã’ã¾ã—ょã†ã€‚", | 19 | "feature.shareFranz.text" : "ã‚ãªãŸã®ãŠå‹é”ã«Franzã‚’æ•™ãˆã¦ã‚ã’ã¾ã—ょã†ã€‚", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Franzã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。", | 23 | "global.api.unhealthy" : "Franzã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。", | 25 | "global.notConnectedToTheInternet" : "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。", |
17 | "global.spellchecker.useDefault" : " {default}ã‚’åˆæœŸè¨å®šã§ä½¿ç”¨ã—ã¦ãã ã•ã„", | 26 | "global.spellchecker.useDefault" : " {default}ã‚’åˆæœŸè¨å®šã§ä½¿ç”¨ã—ã¦ãã ã•ã„", |
18 | "global.spellchecking.autodetect" : "言語を自動的ã«æ¤œå‡ºã™ã‚‹", | 27 | "global.spellchecking.autodetect" : "言語を自動的ã«æ¤œå‡ºã™ã‚‹", |
19 | "global.spellchecking.autodetect.short" : "自動", | 28 | "global.spellchecking.autodetect.short" : "自動", |
20 | "global.spellchecking.language" : "スペルãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªž", | 29 | "global.spellchecking.language" : "スペルãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªž", |
21 | "import.headline" : "Ferdi 4ã®ã‚µãƒ¼ãƒ“スをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Ferdi 5ã§ã¯ã“ã®ã‚µãƒ¼ãƒ“スã«ã¾ã 対応ã—ã¦ã„ã¾ã›ã‚“", | 31 | "import.headline" : "Franz 4ã®ã‚µãƒ¼ãƒ“スをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", |
32 | "import.notSupportedHeadline" : "Franz 5ã§ã¯ã“ã®ã‚µãƒ¼ãƒ“スã«ã¾ã 対応ã—ã¦ã„ã¾ã›ã‚“", | ||
23 | "import.skip.label" : "手動ã§ã‚µãƒ¼ãƒ“ã‚¹ã‚’è¿½åŠ ã™ã‚‹", | 33 | "import.skip.label" : "手動ã§ã‚µãƒ¼ãƒ“ã‚¹ã‚’è¿½åŠ ã™ã‚‹", |
24 | "import.submit.label" : "サービスをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", | 34 | "import.submit.label" : "サービスをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", |
25 | "infobar.buttonChangelog" : "æ›´æ–°å±¥æ´ã‚’見る", | 35 | "infobar.buttonChangelog" : "æ›´æ–°å±¥æ´ã‚’見る", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "サービスã®å†èªã¿è¾¼ã¿", | 37 | "infobar.buttonReloadServices" : "サービスã®å†èªã¿è¾¼ã¿", |
28 | "infobar.requiredRequestsFailed" : "サービスã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", | 38 | "infobar.requiredRequestsFailed" : "サービスã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", |
29 | "infobar.servicesUpdated" : "サービスãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚", | 39 | "infobar.servicesUpdated" : "サービスãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Franzã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ã€‚", | 41 | "infobar.updateAvailable" : "Franzã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ã€‚", |
31 | "invite.email.label" : "メールアドレス", | 42 | "invite.email.label" : "メールアドレス", |
32 | "invite.headline.friends" : "ã‚ãªãŸã®å‹äººã‚„åŒåƒšã®æ–¹ã‚’3åã¾ã§Franzã«æ‹›å¾…ã§ãã¾ã™", | 43 | "invite.headline.friends" : "ã‚ãªãŸã®å‹äººã‚„åŒåƒšã®æ–¹ã‚’3åã¾ã§Franzã«æ‹›å¾…ã§ãã¾ã™", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", | 54 | "login.serverLogout" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", |
44 | "login.submit.label" : "サインイン", | 55 | "login.submit.label" : "サインイン", |
45 | "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", | 56 | "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±", | 59 | "menu.app.about" : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "æ›´æ–°ã®ç¢ºèª", | 61 | "menu.app.checkForUpdates" : "æ›´æ–°ã®ç¢ºèª", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "ファイル", | 81 | "menu.file" : "ファイル", |
69 | "menu.help" : "ヘルプ", | 82 | "menu.help" : "ヘルプ", |
70 | "menu.help.changelog" : "æ›´æ–°å±¥æ´", | 83 | "menu.help.changelog" : "æ›´æ–°å±¥æ´", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Franzã«ã¤ã„ã¦", | 87 | "menu.help.learnMore" : "Franzã«ã¤ã„ã¦", |
72 | "menu.help.privacy" : "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦", | 88 | "menu.help.privacy" : "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦", |
73 | "menu.help.support" : "サãƒãƒ¼ãƒˆ", | 89 | "menu.help.support" : "サãƒãƒ¼ãƒˆ", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "å‰ã®ã‚µãƒ¼ãƒ“スを有効ã«ã™ã‚‹", | 92 | "menu.services.activatePreviousService" : "å‰ã®ã‚µãƒ¼ãƒ“スを有効ã«ã™ã‚‹", |
77 | "menu.services.addNewService" : "ã‚µãƒ¼ãƒ“ã‚¹ã‚’è¿½åŠ ", | 93 | "menu.services.addNewService" : "ã‚µãƒ¼ãƒ“ã‚¹ã‚’è¿½åŠ ", |
78 | "menu.services.setNextServiceActive" : "次ã®ã‚µãƒ¼ãƒ“スを有効ã«ã™ã‚‹", | 94 | "menu.services.setNextServiceActive" : "次ã®ã‚µãƒ¼ãƒ“スを有効ã«ã™ã‚‹", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "表示", | 96 | "menu.view" : "表示", |
80 | "menu.view.enterFullScreen" : "全画é¢è¡¨ç¤º", | 97 | "menu.view.enterFullScreen" : "全画é¢è¡¨ç¤º", |
81 | "menu.view.exitFullScreen" : "全画é¢è¡¨ç¤ºã‚’終了ã™ã‚‹", | 98 | "menu.view.exitFullScreen" : "全画é¢è¡¨ç¤ºã‚’終了ã™ã‚‹", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "開発者ツールを切り替ãˆ", | 102 | "menu.view.toggleDevTools" : "開発者ツールを切り替ãˆ", |
86 | "menu.view.toggleFullScreen" : "全画é¢è¡¨ç¤ºã®åˆ‡ã‚Šæ›¿ãˆ", | 103 | "menu.view.toggleFullScreen" : "全画é¢è¡¨ç¤ºã®åˆ‡ã‚Šæ›¿ãˆ", |
87 | "menu.view.toggleServiceDevTools" : "サービス開発者ツールを切り替ãˆ", | 104 | "menu.view.toggleServiceDevTools" : "サービス開発者ツールを切り替ãˆ", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "表示を拡大ã™ã‚‹", | 106 | "menu.view.zoomIn" : "表示を拡大ã™ã‚‹", |
89 | "menu.view.zoomOut" : "表示を縮å°ã™ã‚‹", | 107 | "menu.view.zoomOut" : "表示を縮å°ã™ã‚‹", |
90 | "menu.window" : "ウィンドウ", | 108 | "menu.window" : "ウィンドウ", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "é€ä¿¡", | 121 | "password.submit.label" : "é€ä¿¡", |
104 | "password.successInfo" : "メールを確èªã—ã¦ä¸‹ã•ã„", | 122 | "password.successInfo" : "メールを確èªã—ã¦ä¸‹ã•ã„", |
105 | "premiumFeature.button.upgradeAccount" : "アカウントをアップグレード", | 123 | "premiumFeature.button.upgradeAccount" : "アカウントをアップグレード", |
106 | "pricing.headline" : "Franzを支æ´ã™ã‚‹", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸããªã„。", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„。", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "プランをé¸æŠžã—ã¦ãã ã•ã„", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "{name}ã‚’å†èªã¿è¾¼ã¿", | 151 | "service.crashHandler.action" : "{name}ã‚’å†èªã¿è¾¼ã¿", |
111 | "service.crashHandler.autoReload" : "{seconds}秒後ã€è‡ªå‹•çš„ã«{name}ã®å¾©æ—§ã‚’試ã¿ã¾ã™", | 152 | "service.crashHandler.autoReload" : "{seconds}秒後ã€è‡ªå‹•çš„ã«{name}ã®å¾©æ—§ã‚’試ã¿ã¾ã™", |
112 | "service.crashHandler.headline" : "ã—ã¾ã£ãŸï¼", | 153 | "service.crashHandler.headline" : "ã—ã¾ã£ãŸï¼", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "ã—ã¾ã£ãŸï¼", | 159 | "service.errorHandler.headline" : "ã—ã¾ã£ãŸï¼", |
119 | "service.errorHandler.message" : "エラー", | 160 | "service.errorHandler.message" : "エラー", |
120 | "service.errorHandler.text" : "{name} ã¯ãƒãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ", | 161 | "service.errorHandler.text" : "{name} ã¯ãƒãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "ã¯ã˜ã‚ã‚‹", | 168 | "services.getStarted" : "ã¯ã˜ã‚ã‚‹", |
123 | "services.welcome" : "Franzã«ã‚ˆã†ã“ã", | 169 | "services.welcome" : "Franzã«ã‚ˆã†ã“ã", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "パスワードã®å¤‰æ›´", | 181 | "settings.account.headlinePassword" : "パスワードã®å¤‰æ›´", |
136 | "settings.account.headlineProfile" : "プãƒãƒ•ã‚£ãƒ¼ãƒ«ã®æ›´æ–°", | 182 | "settings.account.headlineProfile" : "プãƒãƒ•ã‚£ãƒ¼ãƒ«ã®æ›´æ–°", |
137 | "settings.account.headlineSubscription" : "ã‚ãªãŸã®ç™»éŒ²å†…容", | 183 | "settings.account.headlineSubscription" : "ã‚ãªãŸã®ç™»éŒ²å†…容", |
138 | "settings.account.headlineUpgrade" : "アカウントをアップグレードã—ã€Franzを支æ´ã™ã‚‹", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "ダウンãƒãƒ¼ãƒ‰", | 186 | "settings.account.invoiceDownload" : "ダウンãƒãƒ¼ãƒ‰", |
140 | "settings.account.manageSubscription.label" : "サブスクリプションã®ç®¡ç†", | 187 | "settings.account.manageSubscription.label" : "サブスクリプションã®ç®¡ç†", |
141 | "settings.account.successInfo" : "変更内容ãŒä¿å˜ã•ã‚Œã¾ã—ãŸ", | 188 | "settings.account.successInfo" : "変更内容ãŒä¿å˜ã•ã‚Œã¾ã—ãŸ", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "ã‚‚ã†ä¸€åº¦è©¦ã™", | 192 | "settings.account.tryReloadServices" : "ã‚‚ã†ä¸€åº¦è©¦ã™", |
143 | "settings.account.tryReloadUserInfoRequest" : "ã‚‚ã†ä¸€åº¦è©¦ã™", | 193 | "settings.account.tryReloadUserInfoRequest" : "ã‚‚ã†ä¸€åº¦è©¦ã™", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "ãƒ¦ãƒ¼ã‚¶æƒ…å ±ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", | 195 | "settings.account.userInfoRequestFailed" : "ãƒ¦ãƒ¼ã‚¶æƒ…å ±ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "ã‚ャッシュを消去ã™ã‚‹", | 197 | "settings.app.buttonClearAllCache" : "ã‚ャッシュを消去ã™ã‚‹", |
146 | "settings.app.buttonInstallUpdate" : "å†èµ·å‹•ã—ã¦æ›´æ–°ã‚’インストールã™ã‚‹", | 198 | "settings.app.buttonInstallUpdate" : "å†èµ·å‹•ã—ã¦æ›´æ–°ã‚’インストールã™ã‚‹", |
147 | "settings.app.buttonSearchForUpdate" : "æ›´æ–°ã®ç¢ºèª", | 199 | "settings.app.buttonSearchForUpdate" : "æ›´æ–°ã®ç¢ºèª", |
@@ -154,6 +206,7 @@ | |||
154 | "settings.app.form.enableGPUAcceleration" : "GPUアクセラレーションを有効ã«ã™ã‚‹", | 206 | "settings.app.form.enableGPUAcceleration" : "GPUアクセラレーションを有効ã«ã™ã‚‹", |
155 | "settings.app.form.enableSpellchecking" : "スペルãƒã‚§ãƒƒã‚¯ã‚’有効ã«ã™ã‚‹", | 207 | "settings.app.form.enableSpellchecking" : "スペルãƒã‚§ãƒƒã‚¯ã‚’有効ã«ã™ã‚‹", |
156 | "settings.app.form.enableSystemTray" : "Franzをシステムトレイã«è¡¨ç¤ºã™ã‚‹", | 208 | "settings.app.form.enableSystemTray" : "Franzをシステムトレイã«è¡¨ç¤ºã™ã‚‹", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "言語", | 210 | "settings.app.form.language" : "言語", |
158 | "settings.app.form.minimizeToSystemTray" : "Franzをシステムトレイã«æœ€å°åŒ–ã™ã‚‹", | 211 | "settings.app.form.minimizeToSystemTray" : "Franzをシステムトレイã«æœ€å°åŒ–ã™ã‚‹", |
159 | "settings.app.form.runInBackground" : "ウインドウを閉ã˜ãŸéš›ã«Franzã‚’ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã•ã›ã¦ãŠã", | 212 | "settings.app.form.runInBackground" : "ウインドウを閉ã˜ãŸéš›ã«Franzã‚’ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã•ã›ã¦ãŠã", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "利用ä¸ã®ã‚µãƒ¼ãƒ“ス", | 235 | "settings.navigation.yourServices" : "利用ä¸ã®ã‚µãƒ¼ãƒ“ス", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“ス", | 237 | "settings.recipes.all" : "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“ス", |
185 | "settings.recipes.dev" : "開発版", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "利用å¯èƒ½ãªã‚µãƒ¼ãƒ“ス", | 245 | "settings.recipes.headline" : "利用å¯èƒ½ãªã‚µãƒ¼ãƒ“ス", |
187 | "settings.recipes.missingService" : "使ã„ãŸã„サービスãŒä¸€è¦§ã«ã‚ã‚Šã¾ã›ã‚“ã‹?", | 246 | "settings.recipes.missingService" : "使ã„ãŸã„サービスãŒä¸€è¦§ã«ã‚ã‚Šã¾ã›ã‚“ã‹?", |
188 | "settings.recipes.mostPopular" : "最も人気", | 247 | "settings.recipes.mostPopular" : "最も人気", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "è¨å®š", | 334 | "sidebar.settings" : "è¨å®š", |
276 | "sidebar.unmuteApp" : "通知ã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効化", | 335 | "sidebar.unmuteApp" : "通知ã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効化", |
277 | "signup.company.label" : "法人", | ||
278 | "signup.email.label" : "メールアドレス", | 336 | "signup.email.label" : "メールアドレス", |
279 | "signup.emailDuplicate" : "ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯æ—¢ã«ç™»éŒ²ã•ã‚Œã¦ã„ã¾ã™", | 337 | "signup.emailDuplicate" : "ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯æ—¢ã«ç™»éŒ²ã•ã‚Œã¦ã„ã¾ã™", |
280 | "signup.firstname.label" : "å", | 338 | "signup.firstname.label" : "å", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "ç„¡æ–™", | 358 | "subscription.type.free" : "ç„¡æ–™", |
301 | "subscription.type.month" : "月間", | 359 | "subscription.type.month" : "月間", |
302 | "subscription.type.year" : "å¹´é–“", | 360 | "subscription.type.year" : "å¹´é–“", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "ã‚ャンセル", | 367 | "subscriptionPopup.buttonCancel" : "ã‚ャンセル", |
304 | "subscriptionPopup.buttonDone" : "完了", | 368 | "subscriptionPopup.buttonDone" : "完了", |
305 | "tabs.item.deleteService" : "サービスを削除ã™ã‚‹", | 369 | "tabs.item.deleteService" : "サービスを削除ã™ã‚‹", |
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json index b35e273b6..4e2f2ae85 100644 --- a/src/i18n/locales/ka.json +++ b/src/i18n/locales/ka.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "ჩáƒáƒ¢áƒ•áƒ˜áƒ თვáƒ", | 2 | "app.errorHandler.action" : "ჩáƒáƒ¢áƒ•áƒ˜áƒ თვáƒ", |
3 | "app.errorHandler.headline" : "Something went wrong", | 3 | "app.errorHandler.headline" : "Something went wrong", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Get a Ferdi Supporter License", | 5 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
6 | "feature.delayApp.headline" : "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
7 | "feature.delayApp.text" : "Ferdi will continue in {seconds} seconds.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Get a Franz Supporter License", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Send as email", | 13 | "feature.shareFranz.action.email" : "Send as email", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 14 | "feature.shareFranz.action.facebook" : "Share on Facebook", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 15 | "feature.shareFranz.action.twitter" : "Share on Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Franz-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებრვერმáƒáƒ®áƒ”რხდáƒ", | 23 | "global.api.unhealthy" : "Franz-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებრვერმáƒáƒ®áƒ”რხდáƒ", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "თქვენ áƒáƒ ხáƒáƒ თ ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებული.", | 25 | "global.notConnectedToTheInternet" : "თქვენ áƒáƒ ხáƒáƒ თ ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებული.", |
17 | "global.spellchecker.useDefault" : "Use System Default ({default})", | 26 | "global.spellchecker.useDefault" : "Use System Default ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Spell checking language", | 29 | "global.spellchecking.language" : "Spell checking language", |
21 | "import.headline" : "შემáƒáƒ˜áƒ¢áƒáƒœáƒ” Ferdi 4-ის სერვისები", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "სერვისები ჯერáƒáƒ áƒáƒ ის მხáƒáƒ დáƒáƒáƒ”რილი Ferdi 5-ში", | 31 | "import.headline" : "შემáƒáƒ˜áƒ¢áƒáƒœáƒ” Franz 4-ის სერვისები", |
32 | "import.notSupportedHeadline" : "სერვისები ჯერáƒáƒ áƒáƒ ის მხáƒáƒ დáƒáƒáƒ”რილი Franz 5-ში", | ||
23 | "import.skip.label" : "I want to add services manually", | 33 | "import.skip.label" : "I want to add services manually", |
24 | "import.submit.label" : "მáƒáƒ¬áƒ•áƒ”ვის გáƒáƒ’ზáƒáƒ•áƒœáƒ", | 34 | "import.submit.label" : "მáƒáƒ¬áƒ•áƒ”ვის გáƒáƒ’ზáƒáƒ•áƒœáƒ", |
25 | "infobar.buttonChangelog" : "What is new?", | 35 | "infobar.buttonChangelog" : "What is new?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "სერვისების გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ თვრ", | 37 | "infobar.buttonReloadServices" : "სერვისების გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ თვრ", |
28 | "infobar.requiredRequestsFailed" : "სერვისებისრდრმáƒáƒ›áƒ®áƒ›áƒáƒ ებლის ინფáƒáƒ მáƒáƒªáƒ˜áƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ თვრვერმáƒáƒ®áƒ”რხდáƒ", | 38 | "infobar.requiredRequestsFailed" : "სერვისებისრდრმáƒáƒ›áƒ®áƒ›áƒáƒ ებლის ინფáƒáƒ მáƒáƒªáƒ˜áƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ თვრვერმáƒáƒ®áƒ”რხდáƒ", |
29 | "infobar.servicesUpdated" : "თქვენი სერვისები გáƒáƒœáƒáƒ®áƒšáƒ”ბულიáƒ.", | 39 | "infobar.servicesUpdated" : "თქვენი სერვისები გáƒáƒœáƒáƒ®áƒšáƒ”ბულიáƒ.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბრFranz-ისთვის ხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜áƒ.", | 41 | "infobar.updateAvailable" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბრFranz-ისთვის ხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜áƒ.", |
31 | "invite.email.label" : "მეილი", | 42 | "invite.email.label" : "მეილი", |
32 | "invite.headline.friends" : "მáƒáƒ˜áƒ¬áƒ•áƒ˜áƒ”თ 3 თქვენი მეგáƒáƒ‘áƒáƒ ი áƒáƒœ კáƒáƒšáƒ”გáƒ", | 43 | "invite.headline.friends" : "მáƒáƒ˜áƒ¬áƒ•áƒ˜áƒ”თ 3 თქვენი მეგáƒáƒ‘áƒáƒ ი áƒáƒœ კáƒáƒšáƒ”გáƒ", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", | 54 | "login.serverLogout" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", |
44 | "login.submit.label" : "შესვლáƒ", | 55 | "login.submit.label" : "შესვლáƒ", |
45 | "login.tokenExpired" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", | 56 | "login.tokenExpired" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Franz-ის შესáƒáƒ®áƒ”ბ", | 59 | "menu.app.about" : "Franz-ის შესáƒáƒ®áƒ”ბ", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ", | 61 | "menu.app.checkForUpdates" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "File", | 81 | "menu.file" : "File", |
69 | "menu.help" : "Help", | 82 | "menu.help" : "Help", |
70 | "menu.help.changelog" : "Changelog", | 83 | "menu.help.changelog" : "Changelog", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Learn More", | 87 | "menu.help.learnMore" : "Learn More", |
72 | "menu.help.privacy" : "კáƒáƒœáƒ¤áƒ˜áƒ“ენციáƒáƒšáƒ£áƒ áƒáƒ‘ის შესáƒáƒ®áƒ”ბ", | 88 | "menu.help.privacy" : "კáƒáƒœáƒ¤áƒ˜áƒ“ენციáƒáƒšáƒ£áƒ áƒáƒ‘ის შესáƒáƒ®áƒ”ბ", |
73 | "menu.help.support" : "Support", | 89 | "menu.help.support" : "Support", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Add New Service...", | 93 | "menu.services.addNewService" : "Add New Service...", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "View", | 96 | "menu.view" : "View", |
80 | "menu.view.enterFullScreen" : "Enter Full Screen", | 97 | "menu.view.enterFullScreen" : "Enter Full Screen", |
81 | "menu.view.exitFullScreen" : "Exit Full Screen", | 98 | "menu.view.exitFullScreen" : "Exit Full Screen", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 102 | "menu.view.toggleDevTools" : "Toggle Developer Tools", |
86 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 103 | "menu.view.toggleFullScreen" : "Toggle Full Screen", |
87 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 104 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Zoom In", | 106 | "menu.view.zoomIn" : "Zoom In", |
89 | "menu.view.zoomOut" : "Zoom Out", | 107 | "menu.view.zoomOut" : "Zoom Out", |
90 | "menu.window" : "Window", | 108 | "menu.window" : "Window", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ ებáƒ", | 121 | "password.submit.label" : "დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ ებáƒ", |
104 | "password.successInfo" : "გთხáƒáƒ•áƒ— შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ მეილი", | 122 | "password.successInfo" : "გთხáƒáƒ•áƒ— შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ მეილი", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
106 | "pricing.headline" : "Franz-ის მხáƒáƒ დáƒáƒáƒ”რáƒ", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "áƒáƒ მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "áƒáƒ˜áƒ ჩიეთ თქვენი მხáƒáƒ დáƒáƒáƒ”რის გეგმáƒ", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Reload {name}", | 151 | "service.crashHandler.action" : "Reload {name}", |
111 | "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds", | 152 | "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds", |
112 | "service.crashHandler.headline" : "Oh no!", | 153 | "service.crashHandler.headline" : "Oh no!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh no!", | 159 | "service.errorHandler.headline" : "Oh no!", |
119 | "service.errorHandler.message" : "შეცდáƒáƒ›áƒ", | 160 | "service.errorHandler.message" : "შეცდáƒáƒ›áƒ", |
120 | "service.errorHandler.text" : "{name} has failed to load.", | 161 | "service.errorHandler.text" : "{name} has failed to load.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "დáƒáƒ¬áƒ§áƒ”ბáƒ", | 168 | "services.getStarted" : "დáƒáƒ¬áƒ§áƒ”ბáƒ", |
123 | "services.welcome" : "მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბით Franz-ზე", | 169 | "services.welcome" : "მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბით Franz-ზე", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "პáƒáƒ áƒáƒšáƒ˜áƒ¡ შეცვლáƒ", | 181 | "settings.account.headlinePassword" : "პáƒáƒ áƒáƒšáƒ˜áƒ¡ შეცვლáƒ", |
136 | "settings.account.headlineProfile" : "პრáƒáƒ¤áƒ˜áƒšáƒ˜áƒ¡ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ", | 182 | "settings.account.headlineProfile" : "პრáƒáƒ¤áƒ˜áƒšáƒ˜áƒ¡ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ", |
137 | "settings.account.headlineSubscription" : "თქვენი გáƒáƒ›áƒáƒ¬áƒ”რáƒ", | 183 | "settings.account.headlineSubscription" : "თქვენი გáƒáƒ›áƒáƒ¬áƒ”რáƒ", |
138 | "settings.account.headlineUpgrade" : "გáƒáƒœáƒáƒáƒ®áƒšáƒ”თ თქვენი áƒáƒœáƒ’áƒáƒ იში დრმხáƒáƒ ი დáƒáƒ£áƒáƒ˜áƒ ეთ Franz-ს", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "გáƒáƒ“მáƒáƒ¬áƒ”რáƒ", | 186 | "settings.account.invoiceDownload" : "გáƒáƒ“მáƒáƒ¬áƒ”რáƒ", |
140 | "settings.account.manageSubscription.label" : "თქვენი გáƒáƒ›áƒáƒ¬áƒ”რის მáƒáƒ თვáƒ", | 187 | "settings.account.manageSubscription.label" : "თქვენი გáƒáƒ›áƒáƒ¬áƒ”რის მáƒáƒ თვáƒ", |
141 | "settings.account.successInfo" : "თქვენი ცვლილებები შენáƒáƒ®áƒ£áƒšáƒ˜áƒ", | 188 | "settings.account.successInfo" : "თქვენი ცვლილებები შენáƒáƒ®áƒ£áƒšáƒ˜áƒ", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "სცáƒáƒ“ეთ ხელáƒáƒ®áƒšáƒ", | 192 | "settings.account.tryReloadServices" : "სცáƒáƒ“ეთ ხელáƒáƒ®áƒšáƒ", |
143 | "settings.account.tryReloadUserInfoRequest" : "სცáƒáƒ“ეთ ხელáƒáƒ®áƒšáƒ", | 193 | "settings.account.tryReloadUserInfoRequest" : "სცáƒáƒ“ეთ ხელáƒáƒ®áƒšáƒ", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "მáƒáƒ›áƒ®áƒ›áƒáƒ ებლის ინფáƒáƒ მáƒáƒªáƒ˜áƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ თვრვერმáƒáƒ®áƒ”რხდáƒ", | 195 | "settings.account.userInfoRequestFailed" : "მáƒáƒ›áƒ®áƒ›áƒáƒ ებლის ინფáƒáƒ მáƒáƒªáƒ˜áƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ თვრვერმáƒáƒ®áƒ”რხდáƒ", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Clear cache", | 197 | "settings.app.buttonClearAllCache" : "Clear cache", |
146 | "settings.app.buttonInstallUpdate" : "გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ თეთ დრდáƒáƒáƒ§áƒ”ნეთ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ", | 198 | "settings.app.buttonInstallUpdate" : "გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ თეთ დრდáƒáƒáƒ§áƒ”ნეთ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ", |
147 | "settings.app.buttonSearchForUpdate" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ", | 199 | "settings.app.buttonSearchForUpdate" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Join the Dark Side", | 205 | "settings.app.form.darkMode" : "Join the Dark Side", |
154 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 206 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", |
155 | "settings.app.form.enableSpellchecking" : "Enable spell checking", | 207 | "settings.app.form.enableSpellchecking" : "Enable spell checking", |
156 | "settings.app.form.enableSystemTray" : "áƒáƒ©áƒ•áƒ”ნეთ Ferdi სისტემის უჯრáƒáƒ¨áƒ˜", | 208 | "settings.app.form.enableSystemTray" : "áƒáƒ©áƒ•áƒ”ნეთ Franz სისტემის უჯრáƒáƒ¨áƒ˜", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "ენáƒ", | 210 | "settings.app.form.language" : "ენáƒ", |
158 | "settings.app.form.minimizeToSystemTray" : "ჩáƒáƒ™áƒ”ცეთ Ferdi სისტემის უჯრáƒáƒ¨áƒ˜", | 211 | "settings.app.form.minimizeToSystemTray" : "ჩáƒáƒ™áƒ”ცეთ Ferdi სისტემის უჯრáƒáƒ¨áƒ˜", |
159 | "settings.app.form.runInBackground" : "დáƒáƒ¢áƒáƒ•áƒ”თ Ferdi გáƒáƒ¨áƒ•áƒ”ბული რáƒáƒ“ესáƒáƒª ფáƒáƒœáƒ¯áƒáƒ რდáƒáƒ˜áƒ®áƒ£áƒ ებáƒ", | 212 | "settings.app.form.runInBackground" : "დáƒáƒ¢áƒáƒ•áƒ”თ Ferdi გáƒáƒ¨áƒ•áƒ”ბული რáƒáƒ“ესáƒáƒª ფáƒáƒœáƒ¯áƒáƒ რდáƒáƒ˜áƒ®áƒ£áƒ ებáƒ", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "თქვენი სერვისები", | 235 | "settings.navigation.yourServices" : "თქვენი სერვისები", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "ყველრსერვისი", | 237 | "settings.recipes.all" : "ყველრსერვისი", |
185 | "settings.recipes.dev" : "გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒ", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "ხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜ სერვისები", | 245 | "settings.recipes.headline" : "ხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜ სერვისები", |
187 | "settings.recipes.missingService" : "Missing a service?", | 246 | "settings.recipes.missingService" : "Missing a service?", |
188 | "settings.recipes.mostPopular" : "ყველáƒáƒ–ე პáƒáƒžáƒ£áƒšáƒáƒ ული", | 247 | "settings.recipes.mostPopular" : "ყველáƒáƒ–ე პáƒáƒžáƒ£áƒšáƒáƒ ული", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები", | 334 | "sidebar.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები", |
276 | "sidebar.unmuteApp" : "Enable notifications & audio", | 335 | "sidebar.unmuteApp" : "Enable notifications & audio", |
277 | "signup.company.label" : "კáƒáƒ›áƒžáƒáƒœáƒ˜áƒ", | ||
278 | "signup.email.label" : "მეილი", | 336 | "signup.email.label" : "მეილი", |
279 | "signup.emailDuplicate" : "მáƒáƒ›áƒ®áƒ›áƒáƒ ებელი áƒáƒ› მეილით უკვე áƒáƒ სებáƒáƒ‘ს", | 337 | "signup.emailDuplicate" : "მáƒáƒ›áƒ®áƒ›áƒáƒ ებელი áƒáƒ› მეილით უკვე áƒáƒ სებáƒáƒ‘ს", |
280 | "signup.firstname.label" : "First Name", | 338 | "signup.firstname.label" : "First Name", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "უკვე გáƒáƒ¥áƒ•áƒ— áƒáƒœáƒ’áƒáƒ იში?", | 344 | "signup.link.login" : "უკვე გáƒáƒ¥áƒ•áƒ— áƒáƒœáƒ’áƒáƒ იში?", |
287 | "signup.password.label" : "პáƒáƒ áƒáƒšáƒ˜", | 345 | "signup.password.label" : "პáƒáƒ áƒáƒšáƒ˜", |
288 | "signup.submit.label" : "áƒáƒœáƒ’áƒáƒ იშის შექმნáƒ", | 346 | "signup.submit.label" : "áƒáƒœáƒ’áƒáƒ იშის შექმნáƒ", |
289 | "subscription.euTaxInfo" : "EU residents: local sales tax may apply", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "áƒáƒ áƒáƒœáƒáƒ˜áƒ ი რეკლáƒáƒ›áƒ”ბი, áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "მáƒáƒšáƒ”", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Proxy support for services", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "ფáƒáƒ¡áƒ˜áƒáƒœáƒ˜ Franz-ის პრემიუმ მხáƒáƒ მდáƒáƒ›áƒáƒ”რი áƒáƒœáƒ’áƒáƒ იში", | ||
298 | "subscription.paymentSessionError" : "გáƒáƒ“áƒáƒ®áƒ“ის ფáƒáƒ მáƒáƒ¢áƒ˜áƒ¡ ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერმáƒáƒ®áƒ”რხდáƒ", | ||
299 | "subscription.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡", | ||
300 | "subscription.type.free" : "უფáƒáƒ¡áƒ", | ||
301 | "subscription.type.month" : "თვე", | ||
302 | "subscription.type.year" : "წელი", | ||
303 | "subscriptionPopup.buttonCancel" : "გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ", | 353 | "subscriptionPopup.buttonCancel" : "გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ", |
304 | "subscriptionPopup.buttonDone" : "შესრულებულიáƒ", | 354 | "subscriptionPopup.buttonDone" : "შესრულებულიáƒ", |
305 | "tabs.item.deleteService" : "სერვისის წáƒáƒ¨áƒšáƒ", | 355 | "tabs.item.deleteService" : "სერვისის წáƒáƒ¨áƒšáƒ", |
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json index 90d566585..1f3681e5d 100644 --- a/src/i18n/locales/nl-BE.json +++ b/src/i18n/locales/nl-BE.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Herladen", | 2 | "app.errorHandler.action" : "Herladen", |
3 | "app.errorHandler.headline" : "Er ging iets mis", | 3 | "app.errorHandler.headline" : "Er ging iets mis", |
4 | "feature.announcements.changelog.headline" : "Wijzigingen in Ferdi {versie}", | 4 | "feature.announcements.changelog.headline" : "Wijzigingen in Franz {versie}", |
5 | "feature.delayApp.action" : "Neem een Ferdi Supporter Licentie ", | 5 | "feature.delayApp.headline" : "Neem een Franz Supporter Licentie om niet meer te hoeven wachten", |
6 | "feature.delayApp.headline" : "Neem een Ferdi Supporter Licentie om niet meer te hoeven wachten", | 6 | "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.", |
7 | "feature.delayApp.text" : "Ferdi gaat over {seconds} seconden verder.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Neem een Franz Supporter Licentie ", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Verstuur als e-mail", | 13 | "feature.shareFranz.action.email" : "Verstuur als e-mail", |
9 | "feature.shareFranz.action.facebook" : "Deel op Facebook", | 14 | "feature.shareFranz.action.facebook" : "Deel op Facebook", |
10 | "feature.shareFranz.action.twitter" : "Deel op Twitter", | 15 | "feature.shareFranz.action.twitter" : "Deel op Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is beter samen!", | 16 | "feature.shareFranz.headline" : "Ferdi is beter samen!", |
12 | "feature.shareFranz.shareText.email" : "Ik heb {telling} diensten toegevoegd aan Franz! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Ik heb {telling} diensten toegevoegd aan Franz! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Ik heb {tel} diensten toegevoegd aan Franz! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Ik heb {tel} diensten toegevoegd aan Franz! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Vertel je vrienden en collega's hoe geweldig Ferdi is en help ons het woord te verspreiden.", | 19 | "feature.shareFranz.text" : "Vertel je vrienden en collega's hoe geweldig Franz is en help ons het woord te verspreiden.", |
15 | "global.api.unhealthy" : "Kan geen verbinding maken met de Ferdi services", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.", | 25 | "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.", |
17 | "global.spellchecker.useDefault" : "Gebruik Systeemstandaard ({default})", | 26 | "global.spellchecker.useDefault" : "Gebruik Systeemstandaard ({default})", |
18 | "global.spellchecking.autodetect" : "Taal automatisch herkennen", | 27 | "global.spellchecking.autodetect" : "Taal automatisch herkennen", |
19 | "global.spellchecking.autodetect.short" : "Automatisch", | 28 | "global.spellchecking.autodetect.short" : "Automatisch", |
20 | "global.spellchecking.language" : "Taal spellingscontrole", | 29 | "global.spellchecking.language" : "Taal spellingscontrole", |
21 | "import.headline" : "Importeer je Ferdi 4 services", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Ferdi 5", | 31 | "import.headline" : "Importeer je Franz 4 services", |
32 | "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5", | ||
23 | "import.skip.label" : "Ik wil services handmatig toevoegen", | 33 | "import.skip.label" : "Ik wil services handmatig toevoegen", |
24 | "import.submit.label" : "Importeer services", | 34 | "import.submit.label" : "Importeer services", |
25 | "infobar.buttonChangelog" : "Wat is er nieuw?", | 35 | "infobar.buttonChangelog" : "Wat is er nieuw?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Services opnieuw laden", | 37 | "infobar.buttonReloadServices" : "Services opnieuw laden", |
28 | "infobar.requiredRequestsFailed" : "Kan de services en gebruikersinformatie niet laden", | 38 | "infobar.requiredRequestsFailed" : "Kan de services en gebruikersinformatie niet laden", |
29 | "infobar.servicesUpdated" : "Je services zijn bijgewerkt.", | 39 | "infobar.servicesUpdated" : "Je services zijn bijgewerkt.", |
30 | "infobar.updateAvailable" : "Er is een nieuwe update voor Ferdi beschikbaar.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Er is een nieuwe update voor Franz beschikbaar.", | ||
31 | "invite.email.label" : "E-mailadres", | 42 | "invite.email.label" : "E-mailadres", |
32 | "invite.headline.friends" : "Nodig 3 van je vrienden of collega's uit", | 43 | "invite.headline.friends" : "Nodig 3 van je vrienden of collega's uit", |
33 | "invite.name.label" : "Naam", | 44 | "invite.name.label" : "Naam", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "De sessie is verlopen, log opnieuw in alsjeblieft.", | 54 | "login.serverLogout" : "De sessie is verlopen, log opnieuw in alsjeblieft.", |
44 | "login.submit.label" : "Inloggen", | 55 | "login.submit.label" : "Inloggen", |
45 | "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", | 56 | "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Over Franz", | 59 | "menu.app.about" : "Over Franz", |
47 | "menu.app.announcement" : "Wat is er nieuw?", | 60 | "menu.app.announcement" : "Wat is er nieuw?", |
48 | "menu.app.checkForUpdates" : "Controleer op updates", | 61 | "menu.app.checkForUpdates" : "Controleer op updates", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Bestand", | 81 | "menu.file" : "Bestand", |
69 | "menu.help" : "Help", | 82 | "menu.help" : "Help", |
70 | "menu.help.changelog" : "Logboek", | 83 | "menu.help.changelog" : "Logboek", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Meer Weten", | 87 | "menu.help.learnMore" : "Meer Weten", |
72 | "menu.help.privacy" : "Privacyverklaring", | 88 | "menu.help.privacy" : "Privacyverklaring", |
73 | "menu.help.support" : "Ondersteuning", | 89 | "menu.help.support" : "Ondersteuning", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Vorige dienst activeren", | 92 | "menu.services.activatePreviousService" : "Vorige dienst activeren", |
77 | "menu.services.addNewService" : "Nieuwe service toevoegen...", | 93 | "menu.services.addNewService" : "Nieuwe service toevoegen...", |
78 | "menu.services.setNextServiceActive" : "Volgende dienst activeren", | 94 | "menu.services.setNextServiceActive" : "Volgende dienst activeren", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Weergave", | 96 | "menu.view" : "Weergave", |
80 | "menu.view.enterFullScreen" : "Volledig scherm openen", | 97 | "menu.view.enterFullScreen" : "Volledig scherm openen", |
81 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", | 98 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Ontwikkelaarstools Aan\/Uit", | 102 | "menu.view.toggleDevTools" : "Ontwikkelaarstools Aan\/Uit", |
86 | "menu.view.toggleFullScreen" : "Volledig Scherm Aan\/Uit", | 103 | "menu.view.toggleFullScreen" : "Volledig Scherm Aan\/Uit", |
87 | "menu.view.toggleServiceDevTools" : "Service Ontwikkelaarstools Aan\/Uit", | 104 | "menu.view.toggleServiceDevTools" : "Service Ontwikkelaarstools Aan\/Uit", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Inzoomen", | 106 | "menu.view.zoomIn" : "Inzoomen", |
89 | "menu.view.zoomOut" : "Uitzoomen", | 107 | "menu.view.zoomOut" : "Uitzoomen", |
90 | "menu.window" : "Venster", | 108 | "menu.window" : "Venster", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Verzenden", | 121 | "password.submit.label" : "Verzenden", |
104 | "password.successInfo" : "Controleer alsjeblieft je e-mail", | 122 | "password.successInfo" : "Controleer alsjeblieft je e-mail", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
106 | "pricing.headline" : "Steun Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Ferdi niet ondersteunen.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Ik wil de ontwikkeling van Ferdi ondersteunen", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Selecteer je ondersteuningsplan", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "{naam} herladen", | 151 | "service.crashHandler.action" : "{naam} herladen", |
111 | "service.crashHandler.autoReload" : "Ga proberen om {name} te herstellen over {seconds} seconden", | 152 | "service.crashHandler.autoReload" : "Ga proberen om {name} te herstellen over {seconds} seconden", |
112 | "service.crashHandler.headline" : "Oh nee!", | 153 | "service.crashHandler.headline" : "Oh nee!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh nee!", | 159 | "service.errorHandler.headline" : "Oh nee!", |
119 | "service.errorHandler.message" : "Fout", | 160 | "service.errorHandler.message" : "Fout", |
120 | "service.errorHandler.text" : "{name} kon niet geladen worden.", | 161 | "service.errorHandler.text" : "{name} kon niet geladen worden.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Aan het laden", | 167 | "service.webviewLoader.loading" : "Aan het laden", |
122 | "services.getStarted" : "Beginnen", | 168 | "services.getStarted" : "Beginnen", |
123 | "services.welcome" : "Welkom bij Franz", | 169 | "services.welcome" : "Welkom bij Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Wijzig wachtwoord", | 181 | "settings.account.headlinePassword" : "Wijzig wachtwoord", |
136 | "settings.account.headlineProfile" : "Profiel bijwerken", | 182 | "settings.account.headlineProfile" : "Profiel bijwerken", |
137 | "settings.account.headlineSubscription" : "Je abonnement", | 183 | "settings.account.headlineSubscription" : "Je abonnement", |
138 | "settings.account.headlineUpgrade" : "Upgrade je account & ondersteun Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Download", | 186 | "settings.account.invoiceDownload" : "Download", |
140 | "settings.account.manageSubscription.label" : "Beheer je abonnement", | 187 | "settings.account.manageSubscription.label" : "Beheer je abonnement", |
141 | "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen", | 188 | "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Probeer opnieuw", | 192 | "settings.account.tryReloadServices" : "Probeer opnieuw", |
143 | "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw", | 193 | "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Kon gebruikersinformatie niet laden", | 195 | "settings.account.userInfoRequestFailed" : "Kon gebruikersinformatie niet laden", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Cache wissen", | 197 | "settings.app.buttonClearAllCache" : "Cache wissen", |
146 | "settings.app.buttonInstallUpdate" : "Herstart & installeer update", | 198 | "settings.app.buttonInstallUpdate" : "Herstart & installeer update", |
147 | "settings.app.buttonSearchForUpdate" : "Controleer op updates", | 199 | "settings.app.buttonSearchForUpdate" : "Controleer op updates", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Word lid van de Dark Side", | 205 | "settings.app.form.darkMode" : "Word lid van de Dark Side", |
154 | "settings.app.form.enableGPUAcceleration" : "GPU Acceleratie Activeren", | 206 | "settings.app.form.enableGPUAcceleration" : "GPU Acceleratie Activeren", |
155 | "settings.app.form.enableSpellchecking" : "Spellingcontrole inschakelen", | 207 | "settings.app.form.enableSpellchecking" : "Spellingcontrole inschakelen", |
156 | "settings.app.form.enableSystemTray" : "Toon Ferdi in de systeembalk", | 208 | "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Taal", | 210 | "settings.app.form.language" : "Taal", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimaliseer Ferdi naar de systeembalk", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimaliseer Ferdi naar de systeembalk", |
159 | "settings.app.form.runInBackground" : "Houd Ferdi op de achtergrond wanneer het venster gesloten wordt", | 212 | "settings.app.form.runInBackground" : "Houd Ferdi op de achtergrond wanneer het venster gesloten wordt", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Jouw services", | 235 | "settings.navigation.yourServices" : "Jouw services", |
183 | "settings.navigation.yourWorkspaces" : "Jouw werkruimtes", | 236 | "settings.navigation.yourWorkspaces" : "Jouw werkruimtes", |
184 | "settings.recipes.all" : "Alle diensten", | 237 | "settings.recipes.all" : "Alle diensten", |
185 | "settings.recipes.dev" : "Ontwikkeling", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Beschikbare services", | 245 | "settings.recipes.headline" : "Beschikbare services", |
187 | "settings.recipes.missingService" : "Mist er een service?", | 246 | "settings.recipes.missingService" : "Mist er een service?", |
188 | "settings.recipes.mostPopular" : "Meest populair", | 247 | "settings.recipes.mostPopular" : "Meest populair", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Werkruimtelade openen", | 333 | "sidebar.openWorkspaceDrawer" : "Werkruimtelade openen", |
275 | "sidebar.settings" : "Instellingen", | 334 | "sidebar.settings" : "Instellingen", |
276 | "sidebar.unmuteApp" : "Berichten & geluid inschakelen", | 335 | "sidebar.unmuteApp" : "Berichten & geluid inschakelen", |
277 | "signup.company.label" : "Bedrijf", | ||
278 | "signup.email.label" : "E-mailadres", | 336 | "signup.email.label" : "E-mailadres", |
279 | "signup.emailDuplicate" : "Er bestaat al een gebruiker met dat e-mailadres", | 337 | "signup.emailDuplicate" : "Er bestaat al een gebruiker met dat e-mailadres", |
280 | "signup.firstname.label" : "Voornaam", | 338 | "signup.firstname.label" : "Voornaam", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "gratis", | 358 | "subscription.type.free" : "gratis", |
301 | "subscription.type.month" : "maand", | 359 | "subscription.type.month" : "maand", |
302 | "subscription.type.year" : "jaar", | 360 | "subscription.type.year" : "jaar", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Annuleren", | 367 | "subscriptionPopup.buttonCancel" : "Annuleren", |
304 | "subscriptionPopup.buttonDone" : "Klaar", | 368 | "subscriptionPopup.buttonDone" : "Klaar", |
305 | "tabs.item.deleteService" : "Service verwijderen", | 369 | "tabs.item.deleteService" : "Service verwijderen", |
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json index f42524280..457210523 100644 --- a/src/i18n/locales/nl.json +++ b/src/i18n/locales/nl.json | |||
@@ -1,35 +1,46 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Herladen", | 2 | "app.errorHandler.action" : "Herladen", |
3 | "app.errorHandler.headline" : "Er ging iets mis", | 3 | "app.errorHandler.headline" : "Er is iets mis gegaan", |
4 | "feature.announcements.changelog.headline" : "Wijzigingen in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Wijzigingen in Franz {version}", |
5 | "feature.delayApp.action" : "Sponsor Franz", | 5 | "feature.delayApp.headline" : "Sponsor Franz om wachten over te slaan", |
6 | "feature.delayApp.headline" : "Sponsor Ferdi om wachten over te slaan", | 6 | "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.", |
7 | "feature.delayApp.text" : "Ferdi gaat over {seconds} seconden verder.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Sponsor Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade Account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Verstuur als e-mail", | 13 | "feature.shareFranz.action.email" : "Verstuur als e-mail", |
9 | "feature.shareFranz.action.facebook" : "Deel op Facebook", | 14 | "feature.shareFranz.action.facebook" : "Deel op Facebook", |
10 | "feature.shareFranz.action.twitter" : "Deel op Twitter", | 15 | "feature.shareFranz.action.twitter" : "Deel op Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is leuker samen!", | 16 | "feature.shareFranz.headline" : "Franz is leuker samen!", |
12 | "feature.shareFranz.shareText.email" : "Ik heb {count} diensten toegevoegd aan Franz! Download de gratis app voor Whatsapp, Messenger, Slack, Skype en co op www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Ik heb {count} services toegevoegd aan Franz! Download de gratis app voor Whatsapp, Messenger, Slack, Skype en co op www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Ik heb {count} diensten toegevoegd aan Franz! Download de gratis app voor Whatsapp, Messenger, Slack, Skype en co op www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Ik heb {count} services toegevoegd aan Franz! Download de gratis app voor Whatsapp, Messenger, Slack, Skype en co op www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Vertel je vrienden en collega's hoe geweldig Ferdi is en help ons om bekender te worden", | 19 | "feature.shareFranz.text" : "Vertel je vrienden en collega's hoe geweldig Franz is en help ons om bekender te worden.", |
15 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz-services", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz-services.", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "U bent niet verbonden met het internet.", | 25 | "global.notConnectedToTheInternet" : "U bent niet verbonden met het internet.", |
17 | "global.spellchecker.useDefault" : "Gebruik systeemstandaard ({default})", | 26 | "global.spellchecker.useDefault" : "Gebruik systeemstandaard ({default})", |
18 | "global.spellchecking.autodetect" : "Taal automatisch herkennen", | 27 | "global.spellchecking.autodetect" : "Taal automatisch herkennen", |
19 | "global.spellchecking.autodetect.short" : "Automatisch", | 28 | "global.spellchecking.autodetect.short" : "Automatisch", |
20 | "global.spellchecking.language" : "Spelling checken", | 29 | "global.spellchecking.language" : "Taal voor spellingcontrole", |
21 | "import.headline" : "Importeer uw Ferdi 4-services", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Services die nog niet ondersteund worden in Ferdi 5", | 31 | "import.headline" : "Importeer uw Franz 4-services", |
23 | "import.skip.label" : "Ik wil services handmatig toevoegen", | 32 | "import.notSupportedHeadline" : "Services die (nog) niet ondersteund worden in Franz 5", |
33 | "import.skip.label" : "Ik wil diensten handmatig toevoegen", | ||
24 | "import.submit.label" : "Importeer services", | 34 | "import.submit.label" : "Importeer services", |
25 | "infobar.buttonChangelog" : "Wat is er nieuw?", | 35 | "infobar.buttonChangelog" : "Wat is er nieuw?", |
26 | "infobar.buttonInstallUpdate" : "Opnieuw opstarten & update installeren", | 36 | "infobar.buttonInstallUpdate" : "Opnieuw opstarten & update installeren", |
27 | "infobar.buttonReloadServices" : "Services opnieuw laden", | 37 | "infobar.buttonReloadServices" : "Services opnieuw laden", |
28 | "infobar.requiredRequestsFailed" : "Kan de services en gebruikersinformatie niet laden", | 38 | "infobar.requiredRequestsFailed" : "Kan de services en gebruikersinformatie niet laden", |
29 | "infobar.servicesUpdated" : "Je services zijn bijgewerkt.", | 39 | "infobar.servicesUpdated" : "Je services zijn bijgewerkt.", |
30 | "infobar.updateAvailable" : "Er is een nieuwe update voor Ferdi beschikbaar.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Een nieuwe update voor Franz is beschikbaar.", | ||
31 | "invite.email.label" : "E-mailadres", | 42 | "invite.email.label" : "E-mailadres", |
32 | "invite.headline.friends" : "Nodig 3 van je vrienden of collega's uit", | 43 | "invite.headline.friends" : "Nodig 3 vrienden of collega's uit", |
33 | "invite.name.label" : "Naam", | 44 | "invite.name.label" : "Naam", |
34 | "invite.skip.label" : "Ik wil dit later doen", | 45 | "invite.skip.label" : "Ik wil dit later doen", |
35 | "invite.submit.label" : "Uitnodigingen verzenden", | 46 | "invite.submit.label" : "Uitnodigingen verzenden", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "De sessie is verlopen, log alsjeblieft opnieuw in.", | 54 | "login.serverLogout" : "De sessie is verlopen, log alsjeblieft opnieuw in.", |
44 | "login.submit.label" : "Inloggen", | 55 | "login.submit.label" : "Inloggen", |
45 | "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", | 56 | "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Over Franz", | 59 | "menu.app.about" : "Over Franz", |
47 | "menu.app.announcement" : "Wat is nieuw?", | 60 | "menu.app.announcement" : "Wat is nieuw?", |
48 | "menu.app.checkForUpdates" : "Controleer op updates", | 61 | "menu.app.checkForUpdates" : "Controleer op updates", |
@@ -62,20 +75,24 @@ | |||
62 | "menu.edit.selectAll" : "Selecteer alles", | 75 | "menu.edit.selectAll" : "Selecteer alles", |
63 | "menu.edit.speech" : "Spraak", | 76 | "menu.edit.speech" : "Spraak", |
64 | "menu.edit.startDictation" : "Beginnen met dicteren", | 77 | "menu.edit.startDictation" : "Beginnen met dicteren", |
65 | "menu.edit.startSpeaking" : "Beginnen met praten", | 78 | "menu.edit.startSpeaking" : "Begin met spreken", |
66 | "menu.edit.stopSpeaking" : "Stoppen met spreken", | 79 | "menu.edit.stopSpeaking" : "Stop met spreken", |
67 | "menu.edit.undo" : "Ongedaan maken", | 80 | "menu.edit.undo" : "Ongedaan maken", |
68 | "menu.file" : "Bestand", | 81 | "menu.file" : "Bestand", |
69 | "menu.help" : "Hulp", | 82 | "menu.help" : "Hulp", |
70 | "menu.help.changelog" : "Wijzigingenlogboek", | 83 | "menu.help.changelog" : "Wijzigingenlogboek", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Meer informatie", | 87 | "menu.help.learnMore" : "Meer informatie", |
72 | "menu.help.privacy" : "Privacy Voorwaarden", | 88 | "menu.help.privacy" : "Privacyvoorwaarden", |
73 | "menu.help.support" : "Ondersteuning", | 89 | "menu.help.support" : "Ondersteuning", |
74 | "menu.help.tos" : "Servicevoorwaarden", | 90 | "menu.help.tos" : "Servicevoorwaarden", |
75 | "menu.services" : "Diensten", | 91 | "menu.services" : "Services", |
76 | "menu.services.activatePreviousService" : "Activeer vorige dienst", | 92 | "menu.services.activatePreviousService" : "Activeer vorige service", |
77 | "menu.services.addNewService" : "Nieuwe dienst toevoegen", | 93 | "menu.services.addNewService" : "Nieuwe service toevoegen...", |
78 | "menu.services.setNextServiceActive" : "Activeer volgende dienst", | 94 | "menu.services.setNextServiceActive" : "Activeer volgende service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Weergave", | 96 | "menu.view" : "Weergave", |
80 | "menu.view.enterFullScreen" : "Gebruik volledig scherm", | 97 | "menu.view.enterFullScreen" : "Gebruik volledig scherm", |
81 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", | 98 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Ontwikkelaarstools aan\/uit", | 102 | "menu.view.toggleDevTools" : "Ontwikkelaarstools aan\/uit", |
86 | "menu.view.toggleFullScreen" : "Volledig scherm aan\/uit", | 103 | "menu.view.toggleFullScreen" : "Volledig scherm aan\/uit", |
87 | "menu.view.toggleServiceDevTools" : "Service ontwikkelaarstools aan\/uit", | 104 | "menu.view.toggleServiceDevTools" : "Service ontwikkelaarstools aan\/uit", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Inzoomen", | 106 | "menu.view.zoomIn" : "Inzoomen", |
89 | "menu.view.zoomOut" : "Uitzoomen", | 107 | "menu.view.zoomOut" : "Uitzoomen", |
90 | "menu.window" : "Venster", | 108 | "menu.window" : "Venster", |
@@ -101,14 +119,37 @@ | |||
101 | "password.link.signup" : "Maak een gratis account", | 119 | "password.link.signup" : "Maak een gratis account", |
102 | "password.noUser" : "Geen gebruiker bekend met dat e-mailadres", | 120 | "password.noUser" : "Geen gebruiker bekend met dat e-mailadres", |
103 | "password.submit.label" : "Verzenden", | 121 | "password.submit.label" : "Verzenden", |
104 | "password.successInfo" : "Controleer alsjeblieft je e-mail", | 122 | "password.successInfo" : "Controleer je e-mail", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade Account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade Account", |
106 | "pricing.headline" : "Steun Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Ferdi niet ondersteunen.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Ik wil de ontwikkeling van Ferdi steunen", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Selecteer je ondersteuningsplan", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Werkruimtes", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Laad {name} opnieuw", | 151 | "service.crashHandler.action" : "Laad {name} opnieuw", |
111 | "service.crashHandler.autoReload" : "Ga proberen om {name} te herstellen over {seconds} seconden", | 152 | "service.crashHandler.autoReload" : "Bezig om {name} te herstellen over {seconds} seconden", |
112 | "service.crashHandler.headline" : "Oh nee!", | 153 | "service.crashHandler.headline" : "Oh nee!", |
113 | "service.crashHandler.text" : "{name} heeft een fout veroorzaakt.", | 154 | "service.crashHandler.text" : "{name} heeft een fout veroorzaakt.", |
114 | "service.disabledHandler.action" : "Activeer {name}", | 155 | "service.disabledHandler.action" : "Activeer {name}", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh nee!", | 159 | "service.errorHandler.headline" : "Oh nee!", |
119 | "service.errorHandler.message" : "Fout", | 160 | "service.errorHandler.message" : "Fout", |
120 | "service.errorHandler.text" : "{name} kon niet geladen worden.", | 161 | "service.errorHandler.text" : "{name} kon niet geladen worden.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Aan het laden", | 167 | "service.webviewLoader.loading" : "Aan het laden", |
122 | "services.getStarted" : "Begin", | 168 | "services.getStarted" : "Begin", |
123 | "services.welcome" : "Welkom bij Franz", | 169 | "services.welcome" : "Welkom bij Franz", |
@@ -126,8 +172,8 @@ | |||
126 | "settings.account.accountType.premium" : "Premium Supporter Account", | 172 | "settings.account.accountType.premium" : "Premium Supporter Account", |
127 | "settings.account.buttonSave" : "Update profiel", | 173 | "settings.account.buttonSave" : "Update profiel", |
128 | "settings.account.deleteAccount" : "Verwijder account", | 174 | "settings.account.deleteAccount" : "Verwijder account", |
129 | "settings.account.deleteEmailSent" : "Je hebt een e-mail ontvangen met een link om de aanvraag tot verwijderen van het account te bevestigen. Je accountgegevens en -data kunnen niet worden teruggehaald!", | 175 | "settings.account.deleteEmailSent" : "Je hebt een e-mail ontvangen met een link om het verwijderen van je account te bevestigen. Je accountgegevens en -data kunnen na verwijderen niet meer worden teruggehaald!", |
130 | "settings.account.deleteInfo" : "Wanneer je je Franz-account niet langer wilt gebruiken, kan je je account en alle gerelateerde data hier verwijderen.", | 176 | "settings.account.deleteInfo" : "Wanneer je je Franz-account niet langer wilt gebruiken, kun je je account en alle gerelateerde data verwijderen.", |
131 | "settings.account.headline" : "Account", | 177 | "settings.account.headline" : "Account", |
132 | "settings.account.headlineAccount" : "Accountinformatie", | 178 | "settings.account.headlineAccount" : "Accountinformatie", |
133 | "settings.account.headlineDangerZone" : "Gevarenzone", | 179 | "settings.account.headlineDangerZone" : "Gevarenzone", |
@@ -135,28 +181,35 @@ | |||
135 | "settings.account.headlinePassword" : "Wijzig wachtwoord", | 181 | "settings.account.headlinePassword" : "Wijzig wachtwoord", |
136 | "settings.account.headlineProfile" : "Profiel bijwerken", | 182 | "settings.account.headlineProfile" : "Profiel bijwerken", |
137 | "settings.account.headlineSubscription" : "Je abonnement", | 183 | "settings.account.headlineSubscription" : "Je abonnement", |
138 | "settings.account.headlineUpgrade" : "Upgrade je account & steun Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Download", | 186 | "settings.account.invoiceDownload" : "Download", |
140 | "settings.account.manageSubscription.label" : "Beheer je abonnement", | 187 | "settings.account.manageSubscription.label" : "Beheer je abonnement", |
141 | "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen", | 188 | "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Probeer opnieuw", | 192 | "settings.account.tryReloadServices" : "Probeer opnieuw", |
143 | "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw", | 193 | "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Kon gebruikersinformatie niet laden", | 195 | "settings.account.userInfoRequestFailed" : "Kon gebruikersinformatie niet laden", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Cache legen", | 197 | "settings.app.buttonClearAllCache" : "Cache legen", |
146 | "settings.app.buttonInstallUpdate" : "Herstart & installeer update", | 198 | "settings.app.buttonInstallUpdate" : "Opnieuw opstarten en updates installeren", |
147 | "settings.app.buttonSearchForUpdate" : "Controleer op updates", | 199 | "settings.app.buttonSearchForUpdate" : "Controleer op updates", |
148 | "settings.app.cacheInfo" : "De Franz-cache gebruikt op dit moment {size} schijfruimte.", | 200 | "settings.app.cacheInfo" : "Franz gebruikt op dit moment {size} schijfruimte aan tijdelijke bestanden.", |
149 | "settings.app.currentVersion" : "Huidige versie:", | 201 | "settings.app.currentVersion" : "Huidige versie:", |
150 | "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", | 202 | "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", |
151 | "settings.app.form.autoLaunchOnStart" : "Open Ferdi bij opstarten", | 203 | "settings.app.form.autoLaunchOnStart" : "Open Ferdi bij opstarten", |
152 | "settings.app.form.beta" : "Inclusief bètaversies", | 204 | "settings.app.form.beta" : "Inclusief bètaversies", |
153 | "settings.app.form.darkMode" : "Stap over naar de donkere kant", | 205 | "settings.app.form.darkMode" : "Stap over naar de donkere kant", |
154 | "settings.app.form.enableGPUAcceleration" : "Schakel videokaart acceleratie in ", | 206 | "settings.app.form.enableGPUAcceleration" : "Schakel videokaart-acceleratie in ", |
155 | "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan", | 207 | "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan", |
156 | "settings.app.form.enableSystemTray" : "Toon Ferdi in de systeembalk", | 208 | "settings.app.form.enableSystemTray" : "Pictogram voor Franz in systeemvak tonen", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Taal", | 210 | "settings.app.form.language" : "Taal", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimaliseer Ferdi naar de systeembalk", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimaliseer Franz naar systeemvak", |
159 | "settings.app.form.runInBackground" : "Houd Ferdi op de achtergrond wanneer het venster gesloten wordt", | 212 | "settings.app.form.runInBackground" : "Houd Franz open op de achtergrond wanneer het venster gesloten wordt", |
160 | "settings.app.form.showDisabledServices" : "Toon uitgeschakelde services", | 213 | "settings.app.form.showDisabledServices" : "Toon uitgeschakelde services", |
161 | "settings.app.form.showMessagesBadgesWhenMuted" : "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld", | 214 | "settings.app.form.showMessagesBadgesWhenMuted" : "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld", |
162 | "settings.app.headline" : "Instellingen", | 215 | "settings.app.headline" : "Instellingen", |
@@ -165,10 +218,10 @@ | |||
165 | "settings.app.headlineGeneral" : "Algemeen", | 218 | "settings.app.headlineGeneral" : "Algemeen", |
166 | "settings.app.headlineLanguage" : "Taal", | 219 | "settings.app.headlineLanguage" : "Taal", |
167 | "settings.app.headlineUpdates" : "Updates", | 220 | "settings.app.headlineUpdates" : "Updates", |
168 | "settings.app.languageDisclaimer" : "Officiële vertalingen zijn in het Engels en Duits. Alle andere talen zijn beheerd door de community.", | 221 | "settings.app.languageDisclaimer" : "Franz spreekt officieel Engels en Duits. Alle andere talen worden beheerd door de community.", |
169 | "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig", | 222 | "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig", |
170 | "settings.app.subheadlineCache" : "Cache", | 223 | "settings.app.subheadlineCache" : "Cache", |
171 | "settings.app.translationHelp" : "Help ons om Ferdi te vertalen naar uw taal.", | 224 | "settings.app.translationHelp" : "Help ons om Franz uw taal te laten spreken.", |
172 | "settings.app.updateStatusAvailable" : "Update beschikbaar, downloaden...", | 225 | "settings.app.updateStatusAvailable" : "Update beschikbaar, downloaden...", |
173 | "settings.app.updateStatusSearching" : "Zoekt naar updates", | 226 | "settings.app.updateStatusSearching" : "Zoekt naar updates", |
174 | "settings.app.updateStatusUpToDate" : "Je gebruikt de laatste versie van Franz", | 227 | "settings.app.updateStatusUpToDate" : "Je gebruikt de laatste versie van Franz", |
@@ -182,9 +235,15 @@ | |||
182 | "settings.navigation.yourServices" : "Jouw services", | 235 | "settings.navigation.yourServices" : "Jouw services", |
183 | "settings.navigation.yourWorkspaces" : "Jouw werkruimtes", | 236 | "settings.navigation.yourWorkspaces" : "Jouw werkruimtes", |
184 | "settings.recipes.all" : "Alle services", | 237 | "settings.recipes.all" : "Alle services", |
185 | "settings.recipes.dev" : "Ontwikkeling", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Beschikbare services", | 245 | "settings.recipes.headline" : "Beschikbare services", |
187 | "settings.recipes.missingService" : "Mist er een dienst?", | 246 | "settings.recipes.missingService" : "Mis je een service?", |
188 | "settings.recipes.mostPopular" : "Meest populair", | 247 | "settings.recipes.mostPopular" : "Meest populair", |
189 | "settings.recipes.nothingFound" : "Sorry, geen service gevonden met deze zoekterm.", | 248 | "settings.recipes.nothingFound" : "Sorry, geen service gevonden met deze zoekterm.", |
190 | "settings.recipes.servicesSuccessfulAddedInfo" : "Service succesvol toegevoegd", | 249 | "settings.recipes.servicesSuccessfulAddedInfo" : "Service succesvol toegevoegd", |
@@ -213,7 +272,7 @@ | |||
213 | "settings.service.form.iconUpload" : "Sleep en drop je afbeelding, of klik hier", | 272 | "settings.service.form.iconUpload" : "Sleep en drop je afbeelding, of klik hier", |
214 | "settings.service.form.indirectMessageInfo" : "Je ontvangt meldingen van alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...", | 273 | "settings.service.form.indirectMessageInfo" : "Je ontvangt meldingen van alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...", |
215 | "settings.service.form.indirectMessages" : "Toon berichtenbadge voor alle nieuwe berichten", | 274 | "settings.service.form.indirectMessages" : "Toon berichtenbadge voor alle nieuwe berichten", |
216 | "settings.service.form.isMutedInfo" : "Indien uitgeschakeld zullen alle meldinggeluiden en afgespeelde audio uitgeschakeld zijn", | 275 | "settings.service.form.isMutedInfo" : "Indien uitgeschakeld, worden meldingen en audio niet afgespeeld", |
217 | "settings.service.form.name" : "Naam", | 276 | "settings.service.form.name" : "Naam", |
218 | "settings.service.form.proxy.headline" : "HTTP\/HTTPS Proxy instellingen", | 277 | "settings.service.form.proxy.headline" : "HTTP\/HTTPS Proxy instellingen", |
219 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | 278 | "settings.service.form.proxy.host" : "Proxy Host\/IP", |
@@ -233,15 +292,15 @@ | |||
233 | "settings.services.discoverServices" : "Ontdek services", | 292 | "settings.services.discoverServices" : "Ontdek services", |
234 | "settings.services.headline" : "Jouw services", | 293 | "settings.services.headline" : "Jouw services", |
235 | "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.", | 294 | "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.", |
236 | "settings.services.servicesRequestFailed" : "Kan jouw diensten niet laden", | 295 | "settings.services.servicesRequestFailed" : "Kan jouw services niet laden", |
237 | "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld", | 296 | "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld", |
238 | "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld", | 297 | "settings.services.tooltip.isMuted" : "Geluid is uitgeschakeld", |
239 | "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld", | 298 | "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld", |
240 | "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen", | 299 | "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen", |
241 | "settings.team.contentHeadline" : "Ferdi voor groepen", | 300 | "settings.team.contentHeadline" : "Franz voor Teams", |
242 | "settings.team.copy" : "Ferdi voor Teams geeft je de mogelijkheid om collega's uit te nodigen voor je team door hen een e-mail te sturen en hun inschrijvingen te beheren in je accountvoorkeuren. Verspil geen tijd met het instellen van inschrijvingen voor elk teamlid apart, vergeet meerdere facturen en verschillende afrekeningsperiodes - één team regeert alles!", | 301 | "settings.team.copy" : "Franz voor Teams geeft je de mogelijkheid om collega's uit te nodigen voor je team door hen een e-mail te sturen en hun inschrijvingen te beheren in je accountvoorkeuren. Verspil geen tijd met het instellen van inschrijvingen voor elk individueel teamlid, vergeet meerdere facturen en verschillende afrekeningsperiodes - één team om alles te regelen!", |
243 | "settings.team.headline" : "Team", | 302 | "settings.team.headline" : "Team", |
244 | "settings.team.intro" : "Gebruiken jij en je team Franz? Je kunt nu Premium inschrijvingen beheren voor zoveel collega's, vrienden, of familieleden als je wilt, allemaal vanaf één account.", | 303 | "settings.team.intro" : "Gebruiken jij en je team Franz? Je kunt nu Premium inschrijvingen beheren voor zoveel collega's, vrienden, of familieleden als je wilt. En dat alles vanuit één account.", |
245 | "settings.team.manageAction" : "Beheer je Team op meetfranz.com", | 304 | "settings.team.manageAction" : "Beheer je Team op meetfranz.com", |
246 | "settings.team.upgradeAction" : "Jouw Account opwaarderen", | 305 | "settings.team.upgradeAction" : "Jouw Account opwaarderen", |
247 | "settings.user.form.accountType.company" : "Bedrijf", | 306 | "settings.user.form.accountType.company" : "Bedrijf", |
@@ -258,75 +317,66 @@ | |||
258 | "settings.workspace.form.buttonDelete" : "Verwijder werkruimte", | 317 | "settings.workspace.form.buttonDelete" : "Verwijder werkruimte", |
259 | "settings.workspace.form.buttonSave" : "Sla werkruimte op", | 318 | "settings.workspace.form.buttonSave" : "Sla werkruimte op", |
260 | "settings.workspace.form.name" : "Naam", | 319 | "settings.workspace.form.name" : "Naam", |
261 | "settings.workspace.form.servicesInWorkspaceHeadline" : "Diensten in deze werkruimte", | 320 | "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in deze werkruimte", |
262 | "settings.workspace.form.yourWorkspaces" : "Jouw werkruimtes", | 321 | "settings.workspace.form.yourWorkspaces" : "Jouw werkruimtes", |
263 | "settings.workspaces.deletedInfo" : "Werkruimte is verwijderd", | 322 | "settings.workspaces.deletedInfo" : "Werkruimte is verwijderd", |
264 | "settings.workspaces.headline" : "Jouw werkplaatsen", | 323 | "settings.workspaces.headline" : "Jouw werkplaatsen", |
265 | "settings.workspaces.noWorkspacesAdded" : "Je hebt nog geen werkruimtes toegevoegd.", | 324 | "settings.workspaces.noWorkspacesAdded" : "Je hebt nog geen werkruimtes toegevoegd.", |
266 | "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw", | 325 | "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw", |
267 | "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen", | 326 | "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen", |
268 | "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Zie hier Ferdi Werkruimtes", | 327 | "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Zie hier Franz Werkruimtes", |
269 | "settings.workspaces.workspaceFeatureInfo" : "Ferdi werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van diensten aan en schakel gelijk wanneer tussen de verschillende sets.Jij beslist welke diensten je wanneer en waar nodig hebt, enkel zo kunnen wij jou helpen je focus te behouden. Of net makkelijk de switch te maken van werk naar ontspanning.", | 328 | "settings.workspaces.workspaceFeatureInfo" : "Franz werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van services aan en schakel wanneer je wilt tussen de verschillende sets. Jij beslist welke services je wanneer en waar nodig hebt. Zo helpen wij jou je focus te behouden - of net zo gemakkelijk te switchen van werk naar ontspanning.", |
270 | "settings.workspaces.workspacesRequestFailed" : "Kan jouw werkruimtes niet laden", | 329 | "settings.workspaces.workspacesRequestFailed" : "Kan jouw werkruimtes niet laden", |
271 | "sidebar.addNewService" : "Voeg service toe", | 330 | "sidebar.addNewService" : "Voeg service toe", |
272 | "sidebar.closeWorkspaceDrawer" : "Werkruimte pagina sluiten", | 331 | "sidebar.closeWorkspaceDrawer" : "Werkruimte pagina sluiten", |
273 | "sidebar.muteApp" : "Schakel berichten & geluid uit", | 332 | "sidebar.muteApp" : "Berichten & geluid uitschakelen", |
274 | "sidebar.openWorkspaceDrawer" : "Werkruimte pagina openen", | 333 | "sidebar.openWorkspaceDrawer" : "Werkruimte pagina openen", |
275 | "sidebar.settings" : "Instellingen", | 334 | "sidebar.settings" : "Instellingen", |
276 | "sidebar.unmuteApp" : "Berichten & geluid inschakelen", | 335 | "sidebar.unmuteApp" : "Berichten & geluid inschakelen", |
277 | "signup.company.label" : "Bedrijf", | ||
278 | "signup.email.label" : "E-mailadres", | 336 | "signup.email.label" : "E-mailadres", |
279 | "signup.emailDuplicate" : "Er bestaat al een gebruiker met dat e-mailadres", | 337 | "signup.emailDuplicate" : "Er bestaat al een gebruiker met dat e-mailadres", |
280 | "signup.firstname.label" : "Voornaam", | 338 | "signup.firstname.label" : "Voornaam", |
281 | "signup.headline" : "Aanmelden", | 339 | "signup.headline" : "Aanmelden", |
282 | "signup.lastname.label" : "Achternaam", | 340 | "signup.lastname.label" : "Achternaam", |
283 | "signup.legal.info" : "Door een Franz-account aan te maken ga je akkoord met de", | 341 | "signup.legal.info" : "Door een Franz-account aan te maken ga je akkoord met de", |
284 | "signup.legal.privacy" : "Privacy Voorwaarden", | 342 | "signup.legal.privacy" : "Privacyvoorwaarden", |
285 | "signup.legal.terms" : "Gebruiksvoorwaarden", | 343 | "signup.legal.terms" : "Gebruiksvoorwaarden", |
286 | "signup.link.login" : "Al een account? Log in!", | 344 | "signup.link.login" : "Heb je al een account? Log in!", |
287 | "signup.password.label" : "Wachtwoord", | 345 | "signup.password.label" : "Wachtwoord", |
288 | "signup.submit.label" : "Account aanmaken", | 346 | "signup.submit.label" : "Account aanmaken", |
289 | "subscription.euTaxInfo" : "Bewoners binnen EU: lokale belasting kan van toepassing zijn", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Geen advertenties, nooit!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "komt binnenkort", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "Geen haperingen & pop ups over upgrades", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Proxy understeuning voor diensten", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck", | ||
296 | "subscription.features.workspaces" : "Beheer je diensten in de werkruimtes", | ||
297 | "subscription.includedFeatures" : "Betaald Ferdi Premium Supporter Account bevat", | ||
298 | "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren", | ||
299 | "subscription.submit.label" : "Ik wil de ontwikkeling van Ferdi ondersteunen", | ||
300 | "subscription.type.free" : "gratis", | ||
301 | "subscription.type.month" : "maand", | ||
302 | "subscription.type.year" : "jaar", | ||
303 | "subscriptionPopup.buttonCancel" : "Annuleer", | 353 | "subscriptionPopup.buttonCancel" : "Annuleer", |
304 | "subscriptionPopup.buttonDone" : "Klaar", | 354 | "subscriptionPopup.buttonDone" : "Klaar", |
305 | "tabs.item.deleteService" : "Verwijder service", | 355 | "tabs.item.deleteService" : "Verwijder service", |
306 | "tabs.item.disableAudio" : "Schakel audio uit", | 356 | "tabs.item.disableAudio" : "Audio uitschakelen", |
307 | "tabs.item.disableNotifications" : "Schakel meldingen uit", | 357 | "tabs.item.disableNotifications" : "Meldingen uitschakelen", |
308 | "tabs.item.disableService" : "Schakel service uit", | 358 | "tabs.item.disableService" : "Service uitschakelen", |
309 | "tabs.item.edit" : "Bewerken", | 359 | "tabs.item.edit" : "Bewerken", |
310 | "tabs.item.enableAudio" : "Audio inschakelen", | 360 | "tabs.item.enableAudio" : "Audio inschakelen", |
311 | "tabs.item.enableNotification" : "Meldingen inschakelen", | 361 | "tabs.item.enableNotification" : "Meldingen inschakelen", |
312 | "tabs.item.enableService" : "Service inschakelen", | 362 | "tabs.item.enableService" : "Service inschakelen", |
313 | "tabs.item.reload" : "Herladen", | 363 | "tabs.item.reload" : "Herladen", |
314 | "validation.email" : "{field} is niet geldig", | 364 | "validation.email" : "{field} is niet geldig", |
315 | "validation.minLength" : "{field} moet minimaal {length} karakters lang zijn", | 365 | "validation.minLength" : "{field} dient minimaal {length} karakters lang te zijn", |
316 | "validation.oneRequired" : "Er is op zijn minst één vereist", | 366 | "validation.oneRequired" : "Minstens één vereist", |
317 | "validation.required" : "{field} is vereist", | 367 | "validation.required" : "{field} is vereist", |
318 | "validation.url" : "{field} is niet een geldige URL", | 368 | "validation.url" : "{field} is geen geldige URL", |
319 | "welcome.loginButton" : "Log in op je account", | 369 | "welcome.loginButton" : "Log in op je account", |
320 | "welcome.signupButton" : "Maak een gratis account", | 370 | "welcome.signupButton" : "Maak een gratis account", |
321 | "workspaceDrawer.addNewWorkspaceLabel" : "Voeg een nieuwe werkruimte toe", | 371 | "workspaceDrawer.addNewWorkspaceLabel" : "Voeg een nieuwe werkruimte toe", |
322 | "workspaceDrawer.allServices" : "Alle diensten", | 372 | "workspaceDrawer.allServices" : "Alle services", |
323 | "workspaceDrawer.headline" : "Werkruimtes", | 373 | "workspaceDrawer.headline" : "Werkruimtes", |
324 | "workspaceDrawer.item.contextMenuEdit" : "bewerken", | 374 | "workspaceDrawer.item.contextMenuEdit" : "bewerken", |
325 | "workspaceDrawer.item.noServicesAddedYet" : "Nog geen diensten toegevoegd", | 375 | "workspaceDrawer.item.noServicesAddedYet" : "Nog geen services toegevoegd", |
326 | "workspaceDrawer.premiumCtaButtonLabel" : "Maak je eerste werkruimte", | 376 | "workspaceDrawer.premiumCtaButtonLabel" : "Maak je eerste werkruimte", |
327 | "workspaceDrawer.proFeatureBadge" : "Premium feature", | 377 | "workspaceDrawer.proFeatureBadge" : "Premium feature", |
328 | "workspaceDrawer.reactivatePremiumAccountLabel" : "Heractiveer premium account", | 378 | "workspaceDrawer.reactivatePremiumAccountLabel" : "Premium account heractiveren", |
329 | "workspaceDrawer.workspaceFeatureInfo" : "<p>Ferdi werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van diensten aan en schakel gelijk wanneer tussen de verschillende sets.<\/p><p>Jij beslist welke diensten je wanneer en waar nodig hebt, enkel zo kunnen wij jou helpen je focus te behouden. Of net makkelijk de switch te maken van werk naar ontspanning.<\/p>", | 379 | "workspaceDrawer.workspaceFeatureInfo" : "Franz werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van services aan en schakel wanneer je wilt tussen de verschillende sets. Jij beslist welke services je wanneer en waar nodig hebt. Zo helpen wij jou je focus te behouden - of net zo gemakkelijk te switchen van werk naar ontspanning.", |
330 | "workspaceDrawer.workspacesSettingsTooltip" : "Pas werkruimte instellingen aan", | 380 | "workspaceDrawer.workspacesSettingsTooltip" : "Werkruimte instellingen aanpassen", |
331 | "workspaces.switchingIndicator.switchingTo" : "Overschakelen naar" | 381 | "workspaces.switchingIndicator.switchingTo" : "Overschakelen naar" |
332 | } | 382 | } |
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index f94c6e10c..57d25c1f5 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json | |||
@@ -2,24 +2,34 @@ | |||
2 | "app.errorHandler.action" : "Odśwież", | 2 | "app.errorHandler.action" : "Odśwież", |
3 | "app.errorHandler.headline" : "Coś poszło nie tak.", | 3 | "app.errorHandler.headline" : "Coś poszło nie tak.", |
4 | "feature.announcements.changelog.headline" : "Zmiany we Franzie {version}", | 4 | "feature.announcements.changelog.headline" : "Zmiany we Franzie {version}", |
5 | "feature.delayApp.action" : "Uzyskaj licencję Ferdi Supporter", | 5 | "feature.delayApp.headline" : "Aby nie czekać, kup licencję Franz Supporter", |
6 | "feature.delayApp.headline" : "Aby nie czekać, kup licencję Ferdi Supporter", | 6 | "feature.delayApp.text" : "Franz będzie kontynuował za {seconds} sekund.", |
7 | "feature.delayApp.text" : "Ferdi będzie kontynuował za {seconds} sekund.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Uzyskaj licencjÄ™ Franz Supporter", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Ulepsz swoje konto", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Wyślij jako email", | 13 | "feature.shareFranz.action.email" : "Wyślij jako email", |
9 | "feature.shareFranz.action.facebook" : "Udostępnij na Facebooku", | 14 | "feature.shareFranz.action.facebook" : "Udostępnij na Facebooku", |
10 | "feature.shareFranz.action.twitter" : "Udostępnij na Twitterze", | 15 | "feature.shareFranz.action.twitter" : "Udostępnij na Twitterze", |
11 | "feature.shareFranz.headline" : "Ferdi jest lepszy, gdy tworzymy go razem!", | 16 | "feature.shareFranz.headline" : "Ferdi jest lepszy, gdy tworzymy go razem!", |
12 | "feature.shareFranz.shareText.email" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikację z WhatsApp, Messenger, Slack, Skype i innymi na www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikację z WhatsApp, Messenger, Slack, Skype i innymi na www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikację z WhatsApp, Messenger, Slack, Skype i innymi na www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikację z WhatsApp, Messenger, Slack, Skype i innymi na www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Powiedz znajomym i kolegom o tym, jak odlotowy jest Ferdi i pomóż nam go spopularyzować.", | 19 | "feature.shareFranz.text" : "Powiedz znajomym i kolegom o tym, jak odlotowy jest Franz i pomóż nam go spopularyzować.", |
15 | "global.api.unhealthy" : "Nie można połączyć się z usługami Ferdi online", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Nie można połączyć się z usługami Franz online", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.", | 25 | "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.", |
17 | "global.spellchecker.useDefault" : "Użyj domyślnego dla systemu ({default})", | 26 | "global.spellchecker.useDefault" : "Użyj domyślnego dla systemu ({default})", |
18 | "global.spellchecking.autodetect" : "Automatycznie wykryj język", | 27 | "global.spellchecking.autodetect" : "Automatycznie wykryj język", |
19 | "global.spellchecking.autodetect.short" : "Automatycznie", | 28 | "global.spellchecking.autodetect.short" : "Automatycznie", |
20 | "global.spellchecking.language" : "Język sprawdzania pisowni", | 29 | "global.spellchecking.language" : "Język sprawdzania pisowni", |
21 | "import.headline" : "Importuj usługi Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Usługi, które nie są jeszcze obsługiwane w Ferdi 5", | 31 | "import.headline" : "Importuj usługi Franz 4", |
32 | "import.notSupportedHeadline" : "Usługi, które nie są jeszcze obsługiwane w Franz 5", | ||
23 | "import.skip.label" : "Chcę dodać usługi samodzielnie", | 33 | "import.skip.label" : "Chcę dodać usługi samodzielnie", |
24 | "import.submit.label" : "Zaimportuj usługi", | 34 | "import.submit.label" : "Zaimportuj usługi", |
25 | "infobar.buttonChangelog" : "Co nowego?", | 35 | "infobar.buttonChangelog" : "Co nowego?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Odśwież usługi", | 37 | "infobar.buttonReloadServices" : "Odśwież usługi", |
28 | "infobar.requiredRequestsFailed" : "Nie można załadować usług i informacji użytkownika", | 38 | "infobar.requiredRequestsFailed" : "Nie można załadować usług i informacji użytkownika", |
29 | "infobar.servicesUpdated" : "Usługi zostały zaktualizowane.", | 39 | "infobar.servicesUpdated" : "Usługi zostały zaktualizowane.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Dostępna jest nowa wersja Franza.", | 41 | "infobar.updateAvailable" : "Dostępna jest nowa wersja Franza.", |
31 | "invite.email.label" : "Adres email", | 42 | "invite.email.label" : "Adres email", |
32 | "invite.headline.friends" : "Zaproś 3 znajomych lub kolegów", | 43 | "invite.headline.friends" : "Zaproś 3 znajomych lub kolegów", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.", | 54 | "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.", |
44 | "login.submit.label" : "Zaloguj siÄ™", | 55 | "login.submit.label" : "Zaloguj siÄ™", |
45 | "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.", | 56 | "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "O Franz", | 59 | "menu.app.about" : "O Franz", |
47 | "menu.app.announcement" : "Co słychać?", | 60 | "menu.app.announcement" : "Co słychać?", |
48 | "menu.app.checkForUpdates" : "Sprawdź aktualizacje", | 61 | "menu.app.checkForUpdates" : "Sprawdź aktualizacje", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Plik", | 81 | "menu.file" : "Plik", |
69 | "menu.help" : "Pomoc", | 82 | "menu.help" : "Pomoc", |
70 | "menu.help.changelog" : "Lista zmian", | 83 | "menu.help.changelog" : "Lista zmian", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Dowiedz się więcej", | 87 | "menu.help.learnMore" : "Dowiedz się więcej", |
72 | "menu.help.privacy" : "Polityka prywatności", | 88 | "menu.help.privacy" : "Polityka prywatności", |
73 | "menu.help.support" : "Wsparcie", | 89 | "menu.help.support" : "Wsparcie", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "WÅ‚Ä…cz poprzedni serwis", | 92 | "menu.services.activatePreviousService" : "WÅ‚Ä…cz poprzedni serwis", |
77 | "menu.services.addNewService" : "Dodaj nową usługę...", | 93 | "menu.services.addNewService" : "Dodaj nową usługę...", |
78 | "menu.services.setNextServiceActive" : "WÅ‚Ä…cz kolejny serwis", | 94 | "menu.services.setNextServiceActive" : "WÅ‚Ä…cz kolejny serwis", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Widok", | 96 | "menu.view" : "Widok", |
80 | "menu.view.enterFullScreen" : "Włącz tryb pełnoekranowy", | 97 | "menu.view.enterFullScreen" : "Włącz tryb pełnoekranowy", |
81 | "menu.view.exitFullScreen" : "Zakończ tryb pełnoekranowy", | 98 | "menu.view.exitFullScreen" : "Zakończ tryb pełnoekranowy", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Pokaż narzędzia developerskie", | 102 | "menu.view.toggleDevTools" : "Pokaż narzędzia developerskie", |
86 | "menu.view.toggleFullScreen" : "Przełącz tryb pełnoekranowy", | 103 | "menu.view.toggleFullScreen" : "Przełącz tryb pełnoekranowy", |
87 | "menu.view.toggleServiceDevTools" : "Włącz narzędzia developerskie usługi", | 104 | "menu.view.toggleServiceDevTools" : "Włącz narzędzia developerskie usługi", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Powiększ", | 106 | "menu.view.zoomIn" : "Powiększ", |
89 | "menu.view.zoomOut" : "Pomniejsz", | 107 | "menu.view.zoomOut" : "Pomniejsz", |
90 | "menu.window" : "Okno", | 108 | "menu.window" : "Okno", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Wyślij", | 121 | "password.submit.label" : "Wyślij", |
104 | "password.successInfo" : "Proszę sprawdzić swój email", | 122 | "password.successInfo" : "Proszę sprawdzić swój email", |
105 | "premiumFeature.button.upgradeAccount" : "Ulepsz swoje konto", | 123 | "premiumFeature.button.upgradeAccount" : "Ulepsz swoje konto", |
106 | "pricing.headline" : "Wspieraj Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Nie chcę wspierać rozwoju aplikacji Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Chcę wspierać rozwój aplikacji Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Wybierz swój plan wsparcia", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Obszary robocze", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Przeładuj {name}", | 151 | "service.crashHandler.action" : "Przeładuj {name}", |
111 | "service.crashHandler.autoReload" : "Próba automatycznego odnowienia {name} za {seconds} sekund\/y", | 152 | "service.crashHandler.autoReload" : "Próba automatycznego odnowienia {name} za {seconds} sekund\/y", |
112 | "service.crashHandler.headline" : "O nie!", | 153 | "service.crashHandler.headline" : "O nie!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "O nie!", | 159 | "service.errorHandler.headline" : "O nie!", |
119 | "service.errorHandler.message" : "BÅ‚Ä…d", | 160 | "service.errorHandler.message" : "BÅ‚Ä…d", |
120 | "service.errorHandler.text" : "Nie udało się załadować {name}.", | 161 | "service.errorHandler.text" : "Nie udało się załadować {name}.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Åadowanie", | 167 | "service.webviewLoader.loading" : "Åadowanie", |
122 | "services.getStarted" : "Zacznij", | 168 | "services.getStarted" : "Zacznij", |
123 | "services.welcome" : "Witaj w programie Franz", | 169 | "services.welcome" : "Witaj w programie Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Zmień hasło", | 181 | "settings.account.headlinePassword" : "Zmień hasło", |
136 | "settings.account.headlineProfile" : "Uaktualnij profil", | 182 | "settings.account.headlineProfile" : "Uaktualnij profil", |
137 | "settings.account.headlineSubscription" : "Twoja subskrypcja", | 183 | "settings.account.headlineSubscription" : "Twoja subskrypcja", |
138 | "settings.account.headlineUpgrade" : "Ulepsz swoje konto i wspieraj aplikacjÄ™ Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Pobierz", | 186 | "settings.account.invoiceDownload" : "Pobierz", |
140 | "settings.account.manageSubscription.label" : "ZarzÄ…dzaj swoimi subskrypcjami", | 187 | "settings.account.manageSubscription.label" : "ZarzÄ…dzaj swoimi subskrypcjami", |
141 | "settings.account.successInfo" : "Twoje zmiany zostały zapisane", | 188 | "settings.account.successInfo" : "Twoje zmiany zostały zapisane", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Spróbuj ponownie", | 192 | "settings.account.tryReloadServices" : "Spróbuj ponownie", |
143 | "settings.account.tryReloadUserInfoRequest" : "Spróbuj ponownie", | 193 | "settings.account.tryReloadUserInfoRequest" : "Spróbuj ponownie", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Nie można wczytać informacji o użytkowniku", | 195 | "settings.account.userInfoRequestFailed" : "Nie można wczytać informacji o użytkowniku", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Wyczyść pamięć podręczną (cache)", | 197 | "settings.app.buttonClearAllCache" : "Wyczyść pamięć podręczną (cache)", |
146 | "settings.app.buttonInstallUpdate" : "Uruchom ponownie i zainstaluj aktualizacjÄ™", | 198 | "settings.app.buttonInstallUpdate" : "Uruchom ponownie i zainstaluj aktualizacjÄ™", |
147 | "settings.app.buttonSearchForUpdate" : "Sprawdź aktualizacje", | 199 | "settings.app.buttonSearchForUpdate" : "Sprawdź aktualizacje", |
@@ -154,6 +206,7 @@ | |||
154 | "settings.app.form.enableGPUAcceleration" : "WÅ‚Ä…cz akceleracjÄ™ GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "WÅ‚Ä…cz akceleracjÄ™ GPU", |
155 | "settings.app.form.enableSpellchecking" : "WÅ‚Ä…cz sprawdzanie pisowni", | 207 | "settings.app.form.enableSpellchecking" : "WÅ‚Ä…cz sprawdzanie pisowni", |
156 | "settings.app.form.enableSystemTray" : "Pokaż Franza w obszarze powiadomień", | 208 | "settings.app.form.enableSystemTray" : "Pokaż Franza w obszarze powiadomień", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Język", | 210 | "settings.app.form.language" : "Język", |
158 | "settings.app.form.minimizeToSystemTray" : "Zminimalizuj aplikacjÄ™ Franz", | 211 | "settings.app.form.minimizeToSystemTray" : "Zminimalizuj aplikacjÄ™ Franz", |
159 | "settings.app.form.runInBackground" : "Zachowaj aplikację Ferdi w tle po zamknięciu okna", | 212 | "settings.app.form.runInBackground" : "Zachowaj aplikację Ferdi w tle po zamknięciu okna", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Twoje usługi", | 235 | "settings.navigation.yourServices" : "Twoje usługi", |
183 | "settings.navigation.yourWorkspaces" : "Twoje obszary robocze", | 236 | "settings.navigation.yourWorkspaces" : "Twoje obszary robocze", |
184 | "settings.recipes.all" : "Wszystkie usługi", | 237 | "settings.recipes.all" : "Wszystkie usługi", |
185 | "settings.recipes.dev" : "Rozwojowe", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Dostępne usługi", | 245 | "settings.recipes.headline" : "Dostępne usługi", |
187 | "settings.recipes.missingService" : "Brak usługi?", | 246 | "settings.recipes.missingService" : "Brak usługi?", |
188 | "settings.recipes.mostPopular" : "Najpopularniejsze", | 247 | "settings.recipes.mostPopular" : "Najpopularniejsze", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Otwórz edycję obszaru roboczego", | 333 | "sidebar.openWorkspaceDrawer" : "Otwórz edycję obszaru roboczego", |
275 | "sidebar.settings" : "Ustawienia", | 334 | "sidebar.settings" : "Ustawienia", |
276 | "sidebar.unmuteApp" : "Włącz powiadomienia i dźwięki", | 335 | "sidebar.unmuteApp" : "Włącz powiadomienia i dźwięki", |
277 | "signup.company.label" : "Firma", | ||
278 | "signup.email.label" : "Adres email", | 336 | "signup.email.label" : "Adres email", |
279 | "signup.emailDuplicate" : "Użytkownik z takim adresem email już istnieje", | 337 | "signup.emailDuplicate" : "Użytkownik z takim adresem email już istnieje", |
280 | "signup.firstname.label" : "ImiÄ™", | 338 | "signup.firstname.label" : "ImiÄ™", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "za darmo", | 358 | "subscription.type.free" : "za darmo", |
301 | "subscription.type.month" : "miesiÄ…c", | 359 | "subscription.type.month" : "miesiÄ…c", |
302 | "subscription.type.year" : "rok", | 360 | "subscription.type.year" : "rok", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Anuluj", | 367 | "subscriptionPopup.buttonCancel" : "Anuluj", |
304 | "subscriptionPopup.buttonDone" : "Zrobione", | 368 | "subscriptionPopup.buttonDone" : "Zrobione", |
305 | "tabs.item.deleteService" : "Usuń usługę", | 369 | "tabs.item.deleteService" : "Usuń usługę", |
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 1a94c9179..f2c139193 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Recarregar", | 2 | "app.errorHandler.action" : "Recarregar", |
3 | "app.errorHandler.headline" : "Opa! Algo deu errado.", | 3 | "app.errorHandler.headline" : "Opa! Algo deu errado.", |
4 | "feature.announcements.changelog.headline" : "Mudanças no Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Mudanças no Franz {version}", |
5 | "feature.delayApp.action" : "Adquira uma licença de suporte Franz", | ||
6 | "feature.delayApp.headline" : "Por favor, adquira uma licença para pular o tempo de espera", | 5 | "feature.delayApp.headline" : "Por favor, adquira uma licença para pular o tempo de espera", |
7 | "feature.delayApp.text" : "Ferdi continuará em {seconds} segundos.", | 6 | "feature.delayApp.text" : "Franz continuará em {seconds} segundos.", |
7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", | ||
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Adquira uma licença de suporte Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Atualizar conta", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Enviar por e-mail", | 13 | "feature.shareFranz.action.email" : "Enviar por e-mail", |
9 | "feature.shareFranz.action.facebook" : "Compartilhar no Facebook", | 14 | "feature.shareFranz.action.facebook" : "Compartilhar no Facebook", |
10 | "feature.shareFranz.action.twitter" : "Compartilhar no Twitter", | 15 | "feature.shareFranz.action.twitter" : "Compartilhar no Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi é melhor em grupo!", | 16 | "feature.shareFranz.headline" : "Ferdi é melhor em grupo!", |
12 | "feature.shareFranz.shareText.email" : "Eu adicionei {count} serviços ao Franz! Adquira o aplicativo gratuito para WhatsApp, Messenger, Slack, Skype e mais em www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Eu adicionei {count} serviços ao Franz! Adquira o aplicativo gratuito para WhatsApp, Messenger, Slack, Skype e mais em www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Eu adicionei uma contagem de serviços para o Franz! Baixe gratuitamente o aplicativo para WhatsApp, Messenger, Slack, Skype e outros em www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Eu adicionei uma contagem de serviços para o Franz! Baixe gratuitamente o aplicativo para WhatsApp, Messenger, Slack, Skype e outros em www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Conte aos seus amigos e colegas o quanto incrÃvel o Ferdi é e nos ajude a espalhar a mensagem. ", | 19 | "feature.shareFranz.text" : "Conte aos seus amigos e colegas o quanto incrÃvel o Franz é e nos ajude a espalhar a mensagem. ", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Não foi possÃvel conectar-se aos serviços on-line do Franz.", | 23 | "global.api.unhealthy" : "Não foi possÃvel conectar-se aos serviços on-line do Franz.", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Você não está conectado à internet", | 25 | "global.notConnectedToTheInternet" : "Você não está conectado à internet", |
17 | "global.spellchecker.useDefault" : "Use o padrão do sistema ({default})", | 26 | "global.spellchecker.useDefault" : "Use o padrão do sistema ({default})", |
18 | "global.spellchecking.autodetect" : "Detectar idioma automaticamente.", | 27 | "global.spellchecking.autodetect" : "Detectar idioma automaticamente.", |
19 | "global.spellchecking.autodetect.short" : "Automático", | 28 | "global.spellchecking.autodetect.short" : "Automático", |
20 | "global.spellchecking.language" : "Idioma para verificação ortográfica", | 29 | "global.spellchecking.language" : "Idioma para verificação ortográfica", |
21 | "import.headline" : "Importe seus serviços do Ferdi 4 ", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Ferdi 5 ", | 31 | "import.headline" : "Importe seus serviços do Franz 4 ", |
32 | "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5 ", | ||
23 | "import.skip.label" : "Quero adicionar serviços manualmente", | 33 | "import.skip.label" : "Quero adicionar serviços manualmente", |
24 | "import.submit.label" : "Importar serviços", | 34 | "import.submit.label" : "Importar serviços", |
25 | "infobar.buttonChangelog" : "O que há de novo?", | 35 | "infobar.buttonChangelog" : "O que há de novo?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Recarregar serviços", | 37 | "infobar.buttonReloadServices" : "Recarregar serviços", |
28 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar os serviços e informações de usuário", | 38 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar os serviços e informações de usuário", |
29 | "infobar.servicesUpdated" : "Seus serviços foram atualizados.", | 39 | "infobar.servicesUpdated" : "Seus serviços foram atualizados.", |
30 | "infobar.updateAvailable" : "Uma nova atualização do Ferdi está disponÃvel.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Uma nova atualização do Franz está disponÃvel.", | ||
31 | "invite.email.label" : "Endereço de E-mail", | 42 | "invite.email.label" : "Endereço de E-mail", |
32 | "invite.headline.friends" : "Convide 3 amigos ou colegas", | 43 | "invite.headline.friends" : "Convide 3 amigos ou colegas", |
33 | "invite.name.label" : "Nome", | 44 | "invite.name.label" : "Nome", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Sua sessão expirou, faça o login novamente.", | 54 | "login.serverLogout" : "Sua sessão expirou, faça o login novamente.", |
44 | "login.submit.label" : "Entrar", | 55 | "login.submit.label" : "Entrar", |
45 | "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.", | 56 | "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Sobre Franz", | 59 | "menu.app.about" : "Sobre Franz", |
47 | "menu.app.announcement" : "Quais as novidades?", | 60 | "menu.app.announcement" : "Quais as novidades?", |
48 | "menu.app.checkForUpdates" : "Verificar se há atualizações", | 61 | "menu.app.checkForUpdates" : "Verificar se há atualizações", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Arquivo", | 81 | "menu.file" : "Arquivo", |
69 | "menu.help" : "Ajuda", | 82 | "menu.help" : "Ajuda", |
70 | "menu.help.changelog" : "Registro de Alterações ", | 83 | "menu.help.changelog" : "Registro de Alterações ", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Saiba Mais ", | 87 | "menu.help.learnMore" : "Saiba Mais ", |
72 | "menu.help.privacy" : "Declaração de Privacidade ", | 88 | "menu.help.privacy" : "Declaração de Privacidade ", |
73 | "menu.help.support" : "Suporte", | 89 | "menu.help.support" : "Suporte", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Pular para serviço anterior", | 92 | "menu.services.activatePreviousService" : "Pular para serviço anterior", |
77 | "menu.services.addNewService" : "Adicionar Novo Serviço", | 93 | "menu.services.addNewService" : "Adicionar Novo Serviço", |
78 | "menu.services.setNextServiceActive" : "Pular para próximo serviço", | 94 | "menu.services.setNextServiceActive" : "Pular para próximo serviço", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Visualizar ", | 96 | "menu.view" : "Visualizar ", |
80 | "menu.view.enterFullScreen" : "Modo Tela Cheia", | 97 | "menu.view.enterFullScreen" : "Modo Tela Cheia", |
81 | "menu.view.exitFullScreen" : "Sair da Tela Cheia", | 98 | "menu.view.exitFullScreen" : "Sair da Tela Cheia", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Ferramentas de Desenvolvedor", | 102 | "menu.view.toggleDevTools" : "Ferramentas de Desenvolvedor", |
86 | "menu.view.toggleFullScreen" : "Modo Tela Cheia", | 103 | "menu.view.toggleFullScreen" : "Modo Tela Cheia", |
87 | "menu.view.toggleServiceDevTools" : "Ferramentas de Serviços de Desenvolvedor", | 104 | "menu.view.toggleServiceDevTools" : "Ferramentas de Serviços de Desenvolvedor", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Ampliar", | 106 | "menu.view.zoomIn" : "Ampliar", |
89 | "menu.view.zoomOut" : "Reduzir", | 107 | "menu.view.zoomOut" : "Reduzir", |
90 | "menu.window" : "Modo Janela", | 108 | "menu.window" : "Modo Janela", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Enviar", | 121 | "password.submit.label" : "Enviar", |
104 | "password.successInfo" : "Por favor, verifique o seu e-mail", | 122 | "password.successInfo" : "Por favor, verifique o seu e-mail", |
105 | "premiumFeature.button.upgradeAccount" : "Atualizar conta", | 123 | "premiumFeature.button.upgradeAccount" : "Atualizar conta", |
106 | "pricing.headline" : "Apoie o Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Eu não quero apoiar o desenvolvimento do Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Eu quero apoiar o desenvolvimento do Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Selecione uma opção de plano", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Recarregar {name}", | 151 | "service.crashHandler.action" : "Recarregar {name}", |
111 | "service.crashHandler.autoReload" : "Tentando reestabelecer {name} automaticamente em {seconds} segundos", | 152 | "service.crashHandler.autoReload" : "Tentando reestabelecer {name} automaticamente em {seconds} segundos", |
112 | "service.crashHandler.headline" : "Ah, não!", | 153 | "service.crashHandler.headline" : "Ah, não!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Ah, não!", | 159 | "service.errorHandler.headline" : "Ah, não!", |
119 | "service.errorHandler.message" : "Erro", | 160 | "service.errorHandler.message" : "Erro", |
120 | "service.errorHandler.text" : "{name} não pôde ser carregado.", | 161 | "service.errorHandler.text" : "{name} não pôde ser carregado.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Carregando", | 167 | "service.webviewLoader.loading" : "Carregando", |
122 | "services.getStarted" : "Iniciar", | 168 | "services.getStarted" : "Iniciar", |
123 | "services.welcome" : "Bem-vindo ao Franz!", | 169 | "services.welcome" : "Bem-vindo ao Franz!", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Mudar senha", | 181 | "settings.account.headlinePassword" : "Mudar senha", |
136 | "settings.account.headlineProfile" : "Atualizar perfil", | 182 | "settings.account.headlineProfile" : "Atualizar perfil", |
137 | "settings.account.headlineSubscription" : "Sua assinatura", | 183 | "settings.account.headlineSubscription" : "Sua assinatura", |
138 | "settings.account.headlineUpgrade" : "Atualize a sua conta e ajude o Franz!", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Baixar", | 186 | "settings.account.invoiceDownload" : "Baixar", |
140 | "settings.account.manageSubscription.label" : "Gerencie a sua assinatura", | 187 | "settings.account.manageSubscription.label" : "Gerencie a sua assinatura", |
141 | "settings.account.successInfo" : "Suas alterações foram gravadas", | 188 | "settings.account.successInfo" : "Suas alterações foram gravadas", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Tente novamente", | 192 | "settings.account.tryReloadServices" : "Tente novamente", |
143 | "settings.account.tryReloadUserInfoRequest" : "Tentar novamente", | 193 | "settings.account.tryReloadUserInfoRequest" : "Tentar novamente", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Não foi possÃvel carregar as informações do usuário", | 195 | "settings.account.userInfoRequestFailed" : "Não foi possÃvel carregar as informações do usuário", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Limpar cache", | 197 | "settings.app.buttonClearAllCache" : "Limpar cache", |
146 | "settings.app.buttonInstallUpdate" : "Reiniciar e instalar atualização", | 198 | "settings.app.buttonInstallUpdate" : "Reiniciar e instalar atualização", |
147 | "settings.app.buttonSearchForUpdate" : "Verificar por atualizações", | 199 | "settings.app.buttonSearchForUpdate" : "Verificar por atualizações", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Venha para o Lado Negro da força", | 205 | "settings.app.form.darkMode" : "Venha para o Lado Negro da força", |
154 | "settings.app.form.enableGPUAcceleration" : "Ativar Aceleração de GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Ativar Aceleração de GPU", |
155 | "settings.app.form.enableSpellchecking" : "Ativar correção ortográfica", | 207 | "settings.app.form.enableSpellchecking" : "Ativar correção ortográfica", |
156 | "settings.app.form.enableSystemTray" : "Exibir o Ferdi na barra de sistema", | 208 | "settings.app.form.enableSystemTray" : "Exibir o Franz na barra de sistema", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Idioma", | 210 | "settings.app.form.language" : "Idioma", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Ferdi para a área de sistema", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Ferdi para a área de sistema", |
159 | "settings.app.form.runInBackground" : "Manter o Ferdi no fundo quando fechar a janela", | 212 | "settings.app.form.runInBackground" : "Manter o Ferdi no fundo quando fechar a janela", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Seus serviços", | 235 | "settings.navigation.yourServices" : "Seus serviços", |
183 | "settings.navigation.yourWorkspaces" : "Suas áreas de trabalho", | 236 | "settings.navigation.yourWorkspaces" : "Suas áreas de trabalho", |
184 | "settings.recipes.all" : "Todos os serviços", | 237 | "settings.recipes.all" : "Todos os serviços", |
185 | "settings.recipes.dev" : "Desenvolvimento", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Serviços disponÃveis", | 245 | "settings.recipes.headline" : "Serviços disponÃveis", |
187 | "settings.recipes.missingService" : "Sentiu falta de algum serviço?", | 246 | "settings.recipes.missingService" : "Sentiu falta de algum serviço?", |
188 | "settings.recipes.mostPopular" : "Mais populares", | 247 | "settings.recipes.mostPopular" : "Mais populares", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Abrir menu da área de trabalho", | 333 | "sidebar.openWorkspaceDrawer" : "Abrir menu da área de trabalho", |
275 | "sidebar.settings" : "Ajustes", | 334 | "sidebar.settings" : "Ajustes", |
276 | "sidebar.unmuteApp" : "Ativar notificações e áudio", | 335 | "sidebar.unmuteApp" : "Ativar notificações e áudio", |
277 | "signup.company.label" : "Empresa", | ||
278 | "signup.email.label" : "Endereço de e-mail", | 336 | "signup.email.label" : "Endereço de e-mail", |
279 | "signup.emailDuplicate" : "Já existe um usuário com este endereço de e-mail", | 337 | "signup.emailDuplicate" : "Já existe um usuário com este endereço de e-mail", |
280 | "signup.firstname.label" : "Nome", | 338 | "signup.firstname.label" : "Nome", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "grátis", | 358 | "subscription.type.free" : "grátis", |
301 | "subscription.type.month" : "mês", | 359 | "subscription.type.month" : "mês", |
302 | "subscription.type.year" : "ano", | 360 | "subscription.type.year" : "ano", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Cancelar", | 367 | "subscriptionPopup.buttonCancel" : "Cancelar", |
304 | "subscriptionPopup.buttonDone" : "Feito", | 368 | "subscriptionPopup.buttonDone" : "Feito", |
305 | "tabs.item.deleteService" : "Excluir serviço", | 369 | "tabs.item.deleteService" : "Excluir serviço", |
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index ced5c9183..bad62fdf3 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json | |||
@@ -1,23 +1,33 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Recarregar", | 2 | "app.errorHandler.action" : "Recarregar", |
3 | "app.errorHandler.headline" : "Alguma coisa correu mal", | 3 | "app.errorHandler.headline" : "Alguma coisa correu mal", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Faz parte do grupo de apoio do Franz", | 5 | "feature.delayApp.headline" : "Por favor compre uma licença Franz Supporter para saltar a fila de espera", |
6 | "feature.delayApp.headline" : "Por favor compre uma licença Ferdi Supporter para saltar a fila de espera", | 6 | "feature.delayApp.text" : "Franz irá continuar em {seconds} segundos.", |
7 | "feature.delayApp.text" : "Ferdi irá continuar em {seconds} segundos.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Faz parte do grupo de apoio do Franz", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Atualiza a tua conta", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Enviar por e-mail", | 13 | "feature.shareFranz.action.email" : "Enviar por e-mail", |
9 | "feature.shareFranz.action.facebook" : "Compartilahr no Facebook", | 14 | "feature.shareFranz.action.facebook" : "Compartilahr no Facebook", |
10 | "feature.shareFranz.action.twitter" : "Compartilhar no Twitter", | 15 | "feature.shareFranz.action.twitter" : "Compartilhar no Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Não foi possÃvel estabelecer ligação aos serviços do Franz", | 23 | "global.api.unhealthy" : "Não foi possÃvel estabelecer ligação aos serviços do Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Não estás ligado à Internet", | 25 | "global.notConnectedToTheInternet" : "Não estás ligado à Internet", |
17 | "global.spellchecker.useDefault" : "Utilizar o Sistema por Omissão ({default})", | 26 | "global.spellchecker.useDefault" : "Utilizar o Sistema por Omissão ({default})", |
18 | "global.spellchecking.autodetect" : "Detectar a lingua automaticamente", | 27 | "global.spellchecking.autodetect" : "Detectar a lingua automaticamente", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Linguagem para correção ortográfica", | 29 | "global.spellchecking.language" : "Linguagem para correção ortográfica", |
30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", | ||
21 | "import.headline" : "Importa os teus serviços do Franz", | 31 | "import.headline" : "Importa os teus serviços do Franz", |
22 | "import.notSupportedHeadline" : "Estes serviços ainda não são suportados pelo Ferdi 5", | 32 | "import.notSupportedHeadline" : "Estes serviços ainda não são suportados pelo Ferdi 5", |
23 | "import.skip.label" : "Eu quero adicionar serviços manualmente", | 33 | "import.skip.label" : "Eu quero adicionar serviços manualmente", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Recarregar serviços", | 37 | "infobar.buttonReloadServices" : "Recarregar serviços", |
28 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar os serviços e informações do utilizador", | 38 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar os serviços e informações do utilizador", |
29 | "infobar.servicesUpdated" : "Os seus serviços foram atualizados.", | 39 | "infobar.servicesUpdated" : "Os seus serviços foram atualizados.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Está disponÃvel uma nova atualização para o Franz", | 41 | "infobar.updateAvailable" : "Está disponÃvel uma nova atualização para o Franz", |
31 | "invite.email.label" : "Endereço de e-mail", | 42 | "invite.email.label" : "Endereço de e-mail", |
32 | "invite.headline.friends" : "Convide 3 amigos ou colegas", | 43 | "invite.headline.friends" : "Convide 3 amigos ou colegas", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "A sua sessão expirou, inicie sessão novamente.", | 54 | "login.serverLogout" : "A sua sessão expirou, inicie sessão novamente.", |
44 | "login.submit.label" : "Iniciar sessão", | 55 | "login.submit.label" : "Iniciar sessão", |
45 | "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.", | 56 | "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Sobre o Franz", | 59 | "menu.app.about" : "Sobre o Franz", |
47 | "menu.app.announcement" : "O que há de novo?", | 60 | "menu.app.announcement" : "O que há de novo?", |
48 | "menu.app.checkForUpdates" : "Procurar atualizações", | 61 | "menu.app.checkForUpdates" : "Procurar atualizações", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Ficheiro", | 81 | "menu.file" : "Ficheiro", |
69 | "menu.help" : "Ajuda", | 82 | "menu.help" : "Ajuda", |
70 | "menu.help.changelog" : "Registo de alterações", | 83 | "menu.help.changelog" : "Registo de alterações", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Saber mais", | 87 | "menu.help.learnMore" : "Saber mais", |
72 | "menu.help.privacy" : "Declaração de privacidade", | 88 | "menu.help.privacy" : "Declaração de privacidade", |
73 | "menu.help.support" : "Suporte", | 89 | "menu.help.support" : "Suporte", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activar o serviço anterior", | 92 | "menu.services.activatePreviousService" : "Activar o serviço anterior", |
77 | "menu.services.addNewService" : "Adicionar Novo Serviço...", | 93 | "menu.services.addNewService" : "Adicionar Novo Serviço...", |
78 | "menu.services.setNextServiceActive" : "Activar o próximo serviço", | 94 | "menu.services.setNextServiceActive" : "Activar o próximo serviço", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Ver", | 96 | "menu.view" : "Ver", |
80 | "menu.view.enterFullScreen" : "Ativar Modo de Ecrã Completo", | 97 | "menu.view.enterFullScreen" : "Ativar Modo de Ecrã Completo", |
81 | "menu.view.exitFullScreen" : "Sair do Modo de Ecrã Completo", | 98 | "menu.view.exitFullScreen" : "Sair do Modo de Ecrã Completo", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Ativar\/Desativar Ferramentas de Desenvolvimento", | 102 | "menu.view.toggleDevTools" : "Ativar\/Desativar Ferramentas de Desenvolvimento", |
86 | "menu.view.toggleFullScreen" : "Ativar\/Desativar Ecrã Completo", | 103 | "menu.view.toggleFullScreen" : "Ativar\/Desativar Ecrã Completo", |
87 | "menu.view.toggleServiceDevTools" : "Ativar\/Desativar Ferramentas de Desenvolvimento de Serviços", | 104 | "menu.view.toggleServiceDevTools" : "Ativar\/Desativar Ferramentas de Desenvolvimento de Serviços", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Aumentar", | 106 | "menu.view.zoomIn" : "Aumentar", |
89 | "menu.view.zoomOut" : "Reduzir", | 107 | "menu.view.zoomOut" : "Reduzir", |
90 | "menu.window" : "Janela", | 108 | "menu.window" : "Janela", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Submeter", | 121 | "password.submit.label" : "Submeter", |
104 | "password.successInfo" : "Por favor verifique o seu endereço de e-mail", | 122 | "password.successInfo" : "Por favor verifique o seu endereço de e-mail", |
105 | "premiumFeature.button.upgradeAccount" : "Atualiza a tua conta", | 123 | "premiumFeature.button.upgradeAccount" : "Atualiza a tua conta", |
106 | "pricing.headline" : "Apoie o Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Não pretendo patrocinar o desenvolvimento do Franz", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Pretendo patrocinar o desenvolvimento do Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Selecione o seu plano", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Espaços de trabalho", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Recarregar {name}", | 151 | "service.crashHandler.action" : "Recarregar {name}", |
111 | "service.crashHandler.autoReload" : "A tentar restaurar automaticamente {name} em {seconds} segundos", | 152 | "service.crashHandler.autoReload" : "A tentar restaurar automaticamente {name} em {seconds} segundos", |
112 | "service.crashHandler.headline" : "Oh não!", | 153 | "service.crashHandler.headline" : "Oh não!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Oh não!", | 159 | "service.errorHandler.headline" : "Oh não!", |
119 | "service.errorHandler.message" : "Erro", | 160 | "service.errorHandler.message" : "Erro", |
120 | "service.errorHandler.text" : "{name} falhou o carregamento", | 161 | "service.errorHandler.text" : "{name} falhou o carregamento", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "A ler", | 167 | "service.webviewLoader.loading" : "A ler", |
122 | "services.getStarted" : "Vamos começar", | 168 | "services.getStarted" : "Vamos começar", |
123 | "services.welcome" : "Bem-vindo ao Franz", | 169 | "services.welcome" : "Bem-vindo ao Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Alterar palavra-passe", | 181 | "settings.account.headlinePassword" : "Alterar palavra-passe", |
136 | "settings.account.headlineProfile" : "Atualizar perfil", | 182 | "settings.account.headlineProfile" : "Atualizar perfil", |
137 | "settings.account.headlineSubscription" : "A sua subscrição", | 183 | "settings.account.headlineSubscription" : "A sua subscrição", |
138 | "settings.account.headlineUpgrade" : "Atualize a sua conta e ajude o Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Transferir", | 186 | "settings.account.invoiceDownload" : "Transferir", |
140 | "settings.account.manageSubscription.label" : "Gerir as minhas subscrições", | 187 | "settings.account.manageSubscription.label" : "Gerir as minhas subscrições", |
141 | "settings.account.successInfo" : "As suas alterações foram efetuadas com sucesso", | 188 | "settings.account.successInfo" : "As suas alterações foram efetuadas com sucesso", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Tentar novamente", | 192 | "settings.account.tryReloadServices" : "Tentar novamente", |
143 | "settings.account.tryReloadUserInfoRequest" : "Tentar novamente", | 193 | "settings.account.tryReloadUserInfoRequest" : "Tentar novamente", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Não é possÃvel carregar a informação do utilizador", | 195 | "settings.account.userInfoRequestFailed" : "Não é possÃvel carregar a informação do utilizador", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Limpar cache", | 197 | "settings.app.buttonClearAllCache" : "Limpar cache", |
146 | "settings.app.buttonInstallUpdate" : "Reiniciar & instalar atualização", | 198 | "settings.app.buttonInstallUpdate" : "Reiniciar & instalar atualização", |
147 | "settings.app.buttonSearchForUpdate" : "Procurar atualizações", | 199 | "settings.app.buttonSearchForUpdate" : "Procurar atualizações", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Junta-te ao Lado Negro", | 205 | "settings.app.form.darkMode" : "Junta-te ao Lado Negro", |
154 | "settings.app.form.enableGPUAcceleration" : "Activar Aceleração de GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Activar Aceleração de GPU", |
155 | "settings.app.form.enableSpellchecking" : "Ativar verificação ortográfica", | 207 | "settings.app.form.enableSpellchecking" : "Ativar verificação ortográfica", |
156 | "settings.app.form.enableSystemTray" : "Mostrar o Ferdi na barra do sistema", | 208 | "settings.app.form.enableSystemTray" : "Mostrar o Franz na barra do sistema", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Idioma", | 210 | "settings.app.form.language" : "Idioma", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Ferdi para a barra do sistema", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Ferdi para a barra do sistema", |
159 | "settings.app.form.runInBackground" : "Manter o Ferdi em segundo plano ao fechar a janela", | 212 | "settings.app.form.runInBackground" : "Manter o Ferdi em segundo plano ao fechar a janela", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Os seus serviços", | 235 | "settings.navigation.yourServices" : "Os seus serviços", |
183 | "settings.navigation.yourWorkspaces" : "Os teus Espaços de trabalho", | 236 | "settings.navigation.yourWorkspaces" : "Os teus Espaços de trabalho", |
184 | "settings.recipes.all" : "Todos os serviços", | 237 | "settings.recipes.all" : "Todos os serviços", |
185 | "settings.recipes.dev" : "Desenvolvimento", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Serviços disponÃveis", | 245 | "settings.recipes.headline" : "Serviços disponÃveis", |
187 | "settings.recipes.missingService" : "Falta um serviço?", | 246 | "settings.recipes.missingService" : "Falta um serviço?", |
188 | "settings.recipes.mostPopular" : "Os mais populares", | 247 | "settings.recipes.mostPopular" : "Os mais populares", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Abrir a janela do Espaço de trabalho", | 333 | "sidebar.openWorkspaceDrawer" : "Abrir a janela do Espaço de trabalho", |
275 | "sidebar.settings" : "Definições", | 334 | "sidebar.settings" : "Definições", |
276 | "sidebar.unmuteApp" : "Ativar notificações e áudio", | 335 | "sidebar.unmuteApp" : "Ativar notificações e áudio", |
277 | "signup.company.label" : "Empresa", | ||
278 | "signup.email.label" : "Endereço de email", | 336 | "signup.email.label" : "Endereço de email", |
279 | "signup.emailDuplicate" : "Já existe uma conta associada a este endereço de email", | 337 | "signup.emailDuplicate" : "Já existe uma conta associada a este endereço de email", |
280 | "signup.firstname.label" : "Primeiro Nome", | 338 | "signup.firstname.label" : "Primeiro Nome", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "Já tem uma conta, iniciar sessão?", | 344 | "signup.link.login" : "Já tem uma conta, iniciar sessão?", |
287 | "signup.password.label" : "Palavra-passe", | 345 | "signup.password.label" : "Palavra-passe", |
288 | "signup.submit.label" : "Criar uma conta", | 346 | "signup.submit.label" : "Criar uma conta", |
289 | "subscription.euTaxInfo" : "Residentes EU: Taxas locais podem ser aplicadas", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Sem anúncios, para sempre!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "em breve", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "Sem atrasos na aplicação nem mensagens para comprar uma licença", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Adicione serviços como Mattermost no local ou online", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Suporte Proxy para os serviços", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Suporte para correção ortográfica", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Ao subscrever uma Conta Premium, tem acesso a", | ||
298 | "subscription.paymentSessionError" : "Erro no serviço de pagamento", | ||
299 | "subscription.submit.label" : "Pretendo ajudar o desenvolvimento do Franz", | ||
300 | "subscription.type.free" : "gratuito", | ||
301 | "subscription.type.month" : "mês", | ||
302 | "subscription.type.year" : "ano", | ||
303 | "subscriptionPopup.buttonCancel" : "Cancelar", | 353 | "subscriptionPopup.buttonCancel" : "Cancelar", |
304 | "subscriptionPopup.buttonDone" : "ConcluÃdo", | 354 | "subscriptionPopup.buttonDone" : "ConcluÃdo", |
305 | "tabs.item.deleteService" : "Apagar serviço", | 355 | "tabs.item.deleteService" : "Apagar serviço", |
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 369b95a41..03b339dd5 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Перезагрузить", | 2 | "app.errorHandler.action" : "Перезагрузить", |
3 | "app.errorHandler.headline" : "Что-то пошло не так", | 3 | "app.errorHandler.headline" : "Что-то пошло не так", |
4 | "feature.announcements.changelog.headline" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² верÑии Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² верÑии Franz {version}", |
5 | "feature.delayApp.action" : "Получите лицензию Ferdi Supporter", | 5 | "feature.delayApp.headline" : "ПожалуйÑта приобретите лицензию Franz Supporter чтобы убрать ожидание", |
6 | "feature.delayApp.headline" : "ПожалуйÑта приобретите лицензию Ferdi Supporter чтобы убрать ожидание", | 6 | "feature.delayApp.text" : "Franz продолжит работу через {seconds} Ñекунд.", |
7 | "feature.delayApp.text" : "Ferdi продолжит работу через {seconds} Ñекунд.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Получите лицензию Franz Supporter", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Перейти на платную подпиÑку", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Отправить email", | 13 | "feature.shareFranz.action.email" : "Отправить email", |
9 | "feature.shareFranz.action.facebook" : "ПоделитьÑÑ Ð½Ð° Facebook", | 14 | "feature.shareFranz.action.facebook" : "ПоделитьÑÑ Ð½Ð° Facebook", |
10 | "feature.shareFranz.action.twitter" : "ПоделитьÑÑ Ð² Twitter", | 15 | "feature.shareFranz.action.twitter" : "ПоделитьÑÑ Ð² Twitter", |
11 | "feature.shareFranz.headline" : "Сделаем Ferdi лучше вмеÑте!", | 16 | "feature.shareFranz.headline" : "Сделаем Ferdi лучше вмеÑте!", |
12 | "feature.shareFranz.shareText.email" : "Я добавил {count} ÑервиÑов во Franz! Теперь доÑтупны такие меÑÑенджеры как WhatsApp, Messenger, Slack, Skype и другие. Полый ÑпиÑок вы найдете на www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Я добавил {count} ÑервиÑов во Franz! Теперь доÑтупны такие меÑÑенджеры как WhatsApp, Messenger, Slack, Skype и другие. Полый ÑпиÑок вы найдете на www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "Я добавил {count} ÑервиÑ(ов) в Franz! Скачай беÑплатную аппку Ð´Ð»Ñ WhatsApp, Messenger, Slack, Skype и иже на www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Я добавил {count} ÑервиÑ(ов) в Franz! Скачай беÑплатную аппку Ð´Ð»Ñ WhatsApp, Messenger, Slack, Skype и иже на www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "РаÑÑкажи Ñвоим друзьÑм и коллегам наÑколько прелеÑтен Ferdi и помоги нам развитьÑÑ", | 19 | "feature.shareFranz.text" : "РаÑÑкажи Ñвоим друзьÑм и коллегам наÑколько прелеÑтен Franz и помоги нам развитьÑÑ", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Franz", | 23 | "global.api.unhealthy" : "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Ð’Ñ‹ не подключены к Ñети Интернет", | 25 | "global.notConnectedToTheInternet" : "Ð’Ñ‹ не подключены к Ñети Интернет", |
17 | "global.spellchecker.useDefault" : "ИÑпользовать ÑиÑтемные параметры по умолчанию ({default})", | 26 | "global.spellchecker.useDefault" : "ИÑпользовать ÑиÑтемные параметры по умолчанию ({default})", |
18 | "global.spellchecking.autodetect" : "Ðайти Ñзык автоматичеÑки", | 27 | "global.spellchecking.autodetect" : "Ðайти Ñзык автоматичеÑки", |
19 | "global.spellchecking.autodetect.short" : "Ðвто", | 28 | "global.spellchecking.autodetect.short" : "Ðвто", |
20 | "global.spellchecking.language" : "Проверка правопиÑаниÑ", | 29 | "global.spellchecking.language" : "Проверка правопиÑаниÑ", |
21 | "import.headline" : "Импортировать ваши ÑервиÑÑ‹ из Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "СервиÑÑ‹ пока ещё не поддерживаютÑÑ Ð² Ferdi 5", | 31 | "import.headline" : "Импортировать ваши ÑервиÑÑ‹ из Franz 4", |
32 | "import.notSupportedHeadline" : "СервиÑÑ‹ пока ещё не поддерживаютÑÑ Ð² Franz 5", | ||
23 | "import.skip.label" : "Я хочу добавить ÑервиÑÑ‹ вручную", | 33 | "import.skip.label" : "Я хочу добавить ÑервиÑÑ‹ вручную", |
24 | "import.submit.label" : "Импортировать ÑервиÑÑ‹", | 34 | "import.submit.label" : "Импортировать ÑервиÑÑ‹", |
25 | "infobar.buttonChangelog" : "Что новенького?", | 35 | "infobar.buttonChangelog" : "Что новенького?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Перезагрузить ÑервиÑÑ‹", | 37 | "infobar.buttonReloadServices" : "Перезагрузить ÑервиÑÑ‹", |
28 | "infobar.requiredRequestsFailed" : "Ðевозможно загрузить ÑервиÑÑ‹ и информацию пользователÑ", | 38 | "infobar.requiredRequestsFailed" : "Ðевозможно загрузить ÑервиÑÑ‹ и информацию пользователÑ", |
29 | "infobar.servicesUpdated" : "Ваши ÑервиÑÑ‹ были обновлены.", | 39 | "infobar.servicesUpdated" : "Ваши ÑервиÑÑ‹ были обновлены.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "ДоÑтупно обновление Franz.", | 41 | "infobar.updateAvailable" : "ДоÑтупно обновление Franz.", |
31 | "invite.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", | 42 | "invite.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
32 | "invite.headline.friends" : "ПриглаÑите 3-Ñ… друзей или коллег", | 43 | "invite.headline.friends" : "ПриглаÑите 3-Ñ… друзей или коллег", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", | 54 | "login.serverLogout" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", |
44 | "login.submit.label" : "Вход", | 55 | "login.submit.label" : "Вход", |
45 | "login.tokenExpired" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", | 56 | "login.tokenExpired" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "О Franz", | 59 | "menu.app.about" : "О Franz", |
47 | "menu.app.announcement" : "Что нового?", | 60 | "menu.app.announcement" : "Что нового?", |
48 | "menu.app.checkForUpdates" : "Проверить обновлениÑ", | 61 | "menu.app.checkForUpdates" : "Проверить обновлениÑ", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Файл", | 81 | "menu.file" : "Файл", |
69 | "menu.help" : "Справка", | 82 | "menu.help" : "Справка", |
70 | "menu.help.changelog" : "Журнал изменений", | 83 | "menu.help.changelog" : "Журнал изменений", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Подробнее", | 87 | "menu.help.learnMore" : "Подробнее", |
72 | "menu.help.privacy" : "Политика конфиденциальноÑти", | 88 | "menu.help.privacy" : "Политика конфиденциальноÑти", |
73 | "menu.help.support" : "Поддержка", | 89 | "menu.help.support" : "Поддержка", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Ðктивировать предыдущий Ñервич", | 92 | "menu.services.activatePreviousService" : "Ðктивировать предыдущий Ñервич", |
77 | "menu.services.addNewService" : "Добавить новый ÑервиÑ...", | 93 | "menu.services.addNewService" : "Добавить новый ÑервиÑ...", |
78 | "menu.services.setNextServiceActive" : "Ðктивировать Ñледующий ÑервиÑ", | 94 | "menu.services.setNextServiceActive" : "Ðктивировать Ñледующий ÑервиÑ", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Вид", | 96 | "menu.view" : "Вид", |
80 | "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран", | 97 | "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран", |
81 | "menu.view.exitFullScreen" : "В окне", | 98 | "menu.view.exitFullScreen" : "В окне", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Показать инÑтрументы разработчика", | 102 | "menu.view.toggleDevTools" : "Показать инÑтрументы разработчика", |
86 | "menu.view.toggleFullScreen" : "ПереключитьÑÑ Ð½Ð° полный Ñкран", | 103 | "menu.view.toggleFullScreen" : "ПереключитьÑÑ Ð½Ð° полный Ñкран", |
87 | "menu.view.toggleServiceDevTools" : "Показать инÑтрументы разработчика ÑервиÑа", | 104 | "menu.view.toggleServiceDevTools" : "Показать инÑтрументы разработчика ÑервиÑа", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Увеличить маÑштаб", | 106 | "menu.view.zoomIn" : "Увеличить маÑштаб", |
89 | "menu.view.zoomOut" : "Уменьшить маÑштаб", | 107 | "menu.view.zoomOut" : "Уменьшить маÑштаб", |
90 | "menu.window" : "Окно", | 108 | "menu.window" : "Окно", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "ПринÑÑ‚ÑŒ", | 121 | "password.submit.label" : "ПринÑÑ‚ÑŒ", |
104 | "password.successInfo" : "Проверьте вашу Ñлектронную почту", | 122 | "password.successInfo" : "Проверьте вашу Ñлектронную почту", |
105 | "premiumFeature.button.upgradeAccount" : "Перейти на платную подпиÑку", | 123 | "premiumFeature.button.upgradeAccount" : "Перейти на платную подпиÑку", |
106 | "pricing.headline" : "Поддержать Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Я не хочу поддерживать разработку Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Я хочу поддержать разработку Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Выберите ваш план поддержки", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Окружение", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Перезагрузить {name}", | 151 | "service.crashHandler.action" : "Перезагрузить {name}", |
111 | "service.crashHandler.autoReload" : "ПытаюÑÑŒ автоматичеÑки воÑÑтановить {name} в течение {seconds} Ñекунд", | 152 | "service.crashHandler.autoReload" : "ПытаюÑÑŒ автоматичеÑки воÑÑтановить {name} в течение {seconds} Ñекунд", |
112 | "service.crashHandler.headline" : "О, нет!", | 153 | "service.crashHandler.headline" : "О, нет!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "О, нет!", | 159 | "service.errorHandler.headline" : "О, нет!", |
119 | "service.errorHandler.message" : "Ошибка", | 160 | "service.errorHandler.message" : "Ошибка", |
120 | "service.errorHandler.text" : "{name} не Ñмог загрузитьÑÑ.", | 161 | "service.errorHandler.text" : "{name} не Ñмог загрузитьÑÑ.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Загрузка", | 167 | "service.webviewLoader.loading" : "Загрузка", |
122 | "services.getStarted" : "Ðачать работу", | 168 | "services.getStarted" : "Ðачать работу", |
123 | "services.welcome" : "Добро пожаловать во Franz", | 169 | "services.welcome" : "Добро пожаловать во Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Сменить пароль", | 181 | "settings.account.headlinePassword" : "Сменить пароль", |
136 | "settings.account.headlineProfile" : "Обновить профиль", | 182 | "settings.account.headlineProfile" : "Обновить профиль", |
137 | "settings.account.headlineSubscription" : "Ваша подпиÑка", | 183 | "settings.account.headlineSubscription" : "Ваша подпиÑка", |
138 | "settings.account.headlineUpgrade" : "Улучшить аккаунт и поддержать Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Скачать", | 186 | "settings.account.invoiceDownload" : "Скачать", |
140 | "settings.account.manageSubscription.label" : "Управление вашей подпиÑкой", | 187 | "settings.account.manageSubscription.label" : "Управление вашей подпиÑкой", |
141 | "settings.account.successInfo" : "Ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены", | 188 | "settings.account.successInfo" : "Ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Попробовать Ñнова", | 192 | "settings.account.tryReloadServices" : "Попробовать Ñнова", |
143 | "settings.account.tryReloadUserInfoRequest" : "Попробовать Ñнова", | 193 | "settings.account.tryReloadUserInfoRequest" : "Попробовать Ñнова", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Ðевозможно загрузить информацию пользователÑ", | 195 | "settings.account.userInfoRequestFailed" : "Ðевозможно загрузить информацию пользователÑ", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "ОчиÑтить кÑш", | 197 | "settings.app.buttonClearAllCache" : "ОчиÑтить кÑш", |
146 | "settings.app.buttonInstallUpdate" : "ПерезапуÑтить и обновить", | 198 | "settings.app.buttonInstallUpdate" : "ПерезапуÑтить и обновить", |
147 | "settings.app.buttonSearchForUpdate" : "Проверить обновлениÑ", | 199 | "settings.app.buttonSearchForUpdate" : "Проверить обновлениÑ", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Перейти на Тёмную Ñторону", | 205 | "settings.app.form.darkMode" : "Перейти на Тёмную Ñторону", |
154 | "settings.app.form.enableGPUAcceleration" : "Включить уÑкорение GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Включить уÑкорение GPU", |
155 | "settings.app.form.enableSpellchecking" : "Включить проверку правопиÑаниÑ", | 207 | "settings.app.form.enableSpellchecking" : "Включить проверку правопиÑаниÑ", |
156 | "settings.app.form.enableSystemTray" : "Показывать Ferdi в ÑиÑтемном трее", | 208 | "settings.app.form.enableSystemTray" : "Показывать Franz в ÑиÑтемном трее", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Язык", | 210 | "settings.app.form.language" : "Язык", |
158 | "settings.app.form.minimizeToSystemTray" : "Сворачивать Ferdi в ÑиÑтемный трей", | 211 | "settings.app.form.minimizeToSystemTray" : "Сворачивать Ferdi в ÑиÑтемный трей", |
159 | "settings.app.form.runInBackground" : "ОÑтавлÑÑ‚ÑŒ Ferdi в фоне при закрытии окна", | 212 | "settings.app.form.runInBackground" : "ОÑтавлÑÑ‚ÑŒ Ferdi в фоне при закрытии окна", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Ваши ÑервиÑÑ‹", | 235 | "settings.navigation.yourServices" : "Ваши ÑервиÑÑ‹", |
183 | "settings.navigation.yourWorkspaces" : "Ваши окружениÑ", | 236 | "settings.navigation.yourWorkspaces" : "Ваши окружениÑ", |
184 | "settings.recipes.all" : "Ð’Ñе ÑервиÑÑ‹", | 237 | "settings.recipes.all" : "Ð’Ñе ÑервиÑÑ‹", |
185 | "settings.recipes.dev" : "Разработка", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "ДоÑтупные ÑервиÑÑ‹", | 245 | "settings.recipes.headline" : "ДоÑтупные ÑервиÑÑ‹", |
187 | "settings.recipes.missingService" : "Ðе можете найти ÑервиÑ?", | 246 | "settings.recipes.missingService" : "Ðе можете найти ÑервиÑ?", |
188 | "settings.recipes.mostPopular" : "Самые популÑрные", | 247 | "settings.recipes.mostPopular" : "Самые популÑрные", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Открыть меню окружений", | 333 | "sidebar.openWorkspaceDrawer" : "Открыть меню окружений", |
275 | "sidebar.settings" : "ÐаÑтройки", | 334 | "sidebar.settings" : "ÐаÑтройки", |
276 | "sidebar.unmuteApp" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук", | 335 | "sidebar.unmuteApp" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук", |
277 | "signup.company.label" : "ОрганизациÑ", | ||
278 | "signup.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", | 336 | "signup.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
279 | "signup.emailDuplicate" : "Пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ адреÑом Ñлектронной почты уже ÑущеÑтвует", | 337 | "signup.emailDuplicate" : "Пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ адреÑом Ñлектронной почты уже ÑущеÑтвует", |
280 | "signup.firstname.label" : "ИмÑ", | 338 | "signup.firstname.label" : "ИмÑ", |
@@ -300,6 +358,12 @@ | |||
300 | "subscription.type.free" : "беÑплатно", | 358 | "subscription.type.free" : "беÑплатно", |
301 | "subscription.type.month" : "меÑÑц", | 359 | "subscription.type.month" : "меÑÑц", |
302 | "subscription.type.year" : "год", | 360 | "subscription.type.year" : "год", |
361 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", | ||
362 | "subscription.cta.allOptions" : "See all options", | ||
363 | "subscription.cta.choosePlan" : "Choose your plan", | ||
364 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", | ||
365 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", | ||
366 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", | ||
303 | "subscriptionPopup.buttonCancel" : "Отмена", | 367 | "subscriptionPopup.buttonCancel" : "Отмена", |
304 | "subscriptionPopup.buttonDone" : "Готово", | 368 | "subscriptionPopup.buttonDone" : "Готово", |
305 | "tabs.item.deleteService" : "Удалить ÑервиÑ", | 369 | "tabs.item.deleteService" : "Удалить ÑервиÑ", |
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json index a9fd4e9f4..cb1170d00 100644 --- a/src/i18n/locales/sk.json +++ b/src/i18n/locales/sk.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Obnoviť", | 2 | "app.errorHandler.action" : "Obnoviť", |
3 | "app.errorHandler.headline" : "NieÄo sa pokazilo", | 3 | "app.errorHandler.headline" : "NieÄo sa pokazilo", |
4 | "feature.announcements.changelog.headline" : "Zmeny vo Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Zmeny vo Franz {version}", |
5 | "feature.delayApp.action" : "ZÃskajte licenciu pre Ferdi podporu", | 5 | "feature.delayApp.headline" : "ProsÃm, kúp si licenciu Franz Supporter a nebudeÅ¡ musieÅ¥ ÄakaÅ¥", |
6 | "feature.delayApp.headline" : "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text" : "Franz bude pokraÄovaÅ¥ v {seconds} sekundách.", |
7 | "feature.delayApp.text" : "Ferdi bude pokraÄovaÅ¥ v {seconds} seundách.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "ZÃskajte licenciu pre Franz podporu", | ||
11 | "feature.delayApp.upgrade.actionShort" : "UpgradovaÅ¥ úÄet", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Odoslať ako e-mail", | 13 | "feature.shareFranz.action.email" : "Odoslať ako e-mail", |
9 | "feature.shareFranz.action.facebook" : "Zdielať na Facebook-u", | 14 | "feature.shareFranz.action.facebook" : "Zdielať na Facebook-u", |
10 | "feature.shareFranz.action.twitter" : "Zdieľať na Twitter-i", | 15 | "feature.shareFranz.action.twitter" : "Zdieľať na Twitter-i", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Franz je lepšà spolu!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "Pridali sme {count} služieb do Franz! ZÃskajte zadarmo aplikáciu pre WhatsApp, Messenger, Slack, Skype a iné na www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "Pridal som {count} služieb do Franz! ZÃskajte zadarmo aplikáciu pre WhatsApp, Messenger, Slack, Skype a iné na www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Povedzte vaÅ¡im priateľom a známym aký je Franz skvelý a pomôžte nám rozÅ¡ÃriÅ¥ sa do sveta.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Nedá sa pripojiť k online službám Franz", | 23 | "global.api.unhealthy" : "Nedá sa pripojiť k online službám Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Nie ste pripojenà k internetu.", | 25 | "global.notConnectedToTheInternet" : "Nie ste pripojenà k internetu.", |
17 | "global.spellchecker.useDefault" : "Použiť predvolené nastavenie systému ({default})", | 26 | "global.spellchecker.useDefault" : "Použiť predvolené nastavenie systému ({default})", |
18 | "global.spellchecking.autodetect" : "Automaticky rozpoznať jazyk", | 27 | "global.spellchecking.autodetect" : "Automaticky rozpoznať jazyk", |
19 | "global.spellchecking.autodetect.short" : "Automatický", | 28 | "global.spellchecking.autodetect.short" : "Automatický", |
20 | "global.spellchecking.language" : "Jazyk kontroly pravopisu", | 29 | "global.spellchecking.language" : "Jazyk kontroly pravopisu", |
21 | "import.headline" : "Importovať vaše služby z Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Služby zatiaľ nie sú podporované vo verzii Ferdi 5", | 31 | "import.headline" : "Importovať vaše služby z Franz 4", |
32 | "import.notSupportedHeadline" : "Služby zatiaľ nie sú podporované vo verzii Franz 5", | ||
23 | "import.skip.label" : "Chcem pridaÅ¥ služby ruÄne", | 33 | "import.skip.label" : "Chcem pridaÅ¥ služby ruÄne", |
24 | "import.submit.label" : "Importovať služby", | 34 | "import.submit.label" : "Importovať služby", |
25 | "infobar.buttonChangelog" : "Čo je nového?", | 35 | "infobar.buttonChangelog" : "Čo je nového?", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Obnoviť služby", | 37 | "infobar.buttonReloadServices" : "Obnoviť služby", |
28 | "infobar.requiredRequestsFailed" : "Nie je možné naÄÃtaÅ¥ služby a informácie o použÃvateľovi", | 38 | "infobar.requiredRequestsFailed" : "Nie je možné naÄÃtaÅ¥ služby a informácie o použÃvateľovi", |
29 | "infobar.servicesUpdated" : "Vaše služby boli aktualizované.", | 39 | "infobar.servicesUpdated" : "Vaše služby boli aktualizované.", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Je k dispozÃcii nová aktualizácia Franz.", | 41 | "infobar.updateAvailable" : "Je k dispozÃcii nová aktualizácia Franz.", |
31 | "invite.email.label" : "E-mailová adresa", | 42 | "invite.email.label" : "E-mailová adresa", |
32 | "invite.headline.friends" : "Pozvite troch vašich priateľov alebo kolegov", | 43 | "invite.headline.friends" : "Pozvite troch vašich priateľov alebo kolegov", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "VaÅ¡a relácia vyprÅ¡ala, prihláste sa prosÃm znovu.", | 54 | "login.serverLogout" : "VaÅ¡a relácia vyprÅ¡ala, prihláste sa prosÃm znovu.", |
44 | "login.submit.label" : "Prihlásiť sa", | 55 | "login.submit.label" : "Prihlásiť sa", |
45 | "login.tokenExpired" : "VaÅ¡a relácia vyprÅ¡ala, prihláste sa prosÃm znovu.", | 56 | "login.tokenExpired" : "VaÅ¡a relácia vyprÅ¡ala, prihláste sa prosÃm znovu.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "O aplikácii", | 59 | "menu.app.about" : "O aplikácii", |
47 | "menu.app.announcement" : "Čo je nové?", | 60 | "menu.app.announcement" : "Čo je nové?", |
48 | "menu.app.checkForUpdates" : "Skontrolovať aktualizácie", | 61 | "menu.app.checkForUpdates" : "Skontrolovať aktualizácie", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Súbor", | 81 | "menu.file" : "Súbor", |
69 | "menu.help" : "PomocnÃk", | 82 | "menu.help" : "PomocnÃk", |
70 | "menu.help.changelog" : "Záznam zmien", | 83 | "menu.help.changelog" : "Záznam zmien", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Zistiť viac", | 87 | "menu.help.learnMore" : "Zistiť viac", |
72 | "menu.help.privacy" : "Vyhlásenie o ochrane súkromia", | 88 | "menu.help.privacy" : "Vyhlásenie o ochrane súkromia", |
73 | "menu.help.support" : "Podpora", | 89 | "menu.help.support" : "Podpora", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Aktivovať predchádzajúcu službu", | 92 | "menu.services.activatePreviousService" : "Aktivovať predchádzajúcu službu", |
77 | "menu.services.addNewService" : "Pridať novú službu...", | 93 | "menu.services.addNewService" : "Pridať novú službu...", |
78 | "menu.services.setNextServiceActive" : "Aktivujte ÄalÅ¡iu službu", | 94 | "menu.services.setNextServiceActive" : "Aktivujte ÄalÅ¡iu službu", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Zobraziť", | 96 | "menu.view" : "Zobraziť", |
80 | "menu.view.enterFullScreen" : "Na celú obrazovku", | 97 | "menu.view.enterFullScreen" : "Na celú obrazovku", |
81 | "menu.view.exitFullScreen" : "UkonÄiÅ¥ režim na celú obrazovku", | 98 | "menu.view.exitFullScreen" : "UkonÄiÅ¥ režim na celú obrazovku", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Prepnúť vývojárske nástroje", | 102 | "menu.view.toggleDevTools" : "Prepnúť vývojárske nástroje", |
86 | "menu.view.toggleFullScreen" : "Prepnúť na celú obrazovku", | 103 | "menu.view.toggleFullScreen" : "Prepnúť na celú obrazovku", |
87 | "menu.view.toggleServiceDevTools" : "Prepnúť vývojárske nástroje služby", | 104 | "menu.view.toggleServiceDevTools" : "Prepnúť vývojárske nástroje služby", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "PriblÞiť", | 106 | "menu.view.zoomIn" : "PriblÞiť", |
89 | "menu.view.zoomOut" : "Oddialiť", | 107 | "menu.view.zoomOut" : "Oddialiť", |
90 | "menu.window" : "Okno", | 108 | "menu.window" : "Okno", |
@@ -92,9 +110,9 @@ | |||
92 | "menu.window.minimize" : "Minimalizovať", | 110 | "menu.window.minimize" : "Minimalizovať", |
93 | "menu.workspaces" : "Pracovný priestor", | 111 | "menu.workspaces" : "Pracovný priestor", |
94 | "menu.workspaces.addNewWorkspace" : "Pridať nový pracovný priestor ...", | 112 | "menu.workspaces.addNewWorkspace" : "Pridať nový pracovný priestor ...", |
95 | "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer", | 113 | "menu.workspaces.closeWorkspaceDrawer" : "Zavrieť workspace záložku", |
96 | "menu.workspaces.defaultWorkspace" : "Všetky služby", | 114 | "menu.workspaces.defaultWorkspace" : "Všetky služby", |
97 | "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer", | 115 | "menu.workspaces.openWorkspaceDrawer" : "Otvoriť workspace záložku", |
98 | "password.email.label" : "E-mailová adresa", | 116 | "password.email.label" : "E-mailová adresa", |
99 | "password.headline" : "Obnoviť heslo", | 117 | "password.headline" : "Obnoviť heslo", |
100 | "password.link.login" : "PrihlásiÅ¥ sa do vášho úÄtu", | 118 | "password.link.login" : "PrihlásiÅ¥ sa do vášho úÄtu", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Odoslať", | 121 | "password.submit.label" : "Odoslať", |
104 | "password.successInfo" : "Skontrolujte prosÃm váš e-mail", | 122 | "password.successInfo" : "Skontrolujte prosÃm váš e-mail", |
105 | "premiumFeature.button.upgradeAccount" : "UpgradovaÅ¥ úÄet", | 123 | "premiumFeature.button.upgradeAccount" : "UpgradovaÅ¥ úÄet", |
106 | "pricing.headline" : "Podporiť Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Nechcem podporiť vývoj aplikácie Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Chcem podporiť vývoj aplikácie Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Vyberte si váš plán podpory", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Znovu naÄÃtaÅ¥ {name}", | 151 | "service.crashHandler.action" : "Znovu naÄÃtaÅ¥ {name}", |
111 | "service.crashHandler.autoReload" : "Najbližšà pokus o automatické obnovenie {name} o {seconds} sekúnd", | 152 | "service.crashHandler.autoReload" : "Najbližšà pokus o automatické obnovenie {name} o {seconds} sekúnd", |
112 | "service.crashHandler.headline" : "Ale nie!", | 153 | "service.crashHandler.headline" : "Ale nie!", |
@@ -117,7 +158,12 @@ | |||
117 | "service.errorHandler.editAction" : "Upraviť {name}", | 158 | "service.errorHandler.editAction" : "Upraviť {name}", |
118 | "service.errorHandler.headline" : "Ale nie!", | 159 | "service.errorHandler.headline" : "Ale nie!", |
119 | "service.errorHandler.message" : "Chyba", | 160 | "service.errorHandler.message" : "Chyba", |
120 | "service.errorHandler.text" : "{name} has failed to load.", | 161 | "service.errorHandler.text" : "{name} sa nepodarilo naÄÃtaÅ¥.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "NaÄÃtava", | 167 | "service.webviewLoader.loading" : "NaÄÃtava", |
122 | "services.getStarted" : "ZaÄÃname", | 168 | "services.getStarted" : "ZaÄÃname", |
123 | "services.welcome" : "VÃtajte v aplikácii Franz", | 169 | "services.welcome" : "VÃtajte v aplikácii Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Zmeniť heslo", | 181 | "settings.account.headlinePassword" : "Zmeniť heslo", |
136 | "settings.account.headlineProfile" : "Aktualizovať profil", | 182 | "settings.account.headlineProfile" : "Aktualizovať profil", |
137 | "settings.account.headlineSubscription" : "Vaše odoberanie", | 183 | "settings.account.headlineSubscription" : "Vaše odoberanie", |
138 | "settings.account.headlineUpgrade" : "Povýšte svoj úÄet a podporte Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Prevziať", | 186 | "settings.account.invoiceDownload" : "Prevziať", |
140 | "settings.account.manageSubscription.label" : "Spravovať vaše odoberanie", | 187 | "settings.account.manageSubscription.label" : "Spravovať vaše odoberanie", |
141 | "settings.account.successInfo" : "Vaše zmeny boli uložené", | 188 | "settings.account.successInfo" : "Vaše zmeny boli uložené", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Skúsiť znova", | 192 | "settings.account.tryReloadServices" : "Skúsiť znova", |
143 | "settings.account.tryReloadUserInfoRequest" : "Skúsiť znova", | 193 | "settings.account.tryReloadUserInfoRequest" : "Skúsiť znova", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Nebolo možné naÄÃtaÅ¥ informácie o použÃvateľovi", | 195 | "settings.account.userInfoRequestFailed" : "Nebolo možné naÄÃtaÅ¥ informácie o použÃvateľovi", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "VyÄistiÅ¥ vyrovnávaciu pamäť", | 197 | "settings.app.buttonClearAllCache" : "VyÄistiÅ¥ vyrovnávaciu pamäť", |
146 | "settings.app.buttonInstallUpdate" : "Reštartovať a nainštalovať aktualizáciu", | 198 | "settings.app.buttonInstallUpdate" : "Reštartovať a nainštalovať aktualizáciu", |
147 | "settings.app.buttonSearchForUpdate" : "Skontrolovať aktualizácie", | 199 | "settings.app.buttonSearchForUpdate" : "Skontrolovať aktualizácie", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Spustiť Dark Side", | 205 | "settings.app.form.darkMode" : "Spustiť Dark Side", |
154 | "settings.app.form.enableGPUAcceleration" : "Zapnúť GPU zrýchlenie", | 206 | "settings.app.form.enableGPUAcceleration" : "Zapnúť GPU zrýchlenie", |
155 | "settings.app.form.enableSpellchecking" : "Zapnúť kontrolu pravopisu", | 207 | "settings.app.form.enableSpellchecking" : "Zapnúť kontrolu pravopisu", |
156 | "settings.app.form.enableSystemTray" : "Zobrazovať Ferdi v systémovej lište", | 208 | "settings.app.form.enableSystemTray" : "Zobrazovať Franz v systémovej lište", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Jazyk", | 210 | "settings.app.form.language" : "Jazyk", |
158 | "settings.app.form.minimizeToSystemTray" : "Minimalizovať Ferdi do systémovej lišty", | 211 | "settings.app.form.minimizeToSystemTray" : "Minimalizovať Ferdi do systémovej lišty", |
159 | "settings.app.form.runInBackground" : "Po zatvorenà okna ponechaÅ¥ Ferdi spustený na pozadÃ", | 212 | "settings.app.form.runInBackground" : "Po zatvorenà okna ponechaÅ¥ Ferdi spustený na pozadÃ", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Vaše služby", | 235 | "settings.navigation.yourServices" : "Vaše služby", |
183 | "settings.navigation.yourWorkspaces" : "Tvoje pracovné priestory", | 236 | "settings.navigation.yourWorkspaces" : "Tvoje pracovné priestory", |
184 | "settings.recipes.all" : "Všetky služby", | 237 | "settings.recipes.all" : "Všetky služby", |
185 | "settings.recipes.dev" : "Vývoj", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Dostupné služby", | 245 | "settings.recipes.headline" : "Dostupné služby", |
187 | "settings.recipes.missingService" : "Chýba vám služba?", | 246 | "settings.recipes.missingService" : "Chýba vám služba?", |
188 | "settings.recipes.mostPopular" : "Najpopulárnejšie", | 247 | "settings.recipes.mostPopular" : "Najpopulárnejšie", |
@@ -265,16 +324,15 @@ | |||
265 | "settings.workspaces.noWorkspacesAdded" : "Zatiaľ si nepridal žiadne pracovné priestory.", | 324 | "settings.workspaces.noWorkspacesAdded" : "Zatiaľ si nepridal žiadne pracovné priestory.", |
266 | "settings.workspaces.tryReloadWorkspaces" : "Skúsiť znova", | 325 | "settings.workspaces.tryReloadWorkspaces" : "Skúsiť znova", |
267 | "settings.workspaces.updatedInfo" : "Vaše zmeny boli uložené", | 326 | "settings.workspaces.updatedInfo" : "Vaše zmeny boli uložené", |
268 | "settings.workspaces.workspaceFeatureHeadline" : "Menej je viac: Predstavenie Ferdi Pracovné priestory", | 327 | "settings.workspaces.workspaceFeatureHeadline" : "Menej je viac: Predstavenie Franz Pracovné priestory", |
269 | "settings.workspaces.workspaceFeatureInfo" : "Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.", | 328 | "settings.workspaces.workspaceFeatureInfo" : "Franz Workspace vám umožňujú sústrediÅ¥ sa na to, Äo je práve dôležité. Nastavte si rozliÄné skupiny služieb a jednoducho medzi nimi kedykoľvek prepÃnajte. Vy rozhodujete ktoré služby, kedy a kde potrebujete, a my vám potom vieme pomôcÅ¥ sústrediÅ¥ sa na prácu - alebo jednoducho prepnúť z práce na Äokoľvek iné.", |
270 | "settings.workspaces.workspacesRequestFailed" : "Could not load your workspaces", | 329 | "settings.workspaces.workspacesRequestFailed" : "Nebolo možné naÄÃtaÅ¥ vaÅ¡e workspace", |
271 | "sidebar.addNewService" : "Pridať novú službu", | 330 | "sidebar.addNewService" : "Pridať novú službu", |
272 | "sidebar.closeWorkspaceDrawer" : "Close workspace drawer", | 331 | "sidebar.closeWorkspaceDrawer" : "Zavrieť workspace záložku", |
273 | "sidebar.muteApp" : "Vypnúť upozornenia a zvuky", | 332 | "sidebar.muteApp" : "Vypnúť upozornenia a zvuky", |
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Otvoriť workspace záložku", |
275 | "sidebar.settings" : "Nastavenia", | 334 | "sidebar.settings" : "Nastavenia", |
276 | "sidebar.unmuteApp" : "Povoliť oznámenia a zvuky", | 335 | "sidebar.unmuteApp" : "Povoliť oznámenia a zvuky", |
277 | "signup.company.label" : "SpoloÄnosÅ¥", | ||
278 | "signup.email.label" : "E-mailová adresa", | 336 | "signup.email.label" : "E-mailová adresa", |
279 | "signup.emailDuplicate" : "PoužÃvateľ s touto e-mailovou adresou už jestvuje", | 337 | "signup.emailDuplicate" : "PoužÃvateľ s touto e-mailovou adresou už jestvuje", |
280 | "signup.firstname.label" : "Krstné meno", | 338 | "signup.firstname.label" : "Krstné meno", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "Už máte úÄet, chcete sa prihlásiÅ¥?", | 344 | "signup.link.login" : "Už máte úÄet, chcete sa prihlásiÅ¥?", |
287 | "signup.password.label" : "Heslo", | 345 | "signup.password.label" : "Heslo", |
288 | "signup.submit.label" : "VytvoriÅ¥ úÄet", | 346 | "signup.submit.label" : "VytvoriÅ¥ úÄet", |
289 | "subscription.euTaxInfo" : "Pre obyvateľov EÚ: môže byť aplikovaná miestna daň", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Žiadne reklamy, nikdy!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "už Äoskoro", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Proxy support for services", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Platený úÄet Premium Supporter Ferdi zahŕňa", | ||
298 | "subscription.paymentSessionError" : "Nepodarilo sa inicializovať platbu od", | ||
299 | "subscription.submit.label" : "Chcem podporiť vývoj aplikácie Franz", | ||
300 | "subscription.type.free" : "zdarma", | ||
301 | "subscription.type.month" : "mesiac", | ||
302 | "subscription.type.year" : "rok", | ||
303 | "subscriptionPopup.buttonCancel" : "Zrušiť", | 353 | "subscriptionPopup.buttonCancel" : "Zrušiť", |
304 | "subscriptionPopup.buttonDone" : "DokonÄiÅ¥", | 354 | "subscriptionPopup.buttonDone" : "DokonÄiÅ¥", |
305 | "tabs.item.deleteService" : "Odstrániť službu", | 355 | "tabs.item.deleteService" : "Odstrániť službu", |
@@ -313,20 +363,20 @@ | |||
313 | "tabs.item.reload" : "Obnoviť", | 363 | "tabs.item.reload" : "Obnoviť", |
314 | "validation.email" : "{field} je neplatný", | 364 | "validation.email" : "{field} je neplatný", |
315 | "validation.minLength" : "{field} by malo byť dlhé aspoň {length} znakov", | 365 | "validation.minLength" : "{field} by malo byť dlhé aspoň {length} znakov", |
316 | "validation.oneRequired" : "At least one is required", | 366 | "validation.oneRequired" : "Je nutné zadať aspoň jeden", |
317 | "validation.required" : "{field} je povinné", | 367 | "validation.required" : "{field} je povinné", |
318 | "validation.url" : "{field} nie je platné URL", | 368 | "validation.url" : "{field} nie je platné URL", |
319 | "welcome.loginButton" : "PrihlásiÅ¥ sa do vášho úÄtu", | 369 | "welcome.loginButton" : "PrihlásiÅ¥ sa do vášho úÄtu", |
320 | "welcome.signupButton" : "VytvoriÅ¥ úÄet zdarma", | 370 | "welcome.signupButton" : "VytvoriÅ¥ úÄet zdarma", |
321 | "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace", | 371 | "workspaceDrawer.addNewWorkspaceLabel" : "Pridať nový workspace", |
322 | "workspaceDrawer.allServices" : "Všetky služby", | 372 | "workspaceDrawer.allServices" : "Všetky služby", |
323 | "workspaceDrawer.headline" : "Pracovný priestor", | 373 | "workspaceDrawer.headline" : "Pracovné plochy", |
324 | "workspaceDrawer.item.contextMenuEdit" : "edit", | 374 | "workspaceDrawer.item.contextMenuEdit" : "Upraviť", |
325 | "workspaceDrawer.item.noServicesAddedYet" : "No services added yet", | 375 | "workspaceDrawer.item.noServicesAddedYet" : "Zatiaľ žiadne služby", |
326 | "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace", | 376 | "workspaceDrawer.premiumCtaButtonLabel" : "Vytvorte váš prvý workspace", |
327 | "workspaceDrawer.proFeatureBadge" : "Premium feature", | 377 | "workspaceDrawer.proFeatureBadge" : "Prémiová funkcia", |
328 | "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account", | 378 | "workspaceDrawer.reactivatePremiumAccountLabel" : "Obnovte svoj prémiový úÄet", |
329 | "workspaceDrawer.workspaceFeatureInfo" : "<p>Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.<\/p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.<\/p>", | 379 | "workspaceDrawer.workspaceFeatureInfo" : "<p>Franz Workspace vám umožňujú sústrediÅ¥ sa na to, Äo je práve dôležité. Nastavte si rozliÄné skupiny služieb a jednoducho medzi nimi kedykoľvek prepÃnajte.<\/p><p>Vy rozhodujete ktoré služby, kedy a kde potrebujete, a my vám potom vieme pomôcÅ¥ sústrediÅ¥ sa na prácu - alebo jednoducho prepnúť z práce na Äokoľvek iné. <\/p>", |
330 | "workspaceDrawer.workspacesSettingsTooltip" : "Edit workspaces settings", | 380 | "workspaceDrawer.workspacesSettingsTooltip" : "Upraviť nastavenia workspace", |
331 | "workspaces.switchingIndicator.switchingTo" : "Switching to" | 381 | "workspaces.switchingIndicator.switchingTo" : "PrepÃnanie na" |
332 | } | 382 | } |
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json index 93d94d065..93e3fb139 100644 --- a/src/i18n/locales/sr.json +++ b/src/i18n/locales/sr.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Ponovno uÄitavanje", | 2 | "app.errorHandler.action" : "Ponovno uÄitavanje", |
3 | "app.errorHandler.headline" : "Something went wrong", | 3 | "app.errorHandler.headline" : "Something went wrong", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Get a Ferdi Supporter License", | 5 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
6 | "feature.delayApp.headline" : "Please purchase a Ferdi Supporter License to skip waiting", | 6 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
7 | "feature.delayApp.text" : "Ferdi will continue in {seconds} seconds.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Get a Franz Supporter License", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Upgrade account", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Send as email", | 13 | "feature.shareFranz.action.email" : "Send as email", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 14 | "feature.shareFranz.action.facebook" : "Share on Facebook", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 15 | "feature.shareFranz.action.twitter" : "Share on Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Nije moguće pristupiti Franz-ovim on-line servisima. ", | 23 | "global.api.unhealthy" : "Nije moguće pristupiti Franz-ovim on-line servisima. ", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Niste povezani sa serverom.", | 25 | "global.notConnectedToTheInternet" : "Niste povezani sa serverom.", |
17 | "global.spellchecker.useDefault" : "Use System Default ({default})", | 26 | "global.spellchecker.useDefault" : "Use System Default ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Spell checking language", | 29 | "global.spellchecking.language" : "Spell checking language", |
21 | "import.headline" : "Uvezite svoje Ferdi 4 servise", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Servis trenutno nije podržan u Ferdi 5", | 31 | "import.headline" : "Uvezite svoje Franz 4 servise", |
32 | "import.notSupportedHeadline" : "Servis trenutno nije podržan u Franz 5", | ||
23 | "import.skip.label" : "Желим да додам уÑлуге ручно", | 33 | "import.skip.label" : "Желим да додам уÑлуге ручно", |
24 | "import.submit.label" : "Uvezi servise", | 34 | "import.submit.label" : "Uvezi servise", |
25 | "infobar.buttonChangelog" : "Å ta je novo? ", | 35 | "infobar.buttonChangelog" : "Å ta je novo? ", |
@@ -27,6 +37,7 @@ | |||
27 | "infobar.buttonReloadServices" : "Ponovo uÄitaj servise ", | 37 | "infobar.buttonReloadServices" : "Ponovo uÄitaj servise ", |
28 | "infobar.requiredRequestsFailed" : "Nemoguće uÄitati servise i korisniÄke informacije", | 38 | "infobar.requiredRequestsFailed" : "Nemoguće uÄitati servise i korisniÄke informacije", |
29 | "infobar.servicesUpdated" : "Vaši servisi su ažurirani. ", | 39 | "infobar.servicesUpdated" : "Vaši servisi su ažurirani. ", |
40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", | ||
30 | "infobar.updateAvailable" : "Novo ažuriranje Franz-a je dostupno. ", | 41 | "infobar.updateAvailable" : "Novo ažuriranje Franz-a je dostupno. ", |
31 | "invite.email.label" : "Vaša e-adresa", | 42 | "invite.email.label" : "Vaša e-adresa", |
32 | "invite.headline.friends" : "Pozovite 3 vaša prijatelja ili kolege", | 43 | "invite.headline.friends" : "Pozovite 3 vaša prijatelja ili kolege", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", | 54 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", |
44 | "login.submit.label" : "Prijavite se", | 55 | "login.submit.label" : "Prijavite se", |
45 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", | 56 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "O Francu", | 59 | "menu.app.about" : "O Francu", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "Potraži ažuriranja", | 61 | "menu.app.checkForUpdates" : "Potraži ažuriranja", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Датотека", | 81 | "menu.file" : "Датотека", |
69 | "menu.help" : "Помоћ", | 82 | "menu.help" : "Помоћ", |
70 | "menu.help.changelog" : "Дневник измена", | 83 | "menu.help.changelog" : "Дневник измена", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Сазнајте више", | 87 | "menu.help.learnMore" : "Сазнајте више", |
72 | "menu.help.privacy" : "Izjava o privatnosti", | 88 | "menu.help.privacy" : "Izjava o privatnosti", |
73 | "menu.help.support" : "Подршка", | 89 | "menu.help.support" : "Подршка", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Додај нову уÑлугу", | 93 | "menu.services.addNewService" : "Додај нову уÑлугу", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Преглед", | 96 | "menu.view" : "Преглед", |
80 | "menu.view.enterFullScreen" : "Отвори у целом екрану", | 97 | "menu.view.enterFullScreen" : "Отвори у целом екрану", |
81 | "menu.view.exitFullScreen" : "ÐапуÑти цео екран", | 98 | "menu.view.exitFullScreen" : "ÐапуÑти цео екран", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Промени алатке за развој", | 102 | "menu.view.toggleDevTools" : "Промени алатке за развој", |
86 | "menu.view.toggleFullScreen" : "Преко целог екрана", | 103 | "menu.view.toggleFullScreen" : "Преко целог екрана", |
87 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 104 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Увећај приказ", | 106 | "menu.view.zoomIn" : "Увећај приказ", |
89 | "menu.view.zoomOut" : "Умањи приказ", | 107 | "menu.view.zoomOut" : "Умањи приказ", |
90 | "menu.window" : "У прозору", | 108 | "menu.window" : "У прозору", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Pošalji", | 121 | "password.submit.label" : "Pošalji", |
104 | "password.successInfo" : "Molimo Vas da provjerite vašu e-mail adresu", | 122 | "password.successInfo" : "Molimo Vas da provjerite vašu e-mail adresu", |
105 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | 123 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
106 | "pricing.headline" : "Podržite Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Ne želim da podržim razvoj Franz-a.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Želim da podržim razvoj Franz-a.", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Izaberite vaš plan za podržavanje", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Osvježi {ime}", | 151 | "service.crashHandler.action" : "Osvježi {ime}", |
111 | "service.crashHandler.autoReload" : "Pokušaću automatski povratiti {ime} u {sekundi} sekundi", | 152 | "service.crashHandler.autoReload" : "Pokušaću automatski povratiti {ime} u {sekundi} sekundi", |
112 | "service.crashHandler.headline" : "O, ne! ", | 153 | "service.crashHandler.headline" : "O, ne! ", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "O, ne! ", | 159 | "service.errorHandler.headline" : "O, ne! ", |
119 | "service.errorHandler.message" : "Greška ", | 160 | "service.errorHandler.message" : "Greška ", |
120 | "service.errorHandler.text" : "{name} has failed to load.", | 161 | "service.errorHandler.text" : "{name} has failed to load.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "ZapoÄnimo! ", | 168 | "services.getStarted" : "ZapoÄnimo! ", |
123 | "services.welcome" : "Dobrodošli u Franz", | 169 | "services.welcome" : "Dobrodošli u Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Promijenite lozinku", | 181 | "settings.account.headlinePassword" : "Promijenite lozinku", |
136 | "settings.account.headlineProfile" : "Ažurirajte profil", | 182 | "settings.account.headlineProfile" : "Ažurirajte profil", |
137 | "settings.account.headlineSubscription" : "Vaša pretplata", | 183 | "settings.account.headlineSubscription" : "Vaša pretplata", |
138 | "settings.account.headlineUpgrade" : "Nadogradite raÄun i podržite Franc", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Preuzmite", | 186 | "settings.account.invoiceDownload" : "Preuzmite", |
140 | "settings.account.manageSubscription.label" : "Upravljajte pretplatama", | 187 | "settings.account.manageSubscription.label" : "Upravljajte pretplatama", |
141 | "settings.account.successInfo" : "Vaše promjene su spremljene", | 188 | "settings.account.successInfo" : "Vaše promjene su spremljene", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Pokušajte ponovno", | 192 | "settings.account.tryReloadServices" : "Pokušajte ponovno", |
143 | "settings.account.tryReloadUserInfoRequest" : "Pokušajte ponovno", | 193 | "settings.account.tryReloadUserInfoRequest" : "Pokušajte ponovno", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Nije moguće uÄitati informacije o korisniku", | 195 | "settings.account.userInfoRequestFailed" : "Nije moguće uÄitati informacije o korisniku", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "ОчиÑти кеш", | 197 | "settings.app.buttonClearAllCache" : "ОчиÑти кеш", |
146 | "settings.app.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje", | 198 | "settings.app.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje", |
147 | "settings.app.buttonSearchForUpdate" : "Potraži ažuriranja", | 199 | "settings.app.buttonSearchForUpdate" : "Potraži ažuriranja", |
@@ -154,6 +206,7 @@ | |||
154 | "settings.app.form.enableGPUAcceleration" : "Омогући убрзање графичке јединице", | 206 | "settings.app.form.enableGPUAcceleration" : "Омогући убрзање графичке јединице", |
155 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", | 207 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", |
156 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", | 208 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Jezik", | 210 | "settings.app.form.language" : "Jezik", |
158 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", | 211 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", |
159 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", | 212 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Vaše usluge", | 235 | "settings.navigation.yourServices" : "Vaše usluge", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Sve usluge", | 237 | "settings.recipes.all" : "Sve usluge", |
185 | "settings.recipes.dev" : "Razvoj", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Dostupne usluge", | 245 | "settings.recipes.headline" : "Dostupne usluge", |
187 | "settings.recipes.missingService" : "Da li neki servis nedostaje?", | 246 | "settings.recipes.missingService" : "Da li neki servis nedostaje?", |
188 | "settings.recipes.mostPopular" : "Najpopularniji", | 247 | "settings.recipes.mostPopular" : "Najpopularniji", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Postavke", | 334 | "sidebar.settings" : "Postavke", |
276 | "sidebar.unmuteApp" : "ИÑкључи обавештења и звукове", | 335 | "sidebar.unmuteApp" : "ИÑкључи обавештења и звукове", |
277 | "signup.company.label" : "Tvrtka", | ||
278 | "signup.email.label" : "Vaša e-adresa", | 336 | "signup.email.label" : "Vaša e-adresa", |
279 | "signup.emailDuplicate" : "Već postoji korisnik s tom e-mail adresom", | 337 | "signup.emailDuplicate" : "Već postoji korisnik s tom e-mail adresom", |
280 | "signup.firstname.label" : "Ime", | 338 | "signup.firstname.label" : "Ime", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "Imate raÄun? Prijavite se.", | 344 | "signup.link.login" : "Imate raÄun? Prijavite se.", |
287 | "signup.password.label" : "Lozinka", | 345 | "signup.password.label" : "Lozinka", |
288 | "signup.submit.label" : "Napravite novi raÄun", | 346 | "signup.submit.label" : "Napravite novi raÄun", |
289 | "subscription.euTaxInfo" : "EU državljani, upozerenje: Moguće taksiranje", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Bez reklama, doživotno!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "Dolazi uskoro", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Proxy support for services", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće:", | ||
298 | "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", | ||
299 | "subscription.submit.label" : "Želim da podržim razvoj Franca.", | ||
300 | "subscription.type.free" : "Slobodno", | ||
301 | "subscription.type.month" : "mjesec", | ||
302 | "subscription.type.year" : "godina", | ||
303 | "subscriptionPopup.buttonCancel" : "Odustani", | 353 | "subscriptionPopup.buttonCancel" : "Odustani", |
304 | "subscriptionPopup.buttonDone" : "Završeno", | 354 | "subscriptionPopup.buttonDone" : "Završeno", |
305 | "tabs.item.deleteService" : "Izbriši servis", | 355 | "tabs.item.deleteService" : "Izbriši servis", |
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json index 860030c11..75e43d1ce 100644 --- a/src/i18n/locales/tr.json +++ b/src/i18n/locales/tr.json | |||
@@ -1,10 +1,15 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Tekrar Yükle", | 2 | "app.errorHandler.action" : "Tekrar Yükle", |
3 | "app.errorHandler.headline" : "Bir terslik çıktı", | 3 | "app.errorHandler.headline" : "Bir terslik çıktı", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Ferdi Destek Lisansı'nı alın", | 5 | "feature.delayApp.headline" : "Beklememek için Franz Destek Lisansı'nı satın alın", |
6 | "feature.delayApp.headline" : "Beklememek için Ferdi Destek Lisansı'nı satın alın", | 6 | "feature.delayApp.text" : "Franz {seconds} saniye sonra devam edecek.", |
7 | "feature.delayApp.text" : "Ferdi {seconds} saniye sonra devam edecek.", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Franz Destek Lisansı'nı alın", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Hesabı Yükselt", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Mail olarak gönder", | 13 | "feature.shareFranz.action.email" : "Mail olarak gönder", |
9 | "feature.shareFranz.action.facebook" : "Facebook'ta PaylaÅŸ", | 14 | "feature.shareFranz.action.facebook" : "Facebook'ta PaylaÅŸ", |
10 | "feature.shareFranz.action.twitter" : "Twitter'da PaylaÅŸ", | 15 | "feature.shareFranz.action.twitter" : "Twitter'da PaylaÅŸ", |
@@ -12,14 +17,19 @@ | |||
12 | "feature.shareFranz.shareText.email" : "Franz'a {count} tane servis ekledim! WhatsApp, Messenger, Slack ve fazlasını içeren ücretsiz uygulamayı www.meetfranz.com adresinden edinin.", | 17 | "feature.shareFranz.shareText.email" : "Franz'a {count} tane servis ekledim! WhatsApp, Messenger, Slack ve fazlasını içeren ücretsiz uygulamayı www.meetfranz.com adresinden edinin.", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Arkadaşlarına ve meslektaşlarına Franz'ın ne kadar harika olduğunu söyle ve bize bu kelimeyi yaymamızda yardım et.", | 19 | "feature.shareFranz.text" : "Arkadaşlarına ve meslektaşlarına Franz'ın ne kadar harika olduğunu söyle ve bize bu kelimeyi yaymamızda yardım et.", |
15 | "global.api.unhealthy" : "Ferdi hizmetlerine ÅŸu anda eriÅŸilemiyor", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "Franz hizmetlerine ÅŸu anda eriÅŸilemiyor", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "İnternete bağlı değilsiniz.", | 25 | "global.notConnectedToTheInternet" : "İnternete bağlı değilsiniz.", |
17 | "global.spellchecker.useDefault" : "Sistem Dilini Kullan ({default})", | 26 | "global.spellchecker.useDefault" : "Sistem Dilini Kullan ({default})", |
18 | "global.spellchecking.autodetect" : "Dili otomatik tespit et", | 27 | "global.spellchecking.autodetect" : "Dili otomatik tespit et", |
19 | "global.spellchecking.autodetect.short" : "Otomatik", | 28 | "global.spellchecking.autodetect.short" : "Otomatik", |
20 | "global.spellchecking.language" : "Ä°mla kontrol dili", | 29 | "global.spellchecking.language" : "Ä°mla kontrol dili", |
21 | "import.headline" : "Ferdi 4 servislerinizi içeri aktarın", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Henüz Ferdi 5'te desteklenmeyen servisler", | 31 | "import.headline" : "Franz 4 servislerinizi içeri aktarın", |
32 | "import.notSupportedHeadline" : "Henüz Franz 5'te desteklenmeyen servisler", | ||
23 | "import.skip.label" : "Servisleri kendim eklemek istiyorum", | 33 | "import.skip.label" : "Servisleri kendim eklemek istiyorum", |
24 | "import.submit.label" : "Servisleri içe aktar", | 34 | "import.submit.label" : "Servisleri içe aktar", |
25 | "infobar.buttonChangelog" : "Yeni ne var?", | 35 | "infobar.buttonChangelog" : "Yeni ne var?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Hizmetleri yeniden yükle", | 37 | "infobar.buttonReloadServices" : "Hizmetleri yeniden yükle", |
28 | "infobar.requiredRequestsFailed" : "Hizmetler ve kullanıcı bilgileri yüklenemedi", | 38 | "infobar.requiredRequestsFailed" : "Hizmetler ve kullanıcı bilgileri yüklenemedi", |
29 | "infobar.servicesUpdated" : "Hizmetleriniz güncellendi.", | 39 | "infobar.servicesUpdated" : "Hizmetleriniz güncellendi.", |
30 | "infobar.updateAvailable" : "Yeni Ferdi güncellemesi mevcut.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Yeni Franz güncellemesi mevcut.", | ||
31 | "invite.email.label" : "E-posta adresi", | 42 | "invite.email.label" : "E-posta adresi", |
32 | "invite.headline.friends" : "3 arkadaşını ya da çalışma arkadaşını davet et", | 43 | "invite.headline.friends" : "3 arkadaşını ya da çalışma arkadaşını davet et", |
33 | "invite.name.label" : "Ad", | 44 | "invite.name.label" : "Ad", |
@@ -43,8 +54,10 @@ | |||
43 | "login.serverLogout" : "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.", | 54 | "login.serverLogout" : "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.", |
44 | "login.submit.label" : "Oturum Aç", | 55 | "login.submit.label" : "Oturum Aç", |
45 | "login.tokenExpired" : "Oturum zaman aşımına uğradı, lütfen tekrar giriş yapın.", | 56 | "login.tokenExpired" : "Oturum zaman aşımına uğradı, lütfen tekrar giriş yapın.", |
46 | "menu.app.about" : "Ferdi Hakkında", | 57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", |
47 | "menu.app.announcement" : "What's new?", | 58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", |
59 | "menu.app.about" : "Franz Hakkında", | ||
60 | "menu.app.announcement" : "Neler yeni?", | ||
48 | "menu.app.checkForUpdates" : "Güncellemeleri kontrol et", | 61 | "menu.app.checkForUpdates" : "Güncellemeleri kontrol et", |
49 | "menu.app.hide" : "Gizle", | 62 | "menu.app.hide" : "Gizle", |
50 | "menu.app.hideOthers" : "DiÄŸerlerini Gizle", | 63 | "menu.app.hideOthers" : "DiÄŸerlerini Gizle", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Dosya", | 81 | "menu.file" : "Dosya", |
69 | "menu.help" : "Yardım", | 82 | "menu.help" : "Yardım", |
70 | "menu.help.changelog" : "Değişim Günlüğü", | 83 | "menu.help.changelog" : "Değişim Günlüğü", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Daha Fazlasını Öğrenin", | 87 | "menu.help.learnMore" : "Daha Fazlasını Öğrenin", |
72 | "menu.help.privacy" : "Gizlilik Sözleşmesi", | 88 | "menu.help.privacy" : "Gizlilik Sözleşmesi", |
73 | "menu.help.support" : "Destek", | 89 | "menu.help.support" : "Destek", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Yeni servis ekle...", | 93 | "menu.services.addNewService" : "Yeni servis ekle...", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "Görünüm", | 96 | "menu.view" : "Görünüm", |
80 | "menu.view.enterFullScreen" : "Tam Ekrana Geç", | 97 | "menu.view.enterFullScreen" : "Tam Ekrana Geç", |
81 | "menu.view.exitFullScreen" : "Tam Ekrandan Çık", | 98 | "menu.view.exitFullScreen" : "Tam Ekrandan Çık", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Geliştirici Araçlarına Geç", | 102 | "menu.view.toggleDevTools" : "Geliştirici Araçlarına Geç", |
86 | "menu.view.toggleFullScreen" : "Tam Ekrana Geç", | 103 | "menu.view.toggleFullScreen" : "Tam Ekrana Geç", |
87 | "menu.view.toggleServiceDevTools" : "Hizmet Geliştirici Araçlarını Değiştir", | 104 | "menu.view.toggleServiceDevTools" : "Hizmet Geliştirici Araçlarını Değiştir", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Yakınlaştır", | 106 | "menu.view.zoomIn" : "Yakınlaştır", |
89 | "menu.view.zoomOut" : "Uzaklaştır", | 107 | "menu.view.zoomOut" : "Uzaklaştır", |
90 | "menu.window" : "Pencere", | 108 | "menu.window" : "Pencere", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Gönder", | 121 | "password.submit.label" : "Gönder", |
104 | "password.successInfo" : "E-postanızı kontrol ediniz", | 122 | "password.successInfo" : "E-postanızı kontrol ediniz", |
105 | "premiumFeature.button.upgradeAccount" : "Hesabı Yükselt", | 123 | "premiumFeature.button.upgradeAccount" : "Hesabı Yükselt", |
106 | "pricing.headline" : "Franz'ı Destekle", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Franz'ın gelişimini desteklemek istemiyorum.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Destek planınızı seçiniz", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "{name} yeniden yükle", | 151 | "service.crashHandler.action" : "{name} yeniden yükle", |
111 | "service.crashHandler.autoReload" : "{name}'i {seconds} saniye içerisinde otomatik onarmayı deniyoruz", | 152 | "service.crashHandler.autoReload" : "{name}'i {seconds} saniye içerisinde otomatik onarmayı deniyoruz", |
112 | "service.crashHandler.headline" : "Aman Tanrım hayır!", | 153 | "service.crashHandler.headline" : "Aman Tanrım hayır!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "Hayııırrr!", | 159 | "service.errorHandler.headline" : "Hayııırrr!", |
119 | "service.errorHandler.message" : "Hata", | 160 | "service.errorHandler.message" : "Hata", |
120 | "service.errorHandler.text" : "{name} yüklenemedi.", | 161 | "service.errorHandler.text" : "{name} yüklenemedi.", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Yükleniyor", | 167 | "service.webviewLoader.loading" : "Yükleniyor", |
122 | "services.getStarted" : "Haydi başlayalım", | 168 | "services.getStarted" : "Haydi başlayalım", |
123 | "services.welcome" : "Franz'a HoÅŸgeldiniz", | 169 | "services.welcome" : "Franz'a HoÅŸgeldiniz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Parolayı değiştir", | 181 | "settings.account.headlinePassword" : "Parolayı değiştir", |
136 | "settings.account.headlineProfile" : "Profili güncelle", | 182 | "settings.account.headlineProfile" : "Profili güncelle", |
137 | "settings.account.headlineSubscription" : "AboneliÄŸin", | 183 | "settings.account.headlineSubscription" : "AboneliÄŸin", |
138 | "settings.account.headlineUpgrade" : "Hesabını yükselt & Franz'ı destekle", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Ä°ndir", | 186 | "settings.account.invoiceDownload" : "Ä°ndir", |
140 | "settings.account.manageSubscription.label" : "Aboneliğini yönet", | 187 | "settings.account.manageSubscription.label" : "Aboneliğini yönet", |
141 | "settings.account.successInfo" : "DeÄŸiÅŸikliklerin kaydedildi", | 188 | "settings.account.successInfo" : "DeÄŸiÅŸikliklerin kaydedildi", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Tekrar deneyin", | 192 | "settings.account.tryReloadServices" : "Tekrar deneyin", |
143 | "settings.account.tryReloadUserInfoRequest" : "Tekrar deneyin", | 193 | "settings.account.tryReloadUserInfoRequest" : "Tekrar deneyin", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Kullanıcı bilgisi yüklenemedi", | 195 | "settings.account.userInfoRequestFailed" : "Kullanıcı bilgisi yüklenemedi", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "Önbelleği temizle", | 197 | "settings.app.buttonClearAllCache" : "Önbelleği temizle", |
146 | "settings.app.buttonInstallUpdate" : "Yeniden Başlat ve Güncelleştirmeleri Kur", | 198 | "settings.app.buttonInstallUpdate" : "Yeniden Başlat ve Güncelleştirmeleri Kur", |
147 | "settings.app.buttonSearchForUpdate" : "Güncellemeleri kontrol et", | 199 | "settings.app.buttonSearchForUpdate" : "Güncellemeleri kontrol et", |
@@ -154,6 +206,7 @@ | |||
154 | "settings.app.form.enableGPUAcceleration" : "Grafik İşlemci Ünitesi (GPU) Hızlandırıcısını Aktif et", | 206 | "settings.app.form.enableGPUAcceleration" : "Grafik İşlemci Ünitesi (GPU) Hızlandırıcısını Aktif et", |
155 | "settings.app.form.enableSpellchecking" : "Yazım denetimini etkinleştir", | 207 | "settings.app.form.enableSpellchecking" : "Yazım denetimini etkinleştir", |
156 | "settings.app.form.enableSystemTray" : "Franz'ı sistem tepsisinde göster", | 208 | "settings.app.form.enableSystemTray" : "Franz'ı sistem tepsisinde göster", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Dil", | 210 | "settings.app.form.language" : "Dil", |
158 | "settings.app.form.minimizeToSystemTray" : "Franz'ı sistem tepsisine küçült", | 211 | "settings.app.form.minimizeToSystemTray" : "Franz'ı sistem tepsisine küçült", |
159 | "settings.app.form.runInBackground" : "Pencereyi kapatırken Franz'ı arka planda tut", | 212 | "settings.app.form.runInBackground" : "Pencereyi kapatırken Franz'ı arka planda tut", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Servislerin", | 235 | "settings.navigation.yourServices" : "Servislerin", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Tüm servisler", | 237 | "settings.recipes.all" : "Tüm servisler", |
185 | "settings.recipes.dev" : "GeliÅŸtirme", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "Mevcut servisler", | 245 | "settings.recipes.headline" : "Mevcut servisler", |
187 | "settings.recipes.missingService" : "Aradığın servisi bulamadın mı?", | 246 | "settings.recipes.missingService" : "Aradığın servisi bulamadın mı?", |
188 | "settings.recipes.mostPopular" : "En popüler", | 247 | "settings.recipes.mostPopular" : "En popüler", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "Ayarlar", | 334 | "sidebar.settings" : "Ayarlar", |
276 | "sidebar.unmuteApp" : "Bildirimleri ve sesli uyarıları etkinleştir", | 335 | "sidebar.unmuteApp" : "Bildirimleri ve sesli uyarıları etkinleştir", |
277 | "signup.company.label" : "Kurum", | ||
278 | "signup.email.label" : "E-posta adresi", | 336 | "signup.email.label" : "E-posta adresi", |
279 | "signup.emailDuplicate" : "Bu email adresine sahip bir kullanıcı zaten mevcut", | 337 | "signup.emailDuplicate" : "Bu email adresine sahip bir kullanıcı zaten mevcut", |
280 | "signup.firstname.label" : "Ad", | 338 | "signup.firstname.label" : "Ad", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "Hali hazırda hesabınız varsa giriş yapmak ister misiniz?", | 344 | "signup.link.login" : "Hali hazırda hesabınız varsa giriş yapmak ister misiniz?", |
287 | "signup.password.label" : "Åžifre", | 345 | "signup.password.label" : "Åžifre", |
288 | "signup.submit.label" : "Hesap oluÅŸtur", | 346 | "signup.submit.label" : "Hesap oluÅŸtur", |
289 | "subscription.euTaxInfo" : "AB vatandaşları: yerel satış vergileri uygulanabilir", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Reklam yok, asla!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "yakında geliyor", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "Uygulama gecikmeleri & yükseltme lisanları için dırdır yok", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "Mattermost gibi şirket-içi\/barındırılan servisler ekleyin", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Servisler için proxy desteği", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Yazım denetleyicisi desteği", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Ücretli Ferdi Premium Destekçi Hesabına dahil", | ||
298 | "subscription.paymentSessionError" : "Ödeme formu başlatılamadı", | ||
299 | "subscription.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", | ||
300 | "subscription.type.free" : "ücretsiz", | ||
301 | "subscription.type.month" : "ay", | ||
302 | "subscription.type.year" : "yıl", | ||
303 | "subscriptionPopup.buttonCancel" : "Ä°ptal", | 353 | "subscriptionPopup.buttonCancel" : "Ä°ptal", |
304 | "subscriptionPopup.buttonDone" : "Tamamlandı", | 354 | "subscriptionPopup.buttonDone" : "Tamamlandı", |
305 | "tabs.item.deleteService" : "Servisi sil", | 355 | "tabs.item.deleteService" : "Servisi sil", |
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index fe8f44d19..ee53608e6 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "Перезавантажити", | 2 | "app.errorHandler.action" : "Перезавантажити", |
3 | "app.errorHandler.headline" : "ЩоÑÑŒ пішло не так", | 3 | "app.errorHandler.headline" : "ЩоÑÑŒ пішло не так", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "Changes in Franz {version}", |
5 | "feature.delayApp.action" : "Отримати ліцензію Ferdi Supporter ", | 5 | "feature.delayApp.headline" : "Будь лаÑка, придбайте ліцензію Franz Supporter аби пропуÑтити очікуваннÑ", |
6 | "feature.delayApp.headline" : "Будь лаÑка, придбайте ліцензію Ferdi Supporter аби пропуÑтити очікуваннÑ", | 6 | "feature.delayApp.text" : "Franz відновить роботу за {seconds} Ñекунд", |
7 | "feature.delayApp.text" : "Ferdi відновить роботу за {seconds} Ñекунд", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", | ||
9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", | ||
10 | "feature.delayApp.upgrade.action" : "Отримати ліцензію Franz Supporter ", | ||
11 | "feature.delayApp.upgrade.actionShort" : "Преміум акаунт", | ||
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
8 | "feature.shareFranz.action.email" : "Send as email", | 13 | "feature.shareFranz.action.email" : "Send as email", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 14 | "feature.shareFranz.action.facebook" : "Share on Facebook", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 15 | "feature.shareFranz.action.twitter" : "Share on Twitter", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 16 | "feature.shareFranz.headline" : "Ferdi is better together!", |
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", |
20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", | ||
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
15 | "global.api.unhealthy" : "Ðе можливо підключитиÑÑŒ до онлайн ÑервіÑів Franz", | 23 | "global.api.unhealthy" : "Ðе можливо підключитиÑÑŒ до онлайн ÑервіÑів Franz", |
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.", | 25 | "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.", |
17 | "global.spellchecker.useDefault" : "ВикориÑтовувати ÑиÑтемні параметри за змовчуваннÑм ({default})", | 26 | "global.spellchecker.useDefault" : "ВикориÑтовувати ÑиÑтемні параметри за змовчуваннÑм ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "Detect language automatically", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "Automatic", |
20 | "global.spellchecking.language" : "Мова перевірки правопиÑу", | 29 | "global.spellchecking.language" : "Мова перевірки правопиÑу", |
21 | "import.headline" : "Імпортувати ваші ÑервіÑи з Ferdi 4", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Ðаразі ÑервіÑи не підтримуютьÑÑ Ñƒ Ferdi 5", | 31 | "import.headline" : "Імпортувати ваші ÑервіÑи з Franz 4", |
32 | "import.notSupportedHeadline" : "Ðаразі ÑервіÑи не підтримуютьÑÑ Ñƒ Franz 5", | ||
23 | "import.skip.label" : "Я бажаю додати ÑÐµÑ€Ð²Ñ–Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ", | 33 | "import.skip.label" : "Я бажаю додати ÑÐµÑ€Ð²Ñ–Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ", |
24 | "import.submit.label" : "Імпортувати ÑервіÑи", | 34 | "import.submit.label" : "Імпортувати ÑервіÑи", |
25 | "infobar.buttonChangelog" : "Що нового?", | 35 | "infobar.buttonChangelog" : "Що нового?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "Перезавантажити ÑервіÑи", | 37 | "infobar.buttonReloadServices" : "Перезавантажити ÑервіÑи", |
28 | "infobar.requiredRequestsFailed" : "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑервіÑи та інформацію кориÑтувача", | 38 | "infobar.requiredRequestsFailed" : "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑервіÑи та інформацію кориÑтувача", |
29 | "infobar.servicesUpdated" : "Ваші ÑервіÑи було оновлено.", | 39 | "infobar.servicesUpdated" : "Ваші ÑервіÑи було оновлено.", |
30 | "infobar.updateAvailable" : "Ðове Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ferdi доÑтупне.", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Ðове Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Franz доÑтупне.", | ||
31 | "invite.email.label" : "Email адреÑа", | 42 | "invite.email.label" : "Email адреÑа", |
32 | "invite.headline.friends" : "ЗапроÑÑ–Ñ‚ÑŒ 3-Ñ… ваших друзів або колег", | 43 | "invite.headline.friends" : "ЗапроÑÑ–Ñ‚ÑŒ 3-Ñ… ваших друзів або колег", |
33 | "invite.name.label" : "Ім'Ñ", | 44 | "invite.name.label" : "Ім'Ñ", |
@@ -43,6 +54,8 @@ | |||
43 | "login.serverLogout" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, увійдіть знову.", | 54 | "login.serverLogout" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, увійдіть знову.", |
44 | "login.submit.label" : "Увійти", | 55 | "login.submit.label" : "Увійти", |
45 | "login.tokenExpired" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, увійдіть знову.", | 56 | "login.tokenExpired" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, увійдіть знову.", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "Про Franz", | 59 | "menu.app.about" : "Про Franz", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "What's new?", |
48 | "menu.app.checkForUpdates" : "Перевірити наÑвніÑÑ‚ÑŒ оновлень", | 61 | "menu.app.checkForUpdates" : "Перевірити наÑвніÑÑ‚ÑŒ оновлень", |
@@ -68,6 +81,9 @@ | |||
68 | "menu.file" : "Файл", | 81 | "menu.file" : "Файл", |
69 | "menu.help" : "Довідка", | 82 | "menu.help" : "Довідка", |
70 | "menu.help.changelog" : "Журнал змін", | 83 | "menu.help.changelog" : "Журнал змін", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "Докладніше", | 87 | "menu.help.learnMore" : "Докладніше", |
72 | "menu.help.privacy" : "ЗаÑва про конфіденційніÑÑ‚ÑŒ", | 88 | "menu.help.privacy" : "ЗаÑва про конфіденційніÑÑ‚ÑŒ", |
73 | "menu.help.support" : "Підтримка", | 89 | "menu.help.support" : "Підтримка", |
@@ -76,6 +92,7 @@ | |||
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "Activate previous service", |
77 | "menu.services.addNewService" : "Додати ÑервіÑ", | 93 | "menu.services.addNewService" : "Додати ÑервіÑ", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "Activate next service", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "ВиглÑд", | 96 | "menu.view" : "ВиглÑд", |
80 | "menu.view.enterFullScreen" : "Вікно на повний екран", | 97 | "menu.view.enterFullScreen" : "Вікно на повний екран", |
81 | "menu.view.exitFullScreen" : "Вийти з повного екрану", | 98 | "menu.view.exitFullScreen" : "Вийти з повного екрану", |
@@ -85,6 +102,7 @@ | |||
85 | "menu.view.toggleDevTools" : "Переключити інÑтрумент розробника", | 102 | "menu.view.toggleDevTools" : "Переключити інÑтрумент розробника", |
86 | "menu.view.toggleFullScreen" : "ПереключитиÑÑ Ð½Ð° повний екран", | 103 | "menu.view.toggleFullScreen" : "ПереключитиÑÑ Ð½Ð° повний екран", |
87 | "menu.view.toggleServiceDevTools" : "Переключити інÑтрументи розробника ÑервіÑу", | 104 | "menu.view.toggleServiceDevTools" : "Переключити інÑтрументи розробника ÑервіÑу", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "Збільшити маÑштаб", | 106 | "menu.view.zoomIn" : "Збільшити маÑштаб", |
89 | "menu.view.zoomOut" : "Зменьшити маÑштаб", | 107 | "menu.view.zoomOut" : "Зменьшити маÑштаб", |
90 | "menu.window" : "Вікно", | 108 | "menu.window" : "Вікно", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "Подати", | 121 | "password.submit.label" : "Подати", |
104 | "password.successInfo" : "Будь лаÑка, перевірте ваш email", | 122 | "password.successInfo" : "Будь лаÑка, перевірте ваш email", |
105 | "premiumFeature.button.upgradeAccount" : "Преміум акаунт", | 123 | "premiumFeature.button.upgradeAccount" : "Преміум акаунт", |
106 | "pricing.headline" : "Підтримайте Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "Я не хочу підтримувати розробку Franz.", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "Я хочу підтримати розробку Franz", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "Виберіть Ñвій план підтримки", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "Workspaces", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "Перезавантажити {name}", | 151 | "service.crashHandler.action" : "Перезавантажити {name}", |
111 | "service.crashHandler.autoReload" : "Спробую автоматично відновити {name} через {seconds} Ñ", | 152 | "service.crashHandler.autoReload" : "Спробую автоматично відновити {name} через {seconds} Ñ", |
112 | "service.crashHandler.headline" : "О, ні!", | 153 | "service.crashHandler.headline" : "О, ні!", |
@@ -118,6 +159,11 @@ | |||
118 | "service.errorHandler.headline" : "О, ні!", | 159 | "service.errorHandler.headline" : "О, ні!", |
119 | "service.errorHandler.message" : "Помилка", | 160 | "service.errorHandler.message" : "Помилка", |
120 | "service.errorHandler.text" : "{name} не завантажено", | 161 | "service.errorHandler.text" : "{name} не завантажено", |
162 | "service.restrictedHandler.action" : "Upgrade Account", | ||
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
121 | "service.webviewLoader.loading" : "Loading", | 167 | "service.webviewLoader.loading" : "Loading", |
122 | "services.getStarted" : "Почати", | 168 | "services.getStarted" : "Почати", |
123 | "services.welcome" : "ЛаÑкаво проÑимо в Franz", | 169 | "services.welcome" : "ЛаÑкаво проÑимо в Franz", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "Змінити пароль", | 181 | "settings.account.headlinePassword" : "Змінити пароль", |
136 | "settings.account.headlineProfile" : "Оновити профіль", | 182 | "settings.account.headlineProfile" : "Оновити профіль", |
137 | "settings.account.headlineSubscription" : "Ваша підпиÑка", | 183 | "settings.account.headlineSubscription" : "Ваша підпиÑка", |
138 | "settings.account.headlineUpgrade" : "Оновити ваш акаунт і підтримати Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "Завантажити", | 186 | "settings.account.invoiceDownload" : "Завантажити", |
140 | "settings.account.manageSubscription.label" : "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾ÑŽ підпиÑкою", | 187 | "settings.account.manageSubscription.label" : "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾ÑŽ підпиÑкою", |
141 | "settings.account.successInfo" : "Ваші зміни були збережені", | 188 | "settings.account.successInfo" : "Ваші зміни були збережені", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "Спробуйте ще раз", | 192 | "settings.account.tryReloadServices" : "Спробуйте ще раз", |
143 | "settings.account.tryReloadUserInfoRequest" : "Спробуйте ще раз", | 193 | "settings.account.tryReloadUserInfoRequest" : "Спробуйте ще раз", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ інформацію кориÑтувача", | 195 | "settings.account.userInfoRequestFailed" : "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ інформацію кориÑтувача", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "ОчиÑтити кеш", | 197 | "settings.app.buttonClearAllCache" : "ОчиÑтити кеш", |
146 | "settings.app.buttonInstallUpdate" : "Перезавантажити Ñ– вÑтановити оновленнÑ", | 198 | "settings.app.buttonInstallUpdate" : "Перезавантажити Ñ– вÑтановити оновленнÑ", |
147 | "settings.app.buttonSearchForUpdate" : "Перевірити наÑвніÑÑ‚ÑŒ оновлень", | 199 | "settings.app.buttonSearchForUpdate" : "Перевірити наÑвніÑÑ‚ÑŒ оновлень", |
@@ -153,7 +205,8 @@ | |||
153 | "settings.app.form.darkMode" : "Переходь на Темну Сторону", | 205 | "settings.app.form.darkMode" : "Переходь на Темну Сторону", |
154 | "settings.app.form.enableGPUAcceleration" : "Ввімкнути приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ GPU", | 206 | "settings.app.form.enableGPUAcceleration" : "Ввімкнути приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ GPU", |
155 | "settings.app.form.enableSpellchecking" : "Увімкнути перевірку орфографії", | 207 | "settings.app.form.enableSpellchecking" : "Увімкнути перевірку орфографії", |
156 | "settings.app.form.enableSystemTray" : "Показувати Ferdi у ÑиÑтемному лотку", | 208 | "settings.app.form.enableSystemTray" : "Показувати Franz у ÑиÑтемному лотку", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "Мова", | 210 | "settings.app.form.language" : "Мова", |
158 | "settings.app.form.minimizeToSystemTray" : "Мінімізувати Ferdi до ÑиÑтемного лотка", | 211 | "settings.app.form.minimizeToSystemTray" : "Мінімізувати Ferdi до ÑиÑтемного лотка", |
159 | "settings.app.form.runInBackground" : "Тримати Ferdi в фоні при закритті вікна", | 212 | "settings.app.form.runInBackground" : "Тримати Ferdi в фоні при закритті вікна", |
@@ -182,7 +235,13 @@ | |||
182 | "settings.navigation.yourServices" : "Ваші ÑервіÑи", | 235 | "settings.navigation.yourServices" : "Ваші ÑервіÑи", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "Your workspaces", |
184 | "settings.recipes.all" : "Ð’ÑÑ– ÑервіÑи", | 237 | "settings.recipes.all" : "Ð’ÑÑ– ÑервіÑи", |
185 | "settings.recipes.dev" : "Розробка", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "ДоÑтупні ÑервіÑи", | 245 | "settings.recipes.headline" : "ДоÑтупні ÑервіÑи", |
187 | "settings.recipes.missingService" : "Ðе знайшли ÑервіÑу?", | 246 | "settings.recipes.missingService" : "Ðе знайшли ÑервіÑу?", |
188 | "settings.recipes.mostPopular" : "Ðайбільш популÑрні", | 247 | "settings.recipes.mostPopular" : "Ðайбільш популÑрні", |
@@ -274,7 +333,6 @@ | |||
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", |
275 | "sidebar.settings" : "ÐалаштуваннÑ", | 334 | "sidebar.settings" : "ÐалаштуваннÑ", |
276 | "sidebar.unmuteApp" : "Увімкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° звуки", | 335 | "sidebar.unmuteApp" : "Увімкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° звуки", |
277 | "signup.company.label" : "КомпаніÑ", | ||
278 | "signup.email.label" : "Email адреÑа", | 336 | "signup.email.label" : "Email адреÑа", |
279 | "signup.emailDuplicate" : "КориÑтувач із цією email адреÑою вже Ñ–Ñнує", | 337 | "signup.emailDuplicate" : "КориÑтувач із цією email адреÑою вже Ñ–Ñнує", |
280 | "signup.firstname.label" : "Ім`Ñ", | 338 | "signup.firstname.label" : "Ім`Ñ", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "У Ð²Ð°Ñ Ð²Ð¶Ðµ Ñ” обліковий запиÑ, увійти?", | 344 | "signup.link.login" : "У Ð²Ð°Ñ Ð²Ð¶Ðµ Ñ” обліковий запиÑ, увійти?", |
287 | "signup.password.label" : "Пароль", | 345 | "signup.password.label" : "Пароль", |
288 | "signup.submit.label" : "Створити акаунт", | 346 | "signup.submit.label" : "Створити акаунт", |
289 | "subscription.euTaxInfo" : "Ð”Ð»Ñ Ð¶Ð¸Ñ‚ÐµÐ»Ñ–Ð² ЄС: можуть заÑтоÑовуватиÑÑ Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐ¸", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "Жодної реклами!", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "очікуйте незабаром", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "ÐÑ–Ñких затримок та набридливих пропозицій з платних підпиÑок", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "СервіÑи, що виконуютьÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾\/вимагають хоÑтингу, приміром Mattermost", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "Підтримка прокÑÑ– ", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "Підтримка перевірки правопиÑу", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Платний Преміальний Ðкаунт Прихильника Ferdi включає", | ||
298 | "subscription.paymentSessionError" : "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ форму платежу", | ||
299 | "subscription.submit.label" : "Я хочу підтримати розробку Franz", | ||
300 | "subscription.type.free" : "безплатно", | ||
301 | "subscription.type.month" : "міÑÑць", | ||
302 | "subscription.type.year" : "рік", | ||
303 | "subscriptionPopup.buttonCancel" : "Відмінити", | 353 | "subscriptionPopup.buttonCancel" : "Відмінити", |
304 | "subscriptionPopup.buttonDone" : "Готово", | 354 | "subscriptionPopup.buttonDone" : "Готово", |
305 | "tabs.item.deleteService" : "Видалити ÑервіÑ", | 355 | "tabs.item.deleteService" : "Видалити ÑервіÑ", |
diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index dd004c821..58d1d7b5d 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json | |||
@@ -1,25 +1,35 @@ | |||
1 | { | 1 | { |
2 | "app.errorHandler.action" : "é‡æ–°è¼‰å…¥", | 2 | "app.errorHandler.action" : "é‡æ–°æ•´ç†", |
3 | "app.errorHandler.headline" : "有些æ±è¥¿å‡ºéŒ¯äº†", | 3 | "app.errorHandler.headline" : "糟糕ï¼æœ‰äº›åœ°æ–¹å‡ºå•é¡Œäº†ã€‚", |
4 | "feature.announcements.changelog.headline" : "Changes in Ferdi {version}", | 4 | "feature.announcements.changelog.headline" : "é€éŽ email 傳é€", |
5 | "feature.delayApp.action" : "å–å¾— Ferdi 支æ´æŽˆæ¬Š", | 5 | "feature.delayApp.headline" : "請購買 Franz 支æ´æŽˆæ¬Šä»¥è·³éŽç‰å€™", |
6 | "feature.delayApp.headline" : "請購買 Ferdi 支æ´æŽˆæ¬Šä»¥è·³éŽç‰å€™", | 6 | "feature.delayApp.text" : "Franz 會在 {seconds} 秒後繼續。", |
7 | "feature.delayApp.text" : "Ferdi 會在 {seconds} 秒後繼續。", | 7 | "feature.delayApp.trial.action" : "Yes, I want the free 14 day trial of Franz Professional", |
8 | "feature.shareFranz.action.email" : "Send as email", | 8 | "feature.delayApp.trial.actionShort" : "Activate the free Franz Professional trial", |
9 | "feature.shareFranz.action.facebook" : "Share on Facebook", | 9 | "feature.delayApp.trial.headline" : "Get the free Franz Professional 14 day trial and skip the line", |
10 | "feature.shareFranz.action.twitter" : "Share on Twitter", | 10 | "feature.delayApp.upgrade.action" : "å–å¾— Franz 支æ´æŽˆæ¬Š", |
11 | "feature.shareFranz.headline" : "Ferdi is better together!", | 11 | "feature.delayApp.upgrade.actionShort" : "å‡ç´šå¸³è™Ÿ", |
12 | "feature.serviceLimit.limitReached" : "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", | ||
13 | "feature.shareFranz.action.email" : "以電å郵件傳é€", | ||
14 | "feature.shareFranz.action.facebook" : "é€éŽ Facebook 分享", | ||
15 | "feature.shareFranz.action.twitter" : "在 Twitter 上分享", | ||
16 | "feature.shareFranz.headline" : "Franz is better together!", | ||
12 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 17 | "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", |
13 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", | 18 | "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", |
14 | "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 19 | "feature.shareFranz.text" : "告訴所有朋å‹å’ŒåŒäº‹Franz有多棒ï¼", |
15 | "global.api.unhealthy" : "無法連線至 Ferdi 的伺æœå™¨", | 20 | "feature.todos.premium.info" : "Franz Todos are available to premium users now!", |
21 | "feature.todos.premium.rollout" : "Everyone else will have to wait a little longer.", | ||
22 | "feature.todos.premium.upgrade" : "Upgrade Account", | ||
23 | "global.api.unhealthy" : "無法連線至 Franz 的伺æœå™¨", | ||
24 | "global.franzProRequired" : "Franz Professional Required", | ||
16 | "global.notConnectedToTheInternet" : "ä½ æ²’æœ‰é€£ä¸Šç¶²è·¯ã€‚", | 25 | "global.notConnectedToTheInternet" : "ä½ æ²’æœ‰é€£ä¸Šç¶²è·¯ã€‚", |
17 | "global.spellchecker.useDefault" : "使用系統é è¨ ({default})", | 26 | "global.spellchecker.useDefault" : "使用系統é è¨ ({default})", |
18 | "global.spellchecking.autodetect" : "Detect language automatically", | 27 | "global.spellchecking.autodetect" : "自動åµæ¸¬èªžè¨€", |
19 | "global.spellchecking.autodetect.short" : "Automatic", | 28 | "global.spellchecking.autodetect.short" : "自動的", |
20 | "global.spellchecking.language" : "拼å—檢查語言", | 29 | "global.spellchecking.language" : "拼å—檢查語言", |
21 | "import.headline" : "匯入 Ferdi 4 çš„æœå‹™", | 30 | "global.upgradeButton.upgradeToPro" : "Upgrade to Franz Professional", |
22 | "import.notSupportedHeadline" : "Ferdi 5 尚未支æ´æ¤æœå‹™", | 31 | "import.headline" : "匯入 Franz 4 çš„æœå‹™", |
32 | "import.notSupportedHeadline" : "Franz 5 尚未支æ´æ¤æœå‹™", | ||
23 | "import.skip.label" : "æ‰‹å‹•æ·»åŠ æœå‹™", | 33 | "import.skip.label" : "æ‰‹å‹•æ·»åŠ æœå‹™", |
24 | "import.submit.label" : "匯入æœå‹™", | 34 | "import.submit.label" : "匯入æœå‹™", |
25 | "infobar.buttonChangelog" : "有什麼新功能呢?", | 35 | "infobar.buttonChangelog" : "有什麼新功能呢?", |
@@ -27,7 +37,8 @@ | |||
27 | "infobar.buttonReloadServices" : "é‡æ–°è¼‰å…¥æœå‹™", | 37 | "infobar.buttonReloadServices" : "é‡æ–°è¼‰å…¥æœå‹™", |
28 | "infobar.requiredRequestsFailed" : "無法載入æœå‹™å’Œä½¿ç”¨è€…資訊", | 38 | "infobar.requiredRequestsFailed" : "無法載入æœå‹™å’Œä½¿ç”¨è€…資訊", |
29 | "infobar.servicesUpdated" : "å·²ç¶“æ›´æ–°ä½ çš„æœå‹™", | 39 | "infobar.servicesUpdated" : "å·²ç¶“æ›´æ–°ä½ çš„æœå‹™", |
30 | "infobar.updateAvailable" : "Ferdi 有å¯ç”¨çš„æ›´æ–°", | 40 | "infobar.trialActivated" : "Your trial was successfully activated. Happy messaging!", |
41 | "infobar.updateAvailable" : "Franz 有å¯ç”¨çš„æ›´æ–°", | ||
31 | "invite.email.label" : "é›»å郵件地å€", | 42 | "invite.email.label" : "é›»å郵件地å€", |
32 | "invite.headline.friends" : "邀請 3 ä½æœ‹å‹æˆ–åŒäº‹", | 43 | "invite.headline.friends" : "邀請 3 ä½æœ‹å‹æˆ–åŒäº‹", |
33 | "invite.name.label" : "å稱", | 44 | "invite.name.label" : "å稱", |
@@ -43,8 +54,10 @@ | |||
43 | "login.serverLogout" : "您的登入期間已éŽæœŸï¼Œè«‹é‡æ–°ç™»éŒ„", | 54 | "login.serverLogout" : "您的登入期間已éŽæœŸï¼Œè«‹é‡æ–°ç™»éŒ„", |
44 | "login.submit.label" : "登入", | 55 | "login.submit.label" : "登入", |
45 | "login.tokenExpired" : "您的登入已éŽæœŸï¼Œè«‹é‡æ–°ç™»å…¥ã€‚", | 56 | "login.tokenExpired" : "您的登入已éŽæœŸï¼Œè«‹é‡æ–°ç™»å…¥ã€‚", |
57 | "menu.Todoss.closeTodosDrawer" : "Close Todos drawer", | ||
58 | "menu.Todoss.openTodosDrawer" : "Open Todos drawer", | ||
46 | "menu.app.about" : "關於 Franz", | 59 | "menu.app.about" : "關於 Franz", |
47 | "menu.app.announcement" : "What's new?", | 60 | "menu.app.announcement" : "更新說明", |
48 | "menu.app.checkForUpdates" : "檢查更新", | 61 | "menu.app.checkForUpdates" : "檢查更新", |
49 | "menu.app.hide" : "éš±è—", | 62 | "menu.app.hide" : "éš±è—", |
50 | "menu.app.hideOthers" : "éš±è—其他", | 63 | "menu.app.hideOthers" : "éš±è—其他", |
@@ -68,14 +81,18 @@ | |||
68 | "menu.file" : "檔案", | 81 | "menu.file" : "檔案", |
69 | "menu.help" : "求助", | 82 | "menu.help" : "求助", |
70 | "menu.help.changelog" : "變更紀錄", | 83 | "menu.help.changelog" : "變更紀錄", |
84 | "menu.help.debugInfo" : "Copy Debug Information", | ||
85 | "menu.help.debugInfoCopiedBody" : "Your Debug Information has been copied to your clipboard.", | ||
86 | "menu.help.debugInfoCopiedHeadline" : "Franz Debug Information", | ||
71 | "menu.help.learnMore" : "深入çžè§£", | 87 | "menu.help.learnMore" : "深入çžè§£", |
72 | "menu.help.privacy" : "éš±ç§è²æ˜Ž", | 88 | "menu.help.privacy" : "éš±ç§è²æ˜Ž", |
73 | "menu.help.support" : "支æ´", | 89 | "menu.help.support" : "支æ´", |
74 | "menu.help.tos" : "æœå‹™æ¢æ¬¾", | 90 | "menu.help.tos" : "æœå‹™æ¢æ¬¾", |
75 | "menu.services" : "æœå‹™", | 91 | "menu.services" : "æœå‹™", |
76 | "menu.services.activatePreviousService" : "Activate previous service", | 92 | "menu.services.activatePreviousService" : "å•Ÿå‹•å‰ä¸€å€‹æœå‹™", |
77 | "menu.services.addNewService" : "新增æœå‹™", | 93 | "menu.services.addNewService" : "新增æœå‹™", |
78 | "menu.services.setNextServiceActive" : "Activate next service", | 94 | "menu.services.setNextServiceActive" : "啟動下一個æœå‹™", |
95 | "menu.todos" : "Todos", | ||
79 | "menu.view" : "檢視", | 96 | "menu.view" : "檢視", |
80 | "menu.view.enterFullScreen" : "進入全螢幕模å¼", | 97 | "menu.view.enterFullScreen" : "進入全螢幕模å¼", |
81 | "menu.view.exitFullScreen" : "離開全螢幕模å¼", | 98 | "menu.view.exitFullScreen" : "離開全螢幕模å¼", |
@@ -85,16 +102,17 @@ | |||
85 | "menu.view.toggleDevTools" : "切æ›é–‹ç™¼è€…工具", | 102 | "menu.view.toggleDevTools" : "切æ›é–‹ç™¼è€…工具", |
86 | "menu.view.toggleFullScreen" : "切æ›å…¨èž¢å¹•", | 103 | "menu.view.toggleFullScreen" : "切æ›å…¨èž¢å¹•", |
87 | "menu.view.toggleServiceDevTools" : "切æ›æœå‹™é–‹ç™¼è€…工具", | 104 | "menu.view.toggleServiceDevTools" : "切æ›æœå‹™é–‹ç™¼è€…工具", |
105 | "menu.view.toggleTodosDevTools" : "Toggle Todos Developer Tools", | ||
88 | "menu.view.zoomIn" : "放大", | 106 | "menu.view.zoomIn" : "放大", |
89 | "menu.view.zoomOut" : "縮å°", | 107 | "menu.view.zoomOut" : "縮å°", |
90 | "menu.window" : "視窗", | 108 | "menu.window" : "視窗", |
91 | "menu.window.close" : "關閉", | 109 | "menu.window.close" : "關閉", |
92 | "menu.window.minimize" : "最å°åŒ–", | 110 | "menu.window.minimize" : "最å°åŒ–", |
93 | "menu.workspaces" : "Workspaces", | 111 | "menu.workspaces" : "工作å€", |
94 | "menu.workspaces.addNewWorkspace" : "Add New Workspace...", | 112 | "menu.workspaces.addNewWorkspace" : "新增工作å€", |
95 | "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer", | 113 | "menu.workspaces.closeWorkspaceDrawer" : "關閉工作空間", |
96 | "menu.workspaces.defaultWorkspace" : "所有æœå‹™", | 114 | "menu.workspaces.defaultWorkspace" : "所有æœå‹™", |
97 | "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer", | 115 | "menu.workspaces.openWorkspaceDrawer" : "打開工作空間", |
98 | "password.email.label" : "é›»å郵件地å€", | 116 | "password.email.label" : "é›»å郵件地å€", |
99 | "password.headline" : "é‡è¨å¯†ç¢¼", | 117 | "password.headline" : "é‡è¨å¯†ç¢¼", |
100 | "password.link.login" : "登入您的帳號", | 118 | "password.link.login" : "登入您的帳號", |
@@ -103,10 +121,33 @@ | |||
103 | "password.submit.label" : "é€å‡º", | 121 | "password.submit.label" : "é€å‡º", |
104 | "password.successInfo" : "請檢查您的電å郵件", | 122 | "password.successInfo" : "請檢查您的電å郵件", |
105 | "premiumFeature.button.upgradeAccount" : "å‡ç´šå¸³è™Ÿ", | 123 | "premiumFeature.button.upgradeAccount" : "å‡ç´šå¸³è™Ÿ", |
106 | "pricing.headline" : "æ”¯æŒ Franz", | 124 | "pricing.features.adFree" : "Forever ad-free", |
107 | "pricing.link.skipPayment" : "我ä¸æƒ³æ”¯æŒ Ferdi 的開發。", | 125 | "pricing.features.appDelays" : "No Waiting Screens", |
108 | "pricing.submit.label" : "æˆ‘æƒ³æ”¯æŒ Ferdi 的開發。", | 126 | "pricing.features.customWebsites" : "Add Custom Websites", |
109 | "pricing.support.label" : "é¸æ“‡æ‚¨æ”¯æŒçš„計畫", | 127 | "pricing.features.onPremise" : "On-premise & other Hosted Services", |
128 | "pricing.features.serviceProxies" : "Service Proxies", | ||
129 | "pricing.features.spellchecker" : "Spellchecker support", | ||
130 | "pricing.features.teamManagement" : "Team Management", | ||
131 | "pricing.features.thirdPartyServices" : "Install 3rd party services", | ||
132 | "pricing.features.unlimitedServices" : "Add unlimited services", | ||
133 | "pricing.features.workspaces" : "工作å€", | ||
134 | "pricing.plan.free" : "Franz Free", | ||
135 | "pricing.plan.legacy" : "Franz Premium", | ||
136 | "pricing.plan.personal" : "Franz Personal", | ||
137 | "pricing.plan.personal-monthly" : "Franz Personal Monthly", | ||
138 | "pricing.plan.personal-yearly" : "Franz Personal Yearly", | ||
139 | "pricing.plan.pro" : "Franz Professional", | ||
140 | "pricing.plan.pro-monthly" : "Franz Professional Monthly", | ||
141 | "pricing.plan.pro-yearly" : "Franz Professional Yearly", | ||
142 | "pricing.trial.cta.accept" : "Yes, upgrade my account to Franz Professional", | ||
143 | "pricing.trial.cta.skip" : "Continue to Franz", | ||
144 | "pricing.trial.error" : "Sorry, we could not activate your trial!", | ||
145 | "pricing.trial.features.headline" : "Franz Professional includes:", | ||
146 | "pricing.trial.headline" : "Franz Professional", | ||
147 | "pricing.trial.subheadline" : "Your personal welcome offer:", | ||
148 | "pricing.trial.terms.automaticTrialEnd" : "Your free trial ends automatically after 14 days", | ||
149 | "pricing.trial.terms.headline" : "No strings attached", | ||
150 | "pricing.trial.terms.noCreditCard" : "No credit card required", | ||
110 | "service.crashHandler.action" : "é‡æ–°è¼‰å…¥{name}", | 151 | "service.crashHandler.action" : "é‡æ–°è¼‰å…¥{name}", |
111 | "service.crashHandler.autoReload" : "嘗試在{seconds}秒內自動æ¢å¾©{name}", | 152 | "service.crashHandler.autoReload" : "嘗試在{seconds}秒內自動æ¢å¾©{name}", |
112 | "service.crashHandler.headline" : "噢ä¸!", | 153 | "service.crashHandler.headline" : "噢ä¸!", |
@@ -118,7 +159,12 @@ | |||
118 | "service.errorHandler.headline" : "噢ä¸ï¼", | 159 | "service.errorHandler.headline" : "噢ä¸ï¼", |
119 | "service.errorHandler.message" : "錯誤", | 160 | "service.errorHandler.message" : "錯誤", |
120 | "service.errorHandler.text" : "{name} 載入失敗。", | 161 | "service.errorHandler.text" : "{name} 載入失敗。", |
121 | "service.webviewLoader.loading" : "Loading", | 162 | "service.restrictedHandler.action" : "Upgrade Account", |
163 | "service.restrictedHandler.customUrl.headline" : "Franz Professional Plan required", | ||
164 | "service.restrictedHandler.customUrl.text" : "Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
165 | "service.restrictedHandler.serviceLimit.headline" : "You have reached your service limit.", | ||
166 | "service.restrictedHandler.serviceLimit.text" : "Please upgrade your account to use more than {count} services.", | ||
167 | "service.webviewLoader.loading" : "æ£åœ¨è¼‰å…¥", | ||
122 | "services.getStarted" : "開始", | 168 | "services.getStarted" : "開始", |
123 | "services.welcome" : "æ¡è¿Žä½¿ç”¨ Franz", | 169 | "services.welcome" : "æ¡è¿Žä½¿ç”¨ Franz", |
124 | "settings.account.account.editButton" : "編輯帳號", | 170 | "settings.account.account.editButton" : "編輯帳號", |
@@ -135,13 +181,19 @@ | |||
135 | "settings.account.headlinePassword" : "變更密碼", | 181 | "settings.account.headlinePassword" : "變更密碼", |
136 | "settings.account.headlineProfile" : "更新簡介", | 182 | "settings.account.headlineProfile" : "更新簡介", |
137 | "settings.account.headlineSubscription" : "您的訂閱", | 183 | "settings.account.headlineSubscription" : "您的訂閱", |
138 | "settings.account.headlineUpgrade" : "å‡ç´šæ‚¨çš„å¸³æˆ¶ä¸¦æ”¯æŒ Franz", | 184 | "settings.account.headlineTrialUpgrade" : "Get the free 14 day Franz Professional Trial", |
185 | "settings.account.headlineUpgradeAccount" : "Upgrade your account & get the full Franz experience", | ||
139 | "settings.account.invoiceDownload" : "下載", | 186 | "settings.account.invoiceDownload" : "下載", |
140 | "settings.account.manageSubscription.label" : "管ç†æ‚¨çš„訂閱", | 187 | "settings.account.manageSubscription.label" : "管ç†æ‚¨çš„訂閱", |
141 | "settings.account.successInfo" : "您的更變已經被儲å˜", | 188 | "settings.account.successInfo" : "您的更變已經被儲å˜", |
189 | "settings.account.trial" : "Free Trial", | ||
190 | "settings.account.trialEndsIn" : "Your free trial ends in {duration}.", | ||
191 | "settings.account.trialUpdateBillingInfo" : "Please update your billing info to continue using {license} after your trial period.", | ||
142 | "settings.account.tryReloadServices" : "å†è©¦ä¸€æ¬¡", | 192 | "settings.account.tryReloadServices" : "å†è©¦ä¸€æ¬¡", |
143 | "settings.account.tryReloadUserInfoRequest" : "å†è©¦ä¸€æ¬¡", | 193 | "settings.account.tryReloadUserInfoRequest" : "å†è©¦ä¸€æ¬¡", |
194 | "settings.account.upgradeToPro.label" : "Upgrade to Franz Professional", | ||
144 | "settings.account.userInfoRequestFailed" : "無法載入使用者資訊。", | 195 | "settings.account.userInfoRequestFailed" : "無法載入使用者資訊。", |
196 | "settings.account.yourLicense" : "Your Franz License", | ||
145 | "settings.app.buttonClearAllCache" : "清除快å–", | 197 | "settings.app.buttonClearAllCache" : "清除快å–", |
146 | "settings.app.buttonInstallUpdate" : "é‡æ–°å•Ÿå‹•ä¸¦å®‰è£æ›´æ–°", | 198 | "settings.app.buttonInstallUpdate" : "é‡æ–°å•Ÿå‹•ä¸¦å®‰è£æ›´æ–°", |
147 | "settings.app.buttonSearchForUpdate" : "檢查更新", | 199 | "settings.app.buttonSearchForUpdate" : "檢查更新", |
@@ -154,6 +206,7 @@ | |||
154 | "settings.app.form.enableGPUAcceleration" : "啟用 GPU åŠ é€Ÿ", | 206 | "settings.app.form.enableGPUAcceleration" : "啟用 GPU åŠ é€Ÿ", |
155 | "settings.app.form.enableSpellchecking" : "啟用拼å—檢查", | 207 | "settings.app.form.enableSpellchecking" : "啟用拼å—檢查", |
156 | "settings.app.form.enableSystemTray" : "在系統列顯示 Franz", | 208 | "settings.app.form.enableSystemTray" : "在系統列顯示 Franz", |
209 | "settings.app.form.enableTodos" : "Enable Franz Todos", | ||
157 | "settings.app.form.language" : "語言", | 210 | "settings.app.form.language" : "語言", |
158 | "settings.app.form.minimizeToSystemTray" : "最å°åŒ– Ferdi 到系統列", | 211 | "settings.app.form.minimizeToSystemTray" : "最å°åŒ– Ferdi 到系統列", |
159 | "settings.app.form.runInBackground" : "當關閉視窗時,ä¿æŒ Ferdi 在背景é‹ä½œ", | 212 | "settings.app.form.runInBackground" : "當關閉視窗時,ä¿æŒ Ferdi 在背景é‹ä½œ", |
@@ -165,7 +218,7 @@ | |||
165 | "settings.app.headlineGeneral" : "一般", | 218 | "settings.app.headlineGeneral" : "一般", |
166 | "settings.app.headlineLanguage" : "語言", | 219 | "settings.app.headlineLanguage" : "語言", |
167 | "settings.app.headlineUpdates" : "æ›´æ–°", | 220 | "settings.app.headlineUpdates" : "æ›´æ–°", |
168 | "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.", | 221 | "settings.app.languageDisclaimer" : "官方僅æ供英語與德語,其他語言由社群æ供翻è¯ã€‚", |
169 | "settings.app.restartRequired" : "需è¦é‡å•Ÿä»¥æ›´è®Š", | 222 | "settings.app.restartRequired" : "需è¦é‡å•Ÿä»¥æ›´è®Š", |
170 | "settings.app.subheadlineCache" : "å¿«å–", | 223 | "settings.app.subheadlineCache" : "å¿«å–", |
171 | "settings.app.translationHelp" : "幫助我們將 Ferdi ç¿»è¯æˆæ‚¨çš„語言。", | 224 | "settings.app.translationHelp" : "幫助我們將 Ferdi ç¿»è¯æˆæ‚¨çš„語言。", |
@@ -178,11 +231,17 @@ | |||
178 | "settings.navigation.inviteFriends" : "邀請朋å‹", | 231 | "settings.navigation.inviteFriends" : "邀請朋å‹", |
179 | "settings.navigation.logout" : "登出", | 232 | "settings.navigation.logout" : "登出", |
180 | "settings.navigation.settings" : "è¨å®š", | 233 | "settings.navigation.settings" : "è¨å®š", |
181 | "settings.navigation.team" : "Manage Team", | 234 | "settings.navigation.team" : "管ç†åœ˜éšŠ", |
182 | "settings.navigation.yourServices" : "您的æœå‹™", | 235 | "settings.navigation.yourServices" : "您的æœå‹™", |
183 | "settings.navigation.yourWorkspaces" : "Your workspaces", | 236 | "settings.navigation.yourWorkspaces" : "所有工作å€", |
184 | "settings.recipes.all" : "所有æœå‹™", | 237 | "settings.recipes.all" : "所有æœå‹™", |
185 | "settings.recipes.dev" : "開發", | 238 | "settings.recipes.custom" : "Custom Services", |
239 | "settings.recipes.customService.headline.communityRecipes" : "Community 3rd Party Recipes", | ||
240 | "settings.recipes.customService.headline.customRecipes" : "Custom 3rd Party Recipes", | ||
241 | "settings.recipes.customService.headline.devRecipes" : "Your Development Service Recipes", | ||
242 | "settings.recipes.customService.intro" : "To add a custom service, copy the service recipe to:", | ||
243 | "settings.recipes.customService.openDevDocs" : "Developer Documentation", | ||
244 | "settings.recipes.customService.openFolder" : "Open folder", | ||
186 | "settings.recipes.headline" : "å¯ä½¿ç”¨çš„æœå‹™", | 245 | "settings.recipes.headline" : "å¯ä½¿ç”¨çš„æœå‹™", |
187 | "settings.recipes.missingService" : "缺少æœå‹™?", | 246 | "settings.recipes.missingService" : "缺少æœå‹™?", |
188 | "settings.recipes.mostPopular" : "最熱門", | 247 | "settings.recipes.mostPopular" : "最熱門", |
@@ -233,17 +292,17 @@ | |||
233 | "settings.services.discoverServices" : "發ç¾æœå‹™", | 292 | "settings.services.discoverServices" : "發ç¾æœå‹™", |
234 | "settings.services.headline" : "您的æœå‹™", | 293 | "settings.services.headline" : "您的æœå‹™", |
235 | "settings.services.noServicesAdded" : "ä½ å°šæœªæ–°å¢žä»»ä½•æœå‹™", | 294 | "settings.services.noServicesAdded" : "ä½ å°šæœªæ–°å¢žä»»ä½•æœå‹™", |
236 | "settings.services.servicesRequestFailed" : "Could not load your services", | 295 | "settings.services.servicesRequestFailed" : "無法載入æ¤æœå‹™", |
237 | "settings.services.tooltip.isDisabled" : "æœå‹™å·²åœç”¨", | 296 | "settings.services.tooltip.isDisabled" : "æœå‹™å·²åœç”¨", |
238 | "settings.services.tooltip.isMuted" : "所有的è²éŸ³éƒ½æ˜¯éœéŸ³", | 297 | "settings.services.tooltip.isMuted" : "所有的è²éŸ³éƒ½æ˜¯éœéŸ³", |
239 | "settings.services.tooltip.notificationsDisabled" : "通知已åœç”¨", | 298 | "settings.services.tooltip.notificationsDisabled" : "通知已åœç”¨", |
240 | "settings.services.updatedInfo" : "已儲å˜ä½ 的變更", | 299 | "settings.services.updatedInfo" : "已儲å˜ä½ 的變更", |
241 | "settings.team.contentHeadline" : "Ferdi for Teams", | 300 | "settings.team.contentHeadline" : "Franz 團隊", |
242 | "settings.team.copy" : "Ferdi for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", | 301 | "settings.team.copy" : "Franz for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", |
243 | "settings.team.headline" : "團隊", | 302 | "settings.team.headline" : "團隊", |
244 | "settings.team.intro" : "You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", | 303 | "settings.team.intro" : "You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", |
245 | "settings.team.manageAction" : "Manage your Team on meetfranz.com", | 304 | "settings.team.manageAction" : "Manage your Team on meetfranz.com", |
246 | "settings.team.upgradeAction" : "Upgrade your Account", | 305 | "settings.team.upgradeAction" : "å‡ç´šä½ 的帳戶", |
247 | "settings.user.form.accountType.company" : "å…¬å¸", | 306 | "settings.user.form.accountType.company" : "å…¬å¸", |
248 | "settings.user.form.accountType.individual" : "個人", | 307 | "settings.user.form.accountType.individual" : "個人", |
249 | "settings.user.form.accountType.label" : "帳戶類型", | 308 | "settings.user.form.accountType.label" : "帳戶類型", |
@@ -254,27 +313,26 @@ | |||
254 | "settings.user.form.lastname" : "姓", | 313 | "settings.user.form.lastname" : "姓", |
255 | "settings.user.form.newPassword" : "新密碼", | 314 | "settings.user.form.newPassword" : "新密碼", |
256 | "settings.workspace.add.form.name" : "å稱", | 315 | "settings.workspace.add.form.name" : "å稱", |
257 | "settings.workspace.add.form.submitButton" : "Create workspace", | 316 | "settings.workspace.add.form.submitButton" : "建立工作å€", |
258 | "settings.workspace.form.buttonDelete" : "Delete workspace", | 317 | "settings.workspace.form.buttonDelete" : "刪除工作å€", |
259 | "settings.workspace.form.buttonSave" : "Save workspace", | 318 | "settings.workspace.form.buttonSave" : "儲å˜å·¥ä½œå€", |
260 | "settings.workspace.form.name" : "å稱", | 319 | "settings.workspace.form.name" : "å稱", |
261 | "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace", | 320 | "settings.workspace.form.servicesInWorkspaceHeadline" : "這個工作å€çš„æœå‹™", |
262 | "settings.workspace.form.yourWorkspaces" : "Your workspaces", | 321 | "settings.workspace.form.yourWorkspaces" : "ä½ çš„å·¥ä½œå€", |
263 | "settings.workspaces.deletedInfo" : "Workspace has been deleted", | 322 | "settings.workspaces.deletedInfo" : "æˆåŠŸåˆªé™¤å·¥ä½œå€", |
264 | "settings.workspaces.headline" : "Your workspaces", | 323 | "settings.workspaces.headline" : "ä½ çš„å·¥ä½œå€", |
265 | "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.", | 324 | "settings.workspaces.noWorkspacesAdded" : "ä½ å°šæœªåŠ å…¥ä»»ä½•å·¥ä½œå€", |
266 | "settings.workspaces.tryReloadWorkspaces" : "å†è©¦ä¸€æ¬¡", | 325 | "settings.workspaces.tryReloadWorkspaces" : "å†è©¦ä¸€æ¬¡", |
267 | "settings.workspaces.updatedInfo" : "Your changes have been saved", | 326 | "settings.workspaces.updatedInfo" : "æˆåŠŸå„²å˜", |
268 | "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Ferdi Workspaces", | 327 | "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces", |
269 | "settings.workspaces.workspaceFeatureInfo" : "Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.", | 328 | "settings.workspaces.workspaceFeatureInfo" : "Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.", |
270 | "settings.workspaces.workspacesRequestFailed" : "Could not load your workspaces", | 329 | "settings.workspaces.workspacesRequestFailed" : "Could not load your workspaces", |
271 | "sidebar.addNewService" : "新增新的æœå‹™", | 330 | "sidebar.addNewService" : "新增新的æœå‹™", |
272 | "sidebar.closeWorkspaceDrawer" : "Close workspace drawer", | 331 | "sidebar.closeWorkspaceDrawer" : "關閉工作空間", |
273 | "sidebar.muteApp" : "關閉通知和通知音效", | 332 | "sidebar.muteApp" : "關閉通知和通知音效", |
274 | "sidebar.openWorkspaceDrawer" : "Open workspace drawer", | 333 | "sidebar.openWorkspaceDrawer" : "打開工作空間", |
275 | "sidebar.settings" : "è¨å®š", | 334 | "sidebar.settings" : "è¨å®š", |
276 | "sidebar.unmuteApp" : "開啟通知和通知音效", | 335 | "sidebar.unmuteApp" : "開啟通知和通知音效", |
277 | "signup.company.label" : "å…¬å¸", | ||
278 | "signup.email.label" : "é›»å郵件地å€", | 336 | "signup.email.label" : "é›»å郵件地å€", |
279 | "signup.emailDuplicate" : "該使用者的電å郵件ä½å€å·²å˜åœ¨", | 337 | "signup.emailDuplicate" : "該使用者的電å郵件ä½å€å·²å˜åœ¨", |
280 | "signup.firstname.label" : "å", | 338 | "signup.firstname.label" : "å", |
@@ -286,20 +344,12 @@ | |||
286 | "signup.link.login" : "已經有一個帳戶,登入?", | 344 | "signup.link.login" : "已經有一個帳戶,登入?", |
287 | "signup.password.label" : "密碼", | 345 | "signup.password.label" : "密碼", |
288 | "signup.submit.label" : "建立帳號", | 346 | "signup.submit.label" : "建立帳號", |
289 | "subscription.euTaxInfo" : "æ盟居民:å¯èƒ½æŽ¡ç”¨ç•¶åœ°éŠ·å”®ç¨…", | 347 | "subscription.cta.activateTrial" : "Yes, start the free Franz Professional trial", |
290 | "subscription.features.ads" : "無廣告,永é !", | 348 | "subscription.cta.allOptions" : "See all options", |
291 | "subscription.features.comingSoon" : "å³å°‡æŽ¨å‡º", | 349 | "subscription.cta.choosePlan" : "Choose your plan", |
292 | "subscription.features.noInterruptions" : "å‡ç´šæŽˆæ¬Šæ²’有延é²èˆ‡æ‰“盹", | 350 | "subscription.includedProFeatures" : "The Franz Professional Plan includes:", |
293 | "subscription.features.onpremise.mattermost" : "åŠ å…¥å¦‚ Mattermost ç‰å·²é 定 \/ 託管的æœå‹™", | 351 | "subscription.teaser.includedFeatures" : "Paid Franz Plans include:", |
294 | "subscription.features.proxy" : "æœå‹™çš„代ç†ä¼ºæœå™¨æ”¯æ´", | 352 | "subscription.teaser.intro" : "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
295 | "subscription.features.spellchecker" : "支æ´æ‹¼å—檢查", | ||
296 | "subscription.features.workspaces" : "Organize your services in workspaces", | ||
297 | "subscription.includedFeatures" : "Ferdi 高級支æ´å¸³æˆ¶åŒ…å«", | ||
298 | "subscription.paymentSessionError" : "無法åˆå§‹åŒ–付款表單", | ||
299 | "subscription.submit.label" : "æˆ‘æƒ³æ”¯æŒ Ferdi 開發", | ||
300 | "subscription.type.free" : "自由", | ||
301 | "subscription.type.month" : "月", | ||
302 | "subscription.type.year" : "å¹´", | ||
303 | "subscriptionPopup.buttonCancel" : "å–消", | 353 | "subscriptionPopup.buttonCancel" : "å–消", |
304 | "subscriptionPopup.buttonDone" : "完æˆ", | 354 | "subscriptionPopup.buttonDone" : "完æˆ", |
305 | "tabs.item.deleteService" : "刪除æœå‹™", | 355 | "tabs.item.deleteService" : "刪除æœå‹™", |
@@ -320,7 +370,7 @@ | |||
320 | "welcome.signupButton" : "建立å…費帳號", | 370 | "welcome.signupButton" : "建立å…費帳號", |
321 | "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace", | 371 | "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace", |
322 | "workspaceDrawer.allServices" : "所有æœå‹™", | 372 | "workspaceDrawer.allServices" : "所有æœå‹™", |
323 | "workspaceDrawer.headline" : "Workspaces", | 373 | "workspaceDrawer.headline" : "工作å€", |
324 | "workspaceDrawer.item.contextMenuEdit" : "edit", | 374 | "workspaceDrawer.item.contextMenuEdit" : "edit", |
325 | "workspaceDrawer.item.noServicesAddedYet" : "No services added yet", | 375 | "workspaceDrawer.item.noServicesAddedYet" : "No services added yet", |
326 | "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace", | 376 | "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace", |
diff --git a/src/i18n/messages/src/components/TrialActivationInfoBar.json b/src/i18n/messages/src/components/TrialActivationInfoBar.json new file mode 100644 index 000000000..65dd964a6 --- /dev/null +++ b/src/i18n/messages/src/components/TrialActivationInfoBar.json | |||
@@ -0,0 +1,15 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "infobar.trialActivated", | ||
4 | "defaultMessage": "!!!Your trial was successfully activated. Happy messaging!", | ||
5 | "file": "src/components/TrialActivationInfoBar.js", | ||
6 | "start": { | ||
7 | "line": 11, | ||
8 | "column": 11 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 14, | ||
12 | "column": 3 | ||
13 | } | ||
14 | } | ||
15 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/components/auth/Pricing.json b/src/i18n/messages/src/components/auth/Pricing.json index d3facf8e8..f15617ca5 100644 --- a/src/i18n/messages/src/components/auth/Pricing.json +++ b/src/i18n/messages/src/components/auth/Pricing.json | |||
@@ -1,53 +1,118 @@ | |||
1 | [ | 1 | [ |
2 | { | 2 | { |
3 | "id": "pricing.headline", | 3 | "id": "pricing.trial.headline", |
4 | "defaultMessage": "!!!Support Ferdi", | 4 | "defaultMessage": "!!!Franz Professional", |
5 | "file": "src/components/auth/Pricing.js", | 5 | "file": "src/components/auth/Pricing.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 13, | 7 | "line": 15, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 16, | 11 | "line": 18, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
15 | { | 15 | { |
16 | "id": "pricing.support.label", | 16 | "id": "pricing.trial.subheadline", |
17 | "defaultMessage": "!!!Select your support plan", | 17 | "defaultMessage": "!!!Your personal welcome offer:", |
18 | "file": "src/components/auth/Pricing.js", | 18 | "file": "src/components/auth/Pricing.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 17, | 20 | "line": 19, |
21 | "column": 23 | 21 | "column": 17 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 20, | 24 | "line": 22, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
28 | { | 28 | { |
29 | "id": "pricing.submit.label", | 29 | "id": "pricing.trial.terms.headline", |
30 | "defaultMessage": "!!!Support the development of Ferdi", | 30 | "defaultMessage": "!!!No strings attached", |
31 | "file": "src/components/auth/Pricing.js", | 31 | "file": "src/components/auth/Pricing.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 21, | 33 | "line": 23, |
34 | "column": 29 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 26, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "pricing.trial.terms.noCreditCard", | ||
43 | "defaultMessage": "!!!No credit card required", | ||
44 | "file": "src/components/auth/Pricing.js", | ||
45 | "start": { | ||
46 | "line": 27, | ||
47 | "column": 16 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 30, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.trial.terms.automaticTrialEnd", | ||
56 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", | ||
57 | "file": "src/components/auth/Pricing.js", | ||
58 | "start": { | ||
59 | "line": 31, | ||
34 | "column": 21 | 60 | "column": 21 |
35 | }, | 61 | }, |
36 | "end": { | 62 | "end": { |
37 | "line": 24, | 63 | "line": 34, |
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.trial.error", | ||
69 | "defaultMessage": "!!!Sorry, we could not activate your trial!", | ||
70 | "file": "src/components/auth/Pricing.js", | ||
71 | "start": { | ||
72 | "line": 35, | ||
73 | "column": 19 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 38, | ||
77 | "column": 3 | ||
78 | } | ||
79 | }, | ||
80 | { | ||
81 | "id": "pricing.trial.cta.accept", | ||
82 | "defaultMessage": "!!!Yes, upgrade my account to Franz Professional", | ||
83 | "file": "src/components/auth/Pricing.js", | ||
84 | "start": { | ||
85 | "line": 39, | ||
86 | "column": 13 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 42, | ||
90 | "column": 3 | ||
91 | } | ||
92 | }, | ||
93 | { | ||
94 | "id": "pricing.trial.cta.skip", | ||
95 | "defaultMessage": "!!!Continue to Franz", | ||
96 | "file": "src/components/auth/Pricing.js", | ||
97 | "start": { | ||
98 | "line": 43, | ||
99 | "column": 11 | ||
100 | }, | ||
101 | "end": { | ||
102 | "line": 46, | ||
38 | "column": 3 | 103 | "column": 3 |
39 | } | 104 | } |
40 | }, | 105 | }, |
41 | { | 106 | { |
42 | "id": "pricing.link.skipPayment", | 107 | "id": "pricing.trial.features.headline", |
43 | "defaultMessage": "!!!I don't want to support the development of Ferdi.", | 108 | "defaultMessage": "!!!Franz Professional includes:", |
44 | "file": "src/components/auth/Pricing.js", | 109 | "file": "src/components/auth/Pricing.js", |
45 | "start": { | 110 | "start": { |
46 | "line": 25, | 111 | "line": 47, |
47 | "column": 15 | 112 | "column": 20 |
48 | }, | 113 | }, |
49 | "end": { | 114 | "end": { |
50 | "line": 28, | 115 | "line": 50, |
51 | "column": 3 | 116 | "column": 3 |
52 | } | 117 | } |
53 | } | 118 | } |
diff --git a/src/i18n/messages/src/components/auth/Signup.json b/src/i18n/messages/src/components/auth/Signup.json index 94daffdde..9aa7b25ab 100644 --- a/src/i18n/messages/src/components/auth/Signup.json +++ b/src/i18n/messages/src/components/auth/Signup.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Sign up", | 4 | "defaultMessage": "!!!Sign up", |
5 | "file": "src/components/auth/Signup.js", | 5 | "file": "src/components/auth/Signup.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 18, | 7 | "line": 17, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 21, | 11 | "line": 20, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Firstname", | 17 | "defaultMessage": "!!!Firstname", |
18 | "file": "src/components/auth/Signup.js", | 18 | "file": "src/components/auth/Signup.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 22, | 20 | "line": 21, |
21 | "column": 18 | 21 | "column": 18 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 25, | 24 | "line": 24, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Lastname", | 30 | "defaultMessage": "!!!Lastname", |
31 | "file": "src/components/auth/Signup.js", | 31 | "file": "src/components/auth/Signup.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 26, | 33 | "line": 25, |
34 | "column": 17 | 34 | "column": 17 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 29, | 37 | "line": 28, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,24 +43,11 @@ | |||
43 | "defaultMessage": "!!!Email address", | 43 | "defaultMessage": "!!!Email address", |
44 | "file": "src/components/auth/Signup.js", | 44 | "file": "src/components/auth/Signup.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 30, | 46 | "line": 29, |
47 | "column": 14 | 47 | "column": 14 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 33, | 50 | "line": 32, |
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 | 51 | "column": 3 |
65 | } | 52 | } |
66 | }, | 53 | }, |
@@ -69,11 +56,11 @@ | |||
69 | "defaultMessage": "!!!Password", | 56 | "defaultMessage": "!!!Password", |
70 | "file": "src/components/auth/Signup.js", | 57 | "file": "src/components/auth/Signup.js", |
71 | "start": { | 58 | "start": { |
72 | "line": 38, | 59 | "line": 37, |
73 | "column": 17 | 60 | "column": 17 |
74 | }, | 61 | }, |
75 | "end": { | 62 | "end": { |
76 | "line": 41, | 63 | "line": 40, |
77 | "column": 3 | 64 | "column": 3 |
78 | } | 65 | } |
79 | }, | 66 | }, |
@@ -82,11 +69,11 @@ | |||
82 | "defaultMessage": "!!!By creating a Ferdi account you accept the", | 69 | "defaultMessage": "!!!By creating a Ferdi account you accept the", |
83 | "file": "src/components/auth/Signup.js", | 70 | "file": "src/components/auth/Signup.js", |
84 | "start": { | 71 | "start": { |
85 | "line": 42, | 72 | "line": 41, |
86 | "column": 13 | 73 | "column": 13 |
87 | }, | 74 | }, |
88 | "end": { | 75 | "end": { |
89 | "line": 45, | 76 | "line": 44, |
90 | "column": 3 | 77 | "column": 3 |
91 | } | 78 | } |
92 | }, | 79 | }, |
@@ -95,11 +82,11 @@ | |||
95 | "defaultMessage": "!!!Terms of service", | 82 | "defaultMessage": "!!!Terms of service", |
96 | "file": "src/components/auth/Signup.js", | 83 | "file": "src/components/auth/Signup.js", |
97 | "start": { | 84 | "start": { |
98 | "line": 46, | 85 | "line": 45, |
99 | "column": 9 | 86 | "column": 9 |
100 | }, | 87 | }, |
101 | "end": { | 88 | "end": { |
102 | "line": 49, | 89 | "line": 48, |
103 | "column": 3 | 90 | "column": 3 |
104 | } | 91 | } |
105 | }, | 92 | }, |
@@ -108,11 +95,11 @@ | |||
108 | "defaultMessage": "!!!Privacy Statement", | 95 | "defaultMessage": "!!!Privacy Statement", |
109 | "file": "src/components/auth/Signup.js", | 96 | "file": "src/components/auth/Signup.js", |
110 | "start": { | 97 | "start": { |
111 | "line": 50, | 98 | "line": 49, |
112 | "column": 11 | 99 | "column": 11 |
113 | }, | 100 | }, |
114 | "end": { | 101 | "end": { |
115 | "line": 53, | 102 | "line": 52, |
116 | "column": 3 | 103 | "column": 3 |
117 | } | 104 | } |
118 | }, | 105 | }, |
@@ -121,11 +108,11 @@ | |||
121 | "defaultMessage": "!!!Create account", | 108 | "defaultMessage": "!!!Create account", |
122 | "file": "src/components/auth/Signup.js", | 109 | "file": "src/components/auth/Signup.js", |
123 | "start": { | 110 | "start": { |
124 | "line": 54, | 111 | "line": 53, |
125 | "column": 21 | 112 | "column": 21 |
126 | }, | 113 | }, |
127 | "end": { | 114 | "end": { |
128 | "line": 57, | 115 | "line": 56, |
129 | "column": 3 | 116 | "column": 3 |
130 | } | 117 | } |
131 | }, | 118 | }, |
@@ -134,11 +121,11 @@ | |||
134 | "defaultMessage": "!!!Already have an account, sign in?", | 121 | "defaultMessage": "!!!Already have an account, sign in?", |
135 | "file": "src/components/auth/Signup.js", | 122 | "file": "src/components/auth/Signup.js", |
136 | "start": { | 123 | "start": { |
137 | "line": 58, | 124 | "line": 57, |
138 | "column": 13 | 125 | "column": 13 |
139 | }, | 126 | }, |
140 | "end": { | 127 | "end": { |
141 | "line": 61, | 128 | "line": 60, |
142 | "column": 3 | 129 | "column": 3 |
143 | } | 130 | } |
144 | }, | 131 | }, |
@@ -147,11 +134,11 @@ | |||
147 | "defaultMessage": "!!!A user with that email address already exists", | 134 | "defaultMessage": "!!!A user with that email address already exists", |
148 | "file": "src/components/auth/Signup.js", | 135 | "file": "src/components/auth/Signup.js", |
149 | "start": { | 136 | "start": { |
150 | "line": 62, | 137 | "line": 61, |
151 | "column": 18 | 138 | "column": 18 |
152 | }, | 139 | }, |
153 | "end": { | 140 | "end": { |
154 | "line": 65, | 141 | "line": 64, |
155 | "column": 3 | 142 | "column": 3 |
156 | } | 143 | } |
157 | } | 144 | } |
diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json index 5bb4ad3ba..593a7bcb3 100644 --- a/src/i18n/messages/src/components/layout/AppLayout.json +++ b/src/i18n/messages/src/components/layout/AppLayout.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Your services have been updated.", | 4 | "defaultMessage": "!!!Your services have been updated.", |
5 | "file": "src/components/layout/AppLayout.js", | 5 | "file": "src/components/layout/AppLayout.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 25, | 7 | "line": 28, |
8 | "column": 19 | 8 | "column": 19 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 28, | 11 | "line": 31, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Reload services", | 17 | "defaultMessage": "!!!Reload services", |
18 | "file": "src/components/layout/AppLayout.js", | 18 | "file": "src/components/layout/AppLayout.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 29, | 20 | "line": 32, |
21 | "column": 24 | 21 | "column": 24 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 32, | 24 | "line": 35, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
diff --git a/src/i18n/messages/src/components/services/content/ServiceRestricted.json b/src/i18n/messages/src/components/services/content/ServiceRestricted.json new file mode 100644 index 000000000..c1984afe3 --- /dev/null +++ b/src/i18n/messages/src/components/services/content/ServiceRestricted.json | |||
@@ -0,0 +1,67 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "service.restrictedHandler.serviceLimit.headline", | ||
4 | "defaultMessage": "!!!You have reached your service limit.", | ||
5 | "file": "src/components/services/content/ServiceRestricted.js", | ||
6 | "start": { | ||
7 | "line": 11, | ||
8 | "column": 24 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 14, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "service.restrictedHandler.serviceLimit.text", | ||
17 | "defaultMessage": "!!!Please upgrade your account to use more than {count} services.", | ||
18 | "file": "src/components/services/content/ServiceRestricted.js", | ||
19 | "start": { | ||
20 | "line": 15, | ||
21 | "column": 20 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 18, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "service.restrictedHandler.customUrl.headline", | ||
30 | "defaultMessage": "!!!Franz Professional Plan required", | ||
31 | "file": "src/components/services/content/ServiceRestricted.js", | ||
32 | "start": { | ||
33 | "line": 19, | ||
34 | "column": 21 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 22, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "service.restrictedHandler.customUrl.text", | ||
43 | "defaultMessage": "!!!Please upgrade to the Franz Professional plan to use custom urls & self hosted services.", | ||
44 | "file": "src/components/services/content/ServiceRestricted.js", | ||
45 | "start": { | ||
46 | "line": 23, | ||
47 | "column": 17 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 26, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "service.restrictedHandler.action", | ||
56 | "defaultMessage": "!!!Upgrade Account", | ||
57 | "file": "src/components/services/content/ServiceRestricted.js", | ||
58 | "start": { | ||
59 | "line": 27, | ||
60 | "column": 10 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 30, | ||
64 | "column": 3 | ||
65 | } | ||
66 | } | ||
67 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/components/services/content/Services.json b/src/i18n/messages/src/components/services/content/Services.json index fac438178..cee7f42c0 100644 --- a/src/i18n/messages/src/components/services/content/Services.json +++ b/src/i18n/messages/src/components/services/content/Services.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Welcome to Ferdi", | 4 | "defaultMessage": "!!!Welcome to Ferdi", |
5 | "file": "src/components/services/content/Services.js", | 5 | "file": "src/components/services/content/Services.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 11, | 7 | "line": 14, |
8 | "column": 11 | 8 | "column": 11 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 14, | 11 | "line": 17, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Get started", | 17 | "defaultMessage": "!!!Get started", |
18 | "file": "src/components/services/content/Services.js", | 18 | "file": "src/components/services/content/Services.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 15, | 20 | "line": 18, |
21 | "column": 14 | 21 | "column": 14 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 18, | 24 | "line": 21, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json index 2ed4849d2..48078c18d 100644 --- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json +++ b/src/i18n/messages/src/components/settings/account/AccountDashboard.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Account", | 4 | "defaultMessage": "!!!Account", |
5 | "file": "src/components/settings/account/AccountDashboard.js", | 5 | "file": "src/components/settings/account/AccountDashboard.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 18, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 21, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,21 +17,8 @@ | |||
17 | "defaultMessage": "!!!Your Subscription", | 17 | "defaultMessage": "!!!Your Subscription", |
18 | "file": "src/components/settings/account/AccountDashboard.js", | 18 | "file": "src/components/settings/account/AccountDashboard.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | ||
21 | "column": 24 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 21, | ||
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": 22, | 20 | "line": 22, |
34 | "column": 19 | 21 | "column": 24 |
35 | }, | 22 | }, |
36 | "end": { | 23 | "end": { |
37 | "line": 25, | 24 | "line": 25, |
@@ -65,15 +52,28 @@ | |||
65 | } | 52 | } |
66 | }, | 53 | }, |
67 | { | 54 | { |
55 | "id": "settings.account.upgradeToPro.label", | ||
56 | "defaultMessage": "!!!Upgrade to Franz Professional", | ||
57 | "file": "src/components/settings/account/AccountDashboard.js", | ||
58 | "start": { | ||
59 | "line": 34, | ||
60 | "column": 23 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 37, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "settings.account.accountType.basic", | 68 | "id": "settings.account.accountType.basic", |
69 | "defaultMessage": "!!!Basic Account", | 69 | "defaultMessage": "!!!Basic Account", |
70 | "file": "src/components/settings/account/AccountDashboard.js", | 70 | "file": "src/components/settings/account/AccountDashboard.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 34, | 72 | "line": 38, |
73 | "column": 20 | 73 | "column": 20 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 37, | 76 | "line": 41, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Premium Supporter Account", | 82 | "defaultMessage": "!!!Premium Supporter Account", |
83 | "file": "src/components/settings/account/AccountDashboard.js", | 83 | "file": "src/components/settings/account/AccountDashboard.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 38, | 85 | "line": 42, |
86 | "column": 22 | 86 | "column": 22 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 41, | 89 | "line": 45, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Edit Account", | 95 | "defaultMessage": "!!!Edit Account", |
96 | "file": "src/components/settings/account/AccountDashboard.js", | 96 | "file": "src/components/settings/account/AccountDashboard.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 42, | 98 | "line": 46, |
99 | "column": 21 | 99 | "column": 21 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 45, | 102 | "line": 49, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | }, | 105 | }, |
@@ -108,11 +108,11 @@ | |||
108 | "defaultMessage": "!!Invoices", | 108 | "defaultMessage": "!!Invoices", |
109 | "file": "src/components/settings/account/AccountDashboard.js", | 109 | "file": "src/components/settings/account/AccountDashboard.js", |
110 | "start": { | 110 | "start": { |
111 | "line": 46, | 111 | "line": 50, |
112 | "column": 18 | 112 | "column": 18 |
113 | }, | 113 | }, |
114 | "end": { | 114 | "end": { |
115 | "line": 49, | 115 | "line": 53, |
116 | "column": 3 | 116 | "column": 3 |
117 | } | 117 | } |
118 | }, | 118 | }, |
@@ -121,11 +121,11 @@ | |||
121 | "defaultMessage": "!!!Download", | 121 | "defaultMessage": "!!!Download", |
122 | "file": "src/components/settings/account/AccountDashboard.js", | 122 | "file": "src/components/settings/account/AccountDashboard.js", |
123 | "start": { | 123 | "start": { |
124 | "line": 50, | 124 | "line": 54, |
125 | "column": 19 | 125 | "column": 19 |
126 | }, | 126 | }, |
127 | "end": { | 127 | "end": { |
128 | "line": 53, | 128 | "line": 57, |
129 | "column": 3 | 129 | "column": 3 |
130 | } | 130 | } |
131 | }, | 131 | }, |
@@ -134,11 +134,11 @@ | |||
134 | "defaultMessage": "!!!Could not load user information", | 134 | "defaultMessage": "!!!Could not load user information", |
135 | "file": "src/components/settings/account/AccountDashboard.js", | 135 | "file": "src/components/settings/account/AccountDashboard.js", |
136 | "start": { | 136 | "start": { |
137 | "line": 54, | 137 | "line": 58, |
138 | "column": 25 | 138 | "column": 25 |
139 | }, | 139 | }, |
140 | "end": { | 140 | "end": { |
141 | "line": 57, | 141 | "line": 61, |
142 | "column": 3 | 142 | "column": 3 |
143 | } | 143 | } |
144 | }, | 144 | }, |
@@ -147,11 +147,11 @@ | |||
147 | "defaultMessage": "!!!Try again", | 147 | "defaultMessage": "!!!Try again", |
148 | "file": "src/components/settings/account/AccountDashboard.js", | 148 | "file": "src/components/settings/account/AccountDashboard.js", |
149 | "start": { | 149 | "start": { |
150 | "line": 58, | 150 | "line": 62, |
151 | "column": 28 | 151 | "column": 28 |
152 | }, | 152 | }, |
153 | "end": { | 153 | "end": { |
154 | "line": 61, | 154 | "line": 65, |
155 | "column": 3 | 155 | "column": 3 |
156 | } | 156 | } |
157 | }, | 157 | }, |
@@ -160,11 +160,11 @@ | |||
160 | "defaultMessage": "!!!Delete account", | 160 | "defaultMessage": "!!!Delete account", |
161 | "file": "src/components/settings/account/AccountDashboard.js", | 161 | "file": "src/components/settings/account/AccountDashboard.js", |
162 | "start": { | 162 | "start": { |
163 | "line": 62, | 163 | "line": 66, |
164 | "column": 17 | 164 | "column": 17 |
165 | }, | 165 | }, |
166 | "end": { | 166 | "end": { |
167 | "line": 65, | 167 | "line": 69, |
168 | "column": 3 | 168 | "column": 3 |
169 | } | 169 | } |
170 | }, | 170 | }, |
@@ -173,11 +173,11 @@ | |||
173 | "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", | 173 | "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", |
174 | "file": "src/components/settings/account/AccountDashboard.js", | 174 | "file": "src/components/settings/account/AccountDashboard.js", |
175 | "start": { | 175 | "start": { |
176 | "line": 66, | 176 | "line": 70, |
177 | "column": 14 | 177 | "column": 14 |
178 | }, | 178 | }, |
179 | "end": { | 179 | "end": { |
180 | "line": 69, | 180 | "line": 73, |
181 | "column": 3 | 181 | "column": 3 |
182 | } | 182 | } |
183 | }, | 183 | }, |
@@ -186,11 +186,63 @@ | |||
186 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 186 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", |
187 | "file": "src/components/settings/account/AccountDashboard.js", | 187 | "file": "src/components/settings/account/AccountDashboard.js", |
188 | "start": { | 188 | "start": { |
189 | "line": 70, | 189 | "line": 74, |
190 | "column": 19 | 190 | "column": 19 |
191 | }, | 191 | }, |
192 | "end": { | 192 | "end": { |
193 | "line": 73, | 193 | "line": 77, |
194 | "column": 3 | ||
195 | } | ||
196 | }, | ||
197 | { | ||
198 | "id": "settings.account.trial", | ||
199 | "defaultMessage": "!!!Free Trial", | ||
200 | "file": "src/components/settings/account/AccountDashboard.js", | ||
201 | "start": { | ||
202 | "line": 78, | ||
203 | "column": 9 | ||
204 | }, | ||
205 | "end": { | ||
206 | "line": 81, | ||
207 | "column": 3 | ||
208 | } | ||
209 | }, | ||
210 | { | ||
211 | "id": "settings.account.yourLicense", | ||
212 | "defaultMessage": "!!!Your Franz License:", | ||
213 | "file": "src/components/settings/account/AccountDashboard.js", | ||
214 | "start": { | ||
215 | "line": 82, | ||
216 | "column": 15 | ||
217 | }, | ||
218 | "end": { | ||
219 | "line": 85, | ||
220 | "column": 3 | ||
221 | } | ||
222 | }, | ||
223 | { | ||
224 | "id": "settings.account.trialEndsIn", | ||
225 | "defaultMessage": "!!!Your free trial ends in {duration}.", | ||
226 | "file": "src/components/settings/account/AccountDashboard.js", | ||
227 | "start": { | ||
228 | "line": 86, | ||
229 | "column": 15 | ||
230 | }, | ||
231 | "end": { | ||
232 | "line": 89, | ||
233 | "column": 3 | ||
234 | } | ||
235 | }, | ||
236 | { | ||
237 | "id": "settings.account.trialUpdateBillingInfo", | ||
238 | "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", | ||
239 | "file": "src/components/settings/account/AccountDashboard.js", | ||
240 | "start": { | ||
241 | "line": 90, | ||
242 | "column": 33 | ||
243 | }, | ||
244 | "end": { | ||
245 | "line": 93, | ||
194 | "column": 3 | 246 | "column": 3 |
195 | } | 247 | } |
196 | } | 248 | } |
diff --git a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json index 70a989211..7dfb3ce04 100644 --- a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json +++ b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Available services", | 4 | "defaultMessage": "!!!Available services", |
5 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 5 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 13, | 7 | "line": 14, |
8 | "column": 21 | 8 | "column": 21 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 16, | 11 | "line": 17, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Your services", | 17 | "defaultMessage": "!!!Your services", |
18 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 18 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 17, | 20 | "line": 18, |
21 | "column": 16 | 21 | "column": 16 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 20, | 24 | "line": 21, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Your workspaces", | 30 | "defaultMessage": "!!!Your workspaces", |
31 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 31 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 21, | 33 | "line": 22, |
34 | "column": 18 | 34 | "column": 18 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 24, | 37 | "line": 25, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Account", | 43 | "defaultMessage": "!!!Account", |
44 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 44 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 25, | 46 | "line": 26, |
47 | "column": 11 | 47 | "column": 11 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 28, | 50 | "line": 29, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Manage Team", | 56 | "defaultMessage": "!!!Manage Team", |
57 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 57 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 29, | 59 | "line": 30, |
60 | "column": 8 | 60 | "column": 8 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 32, | 63 | "line": 33, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Settings", | 69 | "defaultMessage": "!!!Settings", |
70 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 70 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 33, | 72 | "line": 34, |
73 | "column": 12 | 73 | "column": 12 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 36, | 76 | "line": 37, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Invite Friends", | 82 | "defaultMessage": "!!!Invite Friends", |
83 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 83 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 37, | 85 | "line": 38, |
86 | "column": 17 | 86 | "column": 17 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 40, | 89 | "line": 41, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Logout", | 95 | "defaultMessage": "!!!Logout", |
96 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 96 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 41, | 98 | "line": 42, |
99 | "column": 10 | 99 | "column": 10 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 44, | 102 | "line": 45, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | } | 105 | } |
diff --git a/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json b/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json index 7d9ed3283..1124f4d6a 100644 --- a/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json +++ b/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Available Services", | 4 | "defaultMessage": "!!!Available Services", |
5 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 5 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 15, | 7 | "line": 20, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 18, | 11 | "line": 23, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Search service", | 17 | "defaultMessage": "!!!Search service", |
18 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 18 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 19, | 20 | "line": 24, |
21 | "column": 17 | 21 | "column": 17 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 22, | 24 | "line": 27, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Most popular", | 30 | "defaultMessage": "!!!Most popular", |
31 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 31 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 23, | 33 | "line": 28, |
34 | "column": 22 | 34 | "column": 22 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 26, | 37 | "line": 31, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,24 +43,24 @@ | |||
43 | "defaultMessage": "!!!All services", | 43 | "defaultMessage": "!!!All services", |
44 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 44 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 27, | 46 | "line": 32, |
47 | "column": 14 | 47 | "column": 14 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 30, | 50 | "line": 35, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
54 | { | 54 | { |
55 | "id": "settings.recipes.dev", | 55 | "id": "settings.recipes.custom", |
56 | "defaultMessage": "!!!Development", | 56 | "defaultMessage": "!!!Custom Services", |
57 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 57 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 31, | 59 | "line": 36, |
60 | "column": 14 | 60 | "column": 17 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 34, | 63 | "line": 39, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Sorry, but no service matched your search term.", | 69 | "defaultMessage": "!!!Sorry, but no service matched your search term.", |
70 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 70 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 35, | 72 | "line": 40, |
73 | "column": 16 | 73 | "column": 16 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 38, | 76 | "line": 43, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Service successfully added", | 82 | "defaultMessage": "!!!Service successfully added", |
83 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 83 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 39, | 85 | "line": 44, |
86 | "column": 31 | 86 | "column": 31 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 42, | 89 | "line": 47, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,89 @@ | |||
95 | "defaultMessage": "!!!Missing a service?", | 95 | "defaultMessage": "!!!Missing a service?", |
96 | "file": "src/components/settings/recipes/RecipesDashboard.js", | 96 | "file": "src/components/settings/recipes/RecipesDashboard.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 43, | 98 | "line": 48, |
99 | "column": 18 | 99 | "column": 18 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 46, | 102 | "line": 51, |
103 | "column": 3 | ||
104 | } | ||
105 | }, | ||
106 | { | ||
107 | "id": "settings.recipes.customService.intro", | ||
108 | "defaultMessage": "!!!To add a custom service, copy the recipe folder into:", | ||
109 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
110 | "start": { | ||
111 | "line": 52, | ||
112 | "column": 21 | ||
113 | }, | ||
114 | "end": { | ||
115 | "line": 55, | ||
116 | "column": 3 | ||
117 | } | ||
118 | }, | ||
119 | { | ||
120 | "id": "settings.recipes.customService.openFolder", | ||
121 | "defaultMessage": "!!!Open directory", | ||
122 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
123 | "start": { | ||
124 | "line": 56, | ||
125 | "column": 14 | ||
126 | }, | ||
127 | "end": { | ||
128 | "line": 59, | ||
129 | "column": 3 | ||
130 | } | ||
131 | }, | ||
132 | { | ||
133 | "id": "settings.recipes.customService.openDevDocs", | ||
134 | "defaultMessage": "!!!Developer Documentation", | ||
135 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
136 | "start": { | ||
137 | "line": 60, | ||
138 | "column": 15 | ||
139 | }, | ||
140 | "end": { | ||
141 | "line": 63, | ||
142 | "column": 3 | ||
143 | } | ||
144 | }, | ||
145 | { | ||
146 | "id": "settings.recipes.customService.headline.customRecipes", | ||
147 | "defaultMessage": "!!!Custom 3rd Party Recipes", | ||
148 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
149 | "start": { | ||
150 | "line": 64, | ||
151 | "column": 25 | ||
152 | }, | ||
153 | "end": { | ||
154 | "line": 67, | ||
155 | "column": 3 | ||
156 | } | ||
157 | }, | ||
158 | { | ||
159 | "id": "settings.recipes.customService.headline.communityRecipes", | ||
160 | "defaultMessage": "!!!Community 3rd Party Recipes", | ||
161 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
162 | "start": { | ||
163 | "line": 68, | ||
164 | "column": 28 | ||
165 | }, | ||
166 | "end": { | ||
167 | "line": 71, | ||
168 | "column": 3 | ||
169 | } | ||
170 | }, | ||
171 | { | ||
172 | "id": "settings.recipes.customService.headline.devRecipes", | ||
173 | "defaultMessage": "!!!Your Development Service Recipes", | ||
174 | "file": "src/components/settings/recipes/RecipesDashboard.js", | ||
175 | "start": { | ||
176 | "line": 72, | ||
177 | "column": 22 | ||
178 | }, | ||
179 | "end": { | ||
180 | "line": 75, | ||
103 | "column": 3 | 181 | "column": 3 |
104 | } | 182 | } |
105 | } | 183 | } |
diff --git a/src/i18n/messages/src/components/settings/services/EditServiceForm.json b/src/i18n/messages/src/components/settings/services/EditServiceForm.json index c59a6129f..45dc7b690 100644 --- a/src/i18n/messages/src/components/settings/services/EditServiceForm.json +++ b/src/i18n/messages/src/components/settings/services/EditServiceForm.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Save service", | 4 | "defaultMessage": "!!!Save service", |
5 | "file": "src/components/settings/services/EditServiceForm.js", | 5 | "file": "src/components/settings/services/EditServiceForm.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 22, | 7 | "line": 24, |
8 | "column": 15 | 8 | "column": 15 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 25, | 11 | "line": 27, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Delete Service", | 17 | "defaultMessage": "!!!Delete Service", |
18 | "file": "src/components/settings/services/EditServiceForm.js", | 18 | "file": "src/components/settings/services/EditServiceForm.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 26, | 20 | "line": 28, |
21 | "column": 17 | 21 | "column": 17 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 29, | 24 | "line": 31, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Available services", | 30 | "defaultMessage": "!!!Available services", |
31 | "file": "src/components/settings/services/EditServiceForm.js", | 31 | "file": "src/components/settings/services/EditServiceForm.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 30, | 33 | "line": 32, |
34 | "column": 21 | 34 | "column": 21 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 33, | 37 | "line": 35, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Your services", | 43 | "defaultMessage": "!!!Your services", |
44 | "file": "src/components/settings/services/EditServiceForm.js", | 44 | "file": "src/components/settings/services/EditServiceForm.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 34, | 46 | "line": 36, |
47 | "column": 16 | 47 | "column": 16 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 37, | 50 | "line": 39, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Add {name}", | 56 | "defaultMessage": "!!!Add {name}", |
57 | "file": "src/components/settings/services/EditServiceForm.js", | 57 | "file": "src/components/settings/services/EditServiceForm.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 38, | 59 | "line": 40, |
60 | "column": 22 | 60 | "column": 22 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 41, | 63 | "line": 43, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Edit {name}", | 69 | "defaultMessage": "!!!Edit {name}", |
70 | "file": "src/components/settings/services/EditServiceForm.js", | 70 | "file": "src/components/settings/services/EditServiceForm.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 42, | 72 | "line": 44, |
73 | "column": 23 | 73 | "column": 23 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 45, | 76 | "line": 47, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Hosted", | 82 | "defaultMessage": "!!!Hosted", |
83 | "file": "src/components/settings/services/EditServiceForm.js", | 83 | "file": "src/components/settings/services/EditServiceForm.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 46, | 85 | "line": 48, |
86 | "column": 13 | 86 | "column": 13 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 49, | 89 | "line": 51, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Self hosted âï¸", | 95 | "defaultMessage": "!!!Self hosted âï¸", |
96 | "file": "src/components/settings/services/EditServiceForm.js", | 96 | "file": "src/components/settings/services/EditServiceForm.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 50, | 98 | "line": 52, |
99 | "column": 16 | 99 | "column": 16 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 53, | 102 | "line": 55, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | }, | 105 | }, |
@@ -108,11 +108,11 @@ | |||
108 | "defaultMessage": "!!!Use the hosted {name} service.", | 108 | "defaultMessage": "!!!Use the hosted {name} service.", |
109 | "file": "src/components/settings/services/EditServiceForm.js", | 109 | "file": "src/components/settings/services/EditServiceForm.js", |
110 | "start": { | 110 | "start": { |
111 | "line": 54, | 111 | "line": 56, |
112 | "column": 20 | 112 | "column": 20 |
113 | }, | 113 | }, |
114 | "end": { | 114 | "end": { |
115 | "line": 57, | 115 | "line": 59, |
116 | "column": 3 | 116 | "column": 3 |
117 | } | 117 | } |
118 | }, | 118 | }, |
@@ -121,11 +121,11 @@ | |||
121 | "defaultMessage": "!!!Could not validate custom {name} server.", | 121 | "defaultMessage": "!!!Could not validate custom {name} server.", |
122 | "file": "src/components/settings/services/EditServiceForm.js", | 122 | "file": "src/components/settings/services/EditServiceForm.js", |
123 | "start": { | 123 | "start": { |
124 | "line": 58, | 124 | "line": 60, |
125 | "column": 28 | 125 | "column": 28 |
126 | }, | 126 | }, |
127 | "end": { | 127 | "end": { |
128 | "line": 61, | 128 | "line": 63, |
129 | "column": 3 | 129 | "column": 3 |
130 | } | 130 | } |
131 | }, | 131 | }, |
@@ -134,11 +134,11 @@ | |||
134 | "defaultMessage": "!!!To add self hosted services, you need a Ferdi Premium Supporter Account.", | 134 | "defaultMessage": "!!!To add self hosted services, you need a Ferdi Premium Supporter Account.", |
135 | "file": "src/components/settings/services/EditServiceForm.js", | 135 | "file": "src/components/settings/services/EditServiceForm.js", |
136 | "start": { | 136 | "start": { |
137 | "line": 62, | 137 | "line": 64, |
138 | "column": 24 | 138 | "column": 24 |
139 | }, | 139 | }, |
140 | "end": { | 140 | "end": { |
141 | "line": 65, | 141 | "line": 67, |
142 | "column": 3 | 142 | "column": 3 |
143 | } | 143 | } |
144 | }, | 144 | }, |
@@ -147,11 +147,11 @@ | |||
147 | "defaultMessage": "!!!Upgrade your account", | 147 | "defaultMessage": "!!!Upgrade your account", |
148 | "file": "src/components/settings/services/EditServiceForm.js", | 148 | "file": "src/components/settings/services/EditServiceForm.js", |
149 | "start": { | 149 | "start": { |
150 | "line": 66, | 150 | "line": 68, |
151 | "column": 27 | 151 | "column": 27 |
152 | }, | 152 | }, |
153 | "end": { | 153 | "end": { |
154 | "line": 69, | 154 | "line": 71, |
155 | "column": 3 | 155 | "column": 3 |
156 | } | 156 | } |
157 | }, | 157 | }, |
@@ -160,11 +160,11 @@ | |||
160 | "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", | 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", | 161 | "file": "src/components/settings/services/EditServiceForm.js", |
162 | "start": { | 162 | "start": { |
163 | "line": 70, | 163 | "line": 72, |
164 | "column": 23 | 164 | "column": 23 |
165 | }, | 165 | }, |
166 | "end": { | 166 | "end": { |
167 | "line": 73, | 167 | "line": 75, |
168 | "column": 3 | 168 | "column": 3 |
169 | } | 169 | } |
170 | }, | 170 | }, |
@@ -173,11 +173,11 @@ | |||
173 | "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", | 173 | "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", |
174 | "file": "src/components/settings/services/EditServiceForm.js", | 174 | "file": "src/components/settings/services/EditServiceForm.js", |
175 | "start": { | 175 | "start": { |
176 | "line": 74, | 176 | "line": 76, |
177 | "column": 15 | 177 | "column": 15 |
178 | }, | 178 | }, |
179 | "end": { | 179 | "end": { |
180 | "line": 77, | 180 | "line": 79, |
181 | "column": 3 | 181 | "column": 3 |
182 | } | 182 | } |
183 | }, | 183 | }, |
@@ -186,11 +186,11 @@ | |||
186 | "defaultMessage": "!!!Notifications", | 186 | "defaultMessage": "!!!Notifications", |
187 | "file": "src/components/settings/services/EditServiceForm.js", | 187 | "file": "src/components/settings/services/EditServiceForm.js", |
188 | "start": { | 188 | "start": { |
189 | "line": 78, | 189 | "line": 80, |
190 | "column": 25 | 190 | "column": 25 |
191 | }, | 191 | }, |
192 | "end": { | 192 | "end": { |
193 | "line": 81, | 193 | "line": 83, |
194 | "column": 3 | 194 | "column": 3 |
195 | } | 195 | } |
196 | }, | 196 | }, |
@@ -199,11 +199,11 @@ | |||
199 | "defaultMessage": "!!!Unread message badges", | 199 | "defaultMessage": "!!!Unread message badges", |
200 | "file": "src/components/settings/services/EditServiceForm.js", | 200 | "file": "src/components/settings/services/EditServiceForm.js", |
201 | "start": { | 201 | "start": { |
202 | "line": 82, | 202 | "line": 84, |
203 | "column": 18 | 203 | "column": 18 |
204 | }, | 204 | }, |
205 | "end": { | 205 | "end": { |
206 | "line": 85, | 206 | "line": 87, |
207 | "column": 3 | 207 | "column": 3 |
208 | } | 208 | } |
209 | }, | 209 | }, |
@@ -212,11 +212,11 @@ | |||
212 | "defaultMessage": "!!!General", | 212 | "defaultMessage": "!!!General", |
213 | "file": "src/components/settings/services/EditServiceForm.js", | 213 | "file": "src/components/settings/services/EditServiceForm.js", |
214 | "start": { | 214 | "start": { |
215 | "line": 86, | 215 | "line": 88, |
216 | "column": 19 | 216 | "column": 19 |
217 | }, | 217 | }, |
218 | "end": { | 218 | "end": { |
219 | "line": 89, | 219 | "line": 91, |
220 | "column": 3 | 220 | "column": 3 |
221 | } | 221 | } |
222 | }, | 222 | }, |
@@ -225,11 +225,11 @@ | |||
225 | "defaultMessage": "!!!Delete", | 225 | "defaultMessage": "!!!Delete", |
226 | "file": "src/components/settings/services/EditServiceForm.js", | 226 | "file": "src/components/settings/services/EditServiceForm.js", |
227 | "start": { | 227 | "start": { |
228 | "line": 90, | 228 | "line": 92, |
229 | "column": 14 | 229 | "column": 14 |
230 | }, | 230 | }, |
231 | "end": { | 231 | "end": { |
232 | "line": 93, | 232 | "line": 95, |
233 | "column": 3 | 233 | "column": 3 |
234 | } | 234 | } |
235 | }, | 235 | }, |
@@ -238,11 +238,11 @@ | |||
238 | "defaultMessage": "!!!Drop your image, or click here", | 238 | "defaultMessage": "!!!Drop your image, or click here", |
239 | "file": "src/components/settings/services/EditServiceForm.js", | 239 | "file": "src/components/settings/services/EditServiceForm.js", |
240 | "start": { | 240 | "start": { |
241 | "line": 94, | 241 | "line": 96, |
242 | "column": 14 | 242 | "column": 14 |
243 | }, | 243 | }, |
244 | "end": { | 244 | "end": { |
245 | "line": 97, | 245 | "line": 99, |
246 | "column": 3 | 246 | "column": 3 |
247 | } | 247 | } |
248 | }, | 248 | }, |
@@ -251,11 +251,11 @@ | |||
251 | "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", | 251 | "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", |
252 | "file": "src/components/settings/services/EditServiceForm.js", | 252 | "file": "src/components/settings/services/EditServiceForm.js", |
253 | "start": { | 253 | "start": { |
254 | "line": 98, | 254 | "line": 100, |
255 | "column": 17 | 255 | "column": 17 |
256 | }, | 256 | }, |
257 | "end": { | 257 | "end": { |
258 | "line": 101, | 258 | "line": 103, |
259 | "column": 3 | 259 | "column": 3 |
260 | } | 260 | } |
261 | }, | 261 | }, |
@@ -264,11 +264,11 @@ | |||
264 | "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", | 264 | "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", |
265 | "file": "src/components/settings/services/EditServiceForm.js", | 265 | "file": "src/components/settings/services/EditServiceForm.js", |
266 | "start": { | 266 | "start": { |
267 | "line": 102, | 267 | "line": 104, |
268 | "column": 20 | 268 | "column": 20 |
269 | }, | 269 | }, |
270 | "end": { | 270 | "end": { |
271 | "line": 105, | 271 | "line": 107, |
272 | "column": 3 | 272 | "column": 3 |
273 | } | 273 | } |
274 | }, | 274 | }, |
@@ -277,11 +277,11 @@ | |||
277 | "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", | 277 | "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", |
278 | "file": "src/components/settings/services/EditServiceForm.js", | 278 | "file": "src/components/settings/services/EditServiceForm.js", |
279 | "start": { | 279 | "start": { |
280 | "line": 106, | 280 | "line": 108, |
281 | "column": 13 | 281 | "column": 13 |
282 | }, | 282 | }, |
283 | "end": { | 283 | "end": { |
284 | "line": 109, | 284 | "line": 111, |
285 | "column": 3 | 285 | "column": 3 |
286 | } | 286 | } |
287 | } | 287 | } |
diff --git a/src/i18n/messages/src/components/settings/services/ServicesDashboard.json b/src/i18n/messages/src/components/settings/services/ServicesDashboard.json index 3803c6512..fa661ea2f 100644 --- a/src/i18n/messages/src/components/settings/services/ServicesDashboard.json +++ b/src/i18n/messages/src/components/settings/services/ServicesDashboard.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Your services", | 4 | "defaultMessage": "!!!Your services", |
5 | "file": "src/components/settings/services/ServicesDashboard.js", | 5 | "file": "src/components/settings/services/ServicesDashboard.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 15, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 18, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Search service", | 17 | "defaultMessage": "!!!Search service", |
18 | "file": "src/components/settings/services/ServicesDashboard.js", | 18 | "file": "src/components/settings/services/ServicesDashboard.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | 20 | "line": 19, |
21 | "column": 17 | 21 | "column": 17 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 21, | 24 | "line": 22, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!You haven't added any services yet.", | 30 | "defaultMessage": "!!!You haven't added any services yet.", |
31 | "file": "src/components/settings/services/ServicesDashboard.js", | 31 | "file": "src/components/settings/services/ServicesDashboard.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 22, | 33 | "line": 23, |
34 | "column": 19 | 34 | "column": 19 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 25, | 37 | "line": 26, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Sorry, but no service matched your search term.", | 43 | "defaultMessage": "!!!Sorry, but no service matched your search term.", |
44 | "file": "src/components/settings/services/ServicesDashboard.js", | 44 | "file": "src/components/settings/services/ServicesDashboard.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 26, | 46 | "line": 27, |
47 | "column": 18 | 47 | "column": 18 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 29, | 50 | "line": 30, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Discover services", | 56 | "defaultMessage": "!!!Discover services", |
57 | "file": "src/components/settings/services/ServicesDashboard.js", | 57 | "file": "src/components/settings/services/ServicesDashboard.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 30, | 59 | "line": 31, |
60 | "column": 20 | 60 | "column": 20 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 33, | 63 | "line": 34, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Could not load your services", | 69 | "defaultMessage": "!!!Could not load your services", |
70 | "file": "src/components/settings/services/ServicesDashboard.js", | 70 | "file": "src/components/settings/services/ServicesDashboard.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 34, | 72 | "line": 35, |
73 | "column": 25 | 73 | "column": 25 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 37, | 76 | "line": 38, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Try again", | 82 | "defaultMessage": "!!!Try again", |
83 | "file": "src/components/settings/services/ServicesDashboard.js", | 83 | "file": "src/components/settings/services/ServicesDashboard.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 38, | 85 | "line": 39, |
86 | "column": 21 | 86 | "column": 21 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 41, | 89 | "line": 42, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Your changes have been saved", | 95 | "defaultMessage": "!!!Your changes have been saved", |
96 | "file": "src/components/settings/services/ServicesDashboard.js", | 96 | "file": "src/components/settings/services/ServicesDashboard.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 42, | 98 | "line": 43, |
99 | "column": 15 | 99 | "column": 15 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 45, | 102 | "line": 46, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | }, | 105 | }, |
@@ -108,11 +108,11 @@ | |||
108 | "defaultMessage": "!!!Service has been deleted", | 108 | "defaultMessage": "!!!Service has been deleted", |
109 | "file": "src/components/settings/services/ServicesDashboard.js", | 109 | "file": "src/components/settings/services/ServicesDashboard.js", |
110 | "start": { | 110 | "start": { |
111 | "line": 46, | 111 | "line": 47, |
112 | "column": 15 | 112 | "column": 15 |
113 | }, | 113 | }, |
114 | "end": { | 114 | "end": { |
115 | "line": 49, | 115 | "line": 50, |
116 | "column": 3 | 116 | "column": 3 |
117 | } | 117 | } |
118 | } | 118 | } |
diff --git a/src/i18n/messages/src/components/settings/team/TeamDashboard.json b/src/i18n/messages/src/components/settings/team/TeamDashboard.json index 89d038cf3..80adadb67 100644 --- a/src/i18n/messages/src/components/settings/team/TeamDashboard.json +++ b/src/i18n/messages/src/components/settings/team/TeamDashboard.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Team", | 4 | "defaultMessage": "!!!Team", |
5 | "file": "src/components/settings/team/TeamDashboard.js", | 5 | "file": "src/components/settings/team/TeamDashboard.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 17, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 20, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Ferdi for Teams", | 17 | "defaultMessage": "!!!Ferdi for Teams", |
18 | "file": "src/components/settings/team/TeamDashboard.js", | 18 | "file": "src/components/settings/team/TeamDashboard.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | 20 | "line": 21, |
21 | "column": 19 | 21 | "column": 19 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 21, | 24 | "line": 24, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", | 30 | "defaultMessage": "!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", |
31 | "file": "src/components/settings/team/TeamDashboard.js", | 31 | "file": "src/components/settings/team/TeamDashboard.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 22, | 33 | "line": 25, |
34 | "column": 9 | 34 | "column": 9 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 25, | 37 | "line": 28, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Ferdi for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", | 43 | "defaultMessage": "!!!Ferdi for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", |
44 | "file": "src/components/settings/team/TeamDashboard.js", | 44 | "file": "src/components/settings/team/TeamDashboard.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 26, | 46 | "line": 29, |
47 | "column": 8 | 47 | "column": 8 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 29, | 50 | "line": 32, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Manage your Team on meetfranz.com", | 56 | "defaultMessage": "!!!Manage your Team on meetfranz.com", |
57 | "file": "src/components/settings/team/TeamDashboard.js", | 57 | "file": "src/components/settings/team/TeamDashboard.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 30, | 59 | "line": 33, |
60 | "column": 16 | 60 | "column": 16 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 33, | 63 | "line": 36, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Upgrade your Account", | 69 | "defaultMessage": "!!!Upgrade your Account", |
70 | "file": "src/components/settings/team/TeamDashboard.js", | 70 | "file": "src/components/settings/team/TeamDashboard.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 34, | 72 | "line": 37, |
73 | "column": 17 | 73 | "column": 17 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 37, | 76 | "line": 40, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | } | 79 | } |
diff --git a/src/i18n/messages/src/components/subscription/SubscriptionForm.json b/src/i18n/messages/src/components/subscription/SubscriptionForm.json index 506408caf..6d235254e 100644 --- a/src/i18n/messages/src/components/subscription/SubscriptionForm.json +++ b/src/i18n/messages/src/components/subscription/SubscriptionForm.json | |||
@@ -1,183 +1,53 @@ | |||
1 | [ | 1 | [ |
2 | { | 2 | { |
3 | "id": "subscription.submit.label", | 3 | "id": "subscription.cta.choosePlan", |
4 | "defaultMessage": "!!!Support the development of Franz", | 4 | "defaultMessage": "!!!Choose your plan", |
5 | "file": "src/components/subscription/SubscriptionForm.js", | 5 | "file": "src/components/subscription/SubscriptionForm.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 13, |
8 | "column": 21 | 8 | "column": 21 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 16, |
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 | 12 | "column": 3 |
39 | } | 13 | } |
40 | }, | 14 | }, |
41 | { | 15 | { |
42 | "id": "subscription.type.month", | 16 | "id": "settings.account.headlineUpgradeAccount", |
43 | "defaultMessage": "!!!month", | 17 | "defaultMessage": "!!!Upgrade your account and get the full Franz experience", |
44 | "file": "src/components/subscription/SubscriptionForm.js", | 18 | "file": "src/components/subscription/SubscriptionForm.js", |
45 | "start": { | 19 | "start": { |
46 | "line": 26, | 20 | "line": 17, |
47 | "column": 15 | 21 | "column": 18 |
48 | }, | 22 | }, |
49 | "end": { | 23 | "end": { |
50 | "line": 29, | 24 | "line": 20, |
51 | "column": 3 | 25 | "column": 3 |
52 | } | 26 | } |
53 | }, | 27 | }, |
54 | { | 28 | { |
55 | "id": "subscription.type.year", | 29 | "id": "subscription.teaser.intro", |
56 | "defaultMessage": "!!!year", | 30 | "defaultMessage": "!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", |
57 | "file": "src/components/subscription/SubscriptionForm.js", | 31 | "file": "src/components/subscription/SubscriptionForm.js", |
58 | "start": { | 32 | "start": { |
59 | "line": 30, | 33 | "line": 21, |
60 | "column": 14 | 34 | "column": 14 |
61 | }, | 35 | }, |
62 | "end": { | 36 | "end": { |
63 | "line": 33, | 37 | "line": 24, |
64 | "column": 3 | 38 | "column": 3 |
65 | } | 39 | } |
66 | }, | 40 | }, |
67 | { | 41 | { |
68 | "id": "subscription.includedFeatures", | 42 | "id": "subscription.teaser.includedFeatures", |
69 | "defaultMessage": "!!!The Ferdi Premium Supporter Account includes", | 43 | "defaultMessage": "!!!Paid Franz Plans include:", |
70 | "file": "src/components/subscription/SubscriptionForm.js", | 44 | "file": "src/components/subscription/SubscriptionForm.js", |
71 | "start": { | 45 | "start": { |
72 | "line": 34, | 46 | "line": 25, |
73 | "column": 20 | 47 | "column": 20 |
74 | }, | 48 | }, |
75 | "end": { | 49 | "end": { |
76 | "line": 37, | 50 | "line": 28, |
77 | "column": 3 | ||
78 | } | ||
79 | }, | ||
80 | { | ||
81 | "id": "subscription.features.onpremise.mattermost", | ||
82 | "defaultMessage": "!!!Add on-premise/hosted services like Mattermost", | ||
83 | "file": "src/components/subscription/SubscriptionForm.js", | ||
84 | "start": { | ||
85 | "line": 38, | ||
86 | "column": 13 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 41, | ||
90 | "column": 3 | ||
91 | } | ||
92 | }, | ||
93 | { | ||
94 | "id": "subscription.features.noInterruptions", | ||
95 | "defaultMessage": "!!!No app delays & nagging to upgrade license", | ||
96 | "file": "src/components/subscription/SubscriptionForm.js", | ||
97 | "start": { | ||
98 | "line": 42, | ||
99 | "column": 19 | ||
100 | }, | ||
101 | "end": { | ||
102 | "line": 45, | ||
103 | "column": 3 | ||
104 | } | ||
105 | }, | ||
106 | { | ||
107 | "id": "subscription.features.proxy", | ||
108 | "defaultMessage": "!!!Proxy support for services", | ||
109 | "file": "src/components/subscription/SubscriptionForm.js", | ||
110 | "start": { | ||
111 | "line": 46, | ||
112 | "column": 9 | ||
113 | }, | ||
114 | "end": { | ||
115 | "line": 49, | ||
116 | "column": 3 | ||
117 | } | ||
118 | }, | ||
119 | { | ||
120 | "id": "subscription.features.spellchecker", | ||
121 | "defaultMessage": "!!!Support for Spellchecker", | ||
122 | "file": "src/components/subscription/SubscriptionForm.js", | ||
123 | "start": { | ||
124 | "line": 50, | ||
125 | "column": 16 | ||
126 | }, | ||
127 | "end": { | ||
128 | "line": 53, | ||
129 | "column": 3 | ||
130 | } | ||
131 | }, | ||
132 | { | ||
133 | "id": "subscription.features.workspaces", | ||
134 | "defaultMessage": "!!!Organize your services in workspaces", | ||
135 | "file": "src/components/subscription/SubscriptionForm.js", | ||
136 | "start": { | ||
137 | "line": 54, | ||
138 | "column": 14 | ||
139 | }, | ||
140 | "end": { | ||
141 | "line": 57, | ||
142 | "column": 3 | ||
143 | } | ||
144 | }, | ||
145 | { | ||
146 | "id": "subscription.features.ads", | ||
147 | "defaultMessage": "!!!No ads, ever!", | ||
148 | "file": "src/components/subscription/SubscriptionForm.js", | ||
149 | "start": { | ||
150 | "line": 58, | ||
151 | "column": 7 | ||
152 | }, | ||
153 | "end": { | ||
154 | "line": 61, | ||
155 | "column": 3 | ||
156 | } | ||
157 | }, | ||
158 | { | ||
159 | "id": "subscription.features.comingSoon", | ||
160 | "defaultMessage": "!!!coming soon", | ||
161 | "file": "src/components/subscription/SubscriptionForm.js", | ||
162 | "start": { | ||
163 | "line": 62, | ||
164 | "column": 14 | ||
165 | }, | ||
166 | "end": { | ||
167 | "line": 65, | ||
168 | "column": 3 | ||
169 | } | ||
170 | }, | ||
171 | { | ||
172 | "id": "subscription.euTaxInfo", | ||
173 | "defaultMessage": "!!!EU residents: local sales tax may apply", | ||
174 | "file": "src/components/subscription/SubscriptionForm.js", | ||
175 | "start": { | ||
176 | "line": 66, | ||
177 | "column": 13 | ||
178 | }, | ||
179 | "end": { | ||
180 | "line": 69, | ||
181 | "column": 3 | 51 | "column": 3 |
182 | } | 52 | } |
183 | } | 53 | } |
diff --git a/src/i18n/messages/src/components/subscription/TrialForm.json b/src/i18n/messages/src/components/subscription/TrialForm.json new file mode 100644 index 000000000..8b387ba36 --- /dev/null +++ b/src/i18n/messages/src/components/subscription/TrialForm.json | |||
@@ -0,0 +1,93 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "subscription.cta.activateTrial", | ||
4 | "defaultMessage": "!!!Yes, start the free Franz Professional trial", | ||
5 | "file": "src/components/subscription/TrialForm.js", | ||
6 | "start": { | ||
7 | "line": 14, | ||
8 | "column": 21 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 17, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "subscription.cta.allOptions", | ||
17 | "defaultMessage": "!!!See all options", | ||
18 | "file": "src/components/subscription/TrialForm.js", | ||
19 | "start": { | ||
20 | "line": 18, | ||
21 | "column": 20 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 21, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "settings.account.headlineTrialUpgrade", | ||
30 | "defaultMessage": "!!!Get the free 14 day Franz Professional Trial", | ||
31 | "file": "src/components/subscription/TrialForm.js", | ||
32 | "start": { | ||
33 | "line": 22, | ||
34 | "column": 18 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 25, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "subscription.includedProFeatures", | ||
43 | "defaultMessage": "!!!The Franz Professional Plan includes:", | ||
44 | "file": "src/components/subscription/TrialForm.js", | ||
45 | "start": { | ||
46 | "line": 26, | ||
47 | "column": 20 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 29, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.trial.terms.headline", | ||
56 | "defaultMessage": "!!!No strings attached", | ||
57 | "file": "src/components/subscription/TrialForm.js", | ||
58 | "start": { | ||
59 | "line": 30, | ||
60 | "column": 29 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 33, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.trial.terms.noCreditCard", | ||
69 | "defaultMessage": "!!!No credit card required", | ||
70 | "file": "src/components/subscription/TrialForm.js", | ||
71 | "start": { | ||
72 | "line": 34, | ||
73 | "column": 16 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 37, | ||
77 | "column": 3 | ||
78 | } | ||
79 | }, | ||
80 | { | ||
81 | "id": "pricing.trial.terms.automaticTrialEnd", | ||
82 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", | ||
83 | "file": "src/components/subscription/TrialForm.js", | ||
84 | "start": { | ||
85 | "line": 38, | ||
86 | "column": 21 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 41, | ||
90 | "column": 3 | ||
91 | } | ||
92 | } | ||
93 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/components/ui/ActivateTrialButton/index.json b/src/i18n/messages/src/components/ui/ActivateTrialButton/index.json new file mode 100644 index 000000000..fd969da78 --- /dev/null +++ b/src/i18n/messages/src/components/ui/ActivateTrialButton/index.json | |||
@@ -0,0 +1,93 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "feature.delayApp.upgrade.action", | ||
4 | "defaultMessage": "!!!Get a Franz Supporter License", | ||
5 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
6 | "start": { | ||
7 | "line": 13, | ||
8 | "column": 10 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 16, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "feature.delayApp.trial.action", | ||
17 | "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", | ||
18 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
19 | "start": { | ||
20 | "line": 17, | ||
21 | "column": 15 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 20, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "feature.delayApp.upgrade.actionShort", | ||
30 | "defaultMessage": "!!!Upgrade account", | ||
31 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
32 | "start": { | ||
33 | "line": 21, | ||
34 | "column": 15 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 24, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "feature.delayApp.trial.actionShort", | ||
43 | "defaultMessage": "!!!Activate the free Franz Professional trial", | ||
44 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
45 | "start": { | ||
46 | "line": 25, | ||
47 | "column": 20 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 28, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.trial.terms.headline", | ||
56 | "defaultMessage": "!!!No strings attached", | ||
57 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
58 | "start": { | ||
59 | "line": 29, | ||
60 | "column": 29 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 32, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.trial.terms.noCreditCard", | ||
69 | "defaultMessage": "!!!No credit card required", | ||
70 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
71 | "start": { | ||
72 | "line": 33, | ||
73 | "column": 16 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 36, | ||
77 | "column": 3 | ||
78 | } | ||
79 | }, | ||
80 | { | ||
81 | "id": "pricing.trial.terms.automaticTrialEnd", | ||
82 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", | ||
83 | "file": "src/components/ui/ActivateTrialButton/index.js", | ||
84 | "start": { | ||
85 | "line": 37, | ||
86 | "column": 21 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 40, | ||
90 | "column": 3 | ||
91 | } | ||
92 | } | ||
93 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/components/ui/FeatureList.json b/src/i18n/messages/src/components/ui/FeatureList.json new file mode 100644 index 000000000..497e299a4 --- /dev/null +++ b/src/i18n/messages/src/components/ui/FeatureList.json | |||
@@ -0,0 +1,132 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "pricing.features.unlimitedServices", | ||
4 | "defaultMessage": "!!!Add unlimited services", | ||
5 | "file": "src/components/ui/FeatureList.js", | ||
6 | "start": { | ||
7 | "line": 8, | ||
8 | "column": 21 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 11, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "pricing.features.spellchecker", | ||
17 | "defaultMessage": "!!!Spellchecker support", | ||
18 | "file": "src/components/ui/FeatureList.js", | ||
19 | "start": { | ||
20 | "line": 12, | ||
21 | "column": 16 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 15, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "pricing.features.workspaces", | ||
30 | "defaultMessage": "!!!Workspaces", | ||
31 | "file": "src/components/ui/FeatureList.js", | ||
32 | "start": { | ||
33 | "line": 16, | ||
34 | "column": 14 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 19, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "pricing.features.customWebsites", | ||
43 | "defaultMessage": "!!!Add Custom Websites", | ||
44 | "file": "src/components/ui/FeatureList.js", | ||
45 | "start": { | ||
46 | "line": 20, | ||
47 | "column": 18 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 23, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.features.onPremise", | ||
56 | "defaultMessage": "!!!On-premise & other Hosted Services", | ||
57 | "file": "src/components/ui/FeatureList.js", | ||
58 | "start": { | ||
59 | "line": 24, | ||
60 | "column": 13 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 27, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.features.thirdPartyServices", | ||
69 | "defaultMessage": "!!!Install 3rd party services", | ||
70 | "file": "src/components/ui/FeatureList.js", | ||
71 | "start": { | ||
72 | "line": 28, | ||
73 | "column": 22 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 31, | ||
77 | "column": 3 | ||
78 | } | ||
79 | }, | ||
80 | { | ||
81 | "id": "pricing.features.serviceProxies", | ||
82 | "defaultMessage": "!!!Service Proxies", | ||
83 | "file": "src/components/ui/FeatureList.js", | ||
84 | "start": { | ||
85 | "line": 32, | ||
86 | "column": 18 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 35, | ||
90 | "column": 3 | ||
91 | } | ||
92 | }, | ||
93 | { | ||
94 | "id": "pricing.features.teamManagement", | ||
95 | "defaultMessage": "!!!Team Management", | ||
96 | "file": "src/components/ui/FeatureList.js", | ||
97 | "start": { | ||
98 | "line": 36, | ||
99 | "column": 18 | ||
100 | }, | ||
101 | "end": { | ||
102 | "line": 39, | ||
103 | "column": 3 | ||
104 | } | ||
105 | }, | ||
106 | { | ||
107 | "id": "pricing.features.appDelays", | ||
108 | "defaultMessage": "!!!No Waiting Screens", | ||
109 | "file": "src/components/ui/FeatureList.js", | ||
110 | "start": { | ||
111 | "line": 40, | ||
112 | "column": 13 | ||
113 | }, | ||
114 | "end": { | ||
115 | "line": 43, | ||
116 | "column": 3 | ||
117 | } | ||
118 | }, | ||
119 | { | ||
120 | "id": "pricing.features.adFree", | ||
121 | "defaultMessage": "!!!Forever ad-free", | ||
122 | "file": "src/components/ui/FeatureList.js", | ||
123 | "start": { | ||
124 | "line": 44, | ||
125 | "column": 10 | ||
126 | }, | ||
127 | "end": { | ||
128 | "line": 47, | ||
129 | "column": 3 | ||
130 | } | ||
131 | } | ||
132 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/components/ui/UpgradeButton/index.json b/src/i18n/messages/src/components/ui/UpgradeButton/index.json new file mode 100644 index 000000000..28e44cb66 --- /dev/null +++ b/src/i18n/messages/src/components/ui/UpgradeButton/index.json | |||
@@ -0,0 +1,15 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "global.upgradeButton.upgradeToPro", | ||
4 | "defaultMessage": "!!!Upgrade to Franz Professional", | ||
5 | "file": "src/components/ui/UpgradeButton/index.js", | ||
6 | "start": { | ||
7 | "line": 13, | ||
8 | "column": 16 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 16, | ||
12 | "column": 3 | ||
13 | } | ||
14 | } | ||
15 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json index 7645ae2c2..f802893e8 100644 --- a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json +++ b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json | |||
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Language", | 82 | "defaultMessage": "!!!Language", |
83 | "file": "src/containers/settings/EditSettingsScreen.js", | 83 | "file": "src/containers/settings/EditSettingsScreen.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 48, | 85 | "line": 44, |
86 | "column": 12 | 86 | "column": 12 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 51, | 89 | "line": 47, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Dark Mode", | 95 | "defaultMessage": "!!!Dark Mode", |
96 | "file": "src/containers/settings/EditSettingsScreen.js", | 96 | "file": "src/containers/settings/EditSettingsScreen.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 52, | 98 | "line": 48, |
99 | "column": 12 | 99 | "column": 12 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 55, | 102 | "line": 51, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | }, | 105 | }, |
@@ -108,11 +108,11 @@ | |||
108 | "defaultMessage": "!!!Display disabled services tabs", | 108 | "defaultMessage": "!!!Display disabled services tabs", |
109 | "file": "src/containers/settings/EditSettingsScreen.js", | 109 | "file": "src/containers/settings/EditSettingsScreen.js", |
110 | "start": { | 110 | "start": { |
111 | "line": 56, | 111 | "line": 52, |
112 | "column": 24 | 112 | "column": 24 |
113 | }, | 113 | }, |
114 | "end": { | 114 | "end": { |
115 | "line": 59, | 115 | "line": 55, |
116 | "column": 3 | 116 | "column": 3 |
117 | } | 117 | } |
118 | }, | 118 | }, |
@@ -121,11 +121,11 @@ | |||
121 | "defaultMessage": "!!!Show unread message badge when notifications are disabled", | 121 | "defaultMessage": "!!!Show unread message badge when notifications are disabled", |
122 | "file": "src/containers/settings/EditSettingsScreen.js", | 122 | "file": "src/containers/settings/EditSettingsScreen.js", |
123 | "start": { | 123 | "start": { |
124 | "line": 60, | 124 | "line": 56, |
125 | "column": 29 | 125 | "column": 29 |
126 | }, | 126 | }, |
127 | "end": { | 127 | "end": { |
128 | "line": 63, | 128 | "line": 59, |
129 | "column": 3 | 129 | "column": 3 |
130 | } | 130 | } |
131 | }, | 131 | }, |
@@ -134,11 +134,11 @@ | |||
134 | "defaultMessage": "!!!Enable spell checking", | 134 | "defaultMessage": "!!!Enable spell checking", |
135 | "file": "src/containers/settings/EditSettingsScreen.js", | 135 | "file": "src/containers/settings/EditSettingsScreen.js", |
136 | "start": { | 136 | "start": { |
137 | "line": 64, | 137 | "line": 60, |
138 | "column": 23 | 138 | "column": 23 |
139 | }, | 139 | }, |
140 | "end": { | 140 | "end": { |
141 | "line": 67, | 141 | "line": 63, |
142 | "column": 3 | 142 | "column": 3 |
143 | } | 143 | } |
144 | }, | 144 | }, |
@@ -147,11 +147,11 @@ | |||
147 | "defaultMessage": "!!!Enable GPU Acceleration", | 147 | "defaultMessage": "!!!Enable GPU Acceleration", |
148 | "file": "src/containers/settings/EditSettingsScreen.js", | 148 | "file": "src/containers/settings/EditSettingsScreen.js", |
149 | "start": { | 149 | "start": { |
150 | "line": 68, | 150 | "line": 64, |
151 | "column": 25 | 151 | "column": 25 |
152 | }, | 152 | }, |
153 | "end": { | 153 | "end": { |
154 | "line": 71, | 154 | "line": 67, |
155 | "column": 3 | 155 | "column": 3 |
156 | } | 156 | } |
157 | }, | 157 | }, |
@@ -160,10 +160,23 @@ | |||
160 | "defaultMessage": "!!!Include beta versions", | 160 | "defaultMessage": "!!!Include beta versions", |
161 | "file": "src/containers/settings/EditSettingsScreen.js", | 161 | "file": "src/containers/settings/EditSettingsScreen.js", |
162 | "start": { | 162 | "start": { |
163 | "line": 72, | 163 | "line": 68, |
164 | "column": 8 | 164 | "column": 8 |
165 | }, | 165 | }, |
166 | "end": { | 166 | "end": { |
167 | "line": 71, | ||
168 | "column": 3 | ||
169 | } | ||
170 | }, | ||
171 | { | ||
172 | "id": "settings.app.form.enableTodos", | ||
173 | "defaultMessage": "!!!Enable Franz Todos", | ||
174 | "file": "src/containers/settings/EditSettingsScreen.js", | ||
175 | "start": { | ||
176 | "line": 72, | ||
177 | "column": 15 | ||
178 | }, | ||
179 | "end": { | ||
167 | "line": 75, | 180 | "line": 75, |
168 | "column": 3 | 181 | "column": 3 |
169 | } | 182 | } |
diff --git a/src/i18n/messages/src/features/delayApp/Component.json b/src/i18n/messages/src/features/delayApp/Component.json index 2a3bd1fb0..6fe8b1334 100644 --- a/src/i18n/messages/src/features/delayApp/Component.json +++ b/src/i18n/messages/src/features/delayApp/Component.json | |||
@@ -4,24 +4,50 @@ | |||
4 | "defaultMessage": "!!!Please purchase license to skip waiting", | 4 | "defaultMessage": "!!!Please purchase license to skip waiting", |
5 | "file": "src/features/delayApp/Component.js", | 5 | "file": "src/features/delayApp/Component.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 13, | 7 | "line": 17, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 16, | 11 | "line": 20, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
15 | { | 15 | { |
16 | "id": "feature.delayApp.action", | 16 | "id": "feature.delayApp.trial.headline", |
17 | "defaultMessage": "!!!Get a Ferdi Supporter License", | 17 | "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", |
18 | "file": "src/features/delayApp/Component.js", | 18 | "file": "src/features/delayApp/Component.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 17, | 20 | "line": 21, |
21 | "column": 17 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 24, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "feature.delayApp.upgrade.action", | ||
30 | "defaultMessage": "!!!Get a Franz Supporter License", | ||
31 | "file": "src/features/delayApp/Component.js", | ||
32 | "start": { | ||
33 | "line": 25, | ||
21 | "column": 10 | 34 | "column": 10 |
22 | }, | 35 | }, |
23 | "end": { | 36 | "end": { |
24 | "line": 20, | 37 | "line": 28, |
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "feature.delayApp.trial.action", | ||
43 | "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", | ||
44 | "file": "src/features/delayApp/Component.js", | ||
45 | "start": { | ||
46 | "line": 29, | ||
47 | "column": 15 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 32, | ||
25 | "column": 3 | 51 | "column": 3 |
26 | } | 52 | } |
27 | }, | 53 | }, |
@@ -30,11 +56,11 @@ | |||
30 | "defaultMessage": "!!!Ferdi will continue in {seconds} seconds.", | 56 | "defaultMessage": "!!!Ferdi will continue in {seconds} seconds.", |
31 | "file": "src/features/delayApp/Component.js", | 57 | "file": "src/features/delayApp/Component.js", |
32 | "start": { | 58 | "start": { |
33 | "line": 21, | 59 | "line": 33, |
34 | "column": 8 | 60 | "column": 8 |
35 | }, | 61 | }, |
36 | "end": { | 62 | "end": { |
37 | "line": 24, | 63 | "line": 36, |
38 | "column": 3 | 64 | "column": 3 |
39 | } | 65 | } |
40 | } | 66 | } |
diff --git a/src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json b/src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json new file mode 100644 index 000000000..e6e3cef99 --- /dev/null +++ b/src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json | |||
@@ -0,0 +1,15 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "feature.announcements.changelog.headline", | ||
4 | "defaultMessage": "!!!Changes in Franz {version}", | ||
5 | "file": "src/features/serviceLimit/components/AnnouncementScreen.js", | ||
6 | "start": { | ||
7 | "line": 20, | ||
8 | "column": 12 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 23, | ||
12 | "column": 3 | ||
13 | } | ||
14 | } | ||
15 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json b/src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json new file mode 100644 index 000000000..df5bc03e8 --- /dev/null +++ b/src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json | |||
@@ -0,0 +1,28 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "feature.serviceLimit.limitReached", | ||
4 | "defaultMessage": "!!!You have added {amount} of {limit} services. Please upgrade your account to add more services.", | ||
5 | "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", | ||
6 | "start": { | ||
7 | "line": 11, | ||
8 | "column": 16 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 14, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "premiumFeature.button.upgradeAccount", | ||
17 | "defaultMessage": "!!!Upgrade account", | ||
18 | "file": "src/features/serviceLimit/components/LimitReachedInfobox.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/src/i18n/messages/src/features/shareFranz/Component.json b/src/i18n/messages/src/features/shareFranz/Component.json index a4ddd37b6..6e3e9ad19 100644 --- a/src/i18n/messages/src/features/shareFranz/Component.json +++ b/src/i18n/messages/src/features/shareFranz/Component.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Ferdi is better together!", | 4 | "defaultMessage": "!!!Ferdi is better together!", |
5 | "file": "src/features/shareFranz/Component.js", | 5 | "file": "src/features/shareFranz/Component.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 18, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 21, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", | 17 | "defaultMessage": "!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", |
18 | "file": "src/features/shareFranz/Component.js", | 18 | "file": "src/features/shareFranz/Component.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | 20 | "line": 22, |
21 | "column": 8 | 21 | "column": 8 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 21, | 24 | "line": 25, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Share as email", | 30 | "defaultMessage": "!!!Share as email", |
31 | "file": "src/features/shareFranz/Component.js", | 31 | "file": "src/features/shareFranz/Component.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 22, | 33 | "line": 26, |
34 | "column": 16 | 34 | "column": 16 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 25, | 37 | "line": 29, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Share on Facebook", | 43 | "defaultMessage": "!!!Share on Facebook", |
44 | "file": "src/features/shareFranz/Component.js", | 44 | "file": "src/features/shareFranz/Component.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 26, | 46 | "line": 30, |
47 | "column": 19 | 47 | "column": 19 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 29, | 50 | "line": 33, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Share on Twitter", | 56 | "defaultMessage": "!!!Share on Twitter", |
57 | "file": "src/features/shareFranz/Component.js", | 57 | "file": "src/features/shareFranz/Component.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 30, | 59 | "line": 34, |
60 | "column": 18 | 60 | "column": 18 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 33, | 63 | "line": 37, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", | 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", | 70 | "file": "src/features/shareFranz/Component.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 34, | 72 | "line": 38, |
73 | "column": 18 | 73 | "column": 18 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 37, | 76 | "line": 41, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", | 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 @FranzMessenger", |
83 | "file": "src/features/shareFranz/Component.js", | 83 | "file": "src/features/shareFranz/Component.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 38, | 85 | "line": 42, |
86 | "column": 20 | 86 | "column": 20 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 41, | 89 | "line": 45, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | } | 92 | } |
diff --git a/src/i18n/messages/src/features/todos/components/TodosWebview.json b/src/i18n/messages/src/features/todos/components/TodosWebview.json new file mode 100644 index 000000000..9cc3325d1 --- /dev/null +++ b/src/i18n/messages/src/features/todos/components/TodosWebview.json | |||
@@ -0,0 +1,41 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "feature.todos.premium.info", | ||
4 | "defaultMessage": "!!!Franz Todos are available to premium users now!", | ||
5 | "file": "src/features/todos/components/TodosWebview.js", | ||
6 | "start": { | ||
7 | "line": 18, | ||
8 | "column": 15 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 21, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "feature.todos.premium.upgrade", | ||
17 | "defaultMessage": "!!!Upgrade Account", | ||
18 | "file": "src/features/todos/components/TodosWebview.js", | ||
19 | "start": { | ||
20 | "line": 22, | ||
21 | "column": 14 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 25, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "feature.todos.premium.rollout", | ||
30 | "defaultMessage": "!!!Everyone else will have to wait a little longer.", | ||
31 | "file": "src/features/todos/components/TodosWebview.js", | ||
32 | "start": { | ||
33 | "line": 26, | ||
34 | "column": 15 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 29, | ||
38 | "column": 3 | ||
39 | } | ||
40 | } | ||
41 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json index e91bd85f8..2f340f1e9 100644 --- a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json +++ b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Workspaces", | 4 | "defaultMessage": "!!!Workspaces", |
5 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 5 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 15, | 7 | "line": 17, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 18, | 11 | "line": 20, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!All services", | 17 | "defaultMessage": "!!!All services", |
18 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 18 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 19, | 20 | "line": 21, |
21 | "column": 15 | 21 | "column": 15 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 22, | 24 | "line": 24, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Workspaces settings", | 30 | "defaultMessage": "!!!Workspaces settings", |
31 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 31 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 23, | 33 | "line": 25, |
34 | "column": 29 | 34 | "column": 29 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 26, | 37 | "line": 28, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Info about workspace feature", | 43 | "defaultMessage": "!!!Info about workspace feature", |
44 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 44 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 27, | 46 | "line": 29, |
47 | "column": 24 | 47 | "column": 24 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 30, | 50 | "line": 32, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Create your first workspace", | 56 | "defaultMessage": "!!!Create your first workspace", |
57 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 57 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 31, | 59 | "line": 33, |
60 | "column": 25 | 60 | "column": 25 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 34, | 63 | "line": 36, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Reactivate premium account", | 69 | "defaultMessage": "!!!Reactivate premium account", |
70 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 70 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 35, | 72 | "line": 37, |
73 | "column": 28 | 73 | "column": 28 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 38, | 76 | "line": 40, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!add new workspace", | 82 | "defaultMessage": "!!!add new workspace", |
83 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 83 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 39, | 85 | "line": 41, |
86 | "column": 24 | 86 | "column": 24 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 42, | 89 | "line": 44, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Premium feature", | 95 | "defaultMessage": "!!!Premium feature", |
96 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", | 96 | "file": "src/features/workspaces/components/WorkspaceDrawer.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 43, | 98 | "line": 45, |
99 | "column": 23 | 99 | "column": 23 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 46, | 102 | "line": 48, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | } | 105 | } |
diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json b/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json index 127bf136b..4111ba760 100644 --- a/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json +++ b/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Your workspaces", | 4 | "defaultMessage": "!!!Your workspaces", |
5 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 5 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 17, | 7 | "line": 19, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 20, | 11 | "line": 22, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!You haven't added any workspaces yet.", | 17 | "defaultMessage": "!!!You haven't added any workspaces yet.", |
18 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 18 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 21, | 20 | "line": 23, |
21 | "column": 19 | 21 | "column": 19 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 24, | 24 | "line": 26, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Could not load your workspaces", | 30 | "defaultMessage": "!!!Could not load your workspaces", |
31 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 31 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 25, | 33 | "line": 27, |
34 | "column": 27 | 34 | "column": 27 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 28, | 37 | "line": 30, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Try again", | 43 | "defaultMessage": "!!!Try again", |
44 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 44 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 29, | 46 | "line": 31, |
47 | "column": 23 | 47 | "column": 23 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 32, | 50 | "line": 34, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Your changes have been saved", | 56 | "defaultMessage": "!!!Your changes have been saved", |
57 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 57 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 33, | 59 | "line": 35, |
60 | "column": 15 | 60 | "column": 15 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 36, | 63 | "line": 38, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Workspace has been deleted", | 69 | "defaultMessage": "!!!Workspace has been deleted", |
70 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 70 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 37, | 72 | "line": 39, |
73 | "column": 15 | 73 | "column": 15 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 40, | 76 | "line": 42, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Info about workspace feature", | 82 | "defaultMessage": "!!!Info about workspace feature", |
83 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 83 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 41, | 85 | "line": 43, |
86 | "column": 24 | 86 | "column": 24 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 44, | 89 | "line": 46, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", | 95 | "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", |
96 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", | 96 | "file": "src/features/workspaces/components/WorkspacesDashboard.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 45, | 98 | "line": 47, |
99 | "column": 28 | 99 | "column": 28 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 48, | 102 | "line": 50, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | } | 105 | } |
diff --git a/src/i18n/messages/src/helpers/plan-helpers.json b/src/i18n/messages/src/helpers/plan-helpers.json new file mode 100644 index 000000000..df8ee19e3 --- /dev/null +++ b/src/i18n/messages/src/helpers/plan-helpers.json | |||
@@ -0,0 +1,54 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "pricing.plan.pro", | ||
4 | "defaultMessage": "!!!Franz Professional", | ||
5 | "file": "src/helpers/plan-helpers.js", | ||
6 | "start": { | ||
7 | "line": 5, | ||
8 | "column": 15 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 8, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "pricing.plan.personal", | ||
17 | "defaultMessage": "!!!Franz Personal", | ||
18 | "file": "src/helpers/plan-helpers.js", | ||
19 | "start": { | ||
20 | "line": 9, | ||
21 | "column": 20 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 12, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "pricing.plan.free", | ||
30 | "defaultMessage": "!!!Franz Free", | ||
31 | "file": "src/helpers/plan-helpers.js", | ||
32 | "start": { | ||
33 | "line": 13, | ||
34 | "column": 16 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 16, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "pricing.plan.legacy", | ||
43 | "defaultMessage": "!!!Franz Premium", | ||
44 | "file": "src/helpers/plan-helpers.js", | ||
45 | "start": { | ||
46 | "line": 17, | ||
47 | "column": 18 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 20, | ||
51 | "column": 3 | ||
52 | } | ||
53 | } | ||
54 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/helpers/pricing-helpers.json b/src/i18n/messages/src/helpers/pricing-helpers.json new file mode 100644 index 000000000..4030a3e3b --- /dev/null +++ b/src/i18n/messages/src/helpers/pricing-helpers.json | |||
@@ -0,0 +1,80 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "pricing.plan.pro-yearly", | ||
4 | "defaultMessage": "!!!Franz Professional Yearly", | ||
5 | "file": "src/helpers/pricing-helpers.js", | ||
6 | "start": { | ||
7 | "line": 5, | ||
8 | "column": 22 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 8, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "pricing.plan.pro-monthly", | ||
17 | "defaultMessage": "!!!Franz Professional Monthly", | ||
18 | "file": "src/helpers/pricing-helpers.js", | ||
19 | "start": { | ||
20 | "line": 9, | ||
21 | "column": 23 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 12, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "pricing.plan.personal-yearly", | ||
30 | "defaultMessage": "!!!Franz Personal Yearly", | ||
31 | "file": "src/helpers/pricing-helpers.js", | ||
32 | "start": { | ||
33 | "line": 13, | ||
34 | "column": 27 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 16, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "pricing.plan.personal-monthly", | ||
43 | "defaultMessage": "!!!Franz Personal Monthly", | ||
44 | "file": "src/helpers/pricing-helpers.js", | ||
45 | "start": { | ||
46 | "line": 17, | ||
47 | "column": 28 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 20, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.plan.free", | ||
56 | "defaultMessage": "!!!Franz Free", | ||
57 | "file": "src/helpers/pricing-helpers.js", | ||
58 | "start": { | ||
59 | "line": 21, | ||
60 | "column": 16 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 24, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.plan.legacy", | ||
69 | "defaultMessage": "!!!Franz Premium", | ||
70 | "file": "src/helpers/pricing-helpers.js", | ||
71 | "start": { | ||
72 | "line": 25, | ||
73 | "column": 18 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 28, | ||
77 | "column": 3 | ||
78 | } | ||
79 | } | ||
80 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/i18n/globalMessages.json b/src/i18n/messages/src/i18n/globalMessages.json index f94dcdf17..903de64cb 100644 --- a/src/i18n/messages/src/i18n/globalMessages.json +++ b/src/i18n/messages/src/i18n/globalMessages.json | |||
@@ -76,5 +76,18 @@ | |||
76 | "line": 27, | 76 | "line": 27, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | ||
80 | { | ||
81 | "id": "global.franzProRequired", | ||
82 | "defaultMessage": "!!!Franz Professional Required", | ||
83 | "file": "src/i18n/globalMessages.js", | ||
84 | "start": { | ||
85 | "line": 28, | ||
86 | "column": 15 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 31, | ||
90 | "column": 3 | ||
91 | } | ||
79 | } | 92 | } |
80 | ] \ No newline at end of file | 93 | ] \ No newline at end of file |
diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json index a41c80c1c..43354bfca 100644 --- a/src/i18n/messages/src/lib/Menu.json +++ b/src/i18n/messages/src/lib/Menu.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Edit", | 4 | "defaultMessage": "!!!Edit", |
5 | "file": "src/lib/Menu.js", | 5 | "file": "src/lib/Menu.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 18, |
8 | "column": 8 | 8 | "column": 8 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 21, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,11 +17,11 @@ | |||
17 | "defaultMessage": "!!!Undo", | 17 | "defaultMessage": "!!!Undo", |
18 | "file": "src/lib/Menu.js", | 18 | "file": "src/lib/Menu.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | 20 | "line": 22, |
21 | "column": 8 | 21 | "column": 8 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 21, | 24 | "line": 25, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
@@ -30,11 +30,11 @@ | |||
30 | "defaultMessage": "!!!Redo", | 30 | "defaultMessage": "!!!Redo", |
31 | "file": "src/lib/Menu.js", | 31 | "file": "src/lib/Menu.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 22, | 33 | "line": 26, |
34 | "column": 8 | 34 | "column": 8 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 25, | 37 | "line": 29, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!!Cut", | 43 | "defaultMessage": "!!!Cut", |
44 | "file": "src/lib/Menu.js", | 44 | "file": "src/lib/Menu.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 26, | 46 | "line": 30, |
47 | "column": 7 | 47 | "column": 7 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 29, | 50 | "line": 33, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Copy", | 56 | "defaultMessage": "!!!Copy", |
57 | "file": "src/lib/Menu.js", | 57 | "file": "src/lib/Menu.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 30, | 59 | "line": 34, |
60 | "column": 8 | 60 | "column": 8 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 33, | 63 | "line": 37, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Paste", | 69 | "defaultMessage": "!!!Paste", |
70 | "file": "src/lib/Menu.js", | 70 | "file": "src/lib/Menu.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 34, | 72 | "line": 38, |
73 | "column": 9 | 73 | "column": 9 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 37, | 76 | "line": 41, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Paste And Match Style", | 82 | "defaultMessage": "!!!Paste And Match Style", |
83 | "file": "src/lib/Menu.js", | 83 | "file": "src/lib/Menu.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 38, | 85 | "line": 42, |
86 | "column": 22 | 86 | "column": 22 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 41, | 89 | "line": 45, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Delete", | 95 | "defaultMessage": "!!!Delete", |
96 | "file": "src/lib/Menu.js", | 96 | "file": "src/lib/Menu.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 42, | 98 | "line": 46, |
99 | "column": 10 | 99 | "column": 10 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 45, | 102 | "line": 49, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | }, | 105 | }, |
@@ -108,11 +108,11 @@ | |||
108 | "defaultMessage": "!!!Select All", | 108 | "defaultMessage": "!!!Select All", |
109 | "file": "src/lib/Menu.js", | 109 | "file": "src/lib/Menu.js", |
110 | "start": { | 110 | "start": { |
111 | "line": 46, | 111 | "line": 50, |
112 | "column": 13 | 112 | "column": 13 |
113 | }, | 113 | }, |
114 | "end": { | 114 | "end": { |
115 | "line": 49, | 115 | "line": 53, |
116 | "column": 3 | 116 | "column": 3 |
117 | } | 117 | } |
118 | }, | 118 | }, |
@@ -121,11 +121,11 @@ | |||
121 | "defaultMessage": "!!!Speech", | 121 | "defaultMessage": "!!!Speech", |
122 | "file": "src/lib/Menu.js", | 122 | "file": "src/lib/Menu.js", |
123 | "start": { | 123 | "start": { |
124 | "line": 50, | 124 | "line": 54, |
125 | "column": 10 | 125 | "column": 10 |
126 | }, | 126 | }, |
127 | "end": { | 127 | "end": { |
128 | "line": 53, | 128 | "line": 57, |
129 | "column": 3 | 129 | "column": 3 |
130 | } | 130 | } |
131 | }, | 131 | }, |
@@ -134,11 +134,11 @@ | |||
134 | "defaultMessage": "!!!Start Speaking", | 134 | "defaultMessage": "!!!Start Speaking", |
135 | "file": "src/lib/Menu.js", | 135 | "file": "src/lib/Menu.js", |
136 | "start": { | 136 | "start": { |
137 | "line": 54, | 137 | "line": 58, |
138 | "column": 17 | 138 | "column": 17 |
139 | }, | 139 | }, |
140 | "end": { | 140 | "end": { |
141 | "line": 57, | 141 | "line": 61, |
142 | "column": 3 | 142 | "column": 3 |
143 | } | 143 | } |
144 | }, | 144 | }, |
@@ -147,11 +147,11 @@ | |||
147 | "defaultMessage": "!!!Stop Speaking", | 147 | "defaultMessage": "!!!Stop Speaking", |
148 | "file": "src/lib/Menu.js", | 148 | "file": "src/lib/Menu.js", |
149 | "start": { | 149 | "start": { |
150 | "line": 58, | 150 | "line": 62, |
151 | "column": 16 | 151 | "column": 16 |
152 | }, | 152 | }, |
153 | "end": { | 153 | "end": { |
154 | "line": 61, | 154 | "line": 65, |
155 | "column": 3 | 155 | "column": 3 |
156 | } | 156 | } |
157 | }, | 157 | }, |
@@ -160,11 +160,11 @@ | |||
160 | "defaultMessage": "!!!Start Dictation", | 160 | "defaultMessage": "!!!Start Dictation", |
161 | "file": "src/lib/Menu.js", | 161 | "file": "src/lib/Menu.js", |
162 | "start": { | 162 | "start": { |
163 | "line": 62, | 163 | "line": 66, |
164 | "column": 18 | 164 | "column": 18 |
165 | }, | 165 | }, |
166 | "end": { | 166 | "end": { |
167 | "line": 65, | 167 | "line": 69, |
168 | "column": 3 | 168 | "column": 3 |
169 | } | 169 | } |
170 | }, | 170 | }, |
@@ -173,11 +173,11 @@ | |||
173 | "defaultMessage": "!!!Emoji & Symbols", | 173 | "defaultMessage": "!!!Emoji & Symbols", |
174 | "file": "src/lib/Menu.js", | 174 | "file": "src/lib/Menu.js", |
175 | "start": { | 175 | "start": { |
176 | "line": 66, | 176 | "line": 70, |
177 | "column": 16 | 177 | "column": 16 |
178 | }, | 178 | }, |
179 | "end": { | 179 | "end": { |
180 | "line": 69, | 180 | "line": 73, |
181 | "column": 3 | 181 | "column": 3 |
182 | } | 182 | } |
183 | }, | 183 | }, |
@@ -186,11 +186,11 @@ | |||
186 | "defaultMessage": "!!!Actual Size", | 186 | "defaultMessage": "!!!Actual Size", |
187 | "file": "src/lib/Menu.js", | 187 | "file": "src/lib/Menu.js", |
188 | "start": { | 188 | "start": { |
189 | "line": 70, | 189 | "line": 74, |
190 | "column": 13 | 190 | "column": 13 |
191 | }, | 191 | }, |
192 | "end": { | 192 | "end": { |
193 | "line": 73, | 193 | "line": 77, |
194 | "column": 3 | 194 | "column": 3 |
195 | } | 195 | } |
196 | }, | 196 | }, |
@@ -199,11 +199,11 @@ | |||
199 | "defaultMessage": "!!!Zoom In", | 199 | "defaultMessage": "!!!Zoom In", |
200 | "file": "src/lib/Menu.js", | 200 | "file": "src/lib/Menu.js", |
201 | "start": { | 201 | "start": { |
202 | "line": 74, | 202 | "line": 78, |
203 | "column": 10 | 203 | "column": 10 |
204 | }, | 204 | }, |
205 | "end": { | 205 | "end": { |
206 | "line": 77, | 206 | "line": 81, |
207 | "column": 3 | 207 | "column": 3 |
208 | } | 208 | } |
209 | }, | 209 | }, |
@@ -212,11 +212,11 @@ | |||
212 | "defaultMessage": "!!!Zoom Out", | 212 | "defaultMessage": "!!!Zoom Out", |
213 | "file": "src/lib/Menu.js", | 213 | "file": "src/lib/Menu.js", |
214 | "start": { | 214 | "start": { |
215 | "line": 78, | 215 | "line": 82, |
216 | "column": 11 | 216 | "column": 11 |
217 | }, | 217 | }, |
218 | "end": { | 218 | "end": { |
219 | "line": 81, | 219 | "line": 85, |
220 | "column": 3 | 220 | "column": 3 |
221 | } | 221 | } |
222 | }, | 222 | }, |
@@ -225,11 +225,11 @@ | |||
225 | "defaultMessage": "!!!Enter Full Screen", | 225 | "defaultMessage": "!!!Enter Full Screen", |
226 | "file": "src/lib/Menu.js", | 226 | "file": "src/lib/Menu.js", |
227 | "start": { | 227 | "start": { |
228 | "line": 82, | 228 | "line": 86, |
229 | "column": 19 | 229 | "column": 19 |
230 | }, | 230 | }, |
231 | "end": { | 231 | "end": { |
232 | "line": 85, | 232 | "line": 89, |
233 | "column": 3 | 233 | "column": 3 |
234 | } | 234 | } |
235 | }, | 235 | }, |
@@ -238,11 +238,11 @@ | |||
238 | "defaultMessage": "!!!Exit Full Screen", | 238 | "defaultMessage": "!!!Exit Full Screen", |
239 | "file": "src/lib/Menu.js", | 239 | "file": "src/lib/Menu.js", |
240 | "start": { | 240 | "start": { |
241 | "line": 86, | 241 | "line": 90, |
242 | "column": 18 | 242 | "column": 18 |
243 | }, | 243 | }, |
244 | "end": { | 244 | "end": { |
245 | "line": 89, | 245 | "line": 93, |
246 | "column": 3 | 246 | "column": 3 |
247 | } | 247 | } |
248 | }, | 248 | }, |
@@ -251,11 +251,11 @@ | |||
251 | "defaultMessage": "!!!Toggle Full Screen", | 251 | "defaultMessage": "!!!Toggle Full Screen", |
252 | "file": "src/lib/Menu.js", | 252 | "file": "src/lib/Menu.js", |
253 | "start": { | 253 | "start": { |
254 | "line": 90, | 254 | "line": 94, |
255 | "column": 20 | 255 | "column": 20 |
256 | }, | 256 | }, |
257 | "end": { | 257 | "end": { |
258 | "line": 93, | 258 | "line": 97, |
259 | "column": 3 | 259 | "column": 3 |
260 | } | 260 | } |
261 | }, | 261 | }, |
@@ -264,11 +264,24 @@ | |||
264 | "defaultMessage": "!!!Toggle Developer Tools", | 264 | "defaultMessage": "!!!Toggle Developer Tools", |
265 | "file": "src/lib/Menu.js", | 265 | "file": "src/lib/Menu.js", |
266 | "start": { | 266 | "start": { |
267 | "line": 94, | 267 | "line": 98, |
268 | "column": 18 | 268 | "column": 18 |
269 | }, | 269 | }, |
270 | "end": { | 270 | "end": { |
271 | "line": 97, | 271 | "line": 101, |
272 | "column": 3 | ||
273 | } | ||
274 | }, | ||
275 | { | ||
276 | "id": "menu.view.toggleTodosDevTools", | ||
277 | "defaultMessage": "!!!Toggle Todos Developer Tools", | ||
278 | "file": "src/lib/Menu.js", | ||
279 | "start": { | ||
280 | "line": 102, | ||
281 | "column": 23 | ||
282 | }, | ||
283 | "end": { | ||
284 | "line": 105, | ||
272 | "column": 3 | 285 | "column": 3 |
273 | } | 286 | } |
274 | }, | 287 | }, |
@@ -277,11 +290,11 @@ | |||
277 | "defaultMessage": "!!!Toggle Service Developer Tools", | 290 | "defaultMessage": "!!!Toggle Service Developer Tools", |
278 | "file": "src/lib/Menu.js", | 291 | "file": "src/lib/Menu.js", |
279 | "start": { | 292 | "start": { |
280 | "line": 98, | 293 | "line": 106, |
281 | "column": 25 | 294 | "column": 25 |
282 | }, | 295 | }, |
283 | "end": { | 296 | "end": { |
284 | "line": 101, | 297 | "line": 109, |
285 | "column": 3 | 298 | "column": 3 |
286 | } | 299 | } |
287 | }, | 300 | }, |
@@ -290,11 +303,11 @@ | |||
290 | "defaultMessage": "!!!Reload Service", | 303 | "defaultMessage": "!!!Reload Service", |
291 | "file": "src/lib/Menu.js", | 304 | "file": "src/lib/Menu.js", |
292 | "start": { | 305 | "start": { |
293 | "line": 102, | 306 | "line": 110, |
294 | "column": 17 | 307 | "column": 17 |
295 | }, | 308 | }, |
296 | "end": { | 309 | "end": { |
297 | "line": 105, | 310 | "line": 113, |
298 | "column": 3 | 311 | "column": 3 |
299 | } | 312 | } |
300 | }, | 313 | }, |
@@ -303,11 +316,11 @@ | |||
303 | "defaultMessage": "!!!Reload Franz", | 316 | "defaultMessage": "!!!Reload Franz", |
304 | "file": "src/lib/Menu.js", | 317 | "file": "src/lib/Menu.js", |
305 | "start": { | 318 | "start": { |
306 | "line": 106, | 319 | "line": 114, |
307 | "column": 15 | 320 | "column": 15 |
308 | }, | 321 | }, |
309 | "end": { | 322 | "end": { |
310 | "line": 109, | 323 | "line": 117, |
311 | "column": 3 | 324 | "column": 3 |
312 | } | 325 | } |
313 | }, | 326 | }, |
@@ -316,11 +329,11 @@ | |||
316 | "defaultMessage": "!!!Minimize", | 329 | "defaultMessage": "!!!Minimize", |
317 | "file": "src/lib/Menu.js", | 330 | "file": "src/lib/Menu.js", |
318 | "start": { | 331 | "start": { |
319 | "line": 110, | 332 | "line": 118, |
320 | "column": 12 | 333 | "column": 12 |
321 | }, | 334 | }, |
322 | "end": { | 335 | "end": { |
323 | "line": 113, | 336 | "line": 121, |
324 | "column": 3 | 337 | "column": 3 |
325 | } | 338 | } |
326 | }, | 339 | }, |
@@ -329,11 +342,11 @@ | |||
329 | "defaultMessage": "!!!Close", | 342 | "defaultMessage": "!!!Close", |
330 | "file": "src/lib/Menu.js", | 343 | "file": "src/lib/Menu.js", |
331 | "start": { | 344 | "start": { |
332 | "line": 114, | 345 | "line": 122, |
333 | "column": 9 | 346 | "column": 9 |
334 | }, | 347 | }, |
335 | "end": { | 348 | "end": { |
336 | "line": 117, | 349 | "line": 125, |
337 | "column": 3 | 350 | "column": 3 |
338 | } | 351 | } |
339 | }, | 352 | }, |
@@ -342,11 +355,11 @@ | |||
342 | "defaultMessage": "!!!Learn More", | 355 | "defaultMessage": "!!!Learn More", |
343 | "file": "src/lib/Menu.js", | 356 | "file": "src/lib/Menu.js", |
344 | "start": { | 357 | "start": { |
345 | "line": 118, | 358 | "line": 126, |
346 | "column": 13 | 359 | "column": 13 |
347 | }, | 360 | }, |
348 | "end": { | 361 | "end": { |
349 | "line": 121, | 362 | "line": 129, |
350 | "column": 3 | 363 | "column": 3 |
351 | } | 364 | } |
352 | }, | 365 | }, |
@@ -355,11 +368,11 @@ | |||
355 | "defaultMessage": "!!!Changelog", | 368 | "defaultMessage": "!!!Changelog", |
356 | "file": "src/lib/Menu.js", | 369 | "file": "src/lib/Menu.js", |
357 | "start": { | 370 | "start": { |
358 | "line": 122, | 371 | "line": 130, |
359 | "column": 13 | 372 | "column": 13 |
360 | }, | 373 | }, |
361 | "end": { | 374 | "end": { |
362 | "line": 125, | 375 | "line": 133, |
363 | "column": 3 | 376 | "column": 3 |
364 | } | 377 | } |
365 | }, | 378 | }, |
@@ -368,11 +381,11 @@ | |||
368 | "defaultMessage": "!!!Support", | 381 | "defaultMessage": "!!!Support", |
369 | "file": "src/lib/Menu.js", | 382 | "file": "src/lib/Menu.js", |
370 | "start": { | 383 | "start": { |
371 | "line": 126, | 384 | "line": 134, |
372 | "column": 11 | 385 | "column": 11 |
373 | }, | 386 | }, |
374 | "end": { | 387 | "end": { |
375 | "line": 129, | 388 | "line": 137, |
376 | "column": 3 | 389 | "column": 3 |
377 | } | 390 | } |
378 | }, | 391 | }, |
@@ -381,11 +394,11 @@ | |||
381 | "defaultMessage": "!!!Copy Debug Information", | 394 | "defaultMessage": "!!!Copy Debug Information", |
382 | "file": "src/lib/Menu.js", | 395 | "file": "src/lib/Menu.js", |
383 | "start": { | 396 | "start": { |
384 | "line": 130, | 397 | "line": 138, |
385 | "column": 13 | 398 | "column": 13 |
386 | }, | 399 | }, |
387 | "end": { | 400 | "end": { |
388 | "line": 133, | 401 | "line": 141, |
389 | "column": 3 | 402 | "column": 3 |
390 | } | 403 | } |
391 | }, | 404 | }, |
@@ -394,11 +407,11 @@ | |||
394 | "defaultMessage": "!!!Ferdi Debug Information", | 407 | "defaultMessage": "!!!Ferdi Debug Information", |
395 | "file": "src/lib/Menu.js", | 408 | "file": "src/lib/Menu.js", |
396 | "start": { | 409 | "start": { |
397 | "line": 134, | 410 | "line": 142, |
398 | "column": 27 | 411 | "column": 27 |
399 | }, | 412 | }, |
400 | "end": { | 413 | "end": { |
401 | "line": 137, | 414 | "line": 145, |
402 | "column": 3 | 415 | "column": 3 |
403 | } | 416 | } |
404 | }, | 417 | }, |
@@ -407,11 +420,11 @@ | |||
407 | "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", | 420 | "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", |
408 | "file": "src/lib/Menu.js", | 421 | "file": "src/lib/Menu.js", |
409 | "start": { | 422 | "start": { |
410 | "line": 138, | 423 | "line": 146, |
411 | "column": 23 | 424 | "column": 23 |
412 | }, | 425 | }, |
413 | "end": { | 426 | "end": { |
414 | "line": 141, | 427 | "line": 149, |
415 | "column": 3 | 428 | "column": 3 |
416 | } | 429 | } |
417 | }, | 430 | }, |
@@ -420,11 +433,11 @@ | |||
420 | "defaultMessage": "!!!Terms of Service", | 433 | "defaultMessage": "!!!Terms of Service", |
421 | "file": "src/lib/Menu.js", | 434 | "file": "src/lib/Menu.js", |
422 | "start": { | 435 | "start": { |
423 | "line": 142, | 436 | "line": 150, |
424 | "column": 7 | 437 | "column": 7 |
425 | }, | 438 | }, |
426 | "end": { | 439 | "end": { |
427 | "line": 145, | 440 | "line": 153, |
428 | "column": 3 | 441 | "column": 3 |
429 | } | 442 | } |
430 | }, | 443 | }, |
@@ -433,11 +446,11 @@ | |||
433 | "defaultMessage": "!!!Privacy Statement", | 446 | "defaultMessage": "!!!Privacy Statement", |
434 | "file": "src/lib/Menu.js", | 447 | "file": "src/lib/Menu.js", |
435 | "start": { | 448 | "start": { |
436 | "line": 146, | 449 | "line": 154, |
437 | "column": 11 | 450 | "column": 11 |
438 | }, | 451 | }, |
439 | "end": { | 452 | "end": { |
440 | "line": 149, | 453 | "line": 157, |
441 | "column": 3 | 454 | "column": 3 |
442 | } | 455 | } |
443 | }, | 456 | }, |
@@ -446,11 +459,11 @@ | |||
446 | "defaultMessage": "!!!File", | 459 | "defaultMessage": "!!!File", |
447 | "file": "src/lib/Menu.js", | 460 | "file": "src/lib/Menu.js", |
448 | "start": { | 461 | "start": { |
449 | "line": 150, | 462 | "line": 158, |
450 | "column": 8 | 463 | "column": 8 |
451 | }, | 464 | }, |
452 | "end": { | 465 | "end": { |
453 | "line": 153, | 466 | "line": 161, |
454 | "column": 3 | 467 | "column": 3 |
455 | } | 468 | } |
456 | }, | 469 | }, |
@@ -459,11 +472,11 @@ | |||
459 | "defaultMessage": "!!!View", | 472 | "defaultMessage": "!!!View", |
460 | "file": "src/lib/Menu.js", | 473 | "file": "src/lib/Menu.js", |
461 | "start": { | 474 | "start": { |
462 | "line": 154, | 475 | "line": 162, |
463 | "column": 8 | 476 | "column": 8 |
464 | }, | 477 | }, |
465 | "end": { | 478 | "end": { |
466 | "line": 157, | 479 | "line": 165, |
467 | "column": 3 | 480 | "column": 3 |
468 | } | 481 | } |
469 | }, | 482 | }, |
@@ -472,11 +485,11 @@ | |||
472 | "defaultMessage": "!!!Services", | 485 | "defaultMessage": "!!!Services", |
473 | "file": "src/lib/Menu.js", | 486 | "file": "src/lib/Menu.js", |
474 | "start": { | 487 | "start": { |
475 | "line": 158, | 488 | "line": 166, |
476 | "column": 12 | 489 | "column": 12 |
477 | }, | 490 | }, |
478 | "end": { | 491 | "end": { |
479 | "line": 161, | 492 | "line": 169, |
480 | "column": 3 | 493 | "column": 3 |
481 | } | 494 | } |
482 | }, | 495 | }, |
@@ -485,11 +498,11 @@ | |||
485 | "defaultMessage": "!!!Window", | 498 | "defaultMessage": "!!!Window", |
486 | "file": "src/lib/Menu.js", | 499 | "file": "src/lib/Menu.js", |
487 | "start": { | 500 | "start": { |
488 | "line": 162, | 501 | "line": 170, |
489 | "column": 10 | 502 | "column": 10 |
490 | }, | 503 | }, |
491 | "end": { | 504 | "end": { |
492 | "line": 165, | 505 | "line": 173, |
493 | "column": 3 | 506 | "column": 3 |
494 | } | 507 | } |
495 | }, | 508 | }, |
@@ -498,11 +511,11 @@ | |||
498 | "defaultMessage": "!!!Help", | 511 | "defaultMessage": "!!!Help", |
499 | "file": "src/lib/Menu.js", | 512 | "file": "src/lib/Menu.js", |
500 | "start": { | 513 | "start": { |
501 | "line": 166, | 514 | "line": 174, |
502 | "column": 8 | 515 | "column": 8 |
503 | }, | 516 | }, |
504 | "end": { | 517 | "end": { |
505 | "line": 169, | 518 | "line": 177, |
506 | "column": 3 | 519 | "column": 3 |
507 | } | 520 | } |
508 | }, | 521 | }, |
@@ -511,11 +524,11 @@ | |||
511 | "defaultMessage": "!!!About Franz", | 524 | "defaultMessage": "!!!About Franz", |
512 | "file": "src/lib/Menu.js", | 525 | "file": "src/lib/Menu.js", |
513 | "start": { | 526 | "start": { |
514 | "line": 170, | 527 | "line": 178, |
515 | "column": 9 | 528 | "column": 9 |
516 | }, | 529 | }, |
517 | "end": { | 530 | "end": { |
518 | "line": 173, | 531 | "line": 181, |
519 | "column": 3 | 532 | "column": 3 |
520 | } | 533 | } |
521 | }, | 534 | }, |
@@ -524,11 +537,11 @@ | |||
524 | "defaultMessage": "!!!What's new?", | 537 | "defaultMessage": "!!!What's new?", |
525 | "file": "src/lib/Menu.js", | 538 | "file": "src/lib/Menu.js", |
526 | "start": { | 539 | "start": { |
527 | "line": 174, | 540 | "line": 182, |
528 | "column": 16 | 541 | "column": 16 |
529 | }, | 542 | }, |
530 | "end": { | 543 | "end": { |
531 | "line": 177, | 544 | "line": 185, |
532 | "column": 3 | 545 | "column": 3 |
533 | } | 546 | } |
534 | }, | 547 | }, |
@@ -537,11 +550,11 @@ | |||
537 | "defaultMessage": "!!!Settings", | 550 | "defaultMessage": "!!!Settings", |
538 | "file": "src/lib/Menu.js", | 551 | "file": "src/lib/Menu.js", |
539 | "start": { | 552 | "start": { |
540 | "line": 178, | 553 | "line": 186, |
541 | "column": 12 | 554 | "column": 12 |
542 | }, | 555 | }, |
543 | "end": { | 556 | "end": { |
544 | "line": 181, | 557 | "line": 189, |
545 | "column": 3 | 558 | "column": 3 |
546 | } | 559 | } |
547 | }, | 560 | }, |
@@ -550,11 +563,11 @@ | |||
550 | "defaultMessage": "!!!Check for updates", | 563 | "defaultMessage": "!!!Check for updates", |
551 | "file": "src/lib/Menu.js", | 564 | "file": "src/lib/Menu.js", |
552 | "start": { | 565 | "start": { |
553 | "line": 182, | 566 | "line": 190, |
554 | "column": 19 | 567 | "column": 19 |
555 | }, | 568 | }, |
556 | "end": { | 569 | "end": { |
557 | "line": 185, | 570 | "line": 193, |
558 | "column": 3 | 571 | "column": 3 |
559 | } | 572 | } |
560 | }, | 573 | }, |
@@ -563,11 +576,11 @@ | |||
563 | "defaultMessage": "!!!Hide", | 576 | "defaultMessage": "!!!Hide", |
564 | "file": "src/lib/Menu.js", | 577 | "file": "src/lib/Menu.js", |
565 | "start": { | 578 | "start": { |
566 | "line": 186, | 579 | "line": 194, |
567 | "column": 8 | 580 | "column": 8 |
568 | }, | 581 | }, |
569 | "end": { | 582 | "end": { |
570 | "line": 189, | 583 | "line": 197, |
571 | "column": 3 | 584 | "column": 3 |
572 | } | 585 | } |
573 | }, | 586 | }, |
@@ -576,11 +589,11 @@ | |||
576 | "defaultMessage": "!!!Hide Others", | 589 | "defaultMessage": "!!!Hide Others", |
577 | "file": "src/lib/Menu.js", | 590 | "file": "src/lib/Menu.js", |
578 | "start": { | 591 | "start": { |
579 | "line": 190, | 592 | "line": 198, |
580 | "column": 14 | 593 | "column": 14 |
581 | }, | 594 | }, |
582 | "end": { | 595 | "end": { |
583 | "line": 193, | 596 | "line": 201, |
584 | "column": 3 | 597 | "column": 3 |
585 | } | 598 | } |
586 | }, | 599 | }, |
@@ -589,11 +602,11 @@ | |||
589 | "defaultMessage": "!!!Unhide", | 602 | "defaultMessage": "!!!Unhide", |
590 | "file": "src/lib/Menu.js", | 603 | "file": "src/lib/Menu.js", |
591 | "start": { | 604 | "start": { |
592 | "line": 194, | 605 | "line": 202, |
593 | "column": 10 | 606 | "column": 10 |
594 | }, | 607 | }, |
595 | "end": { | 608 | "end": { |
596 | "line": 197, | 609 | "line": 205, |
597 | "column": 3 | 610 | "column": 3 |
598 | } | 611 | } |
599 | }, | 612 | }, |
@@ -602,11 +615,11 @@ | |||
602 | "defaultMessage": "!!!Quit", | 615 | "defaultMessage": "!!!Quit", |
603 | "file": "src/lib/Menu.js", | 616 | "file": "src/lib/Menu.js", |
604 | "start": { | 617 | "start": { |
605 | "line": 198, | 618 | "line": 206, |
606 | "column": 8 | 619 | "column": 8 |
607 | }, | 620 | }, |
608 | "end": { | 621 | "end": { |
609 | "line": 201, | 622 | "line": 209, |
610 | "column": 3 | 623 | "column": 3 |
611 | } | 624 | } |
612 | }, | 625 | }, |
@@ -615,11 +628,11 @@ | |||
615 | "defaultMessage": "!!!Add New Service...", | 628 | "defaultMessage": "!!!Add New Service...", |
616 | "file": "src/lib/Menu.js", | 629 | "file": "src/lib/Menu.js", |
617 | "start": { | 630 | "start": { |
618 | "line": 202, | 631 | "line": 210, |
619 | "column": 17 | 632 | "column": 17 |
620 | }, | 633 | }, |
621 | "end": { | 634 | "end": { |
622 | "line": 205, | 635 | "line": 213, |
623 | "column": 3 | 636 | "column": 3 |
624 | } | 637 | } |
625 | }, | 638 | }, |
@@ -628,11 +641,11 @@ | |||
628 | "defaultMessage": "!!!Add New Workspace...", | 641 | "defaultMessage": "!!!Add New Workspace...", |
629 | "file": "src/lib/Menu.js", | 642 | "file": "src/lib/Menu.js", |
630 | "start": { | 643 | "start": { |
631 | "line": 206, | 644 | "line": 214, |
632 | "column": 19 | 645 | "column": 19 |
633 | }, | 646 | }, |
634 | "end": { | 647 | "end": { |
635 | "line": 209, | 648 | "line": 217, |
636 | "column": 3 | 649 | "column": 3 |
637 | } | 650 | } |
638 | }, | 651 | }, |
@@ -641,11 +654,11 @@ | |||
641 | "defaultMessage": "!!!Open workspace drawer", | 654 | "defaultMessage": "!!!Open workspace drawer", |
642 | "file": "src/lib/Menu.js", | 655 | "file": "src/lib/Menu.js", |
643 | "start": { | 656 | "start": { |
644 | "line": 210, | 657 | "line": 218, |
645 | "column": 23 | 658 | "column": 23 |
646 | }, | 659 | }, |
647 | "end": { | 660 | "end": { |
648 | "line": 213, | 661 | "line": 221, |
649 | "column": 3 | 662 | "column": 3 |
650 | } | 663 | } |
651 | }, | 664 | }, |
@@ -654,11 +667,11 @@ | |||
654 | "defaultMessage": "!!!Close workspace drawer", | 667 | "defaultMessage": "!!!Close workspace drawer", |
655 | "file": "src/lib/Menu.js", | 668 | "file": "src/lib/Menu.js", |
656 | "start": { | 669 | "start": { |
657 | "line": 214, | 670 | "line": 222, |
658 | "column": 24 | 671 | "column": 24 |
659 | }, | 672 | }, |
660 | "end": { | 673 | "end": { |
661 | "line": 217, | 674 | "line": 225, |
662 | "column": 3 | 675 | "column": 3 |
663 | } | 676 | } |
664 | }, | 677 | }, |
@@ -667,11 +680,11 @@ | |||
667 | "defaultMessage": "!!!Activate next service...", | 680 | "defaultMessage": "!!!Activate next service...", |
668 | "file": "src/lib/Menu.js", | 681 | "file": "src/lib/Menu.js", |
669 | "start": { | 682 | "start": { |
670 | "line": 218, | 683 | "line": 226, |
671 | "column": 23 | 684 | "column": 23 |
672 | }, | 685 | }, |
673 | "end": { | 686 | "end": { |
674 | "line": 221, | 687 | "line": 229, |
675 | "column": 3 | 688 | "column": 3 |
676 | } | 689 | } |
677 | }, | 690 | }, |
@@ -680,11 +693,11 @@ | |||
680 | "defaultMessage": "!!!Activate previous service...", | 693 | "defaultMessage": "!!!Activate previous service...", |
681 | "file": "src/lib/Menu.js", | 694 | "file": "src/lib/Menu.js", |
682 | "start": { | 695 | "start": { |
683 | "line": 222, | 696 | "line": 230, |
684 | "column": 27 | 697 | "column": 27 |
685 | }, | 698 | }, |
686 | "end": { | 699 | "end": { |
687 | "line": 225, | 700 | "line": 233, |
688 | "column": 3 | 701 | "column": 3 |
689 | } | 702 | } |
690 | }, | 703 | }, |
@@ -693,11 +706,11 @@ | |||
693 | "defaultMessage": "!!!Disable notifications & audio", | 706 | "defaultMessage": "!!!Disable notifications & audio", |
694 | "file": "src/lib/Menu.js", | 707 | "file": "src/lib/Menu.js", |
695 | "start": { | 708 | "start": { |
696 | "line": 226, | 709 | "line": 234, |
697 | "column": 11 | 710 | "column": 11 |
698 | }, | 711 | }, |
699 | "end": { | 712 | "end": { |
700 | "line": 229, | 713 | "line": 237, |
701 | "column": 3 | 714 | "column": 3 |
702 | } | 715 | } |
703 | }, | 716 | }, |
@@ -706,11 +719,11 @@ | |||
706 | "defaultMessage": "!!!Enable notifications & audio", | 719 | "defaultMessage": "!!!Enable notifications & audio", |
707 | "file": "src/lib/Menu.js", | 720 | "file": "src/lib/Menu.js", |
708 | "start": { | 721 | "start": { |
709 | "line": 230, | 722 | "line": 238, |
710 | "column": 13 | 723 | "column": 13 |
711 | }, | 724 | }, |
712 | "end": { | 725 | "end": { |
713 | "line": 233, | 726 | "line": 241, |
714 | "column": 3 | 727 | "column": 3 |
715 | } | 728 | } |
716 | }, | 729 | }, |
@@ -719,11 +732,11 @@ | |||
719 | "defaultMessage": "!!!Workspaces", | 732 | "defaultMessage": "!!!Workspaces", |
720 | "file": "src/lib/Menu.js", | 733 | "file": "src/lib/Menu.js", |
721 | "start": { | 734 | "start": { |
722 | "line": 234, | 735 | "line": 242, |
723 | "column": 14 | 736 | "column": 14 |
724 | }, | 737 | }, |
725 | "end": { | 738 | "end": { |
726 | "line": 237, | 739 | "line": 245, |
727 | "column": 3 | 740 | "column": 3 |
728 | } | 741 | } |
729 | }, | 742 | }, |
@@ -732,11 +745,50 @@ | |||
732 | "defaultMessage": "!!!Default", | 745 | "defaultMessage": "!!!Default", |
733 | "file": "src/lib/Menu.js", | 746 | "file": "src/lib/Menu.js", |
734 | "start": { | 747 | "start": { |
735 | "line": 238, | 748 | "line": 246, |
736 | "column": 20 | 749 | "column": 20 |
737 | }, | 750 | }, |
738 | "end": { | 751 | "end": { |
739 | "line": 241, | 752 | "line": 249, |
753 | "column": 3 | ||
754 | } | ||
755 | }, | ||
756 | { | ||
757 | "id": "menu.todos", | ||
758 | "defaultMessage": "!!!Todos", | ||
759 | "file": "src/lib/Menu.js", | ||
760 | "start": { | ||
761 | "line": 250, | ||
762 | "column": 9 | ||
763 | }, | ||
764 | "end": { | ||
765 | "line": 253, | ||
766 | "column": 3 | ||
767 | } | ||
768 | }, | ||
769 | { | ||
770 | "id": "menu.Todoss.openTodosDrawer", | ||
771 | "defaultMessage": "!!!Open Todos drawer", | ||
772 | "file": "src/lib/Menu.js", | ||
773 | "start": { | ||
774 | "line": 254, | ||
775 | "column": 19 | ||
776 | }, | ||
777 | "end": { | ||
778 | "line": 257, | ||
779 | "column": 3 | ||
780 | } | ||
781 | }, | ||
782 | { | ||
783 | "id": "menu.Todoss.closeTodosDrawer", | ||
784 | "defaultMessage": "!!!Close Todos drawer", | ||
785 | "file": "src/lib/Menu.js", | ||
786 | "start": { | ||
787 | "line": 258, | ||
788 | "column": 20 | ||
789 | }, | ||
790 | "end": { | ||
791 | "line": 261, | ||
740 | "column": 3 | 792 | "column": 3 |
741 | } | 793 | } |
742 | } | 794 | } |
diff --git a/src/index.html b/src/index.html index f29aa2686..198c1ab7b 100644 --- a/src/index.html +++ b/src/index.html | |||
@@ -35,11 +35,16 @@ | |||
35 | const originalReloadBehaviour = window._onLiveReloadFileChanged; | 35 | const originalReloadBehaviour = window._onLiveReloadFileChanged; |
36 | 36 | ||
37 | window._onLiveReloadFileChanged = (file) => { | 37 | window._onLiveReloadFileChanged = (file) => { |
38 | if (!file.path.includes('/build/webview/') && !file.path.includes('/build/index.js') && !file.path.includes('/build/electron/')) { | 38 | const isTodoPreloadPath = file.path.includes('/build/features/todos/preload.js'); |
39 | if (!file.path.includes('/build/webview/') && !file.path.includes('/build/index.js') && !file.path.includes('/build/electron/') && !isTodoPreloadPath) { | ||
39 | originalReloadBehaviour(file); | 40 | originalReloadBehaviour(file); |
40 | } else { | 41 | } else { |
41 | if (file.path.includes('/build/webview/')) { | 42 | if (isTodoPreloadPath) { |
42 | debug('Livereload: Reloading all webvies'); | 43 | debug('Livereload: Reloading all webviews'); |
44 | const webview = document.querySelector('webview[partition="persist:todos"]'); | ||
45 | if (webview) webview.reload(); | ||
46 | } else if (file.path.includes('/build/webview/')) { | ||
47 | debug('Livereload: Reloading all webviews'); | ||
43 | const webviews = document.querySelectorAll('webview').forEach(webview => webview.reload()); | 48 | const webviews = document.querySelectorAll('webview').forEach(webview => webview.reload()); |
44 | } else { | 49 | } else { |
45 | debug('Livereload: skip reload as only main process files have changed'); | 50 | debug('Livereload: skip reload as only main process files have changed'); |
diff --git a/src/index.js b/src/index.js index 92740aaa2..839f607f6 100644 --- a/src/index.js +++ b/src/index.js | |||
@@ -105,35 +105,6 @@ if (!gotTheLock) { | |||
105 | } | 105 | } |
106 | }); | 106 | }); |
107 | } | 107 | } |
108 | // const isSecondInstance = app.makeSingleInstance((argv) => { | ||
109 | // if (mainWindow) { | ||
110 | // if (mainWindow.isMinimized()) mainWindow.restore(); | ||
111 | // mainWindow.focus(); | ||
112 | |||
113 | // if (process.platform === 'win32') { | ||
114 | // // Keep only command line / deep linked arguments | ||
115 | // const url = argv.slice(1); | ||
116 | |||
117 | // if (url) { | ||
118 | // handleDeepLink(mainWindow, url.toString()); | ||
119 | // } | ||
120 | // } | ||
121 | // } | ||
122 | |||
123 | // if (argv.includes('--reset-window')) { | ||
124 | // // Needs to be delayed to not interfere with mainWindow.restore(); | ||
125 | // setTimeout(() => { | ||
126 | // debug('Resetting windows via Task'); | ||
127 | // mainWindow.setPosition(DEFAULT_WINDOW_OPTIONS.x + 100, DEFAULT_WINDOW_OPTIONS.y + 100); | ||
128 | // mainWindow.setSize(DEFAULT_WINDOW_OPTIONS.width, DEFAULT_WINDOW_OPTIONS.height); | ||
129 | // }, 1); | ||
130 | // } | ||
131 | // }); | ||
132 | |||
133 | // if (isSecondInstance) { | ||
134 | // console.log('An instance of Ferdi is already running. Exiting...'); | ||
135 | // app.exit(); | ||
136 | // } | ||
137 | 108 | ||
138 | // Fix Unity indicator issue | 109 | // Fix Unity indicator issue |
139 | // https://github.com/electron/electron/issues/9046 | 110 | // https://github.com/electron/electron/issues/9046 |
diff --git a/src/lib/Menu.js b/src/lib/Menu.js index 7937aede9..13b31bcad 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js | |||
@@ -7,6 +7,9 @@ import { workspaceStore } from '../features/workspaces/index'; | |||
7 | import { workspaceActions } from '../features/workspaces/actions'; | 7 | import { workspaceActions } from '../features/workspaces/actions'; |
8 | import { announcementActions } from '../features/announcements/actions'; | 8 | import { announcementActions } from '../features/announcements/actions'; |
9 | import { announcementsStore } from '../features/announcements'; | 9 | import { announcementsStore } from '../features/announcements'; |
10 | import TodoStore from '../features/todos/store'; | ||
11 | import { GA_CATEGORY_TODOS, todosStore } from '../features/todos'; | ||
12 | import { todoActions } from '../features/todos/actions'; | ||
10 | 13 | ||
11 | const { app, Menu, dialog } = remote; | 14 | const { app, Menu, dialog } = remote; |
12 | 15 | ||
@@ -95,6 +98,10 @@ const menuItems = defineMessages({ | |||
95 | id: 'menu.view.toggleDevTools', | 98 | id: 'menu.view.toggleDevTools', |
96 | defaultMessage: '!!!Toggle Developer Tools', | 99 | defaultMessage: '!!!Toggle Developer Tools', |
97 | }, | 100 | }, |
101 | toggleTodosDevTools: { | ||
102 | id: 'menu.view.toggleTodosDevTools', | ||
103 | defaultMessage: '!!!Toggle Todos Developer Tools', | ||
104 | }, | ||
98 | toggleServiceDevTools: { | 105 | toggleServiceDevTools: { |
99 | id: 'menu.view.toggleServiceDevTools', | 106 | id: 'menu.view.toggleServiceDevTools', |
100 | defaultMessage: '!!!Toggle Service Developer Tools', | 107 | defaultMessage: '!!!Toggle Service Developer Tools', |
@@ -239,6 +246,18 @@ const menuItems = defineMessages({ | |||
239 | id: 'menu.workspaces.defaultWorkspace', | 246 | id: 'menu.workspaces.defaultWorkspace', |
240 | defaultMessage: '!!!Default', | 247 | defaultMessage: '!!!Default', |
241 | }, | 248 | }, |
249 | todos: { | ||
250 | id: 'menu.todos', | ||
251 | defaultMessage: '!!!Todos', | ||
252 | }, | ||
253 | openTodosDrawer: { | ||
254 | id: 'menu.Todoss.openTodosDrawer', | ||
255 | defaultMessage: '!!!Open Todos drawer', | ||
256 | }, | ||
257 | closeTodosDrawer: { | ||
258 | id: 'menu.Todoss.closeTodosDrawer', | ||
259 | defaultMessage: '!!!Close Todos drawer', | ||
260 | }, | ||
242 | }); | 261 | }); |
243 | 262 | ||
244 | function getActiveWebview() { | 263 | function getActiveWebview() { |
@@ -347,6 +366,11 @@ const _templateFactory = intl => [ | |||
347 | visible: workspaceStore.isFeatureEnabled, | 366 | visible: workspaceStore.isFeatureEnabled, |
348 | }, | 367 | }, |
349 | { | 368 | { |
369 | label: intl.formatMessage(menuItems.todos), | ||
370 | submenu: [], | ||
371 | visible: todosStore.isFeatureEnabled, | ||
372 | }, | ||
373 | { | ||
350 | label: intl.formatMessage(menuItems.window), | 374 | label: intl.formatMessage(menuItems.window), |
351 | role: 'window', | 375 | role: 'window', |
352 | submenu: [ | 376 | submenu: [ |
@@ -619,6 +643,17 @@ export default class FranzMenu { | |||
619 | enabled: this.stores.user.isLoggedIn && this.stores.services.enabled.length > 0, | 643 | enabled: this.stores.user.isLoggedIn && this.stores.services.enabled.length > 0, |
620 | }); | 644 | }); |
621 | 645 | ||
646 | if (this.stores.features.features.isTodosEnabled) { | ||
647 | tpl[1].submenu.push({ | ||
648 | label: intl.formatMessage(menuItems.toggleTodosDevTools), | ||
649 | accelerator: `${cmdKey}+Shift+Alt+O`, | ||
650 | click: () => { | ||
651 | const webview = document.querySelector('webview[partition="persist:todos"]'); | ||
652 | if (webview) webview.openDevTools(); | ||
653 | }, | ||
654 | }); | ||
655 | } | ||
656 | |||
622 | tpl[1].submenu.unshift({ | 657 | tpl[1].submenu.unshift({ |
623 | label: intl.formatMessage(menuItems.reloadService), | 658 | label: intl.formatMessage(menuItems.reloadService), |
624 | id: 'reloadService', // TODO: needed? | 659 | id: 'reloadService', // TODO: needed? |
@@ -771,6 +806,10 @@ export default class FranzMenu { | |||
771 | tpl[4].submenu = this.workspacesMenu(); | 806 | tpl[4].submenu = this.workspacesMenu(); |
772 | } | 807 | } |
773 | 808 | ||
809 | if (todosStore.isFeatureEnabled) { | ||
810 | tpl[5].submenu = this.todosMenu(); | ||
811 | } | ||
812 | |||
774 | tpl[tpl.length - 1].submenu.push({ | 813 | tpl[tpl.length - 1].submenu.push({ |
775 | type: 'separator', | 814 | type: 'separator', |
776 | }, this.debugMenu()); | 815 | }, this.debugMenu()); |
@@ -882,6 +921,31 @@ export default class FranzMenu { | |||
882 | return menu; | 921 | return menu; |
883 | } | 922 | } |
884 | 923 | ||
924 | todosMenu() { | ||
925 | const { isTodosPanelVisible } = TodoStore; | ||
926 | const { intl } = window.franz; | ||
927 | const menu = []; | ||
928 | |||
929 | // Open todos drawer: | ||
930 | const drawerLabel = ( | ||
931 | isTodosPanelVisible ? menuItems.closeTodosDrawer : menuItems.openTodosDrawer | ||
932 | ); | ||
933 | menu.push({ | ||
934 | label: intl.formatMessage(drawerLabel), | ||
935 | accelerator: `${cmdKey}+T`, | ||
936 | click: () => { | ||
937 | todoActions.toggleTodosPanel(); | ||
938 | gaEvent(GA_CATEGORY_TODOS, 'toggleDrawer', 'menu'); | ||
939 | }, | ||
940 | enabled: this.stores.user.isLoggedIn, | ||
941 | }, { | ||
942 | type: 'separator', | ||
943 | }); | ||
944 | |||
945 | return menu; | ||
946 | } | ||
947 | |||
948 | |||
885 | debugMenu() { | 949 | debugMenu() { |
886 | const { intl } = window.ferdi; | 950 | const { intl } = window.ferdi; |
887 | 951 | ||
diff --git a/src/models/Service.js b/src/models/Service.js index bcf24b7d6..2303512af 100644 --- a/src/models/Service.js +++ b/src/models/Service.js | |||
@@ -4,6 +4,11 @@ import normalizeUrl from 'normalize-url'; | |||
4 | 4 | ||
5 | const debug = require('debug')('Franz:Service'); | 5 | const debug = require('debug')('Franz:Service'); |
6 | 6 | ||
7 | export const RESTRICTION_TYPES = { | ||
8 | SERVICE_LIMIT: 0, | ||
9 | CUSTOM_URL: 1, | ||
10 | }; | ||
11 | |||
7 | export default class Service { | 12 | export default class Service { |
8 | id = ''; | 13 | id = ''; |
9 | 14 | ||
@@ -59,6 +64,12 @@ export default class Service { | |||
59 | 64 | ||
60 | @observable errorMessage = ''; | 65 | @observable errorMessage = ''; |
61 | 66 | ||
67 | @observable isUsingCustomUrl = false; | ||
68 | |||
69 | @observable isServiceAccessRestricted = false; | ||
70 | |||
71 | @observable restrictionType = null; | ||
72 | |||
62 | constructor(data, recipe) { | 73 | constructor(data, recipe) { |
63 | if (!data) { | 74 | if (!data) { |
64 | console.error('Service config not valid'); | 75 | console.error('Service config not valid'); |
@@ -111,6 +122,10 @@ export default class Service { | |||
111 | this.unreadDirectMessageCount = 0; | 122 | this.unreadDirectMessageCount = 0; |
112 | this.unreadIndirectMessageCount = 0; | 123 | this.unreadIndirectMessageCount = 0; |
113 | } | 124 | } |
125 | |||
126 | if (this.recipe.hasCustomUrl && this.customUrl) { | ||
127 | this.isUsingCustomUrl = true; | ||
128 | } | ||
114 | }); | 129 | }); |
115 | } | 130 | } |
116 | 131 | ||
diff --git a/src/models/User.js b/src/models/User.js index d12aef278..5a614efbe 100644 --- a/src/models/User.js +++ b/src/models/User.js | |||
@@ -20,6 +20,10 @@ export default class User { | |||
20 | 20 | ||
21 | @observable isSubscriptionOwner = false; | 21 | @observable isSubscriptionOwner = false; |
22 | 22 | ||
23 | @observable hasSubscription = true; | ||
24 | |||
25 | @observable hadSubscription = false; | ||
26 | |||
23 | @observable isPremium = true; | 27 | @observable isPremium = true; |
24 | 28 | ||
25 | @observable beta = false; | 29 | @observable beta = false; |
@@ -32,6 +36,9 @@ export default class User { | |||
32 | 36 | ||
33 | @observable locale = false; | 37 | @observable locale = false; |
34 | 38 | ||
39 | @observable team = {}; | ||
40 | |||
41 | |||
35 | constructor(data) { | 42 | constructor(data) { |
36 | if (!data.id) { | 43 | if (!data.id) { |
37 | throw Error('User requires Id'); | 44 | throw Error('User requires Id'); |
@@ -47,8 +54,13 @@ export default class User { | |||
47 | this.beta = data.beta || this.beta; | 54 | this.beta = data.beta || this.beta; |
48 | this.donor = data.donor || this.donor; | 55 | this.donor = data.donor || this.donor; |
49 | this.isDonor = data.isDonor || this.isDonor; | 56 | this.isDonor = data.isDonor || this.isDonor; |
50 | this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner; | ||
51 | this.isMiner = data.isMiner || this.isMiner; | 57 | this.isMiner = data.isMiner || this.isMiner; |
52 | this.locale = data.locale || this.locale; | 58 | this.locale = data.locale || this.locale; |
59 | |||
60 | this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner; | ||
61 | this.hasSubscription = data.hasSubscription || this.hasSubscription; | ||
62 | this.hadSubscription = data.hadSubscription || this.hadSubscription; | ||
63 | |||
64 | this.team = data.team || this.team; | ||
53 | } | 65 | } |
54 | } | 66 | } |
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index 2bfcdf640..61b63d52e 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js | |||
@@ -95,6 +95,7 @@ export default class AppStore extends Store { | |||
95 | this._offlineCheck.bind(this), | 95 | this._offlineCheck.bind(this), |
96 | this._setLocale.bind(this), | 96 | this._setLocale.bind(this), |
97 | this._muteAppHandler.bind(this), | 97 | this._muteAppHandler.bind(this), |
98 | this._handleFullScreen.bind(this), | ||
98 | ]); | 99 | ]); |
99 | } | 100 | } |
100 | 101 | ||
@@ -347,6 +348,8 @@ export default class AppStore extends Store { | |||
347 | this.locale = this._getDefaultLocale(); | 348 | this.locale = this._getDefaultLocale(); |
348 | } | 349 | } |
349 | 350 | ||
351 | moment.locale(this.locale); | ||
352 | |||
350 | debug(`Set locale to "${this.locale}"`); | 353 | debug(`Set locale to "${this.locale}"`); |
351 | } | 354 | } |
352 | 355 | ||
@@ -367,6 +370,16 @@ export default class AppStore extends Store { | |||
367 | } | 370 | } |
368 | } | 371 | } |
369 | 372 | ||
373 | _handleFullScreen() { | ||
374 | const body = document.querySelector('body'); | ||
375 | |||
376 | if (this.isFullScreen) { | ||
377 | body.classList.add('isFullScreen'); | ||
378 | } else { | ||
379 | body.classList.remove('isFullScreen'); | ||
380 | } | ||
381 | } | ||
382 | |||
370 | // Helpers | 383 | // Helpers |
371 | _appStartsCounter() { | 384 | _appStartsCounter() { |
372 | this.actions.settings.update({ | 385 | this.actions.settings.update({ |
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js index e7832088b..cf28b6bec 100644 --- a/src/stores/FeaturesStore.js +++ b/src/stores/FeaturesStore.js | |||
@@ -16,6 +16,9 @@ import workspaces from '../features/workspaces'; | |||
16 | import shareFranz from '../features/shareFranz'; | 16 | import shareFranz from '../features/shareFranz'; |
17 | import announcements from '../features/announcements'; | 17 | import announcements from '../features/announcements'; |
18 | import settingsWS from '../features/settingsWS'; | 18 | import settingsWS from '../features/settingsWS'; |
19 | import serviceLimit from '../features/serviceLimit'; | ||
20 | import communityRecipes from '../features/communityRecipes'; | ||
21 | import todos from '../features/todos'; | ||
19 | 22 | ||
20 | import { DEFAULT_FEATURES_CONFIG } from '../config'; | 23 | import { DEFAULT_FEATURES_CONFIG } from '../config'; |
21 | 24 | ||
@@ -75,5 +78,8 @@ export default class FeaturesStore extends Store { | |||
75 | shareFranz(this.stores, this.actions); | 78 | shareFranz(this.stores, this.actions); |
76 | announcements(this.stores, this.actions); | 79 | announcements(this.stores, this.actions); |
77 | settingsWS(this.stores, this.actions); | 80 | settingsWS(this.stores, this.actions); |
81 | serviceLimit(this.stores, this.actions); | ||
82 | communityRecipes(this.stores, this.actions); | ||
83 | todos(this.stores, this.actions); | ||
78 | } | 84 | } |
79 | } | 85 | } |
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index 6c6b7589f..876851a66 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js | |||
@@ -12,6 +12,8 @@ import Request from './lib/Request'; | |||
12 | import CachedRequest from './lib/CachedRequest'; | 12 | import CachedRequest from './lib/CachedRequest'; |
13 | import { matchRoute } from '../helpers/routing-helpers'; | 13 | import { matchRoute } from '../helpers/routing-helpers'; |
14 | import { workspaceStore } from '../features/workspaces'; | 14 | import { workspaceStore } from '../features/workspaces'; |
15 | import { serviceLimitStore } from '../features/serviceLimit'; | ||
16 | import { RESTRICTION_TYPES } from '../models/Service'; | ||
15 | 17 | ||
16 | const debug = require('debug')('Franz:ServiceStore'); | 18 | const debug = require('debug')('Franz:ServiceStore'); |
17 | 19 | ||
@@ -74,6 +76,7 @@ export default class ServicesStore extends Store { | |||
74 | this._saveActiveService.bind(this), | 76 | this._saveActiveService.bind(this), |
75 | this._logoutReaction.bind(this), | 77 | this._logoutReaction.bind(this), |
76 | this._handleMuteSettings.bind(this), | 78 | this._handleMuteSettings.bind(this), |
79 | this._restrictServiceAccess.bind(this), | ||
77 | ]); | 80 | ]); |
78 | 81 | ||
79 | // Just bind this | 82 | // Just bind this |
@@ -97,7 +100,10 @@ export default class ServicesStore extends Store { | |||
97 | if (this.stores.user.isLoggedIn) { | 100 | if (this.stores.user.isLoggedIn) { |
98 | const services = this.allServicesRequest.execute().result; | 101 | const services = this.allServicesRequest.execute().result; |
99 | if (services) { | 102 | if (services) { |
100 | return observable(services.slice().slice().sort((a, b) => a.order - b.order)); | 103 | return observable(services.slice().slice().sort((a, b) => a.order - b.order).map((s, index) => { |
104 | s.index = index; | ||
105 | return s; | ||
106 | })); | ||
101 | } | 107 | } |
102 | } | 108 | } |
103 | return []; | 109 | return []; |
@@ -152,6 +158,8 @@ export default class ServicesStore extends Store { | |||
152 | 158 | ||
153 | // Actions | 159 | // Actions |
154 | @action async _createService({ recipeId, serviceData, redirect = true }) { | 160 | @action async _createService({ recipeId, serviceData, redirect = true }) { |
161 | if (serviceLimitStore.userHasReachedServiceLimit) return; | ||
162 | |||
155 | const data = this._cleanUpTeamIdAndCustomUrl(recipeId, serviceData); | 163 | const data = this._cleanUpTeamIdAndCustomUrl(recipeId, serviceData); |
156 | 164 | ||
157 | const response = await this.createServiceRequest.execute(recipeId, data)._promise; | 165 | const response = await this.createServiceRequest.execute(recipeId, data)._promise; |
@@ -430,6 +438,9 @@ export default class ServicesStore extends Store { | |||
430 | redirect: false, | 438 | redirect: false, |
431 | }); | 439 | }); |
432 | } | 440 | } |
441 | } else if (channel === 'feature:todos') { | ||
442 | Object.assign(args[0].data, { serviceId }); | ||
443 | this.actions.todos.handleHostMessage(args[0]); | ||
433 | } | 444 | } |
434 | } | 445 | } |
435 | 446 | ||
@@ -666,6 +677,35 @@ export default class ServicesStore extends Store { | |||
666 | return serviceData; | 677 | return serviceData; |
667 | } | 678 | } |
668 | 679 | ||
680 | _restrictServiceAccess() { | ||
681 | const { features } = this.stores.features; | ||
682 | const { userHasReachedServiceLimit, serviceLimit } = this.stores.serviceLimit; | ||
683 | |||
684 | this.all.map((service, index) => { | ||
685 | if (userHasReachedServiceLimit) { | ||
686 | service.isServiceAccessRestricted = index >= serviceLimit; | ||
687 | |||
688 | if (service.isServiceAccessRestricted) { | ||
689 | service.restrictionType = RESTRICTION_TYPES.SERVICE_LIMIT; | ||
690 | |||
691 | debug('Restricting access to server due to service limit'); | ||
692 | } | ||
693 | } | ||
694 | |||
695 | if (service.isUsingCustomUrl) { | ||
696 | service.isServiceAccessRestricted = !features.isCustomUrlIncludedInCurrentPlan; | ||
697 | |||
698 | if (service.isServiceAccessRestricted) { | ||
699 | service.restrictionType = RESTRICTION_TYPES.CUSTOM_URL; | ||
700 | |||
701 | debug('Restricting access to server due to custom url'); | ||
702 | } | ||
703 | } | ||
704 | |||
705 | return service; | ||
706 | }); | ||
707 | } | ||
708 | |||
669 | // Helper | 709 | // Helper |
670 | _initializeServiceRecipeInWebview(serviceId) { | 710 | _initializeServiceRecipeInWebview(serviceId) { |
671 | const service = this.one(serviceId); | 711 | const service = this.one(serviceId); |
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js index d813e97b1..e1d9672b6 100644 --- a/src/stores/UserStore.js +++ b/src/stores/UserStore.js | |||
@@ -2,11 +2,15 @@ import { observable, computed, action } from 'mobx'; | |||
2 | import moment from 'moment'; | 2 | import moment from 'moment'; |
3 | import jwt from 'jsonwebtoken'; | 3 | import jwt from 'jsonwebtoken'; |
4 | import localStorage from 'mobx-localstorage'; | 4 | import localStorage from 'mobx-localstorage'; |
5 | import ms from 'ms'; | ||
5 | 6 | ||
6 | import { isDevMode } from '../environment'; | 7 | import { isDevMode } from '../environment'; |
7 | import Store from './lib/Store'; | 8 | import Store from './lib/Store'; |
8 | import Request from './lib/Request'; | 9 | import Request from './lib/Request'; |
9 | import CachedRequest from './lib/CachedRequest'; | 10 | import CachedRequest from './lib/CachedRequest'; |
11 | import { sleep } from '../helpers/async-helpers'; | ||
12 | import { getPlan } from '../helpers/plan-helpers'; | ||
13 | import { PLANS } from '../config'; | ||
10 | 14 | ||
11 | const debug = require('debug')('Franz:UserStore'); | 15 | const debug = require('debug')('Franz:UserStore'); |
12 | 16 | ||
@@ -36,6 +40,8 @@ export default class UserStore extends Store { | |||
36 | 40 | ||
37 | @observable passwordRequest = new Request(this.api.user, 'password'); | 41 | @observable passwordRequest = new Request(this.api.user, 'password'); |
38 | 42 | ||
43 | @observable activateTrialRequest = new Request(this.api.user, 'activateTrial'); | ||
44 | |||
39 | @observable inviteRequest = new Request(this.api.user, 'invite'); | 45 | @observable inviteRequest = new Request(this.api.user, 'invite'); |
40 | 46 | ||
41 | @observable getUserInfoRequest = new CachedRequest(this.api.user, 'getInfo'); | 47 | @observable getUserInfoRequest = new CachedRequest(this.api.user, 'getInfo'); |
@@ -56,7 +62,9 @@ export default class UserStore extends Store { | |||
56 | 62 | ||
57 | @observable accountType; | 63 | @observable accountType; |
58 | 64 | ||
59 | @observable hasCompletedSignup = null; | 65 | @observable hasCompletedSignup = false; |
66 | |||
67 | @observable hasActivatedTrial = false; | ||
60 | 68 | ||
61 | @observable userData = {}; | 69 | @observable userData = {}; |
62 | 70 | ||
@@ -76,6 +84,7 @@ export default class UserStore extends Store { | |||
76 | this.actions.user.retrievePassword.listen(this._retrievePassword.bind(this)); | 84 | this.actions.user.retrievePassword.listen(this._retrievePassword.bind(this)); |
77 | this.actions.user.logout.listen(this._logout.bind(this)); | 85 | this.actions.user.logout.listen(this._logout.bind(this)); |
78 | this.actions.user.signup.listen(this._signup.bind(this)); | 86 | this.actions.user.signup.listen(this._signup.bind(this)); |
87 | this.actions.user.activateTrial.listen(this._activateTrial.bind(this)); | ||
79 | this.actions.user.invite.listen(this._invite.bind(this)); | 88 | this.actions.user.invite.listen(this._invite.bind(this)); |
80 | this.actions.user.update.listen(this._update.bind(this)); | 89 | this.actions.user.update.listen(this._update.bind(this)); |
81 | this.actions.user.resetStatus.listen(this._resetStatus.bind(this)); | 90 | this.actions.user.resetStatus.listen(this._resetStatus.bind(this)); |
@@ -86,6 +95,7 @@ export default class UserStore extends Store { | |||
86 | this.registerReactions([ | 95 | this.registerReactions([ |
87 | // this._requireAuthenticatedUser, | 96 | // this._requireAuthenticatedUser, |
88 | this._getUserData.bind(this), | 97 | this._getUserData.bind(this), |
98 | this._resetTrialActivationState.bind(this), | ||
89 | ]); | 99 | ]); |
90 | } | 100 | } |
91 | 101 | ||
@@ -141,10 +151,34 @@ export default class UserStore extends Store { | |||
141 | return this.getUserInfoRequest.execute().result || {}; | 151 | return this.getUserInfoRequest.execute().result || {}; |
142 | } | 152 | } |
143 | 153 | ||
154 | @computed get team() { | ||
155 | return this.data.team || null; | ||
156 | } | ||
157 | |||
144 | @computed get isPremium() { | 158 | @computed get isPremium() { |
145 | return !!this.data.isPremium; | 159 | return !!this.data.isPremium; |
146 | } | 160 | } |
147 | 161 | ||
162 | @computed get isPremiumOverride() { | ||
163 | return ((!this.team || !this.team.plan) && this.isPremium) || (this.team.state === 'expired' && this.isPremium); | ||
164 | } | ||
165 | |||
166 | @computed get isPersonal() { | ||
167 | if (!this.team || !this.team.plan) return false; | ||
168 | const plan = getPlan(this.team.plan); | ||
169 | |||
170 | return plan === PLANS.PERSONAL; | ||
171 | } | ||
172 | |||
173 | @computed get isPro() { | ||
174 | if (this.isPremiumOverride) return true; | ||
175 | |||
176 | if (!this.team || (!this.team.plan || this.team.state === 'expired')) return false; | ||
177 | const plan = getPlan(this.team.plan); | ||
178 | |||
179 | return plan === PLANS.PRO || plan === PLANS.LEGACY; | ||
180 | } | ||
181 | |||
148 | @computed get legacyServices() { | 182 | @computed get legacyServices() { |
149 | return this.getLegacyServicesRequest.execute() || {}; | 183 | return this.getLegacyServicesRequest.execute() || {}; |
150 | } | 184 | } |
@@ -190,6 +224,21 @@ export default class UserStore extends Store { | |||
190 | this.actionStatus = request.result.status || []; | 224 | this.actionStatus = request.result.status || []; |
191 | } | 225 | } |
192 | 226 | ||
227 | @action async _activateTrial({ planId }) { | ||
228 | debug('activate trial', planId); | ||
229 | |||
230 | this.activateTrialRequest.execute({ | ||
231 | plan: planId, | ||
232 | }); | ||
233 | |||
234 | await this.activateTrialRequest._promise; | ||
235 | |||
236 | this.hasActivatedTrial = true; | ||
237 | |||
238 | this.stores.features.featuresRequest.invalidate({ immediately: true }); | ||
239 | this.stores.user.getUserInfoRequest.invalidate({ immediately: true }); | ||
240 | } | ||
241 | |||
193 | @action async _invite({ invites }) { | 242 | @action async _invite({ invites }) { |
194 | const data = invites.filter(invite => invite.email !== ''); | 243 | const data = invites.filter(invite => invite.email !== ''); |
195 | 244 | ||
@@ -305,6 +354,14 @@ export default class UserStore extends Store { | |||
305 | } | 354 | } |
306 | } | 355 | } |
307 | 356 | ||
357 | async _resetTrialActivationState() { | ||
358 | if (this.hasActivatedTrial) { | ||
359 | await sleep(ms('12s')); | ||
360 | |||
361 | this.hasActivatedTrial = false; | ||
362 | } | ||
363 | } | ||
364 | |||
308 | // Helpers | 365 | // Helpers |
309 | _parseToken(authToken) { | 366 | _parseToken(authToken) { |
310 | try { | 367 | try { |
@@ -334,6 +391,15 @@ export default class UserStore extends Store { | |||
334 | } | 391 | } |
335 | } | 392 | } |
336 | 393 | ||
394 | getAuthURL(url) { | ||
395 | const parsedUrl = new URL(url); | ||
396 | const params = new URLSearchParams(parsedUrl.search.slice(1)); | ||
397 | |||
398 | params.append('authToken', this.authToken); | ||
399 | |||
400 | return `${parsedUrl.origin}${parsedUrl.pathname}?${params.toString()}`; | ||
401 | } | ||
402 | |||
337 | async _migrateUserLocale() { | 403 | async _migrateUserLocale() { |
338 | await this.getUserInfoRequest._promise; | 404 | await this.getUserInfoRequest._promise; |
339 | 405 | ||
diff --git a/src/stores/index.js b/src/stores/index.js index 1912418a2..10dd56665 100644 --- a/src/stores/index.js +++ b/src/stores/index.js | |||
@@ -12,6 +12,9 @@ import RequestStore from './RequestStore'; | |||
12 | import GlobalErrorStore from './GlobalErrorStore'; | 12 | import GlobalErrorStore from './GlobalErrorStore'; |
13 | import { workspaceStore } from '../features/workspaces'; | 13 | import { workspaceStore } from '../features/workspaces'; |
14 | import { announcementsStore } from '../features/announcements'; | 14 | import { announcementsStore } from '../features/announcements'; |
15 | import { serviceLimitStore } from '../features/serviceLimit'; | ||
16 | import { communityRecipesStore } from '../features/communityRecipes'; | ||
17 | import { todosStore } from '../features/todos'; | ||
15 | 18 | ||
16 | export default (api, actions, router) => { | 19 | export default (api, actions, router) => { |
17 | const stores = {}; | 20 | const stores = {}; |
@@ -31,6 +34,9 @@ export default (api, actions, router) => { | |||
31 | globalError: new GlobalErrorStore(stores, api, actions), | 34 | globalError: new GlobalErrorStore(stores, api, actions), |
32 | workspaces: workspaceStore, | 35 | workspaces: workspaceStore, |
33 | announcements: announcementsStore, | 36 | announcements: announcementsStore, |
37 | serviceLimit: serviceLimitStore, | ||
38 | communityRecipes: communityRecipesStore, | ||
39 | todos: todosStore, | ||
34 | }); | 40 | }); |
35 | // Initialize all stores | 41 | // Initialize all stores |
36 | Object.keys(stores).forEach((name) => { | 42 | Object.keys(stores).forEach((name) => { |
diff --git a/src/styles/auth.scss b/src/styles/auth.scss index cbc720559..44c752677 100644 --- a/src/styles/auth.scss +++ b/src/styles/auth.scss | |||
@@ -9,7 +9,7 @@ | |||
9 | } | 9 | } |
10 | 10 | ||
11 | .auth__logo.auth__logo--sm { | 11 | .auth__logo.auth__logo--sm { |
12 | border: 4px solid $dark-theme-black; | 12 | border: none; |
13 | box-shadow: 0 0 6px rgba($dark-theme-black, .5); | 13 | box-shadow: 0 0 6px rgba($dark-theme-black, .5); |
14 | } | 14 | } |
15 | 15 | ||
diff --git a/src/styles/layout.scss b/src/styles/layout.scss index 9f226b61c..b18bd6dcf 100644 --- a/src/styles/layout.scss +++ b/src/styles/layout.scss | |||
@@ -32,14 +32,22 @@ html { overflow: hidden; } | |||
32 | .app-loader .app-loader__title { color: $dark-theme-gray-lightest; } | 32 | .app-loader .app-loader__title { color: $dark-theme-gray-lightest; } |
33 | } | 33 | } |
34 | 34 | ||
35 | body.win32:not(.isFullScreen) .app .app__content { | ||
36 | height: calc(100% - 28px); | ||
37 | } | ||
38 | |||
35 | .app { | 39 | .app { |
36 | display: flex; | 40 | .app__content { |
37 | flex-direction: column; | 41 | display: flex; |
42 | width: calc(100% + 300px); | ||
43 | } | ||
38 | 44 | ||
39 | .app__content { display: flex; } | 45 | .app__main-content { |
46 | display: flex; | ||
47 | width: 100%; | ||
48 | } | ||
40 | 49 | ||
41 | .app__service { | 50 | .app__service { |
42 | // position: relative; | ||
43 | display: flex; | 51 | display: flex; |
44 | flex: 1; | 52 | flex: 1; |
45 | flex-direction: column; | 53 | flex-direction: column; |
diff --git a/src/styles/recipes.scss b/src/styles/recipes.scss index 84222e1fe..5bdc60a57 100644 --- a/src/styles/recipes.scss +++ b/src/styles/recipes.scss | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | .theme__dark .recipe-teaser { | 3 | .theme__dark .recipe-teaser { |
4 | background-color: $dark-theme-gray-dark; | 4 | background-color: $dark-theme-gray-dark; |
5 | color: $dark-theme-text-color; | ||
5 | 6 | ||
6 | &:hover { background-color: $dark-theme-gray; } | 7 | &:hover { background-color: $dark-theme-gray; } |
7 | } | 8 | } |
@@ -12,7 +13,7 @@ | |||
12 | display: flex; | 13 | display: flex; |
13 | flex-flow: row wrap; | 14 | flex-flow: row wrap; |
14 | height: auto; | 15 | height: auto; |
15 | min-height: 70%; | 16 | // min-height: 70%; |
16 | 17 | ||
17 | &.recipes__list--disabled { | 18 | &.recipes__list--disabled { |
18 | filter: grayscale(100%); | 19 | filter: grayscale(100%); |
diff --git a/src/styles/reset.scss b/src/styles/reset.scss index f46ede4a2..d87ce652a 100644 --- a/src/styles/reset.scss +++ b/src/styles/reset.scss | |||
@@ -51,7 +51,6 @@ button { | |||
51 | padding: 0; | 51 | padding: 0; |
52 | 52 | ||
53 | &:focus { outline: 0; } | 53 | &:focus { outline: 0; } |
54 | .theme__dark & { color: $dark-theme-gray-smoke; } | ||
55 | } | 54 | } |
56 | 55 | ||
57 | html { | 56 | html { |
diff --git a/src/styles/settings.scss b/src/styles/settings.scss index 1baff8b54..bb95ab5d2 100644 --- a/src/styles/settings.scss +++ b/src/styles/settings.scss | |||
@@ -1,45 +1,39 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | %headline { | 3 | %headline { |
4 | color: $theme-gray-light; | 4 | color: #FFF; |
5 | font-size: 20px; | 5 | font-size: 20px; |
6 | font-weight: 400; | 6 | font-weight: 400; |
7 | letter-spacing: -1px; | 7 | letter-spacing: -1px; |
8 | 8 | ||
9 | a { color: $theme-gray-light; } | 9 | a { color: #FFF } |
10 | } | 10 | } |
11 | 11 | ||
12 | %headline__dark { | 12 | %headline__dark { |
13 | color: $dark-theme-gray-lightest; | 13 | color: #FFF; |
14 | font-size: 20px; | ||
15 | font-weight: 400; | ||
16 | letter-spacing: -1px; | ||
14 | 17 | ||
15 | a { color: $dark-theme-gray-lightest; } | 18 | a { color: #FFF } |
16 | } | 19 | } |
17 | 20 | ||
18 | .theme__dark { | 21 | .theme__dark { |
19 | .settings-wrapper { background: rgba($dark-theme-black, .8); } | 22 | .settings-wrapper { background: rgba($dark-theme-black, .8); } |
20 | 23 | ||
21 | .settings { | 24 | .settings { |
22 | background: $dark-theme-gray-darkest; | ||
23 | box-shadow: 0 20px 50px rgba($dark-theme-black, .5); | ||
24 | |||
25 | .settings__header { | 25 | .settings__header { |
26 | background: $dark-theme-gray-darker; | 26 | .mdi { color: #FFF } |
27 | 27 | } | |
28 | h1, | ||
29 | .settings__header-item { @extend %headline__dark; } | ||
30 | 28 | ||
31 | .separator { border-right: 1px solid $dark-theme-gray-dark; } | 29 | .settings__main { |
32 | .mdi { color: $dark-theme-gray-lightest; } | 30 | background: $dark-theme-gray-darkest; |
33 | } | 31 | } |
34 | 32 | ||
35 | .settings__body::-webkit-scrollbar-thumb { background: $dark-theme-gray; } | 33 | .settings__body::-webkit-scrollbar-thumb { background: $dark-theme-gray; } |
36 | 34 | ||
37 | .settings__close { | 35 | .settings__close { |
38 | background: $dark-theme-gray-darker; | 36 | color: #FFF; |
39 | border-left: none; | ||
40 | color: $dark-theme-gray-lightest; | ||
41 | |||
42 | &:hover { background: darken($dark-theme-gray-darker, 5%); } | ||
43 | } | 37 | } |
44 | 38 | ||
45 | &__settings-group h3 { color: $dark-theme-gray-lightest; } | 39 | &__settings-group h3 { color: $dark-theme-gray-lightest; } |
@@ -76,6 +70,11 @@ | |||
76 | 70 | ||
77 | .settings-navigation__link { | 71 | .settings-navigation__link { |
78 | color: $dark-theme-gray-lightest; | 72 | color: $dark-theme-gray-lightest; |
73 | border-bottom: 1px solid darken($dark-theme-gray-darker, 3%); | ||
74 | |||
75 | &:last-child { | ||
76 | border: 0, | ||
77 | } | ||
79 | 78 | ||
80 | .badge { | 79 | .badge { |
81 | background: $dark-theme-gray-lighter; | 80 | background: $dark-theme-gray-lighter; |
@@ -129,15 +128,14 @@ | |||
129 | } | 128 | } |
130 | 129 | ||
131 | .settings { | 130 | .settings { |
132 | background: #FFF; | ||
133 | border-radius: $theme-border-radius; | 131 | border-radius: $theme-border-radius; |
134 | box-shadow: 0 20px 50px rgba(black, .5); | 132 | // box-shadow: 0 20px 50px rgba(black, .5); |
135 | display: flex; | 133 | display: flex; |
136 | height: 100%; | 134 | height: 100%; |
137 | max-height: 720px; | 135 | max-height: 720px; |
138 | max-width: 900px; | 136 | max-width: 900px; |
139 | min-height: 400px; | 137 | min-height: 400px; |
140 | overflow: hidden; | 138 | // overflow: hidden; |
141 | position: relative; | 139 | position: relative; |
142 | width: 100%; | 140 | width: 100%; |
143 | z-index: 9999; | 141 | z-index: 9999; |
@@ -147,25 +145,32 @@ | |||
147 | flex: 1; | 145 | flex: 1; |
148 | flex-direction: column; | 146 | flex-direction: column; |
149 | height: auto; | 147 | height: auto; |
148 | border-radius: $theme-border-radius; | ||
149 | overflow: hidden; | ||
150 | box-shadow: 0 20px 50px rgba($dark-theme-black, .5); | ||
151 | background: #FFF; | ||
150 | } | 152 | } |
151 | 153 | ||
152 | .settings__header { | 154 | .settings__header { |
153 | align-items: center; | 155 | align-items: center; |
154 | background: $theme-gray-lighter; | 156 | background: $theme-brand-primary; |
155 | display: flex; | 157 | display: flex; |
156 | height: 50px; | 158 | height: 50px; |
157 | padding: 0 40px; | 159 | padding: 0 40px; |
158 | width: calc(100% - 60px); | 160 | width: calc(100% - 60px); |
161 | color: #FFF; | ||
159 | 162 | ||
160 | h1 { | 163 | h1 { |
161 | @extend %headline; | 164 | @extend %headline; |
162 | margin: 0; | 165 | margin: 0; |
163 | } | 166 | } |
164 | 167 | ||
165 | .settings__header-item { @extend %headline; } | 168 | .settings__header-item { |
169 | @extend %headline; | ||
170 | } | ||
166 | 171 | ||
167 | .separator { | 172 | .separator { |
168 | border-right: 1px solid darken($theme-gray-lighter, 10%); | 173 | border-right: 1px solid darken($theme-brand-primary, 8%); |
169 | height: 100%; | 174 | height: 100%; |
170 | margin: 0 15px; | 175 | margin: 0 15px; |
171 | transform: skew(15deg) rotate(2deg); | 176 | transform: skew(15deg) rotate(2deg); |
@@ -218,17 +223,18 @@ | |||
218 | } | 223 | } |
219 | 224 | ||
220 | .settings__close { | 225 | .settings__close { |
221 | background: $theme-gray-lighter; | 226 | background: $theme-brand-primary; |
222 | border-left: 1px solid darken($theme-gray-lighter, 5%); | 227 | border-left: 1px solid darken($theme-brand-primary, 8%); |
223 | color: $theme-gray-light; | 228 | color: #FFF; |
224 | font-size: 20px; | 229 | font-size: 20px; |
225 | height: 50px; | 230 | height: 50px; |
226 | padding: 0 20px; | 231 | padding: 0 20px; |
227 | position: absolute; | 232 | position: absolute; |
228 | right: 0; | 233 | right: 0; |
229 | transition: background $theme-transition-time; | 234 | transition: background $theme-transition-time; |
235 | border-top-right-radius: $theme-border-radius; | ||
230 | 236 | ||
231 | &:hover { background: darken($theme-gray-lighter, 5%); } | 237 | &:hover { background: darken($theme-brand-primary, 5%); } |
232 | } | 238 | } |
233 | 239 | ||
234 | .search-input { margin-bottom: 30px; } | 240 | .search-input { margin-bottom: 30px; } |
@@ -360,6 +366,7 @@ | |||
360 | .account__subscription-button { margin-left: auto; } | 366 | .account__subscription-button { margin-left: auto; } |
361 | .franz-form__button { white-space: nowrap; } | 367 | .franz-form__button { white-space: nowrap; } |
362 | div { height: auto; } | 368 | div { height: auto; } |
369 | [data-type="franz-button"] div { height: 100% } | ||
363 | 370 | ||
364 | .invoices { | 371 | .invoices { |
365 | width: 100%; | 372 | width: 100%; |
@@ -413,7 +420,13 @@ | |||
413 | background: $theme-gray-lightest; | 420 | background: $theme-gray-lightest; |
414 | flex-direction: column; | 421 | flex-direction: column; |
415 | height: auto; | 422 | height: auto; |
416 | width: 200px; | 423 | width: 240px; |
424 | height: calc(100% - 100px); | ||
425 | align-self: center; | ||
426 | border-top-left-radius: $theme-border-radius;; | ||
427 | border-bottom-left-radius: $theme-border-radius;; | ||
428 | overflow: hidden; | ||
429 | box-shadow: 0 20px 50px rgba($dark-theme-black, .5); | ||
417 | 430 | ||
418 | .settings-navigation__link { | 431 | .settings-navigation__link { |
419 | align-items: center; | 432 | align-items: center; |
@@ -425,6 +438,7 @@ | |||
425 | padding: 0 20px; | 438 | padding: 0 20px; |
426 | text-decoration: none; | 439 | text-decoration: none; |
427 | transition: background $theme-transition-time, color $theme-transition-time; | 440 | transition: background $theme-transition-time, color $theme-transition-time; |
441 | border-bottom: 1px solid darken($theme-gray-lightest, 3%); | ||
428 | 442 | ||
429 | &:hover { | 443 | &:hover { |
430 | background: darken($theme-gray-lightest, 5%); | 444 | background: darken($theme-gray-lightest, 5%); |
diff --git a/src/webview/contextMenu.js b/src/webview/contextMenu.js index a4a6ab899..83914f581 100644 --- a/src/webview/contextMenu.js +++ b/src/webview/contextMenu.js | |||
@@ -39,6 +39,23 @@ const buildMenuTpl = (props, suggestions, isSpellcheckEnabled, defaultSpellcheck | |||
39 | { | 39 | { |
40 | type: 'separator', | 40 | type: 'separator', |
41 | }, { | 41 | }, { |
42 | id: 'createTodo', | ||
43 | label: `Create todo: "${textSelection.length > 15 ? `${textSelection.slice(0, 15)}...` : textSelection}"`, | ||
44 | visible: hasText, | ||
45 | click() { | ||
46 | debug('Create todo from selected text', textSelection); | ||
47 | ipcRenderer.sendToHost('feature:todos', { | ||
48 | action: 'todos:create', | ||
49 | data: { | ||
50 | title: textSelection, | ||
51 | url: window.location.href, | ||
52 | }, | ||
53 | }); | ||
54 | }, | ||
55 | }, | ||
56 | { | ||
57 | type: 'separator', | ||
58 | }, { | ||
42 | id: 'lookup', | 59 | id: 'lookup', |
43 | label: `Look Up "${textSelection.length > 15 ? `${textSelection.slice(0, 15)}...` : textSelection}"`, | 60 | label: `Look Up "${textSelection.length > 15 ? `${textSelection.slice(0, 15)}...` : textSelection}"`, |
44 | visible: isMac && props.mediaType === 'none' && hasText, | 61 | visible: isMac && props.mediaType === 'none' && hasText, |
diff --git a/uidev/src/stories/button.stories.tsx b/uidev/src/stories/button.stories.tsx index f7537895c..5c1c9246d 100644 --- a/uidev/src/stories/button.stories.tsx +++ b/uidev/src/stories/button.stories.tsx | |||
@@ -1,10 +1,10 @@ | |||
1 | import { mdiInformation } from '@mdi/js'; | ||
1 | import { observable } from 'mobx'; | 2 | import { observable } from 'mobx'; |
2 | import { observer } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
3 | import React from 'react'; | 4 | import React from 'react'; |
4 | import injectSheet from 'react-jss'; | 5 | import injectSheet from 'react-jss'; |
5 | 6 | ||
6 | import { Button, Input } from '@meetfranz/forms'; | 7 | import { Button, Input } from '@meetfranz/forms'; |
7 | import { classes } from 'istanbul-lib-coverage'; | ||
8 | import { Classes } from 'jss'; | 8 | import { Classes } from 'jss'; |
9 | import { storiesOf } from '../stores/stories'; | 9 | import { storiesOf } from '../stores/stories'; |
10 | 10 | ||
@@ -92,7 +92,7 @@ storiesOf('Button') | |||
92 | )) | 92 | )) |
93 | .add('With icon', () => ( | 93 | .add('With icon', () => ( |
94 | <WithStoreButton store={createStore({ | 94 | <WithStoreButton store={createStore({ |
95 | icon: 'mdiInformation', | 95 | icon: mdiInformation, |
96 | })} /> | 96 | })} /> |
97 | )) | 97 | )) |
98 | .add('As link', () => ( | 98 | .add('As link', () => ( |
@@ -131,7 +131,7 @@ storiesOf('Button') | |||
131 | <div className={classes.combinedElements}> | 131 | <div className={classes.combinedElements}> |
132 | <Input showLabel={false} className={classes.input} noMargin /> | 132 | <Input showLabel={false} className={classes.input} noMargin /> |
133 | <WithStoreButton store={createStore({ | 133 | <WithStoreButton store={createStore({ |
134 | icon: 'mdiInformation', | 134 | icon: mdiInformation, |
135 | })} /> | 135 | })} /> |
136 | </div> | 136 | </div> |
137 | )), | 137 | )), |
diff --git a/uidev/src/stories/icon.stories.tsx b/uidev/src/stories/icon.stories.tsx index c8e7f8ced..f9aa1635b 100644 --- a/uidev/src/stories/icon.stories.tsx +++ b/uidev/src/stories/icon.stories.tsx | |||
@@ -1,53 +1,14 @@ | |||
1 | import { observable } from 'mobx'; | 1 | import { mdiAccountCircle } from '@mdi/js'; |
2 | import { observer } from 'mobx-react'; | ||
3 | import React from 'react'; | 2 | import React from 'react'; |
4 | import uuid from 'uuid/v4'; | ||
5 | 3 | ||
6 | import { Icon } from '@meetfranz/ui'; | 4 | import { Icon } from '@meetfranz/ui'; |
7 | import { storiesOf } from '../stores/stories'; | 5 | import { storiesOf } from '../stores/stories'; |
8 | 6 | ||
9 | // interface IStoreArgs { | ||
10 | // value?: boolean; | ||
11 | // checked?: boolean; | ||
12 | // label?: string; | ||
13 | // id?: string; | ||
14 | // name?: string; | ||
15 | // disabled?: boolean; | ||
16 | // error?: string; | ||
17 | // } | ||
18 | |||
19 | // const createStore = (args?: IStoreArgs) => { | ||
20 | // return observable(Object.assign({ | ||
21 | // id: `element-${uuid()}`, | ||
22 | // name: 'toggle', | ||
23 | // label: 'Label', | ||
24 | // value: true, | ||
25 | // checked: false, | ||
26 | // disabled: false, | ||
27 | // error: '', | ||
28 | // }, args)); | ||
29 | // }; | ||
30 | |||
31 | // const WithStoreToggle = observer(({ store }: { store: any }) => ( | ||
32 | // <> | ||
33 | // <Toggle | ||
34 | // value={store.value} | ||
35 | // checked={store.checked} | ||
36 | // label={store.label} | ||
37 | // id={store.id} | ||
38 | // name={store.name} | ||
39 | // disabled={store.disabled} | ||
40 | // error={store.error} | ||
41 | // onChange={() => store.checked = !store.checked} | ||
42 | // /> | ||
43 | // </> | ||
44 | // )); | ||
45 | |||
46 | storiesOf('Icon') | 7 | storiesOf('Icon') |
47 | .add('Basic', () => ( | 8 | .add('Basic', () => ( |
48 | <> | 9 | <> |
49 | <Icon icon="mdiAccountCircle" /> | 10 | <Icon icon={mdiAccountCircle} /> |
50 | <Icon icon="mdiAccountCircle" size={2} /> | 11 | <Icon icon={mdiAccountCircle} size={2} /> |
51 | <Icon icon="mdiAccountCircle" size={3} /> | 12 | <Icon icon={mdiAccountCircle} size={3} /> |
52 | </> | 13 | </> |
53 | )); | 14 | )); |
diff --git a/uidev/src/stories/infobox.stories.tsx b/uidev/src/stories/infobox.stories.tsx index 967c610aa..b0416b844 100644 --- a/uidev/src/stories/infobox.stories.tsx +++ b/uidev/src/stories/infobox.stories.tsx | |||
@@ -1,3 +1,4 @@ | |||
1 | import { mdiEarth } from '@mdi/js'; | ||
1 | import { observable } from 'mobx'; | 2 | import { observable } from 'mobx'; |
2 | import { observer } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
3 | import React from 'react'; | 4 | import React from 'react'; |
@@ -44,7 +45,7 @@ storiesOf('Infobox') | |||
44 | .add('Icon + Dismissable', () => ( | 45 | .add('Icon + Dismissable', () => ( |
45 | <WithStoreInfobox | 46 | <WithStoreInfobox |
46 | store={createStore({ | 47 | store={createStore({ |
47 | icon: 'mdiEarth', | 48 | icon: mdiEarth, |
48 | dismissable: true, | 49 | dismissable: true, |
49 | })} | 50 | })} |
50 | > | 51 | > |
@@ -54,7 +55,7 @@ storiesOf('Infobox') | |||
54 | .add('With CTA', () => ( | 55 | .add('With CTA', () => ( |
55 | <WithStoreInfobox | 56 | <WithStoreInfobox |
56 | store={createStore({ | 57 | store={createStore({ |
57 | icon: 'mdiEarth', | 58 | icon: mdiEarth, |
58 | ctaLabel: 'Ok, hi!', | 59 | ctaLabel: 'Ok, hi!', |
59 | })} | 60 | })} |
60 | > | 61 | > |
@@ -64,7 +65,7 @@ storiesOf('Infobox') | |||
64 | .add('With long text', () => ( | 65 | .add('With long text', () => ( |
65 | <WithStoreInfobox | 66 | <WithStoreInfobox |
66 | store={createStore({ | 67 | store={createStore({ |
67 | icon: 'mdiEarth', | 68 | icon: mdiEarth, |
68 | ctaLabel: 'Ok, hi!', | 69 | ctaLabel: 'Ok, hi!', |
69 | })} | 70 | })} |
70 | > | 71 | > |
@@ -74,7 +75,7 @@ storiesOf('Infobox') | |||
74 | .add('Secondary', () => ( | 75 | .add('Secondary', () => ( |
75 | <WithStoreInfobox | 76 | <WithStoreInfobox |
76 | store={createStore({ | 77 | store={createStore({ |
77 | icon: 'mdiEarth', | 78 | icon: mdiEarth, |
78 | ctaLabel: 'Ok, hi!', | 79 | ctaLabel: 'Ok, hi!', |
79 | type: 'secondary', | 80 | type: 'secondary', |
80 | })} | 81 | })} |
@@ -85,7 +86,7 @@ storiesOf('Infobox') | |||
85 | .add('Success', () => ( | 86 | .add('Success', () => ( |
86 | <WithStoreInfobox | 87 | <WithStoreInfobox |
87 | store={createStore({ | 88 | store={createStore({ |
88 | icon: 'mdiEarth', | 89 | icon: mdiEarth, |
89 | ctaLabel: 'Ok, hi!', | 90 | ctaLabel: 'Ok, hi!', |
90 | type: 'success', | 91 | type: 'success', |
91 | })} | 92 | })} |
@@ -96,7 +97,7 @@ storiesOf('Infobox') | |||
96 | .add('Warning', () => ( | 97 | .add('Warning', () => ( |
97 | <WithStoreInfobox | 98 | <WithStoreInfobox |
98 | store={createStore({ | 99 | store={createStore({ |
99 | icon: 'mdiEarth', | 100 | icon: mdiEarth, |
100 | ctaLabel: 'Ok, hi!', | 101 | ctaLabel: 'Ok, hi!', |
101 | type: 'warning', | 102 | type: 'warning', |
102 | })} | 103 | })} |
@@ -107,7 +108,7 @@ storiesOf('Infobox') | |||
107 | .add('Danger', () => ( | 108 | .add('Danger', () => ( |
108 | <WithStoreInfobox | 109 | <WithStoreInfobox |
109 | store={createStore({ | 110 | store={createStore({ |
110 | icon: 'mdiEarth', | 111 | icon: mdiEarth, |
111 | ctaLabel: 'Ok, hi!', | 112 | ctaLabel: 'Ok, hi!', |
112 | type: 'danger', | 113 | type: 'danger', |
113 | })} | 114 | })} |
@@ -118,7 +119,7 @@ storiesOf('Infobox') | |||
118 | .add('Inverted', () => ( | 119 | .add('Inverted', () => ( |
119 | <WithStoreInfobox | 120 | <WithStoreInfobox |
120 | store={createStore({ | 121 | store={createStore({ |
121 | icon: 'mdiEarth', | 122 | icon: mdiEarth, |
122 | ctaLabel: 'Ok, hi!', | 123 | ctaLabel: 'Ok, hi!', |
123 | type: 'inverted', | 124 | type: 'inverted', |
124 | })} | 125 | })} |