diff options
Diffstat (limited to 'src')
168 files changed, 4219 insertions, 2405 deletions
diff --git a/src/I18n.js b/src/I18n.js index 4ee34157c..e33141576 100644 --- a/src/I18n.js +++ b/src/I18n.js | |||
@@ -7,8 +7,7 @@ import { oneOrManyChildElements } from './prop-types'; | |||
7 | import translations from './i18n/translations'; | 7 | import translations from './i18n/translations'; |
8 | import UserStore from './stores/UserStore'; | 8 | import UserStore from './stores/UserStore'; |
9 | 9 | ||
10 | @inject('stores') @observer | 10 | export default @inject('stores') @observer class I18N extends Component { |
11 | export default class I18N extends Component { | ||
12 | componentDidUpdate() { | 11 | componentDidUpdate() { |
13 | window.franz.menu.rebuild(); | 12 | window.franz.menu.rebuild(); |
14 | } | 13 | } |
diff --git a/src/api/FeaturesApi.js b/src/api/FeaturesApi.js new file mode 100644 index 000000000..c66f28f5b --- /dev/null +++ b/src/api/FeaturesApi.js | |||
@@ -0,0 +1,13 @@ | |||
1 | export default class FeaturesApi { | ||
2 | constructor(server) { | ||
3 | this.server = server; | ||
4 | } | ||
5 | |||
6 | default() { | ||
7 | return this.server.getDefaultFeatures(); | ||
8 | } | ||
9 | |||
10 | features() { | ||
11 | return this.server.getFeatures(); | ||
12 | } | ||
13 | } | ||
diff --git a/src/api/LocalApi.js b/src/api/LocalApi.js index 741917104..e2a46874a 100644 --- a/src/api/LocalApi.js +++ b/src/api/LocalApi.js | |||
@@ -4,12 +4,12 @@ export default class LocalApi { | |||
4 | this.local = local; | 4 | this.local = local; |
5 | } | 5 | } |
6 | 6 | ||
7 | getAppSettings() { | 7 | getAppSettings(type) { |
8 | return this.local.getAppSettings(); | 8 | return this.local.getAppSettings(type); |
9 | } | 9 | } |
10 | 10 | ||
11 | updateAppSettings(data) { | 11 | updateAppSettings(type, data) { |
12 | return this.local.updateAppSettings(data); | 12 | return this.local.updateAppSettings(type, data); |
13 | } | 13 | } |
14 | 14 | ||
15 | getAppCacheSize() { | 15 | getAppCacheSize() { |
diff --git a/src/api/RecipesApi.js b/src/api/RecipesApi.js index 0573dacaf..800888b00 100644 --- a/src/api/RecipesApi.js +++ b/src/api/RecipesApi.js | |||
@@ -1,4 +1,4 @@ | |||
1 | export default class ServicesApi { | 1 | export default class RecipesApi { |
2 | constructor(server) { | 2 | constructor(server) { |
3 | this.server = server; | 3 | this.server = server; |
4 | } | 4 | } |
diff --git a/src/api/index.js b/src/api/index.js index 3fc18c4b5..3c87cc087 100644 --- a/src/api/index.js +++ b/src/api/index.js | |||
@@ -6,12 +6,14 @@ import UserApi from './UserApi'; | |||
6 | import LocalApi from './LocalApi'; | 6 | import LocalApi from './LocalApi'; |
7 | import PaymentApi from './PaymentApi'; | 7 | import PaymentApi from './PaymentApi'; |
8 | import NewsApi from './NewsApi'; | 8 | import NewsApi from './NewsApi'; |
9 | import FeaturesApi from './FeaturesApi'; | ||
9 | 10 | ||
10 | export default (server, local) => ({ | 11 | export default (server, local) => ({ |
11 | app: new AppApi(server, local), | 12 | app: new AppApi(server, local), |
12 | services: new ServicesApi(server, local), | 13 | services: new ServicesApi(server, local), |
13 | recipePreviews: new RecipePreviewsApi(server, local), | 14 | recipePreviews: new RecipePreviewsApi(server, local), |
14 | recipes: new RecipesApi(server, local), | 15 | recipes: new RecipesApi(server, local), |
16 | features: new FeaturesApi(server, local), | ||
15 | user: new UserApi(server, local), | 17 | user: new UserApi(server, local), |
16 | local: new LocalApi(server, local), | 18 | local: new LocalApi(server, local), |
17 | payment: new PaymentApi(server, local), | 19 | payment: new PaymentApi(server, local), |
diff --git a/src/api/server/LocalApi.js b/src/api/server/LocalApi.js index 78deb7aa5..ab1604a27 100644 --- a/src/api/server/LocalApi.js +++ b/src/api/server/LocalApi.js | |||
@@ -3,26 +3,29 @@ import du from 'du'; | |||
3 | 3 | ||
4 | import { getServicePartitionsDirectory } from '../../helpers/service-helpers.js'; | 4 | import { getServicePartitionsDirectory } from '../../helpers/service-helpers.js'; |
5 | 5 | ||
6 | const debug = require('debug')('LocalApi'); | 6 | const debug = require('debug')('Franz:LocalApi'); |
7 | 7 | ||
8 | const { session } = remote; | 8 | const { session } = remote; |
9 | 9 | ||
10 | export default class LocalApi { | 10 | export default class LocalApi { |
11 | // Settings | 11 | // Settings |
12 | getAppSettings() { | 12 | getAppSettings(type) { |
13 | return new Promise((resolve) => { | 13 | return new Promise((resolve) => { |
14 | ipcRenderer.once('appSettings', (event, data) => { | 14 | ipcRenderer.once('appSettings', (event, resp) => { |
15 | debug('LocalApi::getAppSettings resolves', data); | 15 | debug('LocalApi::getAppSettings resolves', resp.type, resp.data); |
16 | resolve(data); | 16 | resolve(resp); |
17 | }); | 17 | }); |
18 | 18 | ||
19 | ipcRenderer.send('getAppSettings'); | 19 | ipcRenderer.send('getAppSettings', type); |
20 | }); | 20 | }); |
21 | } | 21 | } |
22 | 22 | ||
23 | async updateAppSettings(data) { | 23 | async updateAppSettings(type, data) { |
24 | debug('LocalApi::updateAppSettings resolves', data); | 24 | debug('LocalApi::updateAppSettings resolves', type, data); |
25 | ipcRenderer.send('updateAppSettings', data); | 25 | ipcRenderer.send('updateAppSettings', { |
26 | type, | ||
27 | data, | ||
28 | }); | ||
26 | } | 29 | } |
27 | 30 | ||
28 | // Services | 31 | // Services |
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js index 353faa7f4..164419951 100644 --- a/src/api/server/ServerApi.js +++ b/src/api/server/ServerApi.js | |||
@@ -27,7 +27,7 @@ import { | |||
27 | removeServicePartitionDirectory, | 27 | removeServicePartitionDirectory, |
28 | } from '../../helpers/service-helpers.js'; | 28 | } from '../../helpers/service-helpers.js'; |
29 | 29 | ||
30 | const debug = require('debug')('ServerApi'); | 30 | const debug = require('debug')('Franz:ServerApi'); |
31 | 31 | ||
32 | module.paths.unshift( | 32 | module.paths.unshift( |
33 | getDevRecipeDirectory(), | 33 | getDevRecipeDirectory(), |
@@ -35,7 +35,7 @@ module.paths.unshift( | |||
35 | ); | 35 | ); |
36 | 36 | ||
37 | const { app } = remote; | 37 | const { app } = remote; |
38 | const fetch = remote.require('electron-fetch'); | 38 | const { default: fetch } = remote.require('electron-fetch'); |
39 | 39 | ||
40 | const SERVER_URL = API; | 40 | const SERVER_URL = API; |
41 | const API_VERSION = 'v1'; | 41 | const API_VERSION = 'v1'; |
@@ -261,6 +261,35 @@ export default class ServerApi { | |||
261 | return data; | 261 | return data; |
262 | } | 262 | } |
263 | 263 | ||
264 | // Features | ||
265 | async getDefaultFeatures() { | ||
266 | const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/features/default`, this._prepareAuthRequest({ | ||
267 | method: 'GET', | ||
268 | })); | ||
269 | if (!request.ok) { | ||
270 | throw request; | ||
271 | } | ||
272 | const data = await request.json(); | ||
273 | |||
274 | const features = data; | ||
275 | console.debug('ServerApi::getDefaultFeatures resolves', features); | ||
276 | return features; | ||
277 | } | ||
278 | |||
279 | async getFeatures() { | ||
280 | const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/features`, this._prepareAuthRequest({ | ||
281 | method: 'GET', | ||
282 | })); | ||
283 | if (!request.ok) { | ||
284 | throw request; | ||
285 | } | ||
286 | const data = await request.json(); | ||
287 | |||
288 | const features = data; | ||
289 | console.debug('ServerApi::getFeatures resolves', features); | ||
290 | return features; | ||
291 | } | ||
292 | |||
264 | // Recipes | 293 | // Recipes |
265 | async getInstalledRecipes() { | 294 | async getInstalledRecipes() { |
266 | const recipesDirectory = getRecipeDirectory(); | 295 | const recipesDirectory = getRecipeDirectory(); |
diff --git a/src/app.js b/src/app.js index 814bfacf1..43d0cf018 100644 --- a/src/app.js +++ b/src/app.js | |||
@@ -6,7 +6,7 @@ import { Provider } from 'mobx-react'; | |||
6 | import { syncHistoryWithStore, RouterStore } from 'mobx-react-router'; | 6 | import { syncHistoryWithStore, RouterStore } from 'mobx-react-router'; |
7 | import { Router, Route, hashHistory, IndexRedirect } from 'react-router'; | 7 | import { Router, Route, hashHistory, IndexRedirect } from 'react-router'; |
8 | 8 | ||
9 | import 'babel-polyfill'; | 9 | import '@babel/polyfill'; |
10 | import smoothScroll from 'smoothscroll-polyfill'; | 10 | import smoothScroll from 'smoothscroll-polyfill'; |
11 | 11 | ||
12 | import ServerApi from './api/server/ServerApi'; | 12 | import ServerApi from './api/server/ServerApi'; |
diff --git a/src/components/auth/AuthLayout.js b/src/components/auth/AuthLayout.js index 2741b8a15..4fb0e6a59 100644 --- a/src/components/auth/AuthLayout.js +++ b/src/components/auth/AuthLayout.js | |||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; | |||
3 | import { observer } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
4 | import { RouteTransition } from 'react-router-transition'; | 4 | import { RouteTransition } from 'react-router-transition'; |
5 | import { intlShape } from 'react-intl'; | 5 | import { intlShape } from 'react-intl'; |
6 | import { TitleBar } from 'electron-react-titlebar'; | ||
6 | 7 | ||
7 | import Link from '../ui/Link'; | 8 | import Link from '../ui/Link'; |
8 | import InfoBar from '../ui/InfoBar'; | 9 | import InfoBar from '../ui/InfoBar'; |
@@ -10,8 +11,9 @@ import InfoBar from '../ui/InfoBar'; | |||
10 | import { oneOrManyChildElements, globalError as globalErrorPropType } from '../../prop-types'; | 11 | import { oneOrManyChildElements, globalError as globalErrorPropType } from '../../prop-types'; |
11 | import globalMessages from '../../i18n/globalMessages'; | 12 | import globalMessages from '../../i18n/globalMessages'; |
12 | 13 | ||
13 | @observer | 14 | import { isWindows } from '../../environment'; |
14 | export default class AuthLayout extends Component { | 15 | |
16 | export default @observer class AuthLayout extends Component { | ||
15 | static propTypes = { | 17 | static propTypes = { |
16 | children: oneOrManyChildElements.isRequired, | 18 | children: oneOrManyChildElements.isRequired, |
17 | pathname: PropTypes.string.isRequired, | 19 | pathname: PropTypes.string.isRequired, |
@@ -20,6 +22,8 @@ export default class AuthLayout extends Component { | |||
20 | isAPIHealthy: PropTypes.bool.isRequired, | 22 | isAPIHealthy: PropTypes.bool.isRequired, |
21 | retryHealthCheck: PropTypes.func.isRequired, | 23 | retryHealthCheck: PropTypes.func.isRequired, |
22 | isHealthCheckLoading: PropTypes.bool.isRequired, | 24 | isHealthCheckLoading: PropTypes.bool.isRequired, |
25 | isFullScreen: PropTypes.bool.isRequired, | ||
26 | darkMode: PropTypes.bool.isRequired, | ||
23 | }; | 27 | }; |
24 | 28 | ||
25 | static contextTypes = { | 29 | static contextTypes = { |
@@ -35,53 +39,58 @@ export default class AuthLayout extends Component { | |||
35 | isAPIHealthy, | 39 | isAPIHealthy, |
36 | retryHealthCheck, | 40 | retryHealthCheck, |
37 | isHealthCheckLoading, | 41 | isHealthCheckLoading, |
42 | isFullScreen, | ||
43 | darkMode, | ||
38 | } = this.props; | 44 | } = this.props; |
39 | const { intl } = this.context; | 45 | const { intl } = this.context; |
40 | 46 | ||
41 | return ( | 47 | return ( |
42 | <div className="auth"> | 48 | <div className={darkMode ? 'theme__dark' : ''}> |
43 | {!isOnline && ( | 49 | {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon={'assets/images/logo.svg'} />} |
44 | <InfoBar | 50 | <div className={'auth'}> |
45 | type="warning" | 51 | {!isOnline && ( |
46 | > | 52 | <InfoBar |
47 | <span className="mdi mdi-flash" /> | 53 | type="warning" |
48 | {intl.formatMessage(globalMessages.notConnectedToTheInternet)} | 54 | > |
49 | </InfoBar> | 55 | <span className="mdi mdi-flash" /> |
50 | )} | 56 | {intl.formatMessage(globalMessages.notConnectedToTheInternet)} |
51 | {isOnline && !isAPIHealthy && ( | 57 | </InfoBar> |
52 | <InfoBar | 58 | )} |
53 | type="danger" | 59 | {isOnline && !isAPIHealthy && ( |
54 | ctaLabel="Try again" | 60 | <InfoBar |
55 | ctaLoading={isHealthCheckLoading} | 61 | type="danger" |
56 | sticky | 62 | ctaLabel="Try again" |
57 | onClick={retryHealthCheck} | 63 | ctaLoading={isHealthCheckLoading} |
58 | > | 64 | sticky |
59 | <span className="mdi mdi-flash" /> | 65 | onClick={retryHealthCheck} |
60 | {intl.formatMessage(globalMessages.APIUnhealthy)} | 66 | > |
61 | </InfoBar> | 67 | <span className="mdi mdi-flash" /> |
62 | )} | 68 | {intl.formatMessage(globalMessages.APIUnhealthy)} |
63 | <div className="auth__layout"> | 69 | </InfoBar> |
64 | <RouteTransition | 70 | )} |
65 | pathname={pathname} | 71 | <div className="auth__layout"> |
66 | atEnter={{ opacity: 0 }} | 72 | <RouteTransition |
67 | atLeave={{ opacity: 0 }} | 73 | pathname={pathname} |
68 | atActive={{ opacity: 1 }} | 74 | atEnter={{ opacity: 0 }} |
69 | mapStyles={styles => ({ | 75 | atLeave={{ opacity: 0 }} |
70 | transform: `translateX(${styles.translateX}%)`, | 76 | atActive={{ opacity: 1 }} |
71 | opacity: styles.opacity, | 77 | mapStyles={styles => ({ |
72 | })} | 78 | transform: `translateX(${styles.translateX}%)`, |
73 | component="span" | 79 | opacity: styles.opacity, |
74 | > | 80 | })} |
75 | {/* Inject globalError into children */} | 81 | component="span" |
76 | {React.cloneElement(children, { | 82 | > |
77 | error, | 83 | {/* Inject globalError into children */} |
78 | })} | 84 | {React.cloneElement(children, { |
79 | </RouteTransition> | 85 | error, |
86 | })} | ||
87 | </RouteTransition> | ||
88 | </div> | ||
89 | {/* </div> */} | ||
90 | <Link to="https://adlk.io" className="auth__adlk" target="_blank"> | ||
91 | <img src="./assets/images/adlk.svg" alt="" /> | ||
92 | </Link> | ||
80 | </div> | 93 | </div> |
81 | {/* </div> */} | ||
82 | <Link to="https://adlk.io" className="auth__adlk" target="_blank"> | ||
83 | <img src="./assets/images/adlk.svg" alt="" /> | ||
84 | </Link> | ||
85 | </div> | 94 | </div> |
86 | ); | 95 | ); |
87 | } | 96 | } |
diff --git a/src/components/auth/Import.js b/src/components/auth/Import.js index 9ba14e768..0d5feb274 100644 --- a/src/components/auth/Import.js +++ b/src/components/auth/Import.js | |||
@@ -28,8 +28,7 @@ const messages = defineMessages({ | |||
28 | }, | 28 | }, |
29 | }); | 29 | }); |
30 | 30 | ||
31 | @observer | 31 | export default @observer class Import extends Component { |
32 | export default class Import extends Component { | ||
33 | static propTypes = { | 32 | static propTypes = { |
34 | services: MobxPropTypes.arrayOrObservableArray.isRequired, | 33 | services: MobxPropTypes.arrayOrObservableArray.isRequired, |
35 | onSubmit: PropTypes.func.isRequired, | 34 | onSubmit: PropTypes.func.isRequired, |
diff --git a/src/components/auth/Invite.js b/src/components/auth/Invite.js index f1c16986b..96821a61a 100644 --- a/src/components/auth/Invite.js +++ b/src/components/auth/Invite.js | |||
@@ -43,8 +43,7 @@ const messages = defineMessages({ | |||
43 | }, | 43 | }, |
44 | }); | 44 | }); |
45 | 45 | ||
46 | @observer | 46 | export default @observer class Invite extends Component { |
47 | export default class Invite extends Component { | ||
48 | static propTypes = { | 47 | static propTypes = { |
49 | onSubmit: PropTypes.func.isRequired, | 48 | onSubmit: PropTypes.func.isRequired, |
50 | embed: PropTypes.bool, | 49 | embed: PropTypes.bool, |
diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js index 4a3cd6776..f465b35a5 100644 --- a/src/components/auth/Login.js +++ b/src/components/auth/Login.js | |||
@@ -55,8 +55,7 @@ const messages = defineMessages({ | |||
55 | }, | 55 | }, |
56 | }); | 56 | }); |
57 | 57 | ||
58 | @observer | 58 | export default @observer class Login extends Component { |
59 | export default class Login extends Component { | ||
60 | static propTypes = { | 59 | static propTypes = { |
61 | onSubmit: PropTypes.func.isRequired, | 60 | onSubmit: PropTypes.func.isRequired, |
62 | isSubmitting: PropTypes.bool.isRequired, | 61 | isSubmitting: PropTypes.bool.isRequired, |
diff --git a/src/components/auth/Password.js b/src/components/auth/Password.js index 5bcc80b6e..ad34e39af 100644 --- a/src/components/auth/Password.js +++ b/src/components/auth/Password.js | |||
@@ -41,8 +41,7 @@ const messages = defineMessages({ | |||
41 | }, | 41 | }, |
42 | }); | 42 | }); |
43 | 43 | ||
44 | @observer | 44 | export default @observer class Password extends Component { |
45 | export default class Password extends Component { | ||
46 | static propTypes = { | 45 | static propTypes = { |
47 | onSubmit: PropTypes.func.isRequired, | 46 | onSubmit: PropTypes.func.isRequired, |
48 | isSubmitting: PropTypes.bool.isRequired, | 47 | isSubmitting: PropTypes.bool.isRequired, |
diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js index 3cc8d5f6b..f08129568 100644 --- a/src/components/auth/Pricing.js +++ b/src/components/auth/Pricing.js | |||
@@ -28,8 +28,7 @@ const messages = defineMessages({ | |||
28 | }, | 28 | }, |
29 | }); | 29 | }); |
30 | 30 | ||
31 | @observer | 31 | export default @observer class Signup extends Component { |
32 | export default class Signup extends Component { | ||
33 | static propTypes = { | 32 | static propTypes = { |
34 | donor: MobxPropTypes.objectOrObservableObject.isRequired, | 33 | donor: MobxPropTypes.objectOrObservableObject.isRequired, |
35 | isLoading: PropTypes.bool.isRequired, | 34 | isLoading: PropTypes.bool.isRequired, |
diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js index 219948274..bbcad8b67 100644 --- a/src/components/auth/Signup.js +++ b/src/components/auth/Signup.js | |||
@@ -65,8 +65,7 @@ const messages = defineMessages({ | |||
65 | }, | 65 | }, |
66 | }); | 66 | }); |
67 | 67 | ||
68 | @observer | 68 | export default @observer class Signup extends Component { |
69 | export default class Signup extends Component { | ||
70 | static propTypes = { | 69 | static propTypes = { |
71 | onSubmit: PropTypes.func.isRequired, | 70 | onSubmit: PropTypes.func.isRequired, |
72 | isSubmitting: PropTypes.bool.isRequired, | 71 | isSubmitting: PropTypes.bool.isRequired, |
@@ -187,7 +186,7 @@ export default class Signup extends Component { | |||
187 | {intl.formatMessage(messages.legalInfo)} | 186 | {intl.formatMessage(messages.legalInfo)} |
188 | <br /> | 187 | <br /> |
189 | <Link | 188 | <Link |
190 | to="http://meetfranz.com/terms" | 189 | to="https://meetfranz.com/terms" |
191 | target="_blank" | 190 | target="_blank" |
192 | className="link" | 191 | className="link" |
193 | > | 192 | > |
@@ -195,7 +194,7 @@ export default class Signup extends Component { | |||
195 | </Link> | 194 | </Link> |
196 | & | 195 | & |
197 | <Link | 196 | <Link |
198 | to="http://meetfranz.com/privacy" | 197 | to="https://meetfranz.com/privacy" |
199 | target="_blank" | 198 | target="_blank" |
200 | className="link" | 199 | className="link" |
201 | > | 200 | > |
diff --git a/src/components/auth/Welcome.js b/src/components/auth/Welcome.js index 9e1c762a5..f6d77f70f 100644 --- a/src/components/auth/Welcome.js +++ b/src/components/auth/Welcome.js | |||
@@ -16,8 +16,7 @@ const messages = defineMessages({ | |||
16 | }, | 16 | }, |
17 | }); | 17 | }); |
18 | 18 | ||
19 | @observer | 19 | export default @observer class Login extends Component { |
20 | export default class Login extends Component { | ||
21 | static propTypes = { | 20 | static propTypes = { |
22 | loginRoute: PropTypes.string.isRequired, | 21 | loginRoute: PropTypes.string.isRequired, |
23 | signupRoute: PropTypes.string.isRequired, | 22 | signupRoute: PropTypes.string.isRequired, |
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js index 746775a7f..3ababe54a 100644 --- a/src/components/layout/AppLayout.js +++ b/src/components/layout/AppLayout.js | |||
@@ -5,6 +5,7 @@ import { defineMessages, intlShape } from 'react-intl'; | |||
5 | import { TitleBar } from 'electron-react-titlebar'; | 5 | import { TitleBar } from 'electron-react-titlebar'; |
6 | 6 | ||
7 | import InfoBar from '../ui/InfoBar'; | 7 | import InfoBar from '../ui/InfoBar'; |
8 | import { Component as DelayApp } from '../../features/delayApp'; | ||
8 | import globalMessages from '../../i18n/globalMessages'; | 9 | import globalMessages from '../../i18n/globalMessages'; |
9 | 10 | ||
10 | import { isWindows } from '../../environment'; | 11 | import { isWindows } from '../../environment'; |
@@ -40,8 +41,7 @@ const messages = defineMessages({ | |||
40 | }, | 41 | }, |
41 | }); | 42 | }); |
42 | 43 | ||
43 | @observer | 44 | export default @observer class AppLayout extends Component { |
44 | export default class AppLayout extends Component { | ||
45 | static propTypes = { | 45 | static propTypes = { |
46 | isFullScreen: PropTypes.bool.isRequired, | 46 | isFullScreen: PropTypes.bool.isRequired, |
47 | sidebar: PropTypes.element.isRequired, | 47 | sidebar: PropTypes.element.isRequired, |
@@ -58,6 +58,8 @@ export default class AppLayout extends Component { | |||
58 | areRequiredRequestsSuccessful: PropTypes.bool.isRequired, | 58 | areRequiredRequestsSuccessful: PropTypes.bool.isRequired, |
59 | retryRequiredRequests: PropTypes.func.isRequired, | 59 | retryRequiredRequests: PropTypes.func.isRequired, |
60 | areRequiredRequestsLoading: PropTypes.bool.isRequired, | 60 | areRequiredRequestsLoading: PropTypes.bool.isRequired, |
61 | darkMode: PropTypes.bool.isRequired, | ||
62 | isDelayAppScreenVisible: PropTypes.bool.isRequired, | ||
61 | }; | 63 | }; |
62 | 64 | ||
63 | static defaultProps = { | 65 | static defaultProps = { |
@@ -85,12 +87,14 @@ export default class AppLayout extends Component { | |||
85 | areRequiredRequestsSuccessful, | 87 | areRequiredRequestsSuccessful, |
86 | retryRequiredRequests, | 88 | retryRequiredRequests, |
87 | areRequiredRequestsLoading, | 89 | areRequiredRequestsLoading, |
90 | darkMode, | ||
91 | isDelayAppScreenVisible, | ||
88 | } = this.props; | 92 | } = this.props; |
89 | 93 | ||
90 | const { intl } = this.context; | 94 | const { intl } = this.context; |
91 | 95 | ||
92 | return ( | 96 | return ( |
93 | <div> | 97 | <div className={(darkMode ? 'theme__dark' : '')}> |
94 | <div className="app"> | 98 | <div className="app"> |
95 | {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon={'assets/images/logo.svg'} />} | 99 | {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon={'assets/images/logo.svg'} />} |
96 | <div className="app__content"> | 100 | <div className="app__content"> |
@@ -151,6 +155,7 @@ export default class AppLayout extends Component { | |||
151 | </a> | 155 | </a> |
152 | </InfoBar> | 156 | </InfoBar> |
153 | )} | 157 | )} |
158 | {isDelayAppScreenVisible && (<DelayApp />)} | ||
154 | {services} | 159 | {services} |
155 | </div> | 160 | </div> |
156 | </div> | 161 | </div> |
diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js index fa269f216..6ea95bf88 100644 --- a/src/components/layout/Sidebar.js +++ b/src/components/layout/Sidebar.js | |||
@@ -26,8 +26,7 @@ const messages = defineMessages({ | |||
26 | }, | 26 | }, |
27 | }); | 27 | }); |
28 | 28 | ||
29 | @observer | 29 | export default @observer class Sidebar extends Component { |
30 | export default class Sidebar extends Component { | ||
31 | static propTypes = { | 30 | static propTypes = { |
32 | openSettings: PropTypes.func.isRequired, | 31 | openSettings: PropTypes.func.isRequired, |
33 | toggleMuteApp: PropTypes.func.isRequired, | 32 | toggleMuteApp: PropTypes.func.isRequired, |
diff --git a/src/components/services/content/ServiceDisabled.js b/src/components/services/content/ServiceDisabled.js index b5af3743d..58fb38d8c 100644 --- a/src/components/services/content/ServiceDisabled.js +++ b/src/components/services/content/ServiceDisabled.js | |||
@@ -16,8 +16,7 @@ const messages = defineMessages({ | |||
16 | }, | 16 | }, |
17 | }); | 17 | }); |
18 | 18 | ||
19 | @observer | 19 | export default @observer class ServiceDisabled extends Component { |
20 | export default class ServiceDisabled extends Component { | ||
21 | static propTypes = { | 20 | static propTypes = { |
22 | name: PropTypes.string.isRequired, | 21 | name: PropTypes.string.isRequired, |
23 | enable: PropTypes.func.isRequired, | 22 | enable: PropTypes.func.isRequired, |
diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js index c146abf4e..7163209ee 100644 --- a/src/components/services/content/ServiceWebview.js +++ b/src/components/services/content/ServiceWebview.js | |||
@@ -10,8 +10,7 @@ import StatusBarTargetUrl from '../../ui/StatusBarTargetUrl'; | |||
10 | import WebviewCrashHandler from './WebviewCrashHandler'; | 10 | import WebviewCrashHandler from './WebviewCrashHandler'; |
11 | import ServiceDisabled from './ServiceDisabled'; | 11 | import ServiceDisabled from './ServiceDisabled'; |
12 | 12 | ||
13 | @observer | 13 | export default @observer class ServiceWebview extends Component { |
14 | export default class ServiceWebview extends Component { | ||
15 | static propTypes = { | 14 | static propTypes = { |
16 | service: PropTypes.instanceOf(ServiceModel).isRequired, | 15 | service: PropTypes.instanceOf(ServiceModel).isRequired, |
17 | setWebviewReference: PropTypes.func.isRequired, | 16 | setWebviewReference: PropTypes.func.isRequired, |
diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js index b1322afc2..4cbd51043 100644 --- a/src/components/services/content/Services.js +++ b/src/components/services/content/Services.js | |||
@@ -18,8 +18,7 @@ const messages = defineMessages({ | |||
18 | }, | 18 | }, |
19 | }); | 19 | }); |
20 | 20 | ||
21 | @observer | 21 | export default @observer class Services extends Component { |
22 | export default class Services extends Component { | ||
23 | static propTypes = { | 22 | static propTypes = { |
24 | services: MobxPropTypes.arrayOrObservableArray.isRequired, | 23 | services: MobxPropTypes.arrayOrObservableArray.isRequired, |
25 | setWebviewReference: PropTypes.func.isRequired, | 24 | setWebviewReference: PropTypes.func.isRequired, |
diff --git a/src/components/services/content/WebviewCrashHandler.js b/src/components/services/content/WebviewCrashHandler.js index d3e6951f3..3be1fccf4 100644 --- a/src/components/services/content/WebviewCrashHandler.js +++ b/src/components/services/content/WebviewCrashHandler.js | |||
@@ -24,8 +24,7 @@ const messages = defineMessages({ | |||
24 | }, | 24 | }, |
25 | }); | 25 | }); |
26 | 26 | ||
27 | @observer | 27 | export default @observer class WebviewCrashHandler extends Component { |
28 | export default class WebviewCrashHandler extends Component { | ||
29 | static propTypes = { | 28 | static propTypes = { |
30 | name: PropTypes.string.isRequired, | 29 | name: PropTypes.string.isRequired, |
31 | reload: PropTypes.func.isRequired, | 30 | reload: PropTypes.func.isRequired, |
diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js index 638262f7f..8de7dc438 100644 --- a/src/components/services/tabs/TabItem.js +++ b/src/components/services/tabs/TabItem.js | |||
@@ -141,10 +141,10 @@ class TabItem extends Component { | |||
141 | {service.unreadIndirectMessageCount > 0 | 141 | {service.unreadIndirectMessageCount > 0 |
142 | && service.unreadDirectMessageCount === 0 | 142 | && service.unreadDirectMessageCount === 0 |
143 | && service.isIndirectMessageBadgeEnabled && ( | 143 | && service.isIndirectMessageBadgeEnabled && ( |
144 | <span className="tab-item__message-count is-indirect"> | 144 | <span className="tab-item__message-count is-indirect"> |
145 | • | 145 | • |
146 | </span> | 146 | </span> |
147 | )} | 147 | )} |
148 | </span> | 148 | </span> |
149 | ); | 149 | ); |
150 | } | 150 | } |
diff --git a/src/components/services/tabs/Tabbar.js b/src/components/services/tabs/Tabbar.js index ceb88c51c..dd5c2140f 100644 --- a/src/components/services/tabs/Tabbar.js +++ b/src/components/services/tabs/Tabbar.js | |||
@@ -4,8 +4,7 @@ import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | |||
4 | 4 | ||
5 | import TabBarSortableList from './TabBarSortableList'; | 5 | import TabBarSortableList from './TabBarSortableList'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class TabBar extends Component { |
8 | export default class TabBar extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | services: MobxPropTypes.arrayOrObservableArray.isRequired, | 9 | services: MobxPropTypes.arrayOrObservableArray.isRequired, |
11 | setActive: PropTypes.func.isRequired, | 10 | setActive: PropTypes.func.isRequired, |
diff --git a/src/components/settings/SettingsLayout.js b/src/components/settings/SettingsLayout.js index d5392ddba..3cb08feb1 100644 --- a/src/components/settings/SettingsLayout.js +++ b/src/components/settings/SettingsLayout.js | |||
@@ -5,8 +5,7 @@ import { observer } from 'mobx-react'; | |||
5 | import { oneOrManyChildElements } from '../../prop-types'; | 5 | import { oneOrManyChildElements } from '../../prop-types'; |
6 | import Appear from '../ui/effects/Appear'; | 6 | import Appear from '../ui/effects/Appear'; |
7 | 7 | ||
8 | @observer | 8 | export default @observer class SettingsLayout extends Component { |
9 | export default class SettingsLayout extends Component { | ||
10 | static propTypes = { | 9 | static propTypes = { |
11 | navigation: PropTypes.element.isRequired, | 10 | navigation: PropTypes.element.isRequired, |
12 | children: oneOrManyChildElements.isRequired, | 11 | children: oneOrManyChildElements.isRequired, |
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 4992f0913..06c7074dd 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js | |||
@@ -44,6 +44,10 @@ const messages = defineMessages({ | |||
44 | id: 'settings.account.accountType.premium', | 44 | id: 'settings.account.accountType.premium', |
45 | defaultMessage: '!!!Premium Supporter Account', | 45 | defaultMessage: '!!!Premium Supporter Account', |
46 | }, | 46 | }, |
47 | accountTypeEnterprise: { | ||
48 | id: 'settings.account.accountType.enterprise', | ||
49 | defaultMessage: '!!!Enterprise Account', | ||
50 | }, | ||
47 | accountEditButton: { | 51 | accountEditButton: { |
48 | id: 'settings.account.account.editButton', | 52 | id: 'settings.account.account.editButton', |
49 | defaultMessage: '!!!Edit Account', | 53 | defaultMessage: '!!!Edit Account', |
@@ -74,8 +78,7 @@ const messages = defineMessages({ | |||
74 | }, | 78 | }, |
75 | }); | 79 | }); |
76 | 80 | ||
77 | @observer | 81 | export default @observer class AccountDashboard extends Component { |
78 | export default class AccountDashboard extends Component { | ||
79 | static propTypes = { | 82 | static propTypes = { |
80 | user: MobxPropTypes.observableObject.isRequired, | 83 | user: MobxPropTypes.observableObject.isRequired, |
81 | orders: MobxPropTypes.arrayOrObservableArray.isRequired, | 84 | orders: MobxPropTypes.arrayOrObservableArray.isRequired, |
@@ -167,17 +170,19 @@ export default class AccountDashboard extends Component { | |||
167 | </h2> | 170 | </h2> |
168 | {user.organization && `${user.organization}, `} | 171 | {user.organization && `${user.organization}, `} |
169 | {user.email}<br /> | 172 | {user.email}<br /> |
170 | {!user.isPremium && ( | 173 | {!user.isEnterprise && !user.isPremium && ( |
171 | <span className="badge badge">{intl.formatMessage(messages.accountTypeBasic)}</span> | 174 | <span className="badge badge">{intl.formatMessage(messages.accountTypeBasic)}</span> |
172 | )} | 175 | )} |
173 | {user.isPremium && ( | 176 | {user.isPremium && ( |
174 | <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> | 177 | <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> |
175 | )} | 178 | )} |
179 | {user.isEnterprise && ( | ||
180 | <span className="badge badge--success">{intl.formatMessage(messages.accountTypeEnterprise)}</span> | ||
181 | )} | ||
176 | </div> | 182 | </div> |
177 | <Link to="/settings/user/edit" className="button"> | 183 | <Link to="/settings/user/edit" className="button"> |
178 | {intl.formatMessage(messages.accountEditButton)} | 184 | {intl.formatMessage(messages.accountEditButton)} |
179 | </Link> | 185 | </Link> |
180 | |||
181 | {user.emailValidated} | 186 | {user.emailValidated} |
182 | </div> | 187 | </div> |
183 | </div> | 188 | </div> |
@@ -230,6 +235,33 @@ export default class AccountDashboard extends Component { | |||
230 | ) | 235 | ) |
231 | )} | 236 | )} |
232 | 237 | ||
238 | {user.isEnterprise && ( | ||
239 | <div className="account"> | ||
240 | <div className="account__box"> | ||
241 | <h2>{user.company.name}</h2> | ||
242 | <p> | ||
243 | Technical contact: | ||
244 | <Link | ||
245 | className="link" | ||
246 | target="_blank" | ||
247 | to={`mailto:${user.company.contact.technical}?subject=Franz`} | ||
248 | > | ||
249 | {user.company.contact.technical} | ||
250 | </Link> | ||
251 | <br /> | ||
252 | General contact: | ||
253 | <Link | ||
254 | className="link" | ||
255 | target="_blank" | ||
256 | to={`mailto:${user.company.contact.default}?subject=Franz`} | ||
257 | > | ||
258 | {user.company.contact.default} | ||
259 | </Link> | ||
260 | </p> | ||
261 | </div> | ||
262 | </div> | ||
263 | )} | ||
264 | |||
233 | {user.isMiner && ( | 265 | {user.isMiner && ( |
234 | <div className="account franz-form"> | 266 | <div className="account franz-form"> |
235 | <div className="account__box account__box"> | 267 | <div className="account__box account__box"> |
@@ -244,7 +276,7 @@ export default class AccountDashboard extends Component { | |||
244 | </div> | 276 | </div> |
245 | )} | 277 | )} |
246 | 278 | ||
247 | {!user.isPremium && ( | 279 | {!user.isEnterprise && !user.isPremium && ( |
248 | isLoadingPlans ? ( | 280 | isLoadingPlans ? ( |
249 | <Loader /> | 281 | <Loader /> |
250 | ) : ( | 282 | ) : ( |
@@ -259,28 +291,29 @@ export default class AccountDashboard extends Component { | |||
259 | ) | 291 | ) |
260 | )} | 292 | )} |
261 | 293 | ||
262 | <div className="account franz-form"> | 294 | {!user.isEnterprise && ( |
263 | <div className="account__box"> | 295 | <div className="account franz-form"> |
264 | <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> | 296 | <div className="account__box"> |
265 | {!isDeleteAccountSuccessful && ( | 297 | <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> |
266 | <div className="account__subscription"> | 298 | {!isDeleteAccountSuccessful && ( |
267 | <p>{intl.formatMessage(messages.deleteInfo)}</p> | 299 | <div className="account__subscription"> |
268 | <Button | 300 | <p>{intl.formatMessage(messages.deleteInfo)}</p> |
269 | label={intl.formatMessage(messages.deleteAccount)} | 301 | <Button |
270 | buttonType="danger" | 302 | label={intl.formatMessage(messages.deleteAccount)} |
271 | onClick={() => deleteAccount()} | 303 | buttonType="danger" |
272 | loaded={!isLoadingDeleteAccount} | 304 | onClick={() => deleteAccount()} |
273 | /> | 305 | loaded={!isLoadingDeleteAccount} |
274 | </div> | 306 | /> |
275 | )} | 307 | </div> |
276 | {isDeleteAccountSuccessful && ( | 308 | )} |
277 | <p>{intl.formatMessage(messages.deleteEmailSent)}</p> | 309 | {isDeleteAccountSuccessful && ( |
278 | )} | 310 | <p>{intl.formatMessage(messages.deleteEmailSent)}</p> |
311 | )} | ||
312 | </div> | ||
279 | </div> | 313 | </div> |
280 | </div> | 314 | )} |
281 | </div> | 315 | </div> |
282 | )} | 316 | )} |
283 | |||
284 | </div> | 317 | </div> |
285 | <ReactTooltip place="right" type="dark" effect="solid" /> | 318 | <ReactTooltip place="right" type="dark" effect="solid" /> |
286 | </div> | 319 | </div> |
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js index 66539f324..b86d94ac7 100644 --- a/src/components/settings/navigation/SettingsNavigation.js +++ b/src/components/settings/navigation/SettingsNavigation.js | |||
@@ -1,6 +1,7 @@ | |||
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 { defineMessages, intlShape } from 'react-intl'; | 3 | import { defineMessages, intlShape } from 'react-intl'; |
4 | import { inject, observer } from 'mobx-react'; | ||
4 | 5 | ||
5 | import Link from '../../ui/Link'; | 6 | import Link from '../../ui/Link'; |
6 | 7 | ||
@@ -31,7 +32,7 @@ const messages = defineMessages({ | |||
31 | }, | 32 | }, |
32 | }); | 33 | }); |
33 | 34 | ||
34 | export default class SettingsNavigation extends Component { | 35 | export default @inject('stores') @observer class SettingsNavigation extends Component { |
35 | static propTypes = { | 36 | static propTypes = { |
36 | serviceCount: PropTypes.number.isRequired, | 37 | serviceCount: PropTypes.number.isRequired, |
37 | }; | 38 | }; |
@@ -92,3 +93,4 @@ export default class SettingsNavigation extends Component { | |||
92 | ); | 93 | ); |
93 | } | 94 | } |
94 | } | 95 | } |
96 | |||
diff --git a/src/components/settings/recipes/RecipeItem.js b/src/components/settings/recipes/RecipeItem.js index 7b2f64d26..dae8891b3 100644 --- a/src/components/settings/recipes/RecipeItem.js +++ b/src/components/settings/recipes/RecipeItem.js | |||
@@ -4,8 +4,7 @@ import { observer } from 'mobx-react'; | |||
4 | 4 | ||
5 | import RecipePreviewModel from '../../../models/RecipePreview'; | 5 | import RecipePreviewModel from '../../../models/RecipePreview'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class RecipeItem extends Component { |
8 | export default class RecipeItem extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | recipe: PropTypes.instanceOf(RecipePreviewModel).isRequired, | 9 | recipe: PropTypes.instanceOf(RecipePreviewModel).isRequired, |
11 | onClick: PropTypes.func.isRequired, | 10 | onClick: PropTypes.func.isRequired, |
diff --git a/src/components/settings/recipes/RecipesDashboard.js b/src/components/settings/recipes/RecipesDashboard.js index 4610c69a5..cd783200f 100644 --- a/src/components/settings/recipes/RecipesDashboard.js +++ b/src/components/settings/recipes/RecipesDashboard.js | |||
@@ -46,8 +46,7 @@ const messages = defineMessages({ | |||
46 | }, | 46 | }, |
47 | }); | 47 | }); |
48 | 48 | ||
49 | @observer | 49 | export default @observer class RecipesDashboard extends Component { |
50 | export default class RecipesDashboard extends Component { | ||
51 | static propTypes = { | 50 | static propTypes = { |
52 | recipes: MobxPropTypes.arrayOrObservableArray.isRequired, | 51 | recipes: MobxPropTypes.arrayOrObservableArray.isRequired, |
53 | isLoading: PropTypes.bool.isRequired, | 52 | isLoading: PropTypes.bool.isRequired, |
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index f6f2df2f3..d16ec35b8 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js | |||
@@ -15,6 +15,8 @@ import Toggle from '../../ui/Toggle'; | |||
15 | import Button from '../../ui/Button'; | 15 | import Button from '../../ui/Button'; |
16 | import ImageUpload from '../../ui/ImageUpload'; | 16 | import ImageUpload from '../../ui/ImageUpload'; |
17 | 17 | ||
18 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; | ||
19 | |||
18 | const messages = defineMessages({ | 20 | const messages = defineMessages({ |
19 | saveService: { | 21 | saveService: { |
20 | id: 'settings.service.form.saveButton', | 22 | id: 'settings.service.form.saveButton', |
@@ -92,10 +94,17 @@ const messages = defineMessages({ | |||
92 | id: 'settings.service.form.iconUpload', | 94 | id: 'settings.service.form.iconUpload', |
93 | defaultMessage: '!!!Drop your image, or click here', | 95 | defaultMessage: '!!!Drop your image, or click here', |
94 | }, | 96 | }, |
97 | headlineProxy: { | ||
98 | id: 'settings.service.form.proxy.headline', | ||
99 | defaultMessage: '!!!Proxy Settings', | ||
100 | }, | ||
101 | proxyInfo: { | ||
102 | id: 'settings.service.form.proxy.info', | ||
103 | defaultMessage: '!!!Proxy settings will not be synchronized with the Franz servers.', | ||
104 | }, | ||
95 | }); | 105 | }); |
96 | 106 | ||
97 | @observer | 107 | export default @observer class EditServiceForm extends Component { |
98 | export default class EditServiceForm extends Component { | ||
99 | static propTypes = { | 108 | static propTypes = { |
100 | recipe: PropTypes.instanceOf(Recipe).isRequired, | 109 | recipe: PropTypes.instanceOf(Recipe).isRequired, |
101 | service(props, propName) { | 110 | service(props, propName) { |
@@ -113,6 +122,8 @@ export default class EditServiceForm extends Component { | |||
113 | onDelete: PropTypes.func.isRequired, | 122 | onDelete: PropTypes.func.isRequired, |
114 | isSaving: PropTypes.bool.isRequired, | 123 | isSaving: PropTypes.bool.isRequired, |
115 | isDeleting: PropTypes.bool.isRequired, | 124 | isDeleting: PropTypes.bool.isRequired, |
125 | isProxyFeatureEnabled: PropTypes.bool.isRequired, | ||
126 | isProxyFeaturePremiumFeature: PropTypes.bool.isRequired, | ||
116 | }; | 127 | }; |
117 | 128 | ||
118 | static defaultProps = { | 129 | static defaultProps = { |
@@ -173,6 +184,8 @@ export default class EditServiceForm extends Component { | |||
173 | isSaving, | 184 | isSaving, |
174 | isDeleting, | 185 | isDeleting, |
175 | onDelete, | 186 | onDelete, |
187 | isProxyFeatureEnabled, | ||
188 | isProxyFeaturePremiumFeature, | ||
176 | } = this.props; | 189 | } = this.props; |
177 | const { intl } = this.context; | 190 | const { intl } = this.context; |
178 | 191 | ||
@@ -202,6 +215,8 @@ export default class EditServiceForm extends Component { | |||
202 | activeTabIndex = 2; | 215 | activeTabIndex = 2; |
203 | } | 216 | } |
204 | 217 | ||
218 | const requiresUserInput = !recipe.hasHostedOption && (recipe.hasTeamId || recipe.hasCustomUrl); | ||
219 | |||
205 | return ( | 220 | return ( |
206 | <div className="settings__main"> | 221 | <div className="settings__main"> |
207 | <div className="settings__header"> | 222 | <div className="settings__header"> |
@@ -303,6 +318,9 @@ export default class EditServiceForm extends Component { | |||
303 | 318 | ||
304 | <div className="settings__settings-group"> | 319 | <div className="settings__settings-group"> |
305 | <h3>{intl.formatMessage(messages.headlineGeneral)}</h3> | 320 | <h3>{intl.formatMessage(messages.headlineGeneral)}</h3> |
321 | {recipe.hasDarkMode && ( | ||
322 | <Toggle field={form.$('isDarkModeEnabled')} /> | ||
323 | )} | ||
306 | <Toggle field={form.$('isEnabled')} /> | 324 | <Toggle field={form.$('isEnabled')} /> |
307 | </div> | 325 | </div> |
308 | </div> | 326 | </div> |
@@ -314,6 +332,33 @@ export default class EditServiceForm extends Component { | |||
314 | /> | 332 | /> |
315 | </div> | 333 | </div> |
316 | </div> | 334 | </div> |
335 | |||
336 | {isProxyFeatureEnabled && ( | ||
337 | <PremiumFeatureContainer condition={isProxyFeaturePremiumFeature}> | ||
338 | <div className="settings__settings-group"> | ||
339 | <h3> | ||
340 | {intl.formatMessage(messages.headlineProxy)} | ||
341 | <span className="badge badge--success">beta</span> | ||
342 | </h3> | ||
343 | <Toggle field={form.$('proxy.isEnabled')} /> | ||
344 | {form.$('proxy.isEnabled').value && ( | ||
345 | <div> | ||
346 | <Input field={form.$('proxy.host')} /> | ||
347 | <Input field={form.$('proxy.user')} /> | ||
348 | <Input | ||
349 | field={form.$('proxy.password')} | ||
350 | showPasswordToggle | ||
351 | /> | ||
352 | <p> | ||
353 | <span className="mdi mdi-information" /> | ||
354 | {intl.formatMessage(messages.proxyInfo)} | ||
355 | </p> | ||
356 | </div> | ||
357 | )} | ||
358 | </div> | ||
359 | </PremiumFeatureContainer> | ||
360 | )} | ||
361 | |||
317 | {recipe.message && ( | 362 | {recipe.message && ( |
318 | <p className="settings__message"> | 363 | <p className="settings__message"> |
319 | <span className="mdi mdi-information" /> | 364 | <span className="mdi mdi-information" /> |
@@ -340,6 +385,7 @@ export default class EditServiceForm extends Component { | |||
340 | type="submit" | 385 | type="submit" |
341 | label={intl.formatMessage(messages.saveService)} | 386 | label={intl.formatMessage(messages.saveService)} |
342 | htmlForm="form" | 387 | htmlForm="form" |
388 | disabled={action !== 'edit' && form.isPristine && requiresUserInput} | ||
343 | /> | 389 | /> |
344 | )} | 390 | )} |
345 | </div> | 391 | </div> |
diff --git a/src/components/settings/services/ServiceError.js b/src/components/settings/services/ServiceError.js index 1f1512927..3cfc080d6 100644 --- a/src/components/settings/services/ServiceError.js +++ b/src/components/settings/services/ServiceError.js | |||
@@ -25,8 +25,7 @@ const messages = defineMessages({ | |||
25 | }, | 25 | }, |
26 | }); | 26 | }); |
27 | 27 | ||
28 | @observer | 28 | export default @observer class ServiceError extends Component { |
29 | export default class ServiceError extends Component { | ||
30 | static contextTypes = { | 29 | static contextTypes = { |
31 | intl: intlShape, | 30 | intl: intlShape, |
32 | }; | 31 | }; |
diff --git a/src/components/settings/services/ServiceItem.js b/src/components/settings/services/ServiceItem.js index 9743315b0..84080519b 100644 --- a/src/components/settings/services/ServiceItem.js +++ b/src/components/settings/services/ServiceItem.js | |||
@@ -22,8 +22,7 @@ const messages = defineMessages({ | |||
22 | }, | 22 | }, |
23 | }); | 23 | }); |
24 | 24 | ||
25 | @observer | 25 | export default @observer class ServiceItem extends Component { |
26 | export default class ServiceItem extends Component { | ||
27 | static propTypes = { | 26 | static propTypes = { |
28 | service: PropTypes.instanceOf(ServiceModel).isRequired, | 27 | service: PropTypes.instanceOf(ServiceModel).isRequired, |
29 | goToServiceForm: PropTypes.func.isRequired, | 28 | goToServiceForm: PropTypes.func.isRequired, |
diff --git a/src/components/settings/services/ServicesDashboard.js b/src/components/settings/services/ServicesDashboard.js index 20e451f01..e7dfaf106 100644 --- a/src/components/settings/services/ServicesDashboard.js +++ b/src/components/settings/services/ServicesDashboard.js | |||
@@ -49,8 +49,7 @@ const messages = defineMessages({ | |||
49 | }, | 49 | }, |
50 | }); | 50 | }); |
51 | 51 | ||
52 | @observer | 52 | export default @observer class ServicesDashboard extends Component { |
53 | export default class ServicesDashboard extends Component { | ||
54 | static propTypes = { | 53 | static propTypes = { |
55 | services: MobxPropTypes.arrayOrObservableArray.isRequired, | 54 | services: MobxPropTypes.arrayOrObservableArray.isRequired, |
56 | isLoading: PropTypes.bool.isRequired, | 55 | isLoading: PropTypes.bool.isRequired, |
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 97f535594..1ec2ab614 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js | |||
@@ -8,6 +8,7 @@ import Form from '../../../lib/Form'; | |||
8 | import Button from '../../ui/Button'; | 8 | import Button from '../../ui/Button'; |
9 | import Toggle from '../../ui/Toggle'; | 9 | import Toggle from '../../ui/Toggle'; |
10 | import Select from '../../ui/Select'; | 10 | import Select from '../../ui/Select'; |
11 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; | ||
11 | 12 | ||
12 | import { FRANZ_TRANSLATION } from '../../../config'; | 13 | import { FRANZ_TRANSLATION } from '../../../config'; |
13 | 14 | ||
@@ -82,8 +83,7 @@ const messages = defineMessages({ | |||
82 | }, | 83 | }, |
83 | }); | 84 | }); |
84 | 85 | ||
85 | @observer | 86 | export default @observer class EditSettingsForm extends Component { |
86 | export default class EditSettingsForm extends Component { | ||
87 | static propTypes = { | 87 | static propTypes = { |
88 | checkForUpdates: PropTypes.func.isRequired, | 88 | checkForUpdates: PropTypes.func.isRequired, |
89 | installUpdate: PropTypes.func.isRequired, | 89 | installUpdate: PropTypes.func.isRequired, |
@@ -96,6 +96,7 @@ export default class EditSettingsForm extends Component { | |||
96 | isClearingAllCache: PropTypes.bool.isRequired, | 96 | isClearingAllCache: PropTypes.bool.isRequired, |
97 | onClearAllCache: PropTypes.func.isRequired, | 97 | onClearAllCache: PropTypes.func.isRequired, |
98 | cacheSize: PropTypes.string.isRequired, | 98 | cacheSize: PropTypes.string.isRequired, |
99 | isSpellcheckerPremiumFeature: PropTypes.bool.isRequired, | ||
99 | }; | 100 | }; |
100 | 101 | ||
101 | static contextTypes = { | 102 | static contextTypes = { |
@@ -125,6 +126,7 @@ export default class EditSettingsForm extends Component { | |||
125 | isClearingAllCache, | 126 | isClearingAllCache, |
126 | onClearAllCache, | 127 | onClearAllCache, |
127 | cacheSize, | 128 | cacheSize, |
129 | isSpellcheckerPremiumFeature, | ||
128 | } = this.props; | 130 | } = this.props; |
129 | const { intl } = this.context; | 131 | const { intl } = this.context; |
130 | 132 | ||
@@ -161,10 +163,23 @@ export default class EditSettingsForm extends Component { | |||
161 | <h2 id="apperance">{intl.formatMessage(messages.headlineAppearance)}</h2> | 163 | <h2 id="apperance">{intl.formatMessage(messages.headlineAppearance)}</h2> |
162 | <Toggle field={form.$('showDisabledServices')} /> | 164 | <Toggle field={form.$('showDisabledServices')} /> |
163 | <Toggle field={form.$('showMessageBadgeWhenMuted')} /> | 165 | <Toggle field={form.$('showMessageBadgeWhenMuted')} /> |
166 | <Toggle field={form.$('darkMode')} /> | ||
164 | 167 | ||
165 | {/* Language */} | 168 | {/* Language */} |
166 | <h2 id="language">{intl.formatMessage(messages.headlineLanguage)}</h2> | 169 | <h2 id="language">{intl.formatMessage(messages.headlineLanguage)}</h2> |
167 | <Select field={form.$('locale')} showLabel={false} /> | 170 | <Select field={form.$('locale')} showLabel={false} /> |
171 | <PremiumFeatureContainer | ||
172 | condition={isSpellcheckerPremiumFeature} | ||
173 | > | ||
174 | <div> | ||
175 | <Toggle | ||
176 | field={form.$('enableSpellchecking')} | ||
177 | /> | ||
178 | {form.$('enableSpellchecking').value && ( | ||
179 | <Select field={form.$('spellcheckerLanguage')} /> | ||
180 | )} | ||
181 | </div> | ||
182 | </PremiumFeatureContainer> | ||
168 | <a | 183 | <a |
169 | href={FRANZ_TRANSLATION} | 184 | href={FRANZ_TRANSLATION} |
170 | target="_blank" | 185 | target="_blank" |
@@ -175,10 +190,8 @@ export default class EditSettingsForm extends Component { | |||
175 | 190 | ||
176 | {/* Advanced */} | 191 | {/* Advanced */} |
177 | <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2> | 192 | <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2> |
178 | <Toggle field={form.$('enableSpellchecking')} /> | ||
179 | <Toggle field={form.$('enableGPUAcceleration')} /> | 193 | <Toggle field={form.$('enableGPUAcceleration')} /> |
180 | <p className="settings__help">{intl.formatMessage(messages.enableGPUAccelerationInfo)}</p> | 194 | <p className="settings__help">{intl.formatMessage(messages.enableGPUAccelerationInfo)}</p> |
181 | {/* <Select field={form.$('spellcheckingLanguage')} /> */} | ||
182 | <div className="settings__settings-group"> | 195 | <div className="settings__settings-group"> |
183 | <h3> | 196 | <h3> |
184 | {intl.formatMessage(messages.subheadlineCache)} | 197 | {intl.formatMessage(messages.subheadlineCache)} |
diff --git a/src/components/settings/user/EditUserForm.js b/src/components/settings/user/EditUserForm.js index f36887fc2..b825f844a 100644 --- a/src/components/settings/user/EditUserForm.js +++ b/src/components/settings/user/EditUserForm.js | |||
@@ -39,13 +39,13 @@ const messages = defineMessages({ | |||
39 | }, | 39 | }, |
40 | }); | 40 | }); |
41 | 41 | ||
42 | @observer | 42 | export default @observer class EditServiceForm extends Component { |
43 | export default class EditServiceForm extends Component { | ||
44 | static propTypes = { | 43 | static propTypes = { |
45 | status: MobxPropTypes.observableArray.isRequired, | 44 | status: MobxPropTypes.observableArray.isRequired, |
46 | form: PropTypes.instanceOf(Form).isRequired, | 45 | form: PropTypes.instanceOf(Form).isRequired, |
47 | onSubmit: PropTypes.func.isRequired, | 46 | onSubmit: PropTypes.func.isRequired, |
48 | isSaving: PropTypes.bool.isRequired, | 47 | isSaving: PropTypes.bool.isRequired, |
48 | isEnterprise: PropTypes.bool.isRequired, | ||
49 | }; | 49 | }; |
50 | 50 | ||
51 | static defaultProps = { | 51 | static defaultProps = { |
@@ -72,6 +72,7 @@ export default class EditServiceForm extends Component { | |||
72 | // user, | 72 | // user, |
73 | status, | 73 | status, |
74 | form, | 74 | form, |
75 | isEnterprise, | ||
75 | isSaving, | 76 | isSaving, |
76 | } = this.props; | 77 | } = this.props; |
77 | const { intl } = this.context; | 78 | const { intl } = this.context; |
@@ -105,8 +106,10 @@ export default class EditServiceForm extends Component { | |||
105 | <Input field={form.$('lastname')} /> | 106 | <Input field={form.$('lastname')} /> |
106 | </div> | 107 | </div> |
107 | <Input field={form.$('email')} /> | 108 | <Input field={form.$('email')} /> |
108 | <Radio field={form.$('accountType')} /> | 109 | {!isEnterprise && ( |
109 | {form.$('accountType').value === 'company' && ( | 110 | <Radio field={form.$('accountType')} /> |
111 | )} | ||
112 | {!isEnterprise && form.$('accountType').value === 'company' && ( | ||
110 | <Input field={form.$('organization')} /> | 113 | <Input field={form.$('organization')} /> |
111 | )} | 114 | )} |
112 | <h2>{intl.formatMessage(messages.headlinePassword)}</h2> | 115 | <h2>{intl.formatMessage(messages.headlinePassword)}</h2> |
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js index dd350479d..12e8471ff 100644 --- a/src/components/subscription/SubscriptionForm.js +++ b/src/components/subscription/SubscriptionForm.js | |||
@@ -36,25 +36,21 @@ const messages = defineMessages({ | |||
36 | defaultMessage: '!!!The Franz Premium Supporter Account includes', | 36 | defaultMessage: '!!!The Franz Premium Supporter Account includes', |
37 | }, | 37 | }, |
38 | features: { | 38 | features: { |
39 | unlimitedServices: { | ||
40 | id: 'subscription.features.unlimitedServices', | ||
41 | defaultMessage: '!!!Add unlimited services', | ||
42 | }, | ||
43 | onpremise: { | 39 | onpremise: { |
44 | id: 'subscription.features.onpremise', | 40 | id: 'subscription.features.onpremise.mattermost', |
45 | defaultMessage: '!!!Add on-premise/hosted services like HipChat', | 41 | defaultMessage: '!!!Add on-premise/hosted services like Mattermost', |
46 | }, | 42 | }, |
47 | customServices: { | 43 | noInterruptions: { |
48 | id: 'subscription.features.customServices', | 44 | id: 'subscription.features.noInterruptions', |
49 | defaultMessage: '!!!Add your custom services', | 45 | defaultMessage: '!!!No app delays & nagging to upgrade license', |
50 | }, | 46 | }, |
51 | encryptedSync: { | 47 | proxy: { |
52 | id: 'subscription.features.encryptedSync', | 48 | id: 'subscription.features.proxy', |
53 | defaultMessage: '!!!Encrypted session synchronization', | 49 | defaultMessage: '!!!Proxy support for services', |
54 | }, | 50 | }, |
55 | vpn: { | 51 | spellchecker: { |
56 | id: 'subscription.features.vpn', | 52 | id: 'subscription.features.spellchecker', |
57 | defaultMessage: '!!!Proxy & VPN support', | 53 | defaultMessage: '!!!Support for Spellchecker', |
58 | }, | 54 | }, |
59 | ads: { | 55 | ads: { |
60 | id: 'subscription.features.ads', | 56 | id: 'subscription.features.ads', |
@@ -71,8 +67,7 @@ const messages = defineMessages({ | |||
71 | }, | 67 | }, |
72 | }); | 68 | }); |
73 | 69 | ||
74 | @observer | 70 | export default @observer class SubscriptionForm extends Component { |
75 | export default class SubscriptionForm extends Component { | ||
76 | static propTypes = { | 71 | static propTypes = { |
77 | plan: MobxPropTypes.objectOrObservableObject.isRequired, | 72 | plan: MobxPropTypes.objectOrObservableObject.isRequired, |
78 | isLoading: PropTypes.bool.isRequired, | 73 | isLoading: PropTypes.bool.isRequired, |
@@ -171,16 +166,13 @@ export default class SubscriptionForm extends Component { | |||
171 | <ul className="subscription__premium-features"> | 166 | <ul className="subscription__premium-features"> |
172 | <li>{intl.formatMessage(messages.features.onpremise)}</li> | 167 | <li>{intl.formatMessage(messages.features.onpremise)}</li> |
173 | <li> | 168 | <li> |
174 | {intl.formatMessage(messages.features.encryptedSync)} | 169 | {intl.formatMessage(messages.features.noInterruptions)} |
175 | <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span> | ||
176 | </li> | 170 | </li> |
177 | <li> | 171 | <li> |
178 | {intl.formatMessage(messages.features.customServices)} | 172 | {intl.formatMessage(messages.features.spellchecker)} |
179 | <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span> | ||
180 | </li> | 173 | </li> |
181 | <li> | 174 | <li> |
182 | {intl.formatMessage(messages.features.vpn)} | 175 | {intl.formatMessage(messages.features.proxy)} |
183 | <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span> | ||
184 | </li> | 176 | </li> |
185 | <li> | 177 | <li> |
186 | {intl.formatMessage(messages.features.ads)} | 178 | {intl.formatMessage(messages.features.ads)} |
diff --git a/src/components/subscription/SubscriptionPopup.js b/src/components/subscription/SubscriptionPopup.js index 528d02907..f3c63e7ee 100644 --- a/src/components/subscription/SubscriptionPopup.js +++ b/src/components/subscription/SubscriptionPopup.js | |||
@@ -17,8 +17,7 @@ const messages = defineMessages({ | |||
17 | }, | 17 | }, |
18 | }); | 18 | }); |
19 | 19 | ||
20 | @observer | 20 | export default @observer class SubscriptionPopup extends Component { |
21 | export default class SubscriptionPopup extends Component { | ||
22 | static propTypes = { | 21 | static propTypes = { |
23 | url: PropTypes.string.isRequired, | 22 | url: PropTypes.string.isRequired, |
24 | closeWindow: PropTypes.func.isRequired, | 23 | closeWindow: PropTypes.func.isRequired, |
diff --git a/src/components/ui/Button.js b/src/components/ui/Button.js index 554206cb7..309e05bb4 100644 --- a/src/components/ui/Button.js +++ b/src/components/ui/Button.js | |||
@@ -4,8 +4,7 @@ import { observer } from 'mobx-react'; | |||
4 | import Loader from 'react-loader'; | 4 | import Loader from 'react-loader'; |
5 | import classnames from 'classnames'; | 5 | import classnames from 'classnames'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class Button extends Component { |
8 | export default class Button extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | className: PropTypes.string, | 9 | className: PropTypes.string, |
11 | label: PropTypes.string.isRequired, | 10 | label: PropTypes.string.isRequired, |
diff --git a/src/components/ui/ImageUpload.js b/src/components/ui/ImageUpload.js index 81c3b8da6..76f77d631 100644 --- a/src/components/ui/ImageUpload.js +++ b/src/components/ui/ImageUpload.js | |||
@@ -2,12 +2,10 @@ import React, { Component } from 'react'; | |||
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
4 | import { Field } from 'mobx-react-form'; | 4 | import { Field } from 'mobx-react-form'; |
5 | // import Loader from 'react-loader'; | ||
6 | import classnames from 'classnames'; | 5 | import classnames from 'classnames'; |
7 | import Dropzone from 'react-dropzone'; | 6 | import Dropzone from 'react-dropzone'; |
8 | 7 | ||
9 | @observer | 8 | export default @observer class ImageUpload extends Component { |
10 | export default class ImageUpload extends Component { | ||
11 | static propTypes = { | 9 | static propTypes = { |
12 | field: PropTypes.instanceOf(Field).isRequired, | 10 | field: PropTypes.instanceOf(Field).isRequired, |
13 | className: PropTypes.string, | 11 | className: PropTypes.string, |
diff --git a/src/components/ui/InfoBar.js b/src/components/ui/InfoBar.js index 84a5f1446..94a1ddf76 100644 --- a/src/components/ui/InfoBar.js +++ b/src/components/ui/InfoBar.js | |||
@@ -7,8 +7,7 @@ import Loader from 'react-loader'; | |||
7 | // import { oneOrManyChildElements } from '../../prop-types'; | 7 | // import { oneOrManyChildElements } from '../../prop-types'; |
8 | import Appear from '../ui/effects/Appear'; | 8 | import Appear from '../ui/effects/Appear'; |
9 | 9 | ||
10 | @observer | 10 | export default @observer class InfoBar extends Component { |
11 | export default class InfoBar extends Component { | ||
12 | static propTypes = { | 11 | static propTypes = { |
13 | // eslint-disable-next-line | 12 | // eslint-disable-next-line |
14 | children: PropTypes.any.isRequired, | 13 | children: PropTypes.any.isRequired, |
diff --git a/src/components/ui/Infobox.js b/src/components/ui/Infobox.js index 2d063c7ef..77051f567 100644 --- a/src/components/ui/Infobox.js +++ b/src/components/ui/Infobox.js | |||
@@ -4,8 +4,7 @@ import { observer } from 'mobx-react'; | |||
4 | import classnames from 'classnames'; | 4 | import classnames from 'classnames'; |
5 | import Loader from 'react-loader'; | 5 | import Loader from 'react-loader'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class Infobox extends Component { |
8 | export default class Infobox extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | children: PropTypes.any.isRequired, // eslint-disable-line | 9 | children: PropTypes.any.isRequired, // eslint-disable-line |
11 | icon: PropTypes.string, | 10 | icon: PropTypes.string, |
diff --git a/src/components/ui/Input.js b/src/components/ui/Input.js index 0bb9f23bf..7bf6e1b00 100644 --- a/src/components/ui/Input.js +++ b/src/components/ui/Input.js | |||
@@ -6,8 +6,7 @@ import classnames from 'classnames'; | |||
6 | 6 | ||
7 | import { scorePassword as scorePasswordFunc } from '../../helpers/password-helpers'; | 7 | import { scorePassword as scorePasswordFunc } from '../../helpers/password-helpers'; |
8 | 8 | ||
9 | @observer | 9 | export default @observer class Input extends Component { |
10 | export default class Input extends Component { | ||
11 | static propTypes = { | 10 | static propTypes = { |
12 | field: PropTypes.instanceOf(Field).isRequired, | 11 | field: PropTypes.instanceOf(Field).isRequired, |
13 | className: PropTypes.string, | 12 | className: PropTypes.string, |
@@ -97,6 +96,7 @@ export default class Input extends Component { | |||
97 | onBlur={field.onBlur} | 96 | onBlur={field.onBlur} |
98 | onFocus={field.onFocus} | 97 | onFocus={field.onFocus} |
99 | ref={(element) => { this.inputElement = element; }} | 98 | ref={(element) => { this.inputElement = element; }} |
99 | disabled={field.disabled} | ||
100 | /> | 100 | /> |
101 | {suffix && ( | 101 | {suffix && ( |
102 | <span className="franz-form__input-suffix">{suffix}</span> | 102 | <span className="franz-form__input-suffix">{suffix}</span> |
diff --git a/src/components/ui/Link.js b/src/components/ui/Link.js index f5da921fa..0602290f1 100644 --- a/src/components/ui/Link.js +++ b/src/components/ui/Link.js | |||
@@ -9,9 +9,7 @@ import { oneOrManyChildElements } from '../../prop-types'; | |||
9 | import { matchRoute } from '../../helpers/routing-helpers'; | 9 | import { matchRoute } from '../../helpers/routing-helpers'; |
10 | 10 | ||
11 | // TODO: create container component for this component | 11 | // TODO: create container component for this component |
12 | 12 | export default @inject('stores') @observer class Link extends Component { | |
13 | @inject('stores') @observer | ||
14 | export default class Link extends Component { | ||
15 | onClick(e) { | 13 | onClick(e) { |
16 | if (this.props.target === '_blank') { | 14 | if (this.props.target === '_blank') { |
17 | e.preventDefault(); | 15 | e.preventDefault(); |
diff --git a/src/components/ui/PremiumFeatureContainer/index.js b/src/components/ui/PremiumFeatureContainer/index.js new file mode 100644 index 000000000..73984be94 --- /dev/null +++ b/src/components/ui/PremiumFeatureContainer/index.js | |||
@@ -0,0 +1,76 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import { inject, observer } from 'mobx-react'; | ||
3 | import PropTypes from 'prop-types'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | import injectSheet from 'react-jss'; | ||
6 | |||
7 | import { oneOrManyChildElements } from '../../../prop-types'; | ||
8 | |||
9 | import UserStore from '../../../stores/UserStore'; | ||
10 | |||
11 | import styles from './styles'; | ||
12 | |||
13 | const messages = defineMessages({ | ||
14 | action: { | ||
15 | id: 'premiumFeature.button.upgradeAccount', | ||
16 | defaultMessage: '!!!Upgrade account', | ||
17 | }, | ||
18 | }); | ||
19 | |||
20 | export default @inject('stores', 'actions') @injectSheet(styles) @observer class PremiumFeatureContainer extends Component { | ||
21 | static propTypes = { | ||
22 | classes: PropTypes.object.isRequired, | ||
23 | condition: PropTypes.bool, | ||
24 | }; | ||
25 | |||
26 | static defaultProps = { | ||
27 | condition: true, | ||
28 | }; | ||
29 | |||
30 | static contextTypes = { | ||
31 | intl: intlShape, | ||
32 | }; | ||
33 | |||
34 | render() { | ||
35 | const { | ||
36 | classes, | ||
37 | children, | ||
38 | actions, | ||
39 | condition, | ||
40 | stores, | ||
41 | } = this.props; | ||
42 | |||
43 | const { intl } = this.context; | ||
44 | |||
45 | return !stores.user.data.isPremium && !!condition ? ( | ||
46 | <div className={classes.container}> | ||
47 | <div className={classes.titleContainer}> | ||
48 | <p className={classes.title}>Premium Feature</p> | ||
49 | <button | ||
50 | className={classes.actionButton} | ||
51 | type="button" | ||
52 | onClick={() => actions.ui.openSettings({ path: 'user' })} | ||
53 | > | ||
54 | {intl.formatMessage(messages.action)} | ||
55 | </button> | ||
56 | </div> | ||
57 | <div className={classes.content}> | ||
58 | {children} | ||
59 | </div> | ||
60 | </div> | ||
61 | ) : children; | ||
62 | } | ||
63 | } | ||
64 | |||
65 | PremiumFeatureContainer.wrappedComponent.propTypes = { | ||
66 | children: oneOrManyChildElements.isRequired, | ||
67 | stores: PropTypes.shape({ | ||
68 | user: PropTypes.instanceOf(UserStore).isRequired, | ||
69 | }).isRequired, | ||
70 | actions: PropTypes.shape({ | ||
71 | ui: PropTypes.shape({ | ||
72 | openSettings: PropTypes.func.isRequired, | ||
73 | }).isRequired, | ||
74 | }).isRequired, | ||
75 | }; | ||
76 | |||
diff --git a/src/components/ui/PremiumFeatureContainer/styles.js b/src/components/ui/PremiumFeatureContainer/styles.js new file mode 100644 index 000000000..16c40d0ec --- /dev/null +++ b/src/components/ui/PremiumFeatureContainer/styles.js | |||
@@ -0,0 +1,31 @@ | |||
1 | export default theme => ({ | ||
2 | container: { | ||
3 | background: theme.colorSubscriptionContainerBackground, | ||
4 | border: theme.colorSubscriptionContainerBorder, | ||
5 | margin: [0, 0, 20, -20], | ||
6 | padding: 20, | ||
7 | 'border-radius': theme.borderRadius, | ||
8 | }, | ||
9 | titleContainer: { | ||
10 | display: 'flex', | ||
11 | }, | ||
12 | title: { | ||
13 | 'font-weight': 'bold', | ||
14 | color: theme.colorSubscriptionContainerTitle, | ||
15 | }, | ||
16 | actionButton: { | ||
17 | background: theme.colorSubscriptionContainerActionButtonBackground, | ||
18 | color: theme.colorSubscriptionContainerActionButtonColor, | ||
19 | 'margin-left': 'auto', | ||
20 | 'border-radius': theme.borderRadiusSmall, | ||
21 | padding: [2, 4], | ||
22 | 'font-size': 12, | ||
23 | }, | ||
24 | content: { | ||
25 | opacity: 0.5, | ||
26 | 'margin-top': 20, | ||
27 | '& :last-child': { | ||
28 | 'margin-bottom': 0, | ||
29 | }, | ||
30 | }, | ||
31 | }); | ||
diff --git a/src/components/ui/Radio.js b/src/components/ui/Radio.js index b54cfc820..63ca6f9b8 100644 --- a/src/components/ui/Radio.js +++ b/src/components/ui/Radio.js | |||
@@ -4,8 +4,7 @@ import { observer } from 'mobx-react'; | |||
4 | import { Field } from 'mobx-react-form'; | 4 | import { Field } from 'mobx-react-form'; |
5 | import classnames from 'classnames'; | 5 | import classnames from 'classnames'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class Radio extends Component { |
8 | export default class Radio extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | field: PropTypes.instanceOf(Field).isRequired, | 9 | field: PropTypes.instanceOf(Field).isRequired, |
11 | className: PropTypes.string, | 10 | className: PropTypes.string, |
diff --git a/src/components/ui/SearchInput.js b/src/components/ui/SearchInput.js index a94cde201..5a9571d27 100644 --- a/src/components/ui/SearchInput.js +++ b/src/components/ui/SearchInput.js | |||
@@ -5,8 +5,7 @@ import classnames from 'classnames'; | |||
5 | import uuidv1 from 'uuid/v1'; | 5 | import uuidv1 from 'uuid/v1'; |
6 | import { debounce } from 'lodash'; | 6 | import { debounce } from 'lodash'; |
7 | 7 | ||
8 | @observer | 8 | export default @observer class SearchInput extends Component { |
9 | export default class SearchInput extends Component { | ||
10 | static propTypes = { | 9 | static propTypes = { |
11 | value: PropTypes.string, | 10 | value: PropTypes.string, |
12 | placeholder: PropTypes.string, | 11 | placeholder: PropTypes.string, |
diff --git a/src/components/ui/Select.js b/src/components/ui/Select.js index 2a877af3e..abcad417e 100644 --- a/src/components/ui/Select.js +++ b/src/components/ui/Select.js | |||
@@ -4,8 +4,7 @@ import { observer } from 'mobx-react'; | |||
4 | import { Field } from 'mobx-react-form'; | 4 | import { Field } from 'mobx-react-form'; |
5 | import classnames from 'classnames'; | 5 | import classnames from 'classnames'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class Select extends Component { |
8 | export default class Select extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | field: PropTypes.instanceOf(Field).isRequired, | 9 | field: PropTypes.instanceOf(Field).isRequired, |
11 | className: PropTypes.string, | 10 | className: PropTypes.string, |
diff --git a/src/components/ui/StatusBarTargetUrl.js b/src/components/ui/StatusBarTargetUrl.js index b7b198f42..4285a343c 100644 --- a/src/components/ui/StatusBarTargetUrl.js +++ b/src/components/ui/StatusBarTargetUrl.js | |||
@@ -5,8 +5,7 @@ import classnames from 'classnames'; | |||
5 | 5 | ||
6 | import Appear from '../ui/effects/Appear'; | 6 | import Appear from '../ui/effects/Appear'; |
7 | 7 | ||
8 | @observer | 8 | export default @observer class StatusBarTargetUrl extends Component { |
9 | export default class StatusBarTargetUrl extends Component { | ||
10 | static propTypes = { | 9 | static propTypes = { |
11 | className: PropTypes.string, | 10 | className: PropTypes.string, |
12 | text: PropTypes.string, | 11 | text: PropTypes.string, |
diff --git a/src/components/ui/Tabs/Tabs.js b/src/components/ui/Tabs/Tabs.js index 50397f9bb..12f650ffd 100644 --- a/src/components/ui/Tabs/Tabs.js +++ b/src/components/ui/Tabs/Tabs.js | |||
@@ -5,8 +5,7 @@ import classnames from 'classnames'; | |||
5 | 5 | ||
6 | import { oneOrManyChildElements } from '../../../prop-types'; | 6 | import { oneOrManyChildElements } from '../../../prop-types'; |
7 | 7 | ||
8 | @observer | 8 | export default @observer class Tab extends Component { |
9 | export default class Tab extends Component { | ||
10 | static propTypes = { | 9 | static propTypes = { |
11 | children: oneOrManyChildElements.isRequired, | 10 | children: oneOrManyChildElements.isRequired, |
12 | active: PropTypes.number, | 11 | active: PropTypes.number, |
diff --git a/src/components/ui/Toggle.js b/src/components/ui/Toggle.js index 62d46393e..78fb77cbe 100644 --- a/src/components/ui/Toggle.js +++ b/src/components/ui/Toggle.js | |||
@@ -4,17 +4,18 @@ import { observer } from 'mobx-react'; | |||
4 | import classnames from 'classnames'; | 4 | import classnames from 'classnames'; |
5 | import { Field } from 'mobx-react-form'; | 5 | import { Field } from 'mobx-react-form'; |
6 | 6 | ||
7 | @observer | 7 | export default @observer class Toggle extends Component { |
8 | export default class Toggle extends Component { | ||
9 | static propTypes = { | 8 | static propTypes = { |
10 | field: PropTypes.instanceOf(Field).isRequired, | 9 | field: PropTypes.instanceOf(Field).isRequired, |
11 | className: PropTypes.string, | 10 | className: PropTypes.string, |
12 | showLabel: PropTypes.bool, | 11 | showLabel: PropTypes.bool, |
12 | disabled: PropTypes.bool, | ||
13 | }; | 13 | }; |
14 | 14 | ||
15 | static defaultProps = { | 15 | static defaultProps = { |
16 | className: '', | 16 | className: '', |
17 | showLabel: true, | 17 | showLabel: true, |
18 | disabled: false, | ||
18 | }; | 19 | }; |
19 | 20 | ||
20 | onChange(e) { | 21 | onChange(e) { |
@@ -28,6 +29,7 @@ export default class Toggle extends Component { | |||
28 | field, | 29 | field, |
29 | className, | 30 | className, |
30 | showLabel, | 31 | showLabel, |
32 | disabled, | ||
31 | } = this.props; | 33 | } = this.props; |
32 | 34 | ||
33 | if (field.value === '' && field.default !== '') { | 35 | if (field.value === '' && field.default !== '') { |
@@ -39,6 +41,7 @@ export default class Toggle extends Component { | |||
39 | className={classnames([ | 41 | className={classnames([ |
40 | 'franz-form__field', | 42 | 'franz-form__field', |
41 | 'franz-form__toggle-wrapper', | 43 | 'franz-form__toggle-wrapper', |
44 | 'franz-form__toggle-disabled', | ||
42 | className, | 45 | className, |
43 | ])} | 46 | ])} |
44 | > | 47 | > |
@@ -56,7 +59,7 @@ export default class Toggle extends Component { | |||
56 | name={field.name} | 59 | name={field.name} |
57 | value={field.name} | 60 | value={field.name} |
58 | checked={field.value} | 61 | checked={field.value} |
59 | onChange={e => this.onChange(e)} | 62 | onChange={e => (!disabled ? this.onChange(e) : null)} |
60 | /> | 63 | /> |
61 | </label> | 64 | </label> |
62 | {field.error && <div className={field.error}>{field.error}</div>} | 65 | {field.error && <div className={field.error}>{field.error}</div>} |
diff --git a/src/config.js b/src/config.js index 77fa92eca..08dbb85f3 100644 --- a/src/config.js +++ b/src/config.js | |||
@@ -7,7 +7,7 @@ export const CHECK_INTERVAL = 1000 * 3600; // How often should we perform checks | |||
7 | export const LOCAL_API = 'http://localhost:3000'; | 7 | export const LOCAL_API = 'http://localhost:3000'; |
8 | export const DEV_API = 'https://dev.franzinfra.com'; | 8 | export const DEV_API = 'https://dev.franzinfra.com'; |
9 | export const LIVE_API = 'https://api.franzinfra.com'; | 9 | export const LIVE_API = 'https://api.franzinfra.com'; |
10 | export const GA_ID = 'UA-74126766-6'; | 10 | export const GA_ID = 'UA-74126766-10'; |
11 | 11 | ||
12 | export const DEFAULT_APP_SETTINGS = { | 12 | export const DEFAULT_APP_SETTINGS = { |
13 | autoLaunchInBackground: false, | 13 | autoLaunchInBackground: false, |
@@ -17,14 +17,35 @@ export const DEFAULT_APP_SETTINGS = { | |||
17 | showDisabledServices: true, | 17 | showDisabledServices: true, |
18 | showMessageBadgeWhenMuted: true, | 18 | showMessageBadgeWhenMuted: true, |
19 | enableSpellchecking: true, | 19 | enableSpellchecking: true, |
20 | spellcheckerLanguage: 'en-us', | ||
21 | darkMode: false, | ||
20 | locale: '', | 22 | locale: '', |
21 | fallbackLocale: 'en-US', | 23 | fallbackLocale: 'en-US', |
22 | beta: false, | 24 | beta: false, |
23 | isAppMuted: false, | 25 | isAppMuted: false, |
24 | enableGPUAcceleration: true, | 26 | enableGPUAcceleration: true, |
27 | serviceLimit: 5, | ||
25 | }; | 28 | }; |
26 | 29 | ||
27 | export const FRANZ_SERVICE_REQUEST = 'http://bit.ly/franz-service-request'; | 30 | export const DEFAULT_FEATURES_CONFIG = { |
28 | export const FRANZ_TRANSLATION = 'http://bit.ly/franz-translate'; | 31 | isSpellcheckerPremiumFeature: false, |
32 | needToWaitToProceed: false, | ||
33 | needToWaitToProceedConfig: { | ||
34 | delayOffset: 3600000, | ||
35 | wait: 10000, | ||
36 | }, | ||
37 | isServiceProxyEnabled: false, | ||
38 | isServiceProxyPremiumFeature: true, | ||
39 | }; | ||
40 | |||
41 | export const FRANZ_SERVICE_REQUEST = 'hhttp://bit.ly/franz-plugin-docs'; | ||
42 | export const FRANZ_TRANSLATION = 'https://bit.ly/franz-translate'; | ||
43 | |||
44 | export const FILE_SYSTEM_SETTINGS_TYPES = [ | ||
45 | 'app', | ||
46 | 'proxy', | ||
47 | ]; | ||
48 | |||
49 | export const SETTINGS_PATH = path.join(app.getPath('userData'), 'config'); | ||
29 | 50 | ||
30 | export const SETTINGS_PATH = path.join(app.getPath('userData'), 'config', 'settings.json'); | 51 | export const DICTIONARY_PATH = path.join(app.getPath('userData'), 'dicts'); |
diff --git a/src/containers/auth/AuthLayoutContainer.js b/src/containers/auth/AuthLayoutContainer.js index 004054fdd..b73598f3d 100644 --- a/src/containers/auth/AuthLayoutContainer.js +++ b/src/containers/auth/AuthLayoutContainer.js | |||
@@ -5,11 +5,11 @@ import { inject, observer } from 'mobx-react'; | |||
5 | import AuthLayout from '../../components/auth/AuthLayout'; | 5 | import AuthLayout from '../../components/auth/AuthLayout'; |
6 | import AppStore from '../../stores/AppStore'; | 6 | import AppStore from '../../stores/AppStore'; |
7 | import GlobalErrorStore from '../../stores/GlobalErrorStore'; | 7 | import GlobalErrorStore from '../../stores/GlobalErrorStore'; |
8 | import AppLoader from '../../components/ui/AppLoader'; | ||
8 | 9 | ||
9 | import { oneOrManyChildElements } from '../../prop-types'; | 10 | import { oneOrManyChildElements } from '../../prop-types'; |
10 | 11 | ||
11 | @inject('stores', 'actions') @observer | 12 | export default @inject('stores', 'actions') @observer class AuthLayoutContainer extends Component { |
12 | export default class AuthLayoutContainer extends Component { | ||
13 | static propTypes = { | 13 | static propTypes = { |
14 | children: oneOrManyChildElements.isRequired, | 14 | children: oneOrManyChildElements.isRequired, |
15 | location: PropTypes.shape({ | 15 | location: PropTypes.shape({ |
@@ -19,14 +19,27 @@ export default class AuthLayoutContainer extends Component { | |||
19 | 19 | ||
20 | render() { | 20 | render() { |
21 | const { stores, actions, children, location } = this.props; | 21 | const { stores, actions, children, location } = this.props; |
22 | const { app, features, globalError } = stores; | ||
23 | |||
24 | const isLoadingBaseFeatures = features.defaultFeaturesRequest.isExecuting | ||
25 | && !features.defaultFeaturesRequest.wasExecuted; | ||
26 | |||
27 | if (isLoadingBaseFeatures) { | ||
28 | return ( | ||
29 | <AppLoader /> | ||
30 | ); | ||
31 | } | ||
32 | |||
22 | return ( | 33 | return ( |
23 | <AuthLayout | 34 | <AuthLayout |
24 | error={stores.globalError.response} | 35 | error={globalError.response} |
25 | pathname={location.pathname} | 36 | pathname={location.pathname} |
26 | isOnline={stores.app.isOnline} | 37 | isOnline={app.isOnline} |
27 | isAPIHealthy={!stores.app.healthCheckRequest.isError} | 38 | isAPIHealthy={!app.healthCheckRequest.isError} |
28 | retryHealthCheck={actions.app.healthCheck} | 39 | retryHealthCheck={actions.app.healthCheck} |
29 | isHealthCheckLoading={stores.app.healthCheckRequest.isExecuting} | 40 | isHealthCheckLoading={app.healthCheckRequest.isExecuting} |
41 | isFullScreen={app.isFullScreen} | ||
42 | darkMode={app.isSystemDarkModeEnabled} | ||
30 | > | 43 | > |
31 | {children} | 44 | {children} |
32 | </AuthLayout> | 45 | </AuthLayout> |
diff --git a/src/containers/auth/ImportScreen.js b/src/containers/auth/ImportScreen.js index ddd56ffb6..fc46f8b54 100644 --- a/src/containers/auth/ImportScreen.js +++ b/src/containers/auth/ImportScreen.js | |||
@@ -5,8 +5,7 @@ import Import from '../../components/auth/Import'; | |||
5 | import UserStore from '../../stores/UserStore'; | 5 | import UserStore from '../../stores/UserStore'; |
6 | import { gaPage } from '../../lib/analytics'; | 6 | import { gaPage } from '../../lib/analytics'; |
7 | 7 | ||
8 | @inject('stores', 'actions') @observer | 8 | export default @inject('stores', 'actions') @observer class ImportScreen extends Component { |
9 | export default class ImportScreen extends Component { | ||
10 | componentDidMount() { | 9 | componentDidMount() { |
11 | gaPage('Auth/Import'); | 10 | gaPage('Auth/Import'); |
12 | } | 11 | } |
diff --git a/src/containers/auth/InviteScreen.js b/src/containers/auth/InviteScreen.js index 059888c99..26bf97038 100644 --- a/src/containers/auth/InviteScreen.js +++ b/src/containers/auth/InviteScreen.js | |||
@@ -4,8 +4,7 @@ import { inject, observer } from 'mobx-react'; | |||
4 | import Invite from '../../components/auth/Invite'; | 4 | import Invite from '../../components/auth/Invite'; |
5 | import { gaPage } from '../../lib/analytics'; | 5 | import { gaPage } from '../../lib/analytics'; |
6 | 6 | ||
7 | @inject('stores', 'actions') @observer | 7 | export default @inject('stores', 'actions') @observer class InviteScreen extends Component { |
8 | export default class InviteScreen extends Component { | ||
9 | componentDidMount() { | 8 | componentDidMount() { |
10 | gaPage('Auth/Invite'); | 9 | gaPage('Auth/Invite'); |
11 | } | 10 | } |
diff --git a/src/containers/auth/LoginScreen.js b/src/containers/auth/LoginScreen.js index 9e22c5141..865bd38f8 100644 --- a/src/containers/auth/LoginScreen.js +++ b/src/containers/auth/LoginScreen.js | |||
@@ -7,8 +7,7 @@ import { gaPage } from '../../lib/analytics'; | |||
7 | 7 | ||
8 | import { globalError as globalErrorPropType } from '../../prop-types'; | 8 | import { globalError as globalErrorPropType } from '../../prop-types'; |
9 | 9 | ||
10 | @inject('stores', 'actions') @observer | 10 | export default @inject('stores', 'actions') @observer class LoginScreen extends Component { |
11 | export default class LoginScreen extends Component { | ||
12 | static propTypes = { | 11 | static propTypes = { |
13 | error: globalErrorPropType.isRequired, | 12 | error: globalErrorPropType.isRequired, |
14 | }; | 13 | }; |
diff --git a/src/containers/auth/PasswordScreen.js b/src/containers/auth/PasswordScreen.js index d88cb08e6..236fd2031 100644 --- a/src/containers/auth/PasswordScreen.js +++ b/src/containers/auth/PasswordScreen.js | |||
@@ -5,8 +5,7 @@ import Password from '../../components/auth/Password'; | |||
5 | import UserStore from '../../stores/UserStore'; | 5 | import UserStore from '../../stores/UserStore'; |
6 | import { gaPage } from '../../lib/analytics'; | 6 | import { gaPage } from '../../lib/analytics'; |
7 | 7 | ||
8 | @inject('stores', 'actions') @observer | 8 | export default @inject('stores', 'actions') @observer class PasswordScreen extends Component { |
9 | export default class PasswordScreen extends Component { | ||
10 | componentDidMount() { | 9 | componentDidMount() { |
11 | gaPage('Auth/Password Retrieve'); | 10 | gaPage('Auth/Password Retrieve'); |
12 | } | 11 | } |
diff --git a/src/containers/auth/PricingScreen.js b/src/containers/auth/PricingScreen.js index 7e1586535..34b512e15 100644 --- a/src/containers/auth/PricingScreen.js +++ b/src/containers/auth/PricingScreen.js | |||
@@ -10,8 +10,7 @@ import { gaPage } from '../../lib/analytics'; | |||
10 | 10 | ||
11 | import { globalError as globalErrorPropType } from '../../prop-types'; | 11 | import { globalError as globalErrorPropType } from '../../prop-types'; |
12 | 12 | ||
13 | @inject('stores', 'actions') @observer | 13 | export default @inject('stores', 'actions') @observer class PricingScreen extends Component { |
14 | export default class PricingScreen extends Component { | ||
15 | static propTypes = { | 14 | static propTypes = { |
16 | error: globalErrorPropType.isRequired, | 15 | error: globalErrorPropType.isRequired, |
17 | }; | 16 | }; |
diff --git a/src/containers/auth/SignupScreen.js b/src/containers/auth/SignupScreen.js index 3b86ab138..caf75de90 100644 --- a/src/containers/auth/SignupScreen.js +++ b/src/containers/auth/SignupScreen.js | |||
@@ -8,8 +8,7 @@ import { gaPage } from '../../lib/analytics'; | |||
8 | 8 | ||
9 | import { globalError as globalErrorPropType } from '../../prop-types'; | 9 | import { globalError as globalErrorPropType } from '../../prop-types'; |
10 | 10 | ||
11 | @inject('stores', 'actions') @observer | 11 | export default @inject('stores', 'actions') @observer class SignupScreen extends Component { |
12 | export default class SignupScreen extends Component { | ||
13 | static propTypes = { | 12 | static propTypes = { |
14 | error: globalErrorPropType.isRequired, | 13 | error: globalErrorPropType.isRequired, |
15 | }; | 14 | }; |
diff --git a/src/containers/auth/WelcomeScreen.js b/src/containers/auth/WelcomeScreen.js index e413264a6..2c120f81c 100644 --- a/src/containers/auth/WelcomeScreen.js +++ b/src/containers/auth/WelcomeScreen.js | |||
@@ -7,8 +7,7 @@ import UserStore from '../../stores/UserStore'; | |||
7 | import RecipePreviewsStore from '../../stores/RecipePreviewsStore'; | 7 | import RecipePreviewsStore from '../../stores/RecipePreviewsStore'; |
8 | import { gaPage } from '../../lib/analytics'; | 8 | import { gaPage } from '../../lib/analytics'; |
9 | 9 | ||
10 | @inject('stores', 'actions') @observer | 10 | export default @inject('stores', 'actions') @observer class LoginScreen extends Component { |
11 | export default class LoginScreen extends Component { | ||
12 | componentDidMount() { | 11 | componentDidMount() { |
13 | gaPage('Auth/Welcome'); | 12 | gaPage('Auth/Welcome'); |
14 | } | 13 | } |
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js index 9212f809f..e1423bdaa 100644 --- a/src/containers/layout/AppLayoutContainer.js +++ b/src/containers/layout/AppLayoutContainer.js | |||
@@ -1,10 +1,12 @@ | |||
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 { inject, observer } from 'mobx-react'; | 3 | import { inject, observer } from 'mobx-react'; |
4 | import { ThemeProvider } from 'react-jss'; | ||
4 | 5 | ||
5 | import AppStore from '../../stores/AppStore'; | 6 | import AppStore from '../../stores/AppStore'; |
6 | import RecipesStore from '../../stores/RecipesStore'; | 7 | import RecipesStore from '../../stores/RecipesStore'; |
7 | import ServicesStore from '../../stores/ServicesStore'; | 8 | import ServicesStore from '../../stores/ServicesStore'; |
9 | import FeaturesStore from '../../stores/FeaturesStore'; | ||
8 | import UIStore from '../../stores/UIStore'; | 10 | import UIStore from '../../stores/UIStore'; |
9 | import NewsStore from '../../stores/NewsStore'; | 11 | import NewsStore from '../../stores/NewsStore'; |
10 | import SettingsStore from '../../stores/SettingsStore'; | 12 | import SettingsStore from '../../stores/SettingsStore'; |
@@ -17,8 +19,9 @@ import Sidebar from '../../components/layout/Sidebar'; | |||
17 | import Services from '../../components/services/content/Services'; | 19 | import Services from '../../components/services/content/Services'; |
18 | import AppLoader from '../../components/ui/AppLoader'; | 20 | import AppLoader from '../../components/ui/AppLoader'; |
19 | 21 | ||
20 | @inject('stores', 'actions') @observer | 22 | import { state as delayAppState } from '../../features/delayApp'; |
21 | export default class AppLayoutContainer extends Component { | 23 | |
24 | export default @inject('stores', 'actions') @observer class AppLayoutContainer extends Component { | ||
22 | static defaultProps = { | 25 | static defaultProps = { |
23 | children: null, | 26 | children: null, |
24 | }; | 27 | }; |
@@ -26,6 +29,7 @@ export default class AppLayoutContainer extends Component { | |||
26 | render() { | 29 | render() { |
27 | const { | 30 | const { |
28 | app, | 31 | app, |
32 | features, | ||
29 | services, | 33 | services, |
30 | ui, | 34 | ui, |
31 | news, | 35 | news, |
@@ -39,7 +43,6 @@ export default class AppLayoutContainer extends Component { | |||
39 | handleIPCMessage, | 43 | handleIPCMessage, |
40 | setWebviewReference, | 44 | setWebviewReference, |
41 | openWindow, | 45 | openWindow, |
42 | reloadUpdatedServices, | ||
43 | reorder, | 46 | reorder, |
44 | reload, | 47 | reload, |
45 | toggleNotifications, | 48 | toggleNotifications, |
@@ -64,10 +67,13 @@ export default class AppLayoutContainer extends Component { | |||
64 | 67 | ||
65 | const { children } = this.props; | 68 | const { children } = this.props; |
66 | 69 | ||
70 | const isLoadingFeatures = features.featuresRequest.isExecuting | ||
71 | && !features.featuresRequest.wasExecuted; | ||
72 | |||
67 | const isLoadingServices = services.allServicesRequest.isExecuting | 73 | const isLoadingServices = services.allServicesRequest.isExecuting |
68 | && services.allServicesRequest.isExecutingFirstTime; | 74 | && services.allServicesRequest.isExecutingFirstTime; |
69 | 75 | ||
70 | if (isLoadingServices) { | 76 | if (isLoadingFeatures || isLoadingServices) { |
71 | return ( | 77 | return ( |
72 | <AppLoader /> | 78 | <AppLoader /> |
73 | ); | 79 | ); |
@@ -105,25 +111,29 @@ export default class AppLayoutContainer extends Component { | |||
105 | ); | 111 | ); |
106 | 112 | ||
107 | return ( | 113 | return ( |
108 | <AppLayout | 114 | <ThemeProvider theme={ui.theme}> |
109 | isFullScreen={app.isFullScreen} | 115 | <AppLayout |
110 | isOnline={app.isOnline} | 116 | isFullScreen={app.isFullScreen} |
111 | showServicesUpdatedInfoBar={ui.showServicesUpdatedInfoBar} | 117 | isOnline={app.isOnline} |
112 | appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED} | 118 | showServicesUpdatedInfoBar={ui.showServicesUpdatedInfoBar} |
113 | sidebar={sidebar} | 119 | appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED} |
114 | services={servicesContainer} | 120 | sidebar={sidebar} |
115 | news={news.latest} | 121 | services={servicesContainer} |
116 | removeNewsItem={hide} | 122 | news={news.latest} |
117 | reloadServicesAfterUpdate={reloadUpdatedServices} | 123 | removeNewsItem={hide} |
118 | installAppUpdate={installUpdate} | 124 | reloadServicesAfterUpdate={() => window.location.reload()} |
119 | globalError={globalError.error} | 125 | installAppUpdate={installUpdate} |
120 | showRequiredRequestsError={requests.showRequiredRequestsError} | 126 | globalError={globalError.error} |
121 | areRequiredRequestsSuccessful={requests.areRequiredRequestsSuccessful} | 127 | showRequiredRequestsError={requests.showRequiredRequestsError} |
122 | retryRequiredRequests={retryRequiredRequests} | 128 | areRequiredRequestsSuccessful={requests.areRequiredRequestsSuccessful} |
123 | areRequiredRequestsLoading={requests.areRequiredRequestsLoading} | 129 | retryRequiredRequests={retryRequiredRequests} |
124 | > | 130 | areRequiredRequestsLoading={requests.areRequiredRequestsLoading} |
125 | {React.Children.count(children) > 0 ? children : null} | 131 | darkMode={settings.all.app.darkMode} |
126 | </AppLayout> | 132 | isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible} |
133 | > | ||
134 | {React.Children.count(children) > 0 ? children : null} | ||
135 | </AppLayout> | ||
136 | </ThemeProvider> | ||
127 | ); | 137 | ); |
128 | } | 138 | } |
129 | } | 139 | } |
@@ -131,6 +141,7 @@ export default class AppLayoutContainer extends Component { | |||
131 | AppLayoutContainer.wrappedComponent.propTypes = { | 141 | AppLayoutContainer.wrappedComponent.propTypes = { |
132 | stores: PropTypes.shape({ | 142 | stores: PropTypes.shape({ |
133 | services: PropTypes.instanceOf(ServicesStore).isRequired, | 143 | services: PropTypes.instanceOf(ServicesStore).isRequired, |
144 | features: PropTypes.instanceOf(FeaturesStore).isRequired, | ||
134 | recipes: PropTypes.instanceOf(RecipesStore).isRequired, | 145 | recipes: PropTypes.instanceOf(RecipesStore).isRequired, |
135 | app: PropTypes.instanceOf(AppStore).isRequired, | 146 | app: PropTypes.instanceOf(AppStore).isRequired, |
136 | ui: PropTypes.instanceOf(UIStore).isRequired, | 147 | ui: PropTypes.instanceOf(UIStore).isRequired, |
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js index c5c2982b0..5818af0b1 100644 --- a/src/containers/settings/AccountScreen.js +++ b/src/containers/settings/AccountScreen.js | |||
@@ -12,8 +12,7 @@ import AccountDashboard from '../../components/settings/account/AccountDashboard | |||
12 | 12 | ||
13 | const { BrowserWindow } = remote; | 13 | const { BrowserWindow } = remote; |
14 | 14 | ||
15 | @inject('stores', 'actions') @observer | 15 | export default @inject('stores', 'actions') @observer class AccountScreen extends Component { |
16 | export default class AccountScreen extends Component { | ||
17 | componentDidMount() { | 16 | componentDidMount() { |
18 | gaPage('Settings/Account Dashboard'); | 17 | gaPage('Settings/Account Dashboard'); |
19 | } | 18 | } |
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js index 67c2731fc..639e8b070 100644 --- a/src/containers/settings/EditServiceScreen.js +++ b/src/containers/settings/EditServiceScreen.js | |||
@@ -6,6 +6,8 @@ import { defineMessages, intlShape } from 'react-intl'; | |||
6 | import UserStore from '../../stores/UserStore'; | 6 | import UserStore from '../../stores/UserStore'; |
7 | import RecipesStore from '../../stores/RecipesStore'; | 7 | import RecipesStore from '../../stores/RecipesStore'; |
8 | import ServicesStore from '../../stores/ServicesStore'; | 8 | import ServicesStore from '../../stores/ServicesStore'; |
9 | import SettingsStore from '../../stores/SettingsStore'; | ||
10 | import FeaturesStore from '../../stores/FeaturesStore'; | ||
9 | import Form from '../../lib/Form'; | 11 | import Form from '../../lib/Form'; |
10 | import { gaPage } from '../../lib/analytics'; | 12 | import { gaPage } from '../../lib/analytics'; |
11 | 13 | ||
@@ -13,6 +15,8 @@ import ServiceError from '../../components/settings/services/ServiceError'; | |||
13 | import EditServiceForm from '../../components/settings/services/EditServiceForm'; | 15 | import EditServiceForm from '../../components/settings/services/EditServiceForm'; |
14 | import { required, url, oneRequired } from '../../helpers/validation-helpers'; | 16 | import { required, url, oneRequired } from '../../helpers/validation-helpers'; |
15 | 17 | ||
18 | import { config as proxyFeature } from '../../features/serviceProxy'; | ||
19 | |||
16 | const messages = defineMessages({ | 20 | const messages = defineMessages({ |
17 | name: { | 21 | name: { |
18 | id: 'settings.service.form.name', | 22 | id: 'settings.service.form.name', |
@@ -50,10 +54,29 @@ const messages = defineMessages({ | |||
50 | id: 'settings.service.form.icon', | 54 | id: 'settings.service.form.icon', |
51 | defaultMessage: '!!!Custom icon', | 55 | defaultMessage: '!!!Custom icon', |
52 | }, | 56 | }, |
57 | enableDarkMode: { | ||
58 | id: 'settings.service.form.enableDarkMode', | ||
59 | defaultMessage: '!!!Enable Dark Mode', | ||
60 | }, | ||
61 | enableProxy: { | ||
62 | id: 'settings.service.form.proxy.isEnabled', | ||
63 | defaultMessage: '!!!Use Proxy', | ||
64 | }, | ||
65 | proxyHost: { | ||
66 | id: 'settings.service.form.proxy.host', | ||
67 | defaultMessage: '!!!Proxy Host/IP', | ||
68 | }, | ||
69 | proxyUser: { | ||
70 | id: 'settings.service.form.proxy.user', | ||
71 | defaultMessage: '!!!User', | ||
72 | }, | ||
73 | proxyPassword: { | ||
74 | id: 'settings.service.form.proxy.password', | ||
75 | defaultMessage: '!!!Password', | ||
76 | }, | ||
53 | }); | 77 | }); |
54 | 78 | ||
55 | @inject('stores', 'actions') @observer | 79 | export default @inject('stores', 'actions') @observer class EditServiceScreen extends Component { |
56 | export default class EditServiceScreen extends Component { | ||
57 | static contextTypes = { | 80 | static contextTypes = { |
58 | intl: intlShape, | 81 | intl: intlShape, |
59 | }; | 82 | }; |
@@ -77,7 +100,7 @@ export default class EditServiceScreen extends Component { | |||
77 | } | 100 | } |
78 | } | 101 | } |
79 | 102 | ||
80 | prepareForm(recipe, service) { | 103 | prepareForm(recipe, service, proxy) { |
81 | const { intl } = this.context; | 104 | const { intl } = this.context; |
82 | const config = { | 105 | const config = { |
83 | fields: { | 106 | fields: { |
@@ -112,6 +135,11 @@ export default class EditServiceScreen extends Component { | |||
112 | default: null, | 135 | default: null, |
113 | type: 'file', | 136 | type: 'file', |
114 | }, | 137 | }, |
138 | isDarkModeEnabled: { | ||
139 | label: intl.formatMessage(messages.enableDarkMode), | ||
140 | value: service.isDarkModeEnabled, | ||
141 | default: this.props.stores.settings.all.app.darkMode, | ||
142 | }, | ||
115 | }, | 143 | }, |
116 | }; | 144 | }; |
117 | 145 | ||
@@ -163,6 +191,40 @@ export default class EditServiceScreen extends Component { | |||
163 | }); | 191 | }); |
164 | } | 192 | } |
165 | 193 | ||
194 | if (proxy.isEnabled) { | ||
195 | const serviceProxyConfig = this.props.stores.settings.proxy[service.id] || {}; | ||
196 | |||
197 | Object.assign(config.fields, { | ||
198 | proxy: { | ||
199 | name: 'proxy', | ||
200 | label: 'proxy', | ||
201 | fields: { | ||
202 | isEnabled: { | ||
203 | label: intl.formatMessage(messages.enableProxy), | ||
204 | value: serviceProxyConfig.isEnabled, | ||
205 | default: false, | ||
206 | }, | ||
207 | host: { | ||
208 | label: intl.formatMessage(messages.proxyHost), | ||
209 | value: serviceProxyConfig.host, | ||
210 | default: '', | ||
211 | }, | ||
212 | user: { | ||
213 | label: intl.formatMessage(messages.proxyUser), | ||
214 | value: serviceProxyConfig.user, | ||
215 | default: '', | ||
216 | }, | ||
217 | password: { | ||
218 | label: intl.formatMessage(messages.proxyPassword), | ||
219 | value: serviceProxyConfig.password, | ||
220 | default: '', | ||
221 | type: 'password', | ||
222 | }, | ||
223 | }, | ||
224 | }, | ||
225 | }); | ||
226 | } | ||
227 | |||
166 | return new Form(config); | 228 | return new Form(config); |
167 | } | 229 | } |
168 | 230 | ||
@@ -215,7 +277,7 @@ export default class EditServiceScreen extends Component { | |||
215 | ); | 277 | ); |
216 | } | 278 | } |
217 | 279 | ||
218 | const form = this.prepareForm(recipe, service); | 280 | const form = this.prepareForm(recipe, service, proxyFeature); |
219 | 281 | ||
220 | return ( | 282 | return ( |
221 | <EditServiceForm | 283 | <EditServiceForm |
@@ -229,6 +291,8 @@ export default class EditServiceScreen extends Component { | |||
229 | isDeleting={services.deleteServiceRequest.isExecuting} | 291 | isDeleting={services.deleteServiceRequest.isExecuting} |
230 | onSubmit={d => this.onSubmit(d)} | 292 | onSubmit={d => this.onSubmit(d)} |
231 | onDelete={() => this.deleteService()} | 293 | onDelete={() => this.deleteService()} |
294 | isProxyFeatureEnabled={proxyFeature.isEnabled} | ||
295 | isProxyFeaturePremiumFeature={proxyFeature.isPremium} | ||
232 | /> | 296 | /> |
233 | ); | 297 | ); |
234 | } | 298 | } |
@@ -239,6 +303,8 @@ EditServiceScreen.wrappedComponent.propTypes = { | |||
239 | user: PropTypes.instanceOf(UserStore).isRequired, | 303 | user: PropTypes.instanceOf(UserStore).isRequired, |
240 | recipes: PropTypes.instanceOf(RecipesStore).isRequired, | 304 | recipes: PropTypes.instanceOf(RecipesStore).isRequired, |
241 | services: PropTypes.instanceOf(ServicesStore).isRequired, | 305 | services: PropTypes.instanceOf(ServicesStore).isRequired, |
306 | settings: PropTypes.instanceOf(SettingsStore).isRequired, | ||
307 | features: PropTypes.instanceOf(FeaturesStore).isRequired, | ||
242 | }).isRequired, | 308 | }).isRequired, |
243 | router: PropTypes.shape({ | 309 | router: PropTypes.shape({ |
244 | params: PropTypes.shape({ | 310 | params: PropTypes.shape({ |
@@ -251,5 +317,8 @@ EditServiceScreen.wrappedComponent.propTypes = { | |||
251 | updateService: PropTypes.func.isRequired, | 317 | updateService: PropTypes.func.isRequired, |
252 | deleteService: PropTypes.func.isRequired, | 318 | deleteService: PropTypes.func.isRequired, |
253 | }).isRequired, | 319 | }).isRequired, |
320 | // settings: PropTypes.shape({ | ||
321 | // update: PropTypes.func.isRequred, | ||
322 | // }).isRequired, | ||
254 | }).isRequired, | 323 | }).isRequired, |
255 | }; | 324 | }; |
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js index 018ce663f..ea1d319d9 100644 --- a/src/containers/settings/EditSettingsScreen.js +++ b/src/containers/settings/EditSettingsScreen.js | |||
@@ -7,9 +7,10 @@ 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 Form from '../../lib/Form'; | 9 | import Form from '../../lib/Form'; |
10 | import { APP_LOCALES } from '../../i18n/languages'; | 10 | import { APP_LOCALES, SPELLCHECKER_LOCALES } from '../../i18n/languages'; |
11 | import { gaPage } from '../../lib/analytics'; | 11 | import { gaPage } from '../../lib/analytics'; |
12 | import { DEFAULT_APP_SETTINGS } from '../../config'; | 12 | import { DEFAULT_APP_SETTINGS } from '../../config'; |
13 | import { config as spellcheckerConfig } from '../../features/spellchecker'; | ||
13 | 14 | ||
14 | 15 | ||
15 | import EditSettingsForm from '../../components/settings/settings/EditSettingsForm'; | 16 | import EditSettingsForm from '../../components/settings/settings/EditSettingsForm'; |
@@ -39,6 +40,10 @@ const messages = defineMessages({ | |||
39 | id: 'settings.app.form.language', | 40 | id: 'settings.app.form.language', |
40 | defaultMessage: '!!!Language', | 41 | defaultMessage: '!!!Language', |
41 | }, | 42 | }, |
43 | darkMode: { | ||
44 | id: 'settings.app.form.darkMode', | ||
45 | defaultMessage: '!!!Dark Mode', | ||
46 | }, | ||
42 | showDisabledServices: { | 47 | showDisabledServices: { |
43 | id: 'settings.app.form.showDisabledServices', | 48 | id: 'settings.app.form.showDisabledServices', |
44 | defaultMessage: '!!!Display disabled services tabs', | 49 | defaultMessage: '!!!Display disabled services tabs', |
@@ -55,8 +60,8 @@ const messages = defineMessages({ | |||
55 | id: 'settings.app.form.enableGPUAcceleration', | 60 | id: 'settings.app.form.enableGPUAcceleration', |
56 | defaultMessage: '!!!Enable GPU Acceleration', | 61 | defaultMessage: '!!!Enable GPU Acceleration', |
57 | }, | 62 | }, |
58 | spellcheckingLanguage: { | 63 | spellcheckerLanguage: { |
59 | id: 'settings.app.form.spellcheckingLanguage', | 64 | id: 'settings.app.form.spellcheckerLanguage', |
60 | defaultMessage: '!!!Language for spell checking', | 65 | defaultMessage: '!!!Language for spell checking', |
61 | }, | 66 | }, |
62 | beta: { | 67 | beta: { |
@@ -65,8 +70,7 @@ const messages = defineMessages({ | |||
65 | }, | 70 | }, |
66 | }); | 71 | }); |
67 | 72 | ||
68 | @inject('stores', 'actions') @observer | 73 | export default @inject('stores', 'actions') @observer class EditSettingsScreen extends Component { |
69 | export default class EditSettingsScreen extends Component { | ||
70 | static contextTypes = { | 74 | static contextTypes = { |
71 | intl: intlShape, | 75 | intl: intlShape, |
72 | }; | 76 | }; |
@@ -91,8 +95,10 @@ export default class EditSettingsScreen extends Component { | |||
91 | minimizeToSystemTray: settingsData.minimizeToSystemTray, | 95 | minimizeToSystemTray: settingsData.minimizeToSystemTray, |
92 | enableGPUAcceleration: settingsData.enableGPUAcceleration, | 96 | enableGPUAcceleration: settingsData.enableGPUAcceleration, |
93 | showDisabledServices: settingsData.showDisabledServices, | 97 | showDisabledServices: settingsData.showDisabledServices, |
98 | darkMode: settingsData.darkMode, | ||
94 | showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted, | 99 | showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted, |
95 | enableSpellchecking: settingsData.enableSpellchecking, | 100 | enableSpellchecking: settingsData.enableSpellchecking, |
101 | spellcheckerLanguage: settingsData.spellcheckerLanguage, | ||
96 | beta: settingsData.beta, // we need this info in the main process as well | 102 | beta: settingsData.beta, // we need this info in the main process as well |
97 | locale: settingsData.locale, // we need this info in the main process as well | 103 | locale: settingsData.locale, // we need this info in the main process as well |
98 | }, | 104 | }, |
@@ -118,6 +124,14 @@ export default class EditSettingsScreen extends Component { | |||
118 | }); | 124 | }); |
119 | }); | 125 | }); |
120 | 126 | ||
127 | const spellcheckingLanguages = []; | ||
128 | Object.keys(SPELLCHECKER_LOCALES).sort(Intl.Collator().compare).forEach((key) => { | ||
129 | spellcheckingLanguages.push({ | ||
130 | value: key, | ||
131 | label: SPELLCHECKER_LOCALES[key], | ||
132 | }); | ||
133 | }); | ||
134 | |||
121 | const config = { | 135 | const config = { |
122 | fields: { | 136 | fields: { |
123 | autoLaunchOnStart: { | 137 | autoLaunchOnStart: { |
@@ -157,8 +171,19 @@ export default class EditSettingsScreen extends Component { | |||
157 | }, | 171 | }, |
158 | enableSpellchecking: { | 172 | enableSpellchecking: { |
159 | label: intl.formatMessage(messages.enableSpellchecking), | 173 | label: intl.formatMessage(messages.enableSpellchecking), |
160 | value: settings.all.app.enableSpellchecking, | 174 | value: !this.props.stores.user.data.isPremium && spellcheckerConfig.isPremiumFeature ? false : settings.all.app.enableSpellchecking, |
161 | default: DEFAULT_APP_SETTINGS.enableSpellchecking, | 175 | default: !this.props.stores.user.data.isPremium && spellcheckerConfig.isPremiumFeature ? false : DEFAULT_APP_SETTINGS.enableSpellchecking, |
176 | }, | ||
177 | spellcheckerLanguage: { | ||
178 | label: intl.formatMessage(messages.spellcheckerLanguage), | ||
179 | value: settings.all.app.spellcheckerLanguage, | ||
180 | options: spellcheckingLanguages, | ||
181 | default: DEFAULT_APP_SETTINGS.spellcheckerLanguage, | ||
182 | }, | ||
183 | darkMode: { | ||
184 | label: intl.formatMessage(messages.darkMode), | ||
185 | value: settings.all.app.darkMode, | ||
186 | default: DEFAULT_APP_SETTINGS.darkMode, | ||
162 | }, | 187 | }, |
163 | enableGPUAcceleration: { | 188 | enableGPUAcceleration: { |
164 | label: intl.formatMessage(messages.enableGPUAcceleration), | 189 | label: intl.formatMessage(messages.enableGPUAcceleration), |
@@ -209,6 +234,7 @@ export default class EditSettingsScreen extends Component { | |||
209 | cacheSize={cacheSize} | 234 | cacheSize={cacheSize} |
210 | isClearingAllCache={isClearingAllCache} | 235 | isClearingAllCache={isClearingAllCache} |
211 | onClearAllCache={clearAllCache} | 236 | onClearAllCache={clearAllCache} |
237 | isSpellcheckerPremiumFeature={spellcheckerConfig.isPremiumFeature} | ||
212 | /> | 238 | /> |
213 | ); | 239 | ); |
214 | } | 240 | } |
diff --git a/src/containers/settings/EditUserScreen.js b/src/containers/settings/EditUserScreen.js index dda8ce513..3da3e8d2c 100644 --- a/src/containers/settings/EditUserScreen.js +++ b/src/containers/settings/EditUserScreen.js | |||
@@ -50,8 +50,7 @@ const messages = defineMessages({ | |||
50 | }, | 50 | }, |
51 | }); | 51 | }); |
52 | 52 | ||
53 | @inject('stores', 'actions') @observer | 53 | export default @inject('stores', 'actions') @observer class EditUserScreen extends Component { |
54 | export default class EditUserScreen extends Component { | ||
55 | static contextTypes = { | 54 | static contextTypes = { |
56 | intl: intlShape, | 55 | intl: intlShape, |
57 | }; | 56 | }; |
@@ -145,6 +144,7 @@ export default class EditUserScreen extends Component { | |||
145 | // user={user.data} | 144 | // user={user.data} |
146 | status={user.actionStatus} | 145 | status={user.actionStatus} |
147 | form={form} | 146 | form={form} |
147 | isEnterprise={user.data.isEnterprise} | ||
148 | isSaving={user.updateUserInfoRequest.isExecuting} | 148 | isSaving={user.updateUserInfoRequest.isExecuting} |
149 | onSubmit={d => this.onSubmit(d)} | 149 | onSubmit={d => this.onSubmit(d)} |
150 | /> | 150 | /> |
diff --git a/src/containers/settings/InviteScreen.js b/src/containers/settings/InviteScreen.js index 5f341b1b3..38ca6ec74 100644 --- a/src/containers/settings/InviteScreen.js +++ b/src/containers/settings/InviteScreen.js | |||
@@ -5,8 +5,7 @@ import { inject, observer } from 'mobx-react'; | |||
5 | import Invite from '../../components/auth/Invite'; | 5 | import Invite from '../../components/auth/Invite'; |
6 | import { gaPage } from '../../lib/analytics'; | 6 | import { gaPage } from '../../lib/analytics'; |
7 | 7 | ||
8 | @inject('stores', 'actions') @observer | 8 | export default @inject('stores', 'actions') @observer class InviteScreen extends Component { |
9 | export default class InviteScreen extends Component { | ||
10 | componentDidMount() { | 9 | componentDidMount() { |
11 | gaPage('Settings/Invite'); | 10 | gaPage('Settings/Invite'); |
12 | } | 11 | } |
diff --git a/src/containers/settings/RecipesScreen.js b/src/containers/settings/RecipesScreen.js index 65341e9e3..4efe81505 100644 --- a/src/containers/settings/RecipesScreen.js +++ b/src/containers/settings/RecipesScreen.js | |||
@@ -11,8 +11,7 @@ import { gaPage } from '../../lib/analytics'; | |||
11 | 11 | ||
12 | import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; | 12 | import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; |
13 | 13 | ||
14 | @inject('stores', 'actions') @observer | 14 | export default @inject('stores', 'actions') @observer class RecipesScreen extends Component { |
15 | export default class RecipesScreen extends Component { | ||
16 | static propTypes = { | 15 | static propTypes = { |
17 | params: PropTypes.shape({ | 16 | params: PropTypes.shape({ |
18 | filter: PropTypes.string, | 17 | filter: PropTypes.string, |
diff --git a/src/containers/settings/ServicesScreen.js b/src/containers/settings/ServicesScreen.js index 12db1bcd3..c1a133ef7 100644 --- a/src/containers/settings/ServicesScreen.js +++ b/src/containers/settings/ServicesScreen.js | |||
@@ -10,8 +10,7 @@ import { gaPage } from '../../lib/analytics'; | |||
10 | 10 | ||
11 | import ServicesDashboard from '../../components/settings/services/ServicesDashboard'; | 11 | import ServicesDashboard from '../../components/settings/services/ServicesDashboard'; |
12 | 12 | ||
13 | @inject('stores', 'actions') @observer | 13 | export default @inject('stores', 'actions') @observer class ServicesScreen extends Component { |
14 | export default class ServicesScreen extends Component { | ||
15 | componentDidMount() { | 14 | componentDidMount() { |
16 | gaPage('Settings/Service Dashboard'); | 15 | gaPage('Settings/Service Dashboard'); |
17 | } | 16 | } |
diff --git a/src/containers/settings/SettingsWindow.js b/src/containers/settings/SettingsWindow.js index 13ca96f72..55589d0be 100644 --- a/src/containers/settings/SettingsWindow.js +++ b/src/containers/settings/SettingsWindow.js | |||
@@ -7,8 +7,7 @@ import ServicesStore from '../../stores/ServicesStore'; | |||
7 | import Layout from '../../components/settings/SettingsLayout'; | 7 | import Layout from '../../components/settings/SettingsLayout'; |
8 | import Navigation from '../../components/settings/navigation/SettingsNavigation'; | 8 | import Navigation from '../../components/settings/navigation/SettingsNavigation'; |
9 | 9 | ||
10 | @inject('stores', 'actions') @observer | 10 | export default @inject('stores', 'actions') @observer class SettingsContainer extends Component { |
11 | export default class SettingsContainer extends Component { | ||
12 | render() { | 11 | render() { |
13 | const { children, stores } = this.props; | 12 | const { children, stores } = this.props; |
14 | const { closeSettings } = this.props.actions.ui; | 13 | const { closeSettings } = this.props.actions.ui; |
diff --git a/src/containers/subscription/SubscriptionFormScreen.js b/src/containers/subscription/SubscriptionFormScreen.js index fc6e3c4be..50ed19bef 100644 --- a/src/containers/subscription/SubscriptionFormScreen.js +++ b/src/containers/subscription/SubscriptionFormScreen.js | |||
@@ -9,8 +9,7 @@ import SubscriptionForm from '../../components/subscription/SubscriptionForm'; | |||
9 | 9 | ||
10 | const { BrowserWindow } = remote; | 10 | const { BrowserWindow } = remote; |
11 | 11 | ||
12 | @inject('stores', 'actions') @observer | 12 | export default @inject('stores', 'actions') @observer class SubscriptionFormScreen extends Component { |
13 | export default class SubscriptionFormScreen extends Component { | ||
14 | static propTypes = { | 13 | static propTypes = { |
15 | onCloseWindow: PropTypes.func, | 14 | onCloseWindow: PropTypes.func, |
16 | content: PropTypes.oneOrManyChildElements, | 15 | content: PropTypes.oneOrManyChildElements, |
@@ -80,7 +79,6 @@ export default class SubscriptionFormScreen extends Component { | |||
80 | return ( | 79 | return ( |
81 | <SubscriptionForm | 80 | <SubscriptionForm |
82 | plan={stores.payment.plan} | 81 | plan={stores.payment.plan} |
83 | // form={this.prepareForm(stores.payment.plan)} | ||
84 | isLoading={stores.payment.plansRequest.isExecuting} | 82 | isLoading={stores.payment.plansRequest.isExecuting} |
85 | retryPlanRequest={() => stores.payment.plansRequest.reload()} | 83 | retryPlanRequest={() => stores.payment.plansRequest.reload()} |
86 | isCreatingHostedPage={stores.payment.createHostedPageRequest.isExecuting} | 84 | isCreatingHostedPage={stores.payment.createHostedPageRequest.isExecuting} |
diff --git a/src/containers/subscription/SubscriptionPopupScreen.js b/src/containers/subscription/SubscriptionPopupScreen.js index bb0603170..6641f236d 100644 --- a/src/containers/subscription/SubscriptionPopupScreen.js +++ b/src/containers/subscription/SubscriptionPopupScreen.js | |||
@@ -5,8 +5,7 @@ import { inject, observer } from 'mobx-react'; | |||
5 | import SubscriptionPopup from '../../components/subscription/SubscriptionPopup'; | 5 | import SubscriptionPopup from '../../components/subscription/SubscriptionPopup'; |
6 | 6 | ||
7 | 7 | ||
8 | @inject('stores', 'actions') @observer | 8 | export default @inject('stores', 'actions') @observer class SubscriptionPopupScreen extends Component { |
9 | export default class SubscriptionPopupScreen extends Component { | ||
10 | state = { | 9 | state = { |
11 | complete: false, | 10 | complete: false, |
12 | }; | 11 | }; |
diff --git a/src/electron/Settings.js b/src/electron/Settings.js index b3138e948..6ac3b9177 100644 --- a/src/electron/Settings.js +++ b/src/electron/Settings.js | |||
@@ -1,15 +1,21 @@ | |||
1 | import { observable, toJS } from 'mobx'; | 1 | import { observable, toJS } from 'mobx'; |
2 | import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; | 2 | import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; |
3 | import path from 'path'; | ||
3 | 4 | ||
4 | import { SETTINGS_PATH, DEFAULT_APP_SETTINGS } from '../config'; | 5 | import { SETTINGS_PATH } from '../config'; |
5 | 6 | ||
6 | const debug = require('debug')('Settings'); | 7 | const debug = require('debug')('Franz:Settings'); |
7 | 8 | ||
8 | export default class Settings { | 9 | export default class Settings { |
9 | @observable store = DEFAULT_APP_SETTINGS; | 10 | type = ''; |
11 | @observable store = {}; | ||
10 | 12 | ||
11 | constructor() { | 13 | constructor(type, defaultState = {}) { |
12 | if (!pathExistsSync(SETTINGS_PATH)) { | 14 | this.type = type; |
15 | this.store = defaultState; | ||
16 | this.defaultState = defaultState; | ||
17 | |||
18 | if (!pathExistsSync(this.settingsFile)) { | ||
13 | this._writeFile(); | 19 | this._writeFile(); |
14 | } else { | 20 | } else { |
15 | this._hydrate(); | 21 | this._hydrate(); |
@@ -17,7 +23,7 @@ export default class Settings { | |||
17 | } | 23 | } |
18 | 24 | ||
19 | set(settings) { | 25 | set(settings) { |
20 | this.store = Object.assign(this.store, settings); | 26 | this.store = this._merge(settings); |
21 | 27 | ||
22 | this._writeFile(); | 28 | this._writeFile(); |
23 | } | 29 | } |
@@ -30,13 +36,21 @@ export default class Settings { | |||
30 | return this.store[key]; | 36 | return this.store[key]; |
31 | } | 37 | } |
32 | 38 | ||
39 | _merge(settings) { | ||
40 | return Object.assign(this.defaultState, this.store, settings); | ||
41 | } | ||
42 | |||
33 | _hydrate() { | 43 | _hydrate() { |
34 | this.store = readJsonSync(SETTINGS_PATH); | 44 | this.store = this._merge(readJsonSync(this.settingsFile)); |
35 | debug('Hydrate store', toJS(this.store)); | 45 | debug('Hydrate store', toJS(this.store)); |
36 | } | 46 | } |
37 | 47 | ||
38 | _writeFile() { | 48 | _writeFile() { |
39 | outputJsonSync(SETTINGS_PATH, this.store); | 49 | outputJsonSync(this.settingsFile, this.store); |
40 | debug('Write settings file', toJS(this.store)); | 50 | debug('Write settings file', toJS(this.store)); |
41 | } | 51 | } |
52 | |||
53 | get settingsFile() { | ||
54 | return path.join(SETTINGS_PATH, `${this.type === 'app' ? 'settings' : this.type}.json`); | ||
55 | } | ||
42 | } | 56 | } |
diff --git a/src/electron/ipc-api/appIndicator.js b/src/electron/ipc-api/appIndicator.js index d31819068..e568bf35d 100644 --- a/src/electron/ipc-api/appIndicator.js +++ b/src/electron/ipc-api/appIndicator.js | |||
@@ -15,7 +15,7 @@ function getAsset(type, asset) { | |||
15 | 15 | ||
16 | export default (params) => { | 16 | export default (params) => { |
17 | autorun(() => { | 17 | autorun(() => { |
18 | isTrayIconEnabled = params.settings.get('enableSystemTray'); | 18 | isTrayIconEnabled = params.settings.app.get('enableSystemTray'); |
19 | 19 | ||
20 | if (!isTrayIconEnabled) { | 20 | if (!isTrayIconEnabled) { |
21 | params.trayIcon.hide(); | 21 | params.trayIcon.hide(); |
diff --git a/src/electron/ipc-api/autoUpdate.js b/src/electron/ipc-api/autoUpdate.js index ba49a2f97..9ccc89ea2 100644 --- a/src/electron/ipc-api/autoUpdate.js +++ b/src/electron/ipc-api/autoUpdate.js | |||
@@ -1,17 +1,17 @@ | |||
1 | import { app, ipcMain } from 'electron'; | 1 | import { app, ipcMain } from 'electron'; |
2 | import { autoUpdater } from 'electron-updater'; | 2 | import { autoUpdater } from 'electron-updater'; |
3 | import { isDevMode } from '../../environment.js'; | 3 | |
4 | const debug = require('debug')('Franz:ipcApi:autoUpdate'); | ||
4 | 5 | ||
5 | export default (params) => { | 6 | export default (params) => { |
6 | if (!isDevMode && (process.platform === 'darwin' || process.platform === 'win32')) { | 7 | if (process.platform === 'darwin' || process.platform === 'win32') { |
7 | // autoUpdater.setFeedURL(updateUrl); | ||
8 | ipcMain.on('autoUpdate', (event, args) => { | 8 | ipcMain.on('autoUpdate', (event, args) => { |
9 | try { | 9 | try { |
10 | autoUpdater.allowPrerelease = Boolean(params.settings.get('beta')); | 10 | autoUpdater.allowPrerelease = Boolean(params.settings.app.get('beta')); |
11 | if (args.action === 'check') { | 11 | if (args.action === 'check') { |
12 | autoUpdater.checkForUpdates(); | 12 | autoUpdater.checkForUpdates(); |
13 | } else if (args.action === 'install') { | 13 | } else if (args.action === 'install') { |
14 | console.log('install update'); | 14 | debug('install update'); |
15 | autoUpdater.quitAndInstall(); | 15 | autoUpdater.quitAndInstall(); |
16 | // we need to send a quit event | 16 | // we need to send a quit event |
17 | setTimeout(() => { | 17 | setTimeout(() => { |
@@ -25,12 +25,12 @@ export default (params) => { | |||
25 | }); | 25 | }); |
26 | 26 | ||
27 | autoUpdater.on('update-not-available', () => { | 27 | autoUpdater.on('update-not-available', () => { |
28 | console.log('update-not-available'); | 28 | debug('update-not-available'); |
29 | params.mainWindow.webContents.send('autoUpdate', { available: false }); | 29 | params.mainWindow.webContents.send('autoUpdate', { available: false }); |
30 | }); | 30 | }); |
31 | 31 | ||
32 | autoUpdater.on('update-available', () => { | 32 | autoUpdater.on('update-available', () => { |
33 | console.log('update-available'); | 33 | debug('update-available'); |
34 | params.mainWindow.webContents.send('autoUpdate', { available: true }); | 34 | params.mainWindow.webContents.send('autoUpdate', { available: true }); |
35 | }); | 35 | }); |
36 | 36 | ||
@@ -39,16 +39,16 @@ export default (params) => { | |||
39 | logMessage = `${logMessage} - Downloaded ${progressObj.percent}%`; | 39 | logMessage = `${logMessage} - Downloaded ${progressObj.percent}%`; |
40 | logMessage = `${logMessage} (${progressObj.transferred}/${progressObj.total})`; | 40 | logMessage = `${logMessage} (${progressObj.transferred}/${progressObj.total})`; |
41 | 41 | ||
42 | console.log(logMessage); | 42 | debug(logMessage); |
43 | }); | 43 | }); |
44 | 44 | ||
45 | autoUpdater.on('update-downloaded', () => { | 45 | autoUpdater.on('update-downloaded', () => { |
46 | console.log('update-downloaded'); | 46 | debug('update-downloaded'); |
47 | params.mainWindow.webContents.send('autoUpdate', { downloaded: true }); | 47 | params.mainWindow.webContents.send('autoUpdate', { downloaded: true }); |
48 | }); | 48 | }); |
49 | 49 | ||
50 | autoUpdater.on('error', () => { | 50 | autoUpdater.on('error', () => { |
51 | console.log('update-error'); | 51 | debug('update-error'); |
52 | params.mainWindow.webContents.send('autoUpdate', { error: true }); | 52 | params.mainWindow.webContents.send('autoUpdate', { error: true }); |
53 | }); | 53 | }); |
54 | } | 54 | } |
diff --git a/src/electron/ipc-api/download.js b/src/electron/ipc-api/download.js new file mode 100644 index 000000000..9e504834d --- /dev/null +++ b/src/electron/ipc-api/download.js | |||
@@ -0,0 +1,43 @@ | |||
1 | import { ipcMain, dialog } from 'electron'; | ||
2 | import { download } from 'electron-dl'; | ||
3 | import mime from 'mime-types'; | ||
4 | import fs from 'fs-extra'; | ||
5 | |||
6 | const debug = require('debug')('Franz:ipcApi:download'); | ||
7 | |||
8 | function decodeBase64Image(dataString) { | ||
9 | const matches = dataString.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); | ||
10 | |||
11 | if (matches.length !== 3) { | ||
12 | return new Error('Invalid input string'); | ||
13 | } | ||
14 | |||
15 | return new Buffer(matches[2], 'base64'); | ||
16 | } | ||
17 | |||
18 | export default (params) => { | ||
19 | ipcMain.on('download-file', async (event, { url, content, fileOptions = {} }) => { | ||
20 | try { | ||
21 | if (!content) { | ||
22 | const dl = await download(params.mainWindow, url, { | ||
23 | saveAs: true, | ||
24 | }); | ||
25 | debug('File saved to', dl.getSavePath()); | ||
26 | } else { | ||
27 | const extension = mime.extension(fileOptions.mime); | ||
28 | const filename = `${fileOptions.name}.${extension}`; | ||
29 | |||
30 | dialog.showSaveDialog(params.mainWindow, { | ||
31 | defaultPath: filename, | ||
32 | }, (name) => { | ||
33 | const binaryImage = decodeBase64Image(content); | ||
34 | fs.writeFileSync(name, binaryImage, 'binary'); | ||
35 | |||
36 | debug('File blob saved to', name); | ||
37 | }); | ||
38 | } | ||
39 | } catch (e) { | ||
40 | console.error(e); | ||
41 | } | ||
42 | }); | ||
43 | }; | ||
diff --git a/src/electron/ipc-api/index.js b/src/electron/ipc-api/index.js index 4ea6d1475..be8e0815a 100644 --- a/src/electron/ipc-api/index.js +++ b/src/electron/ipc-api/index.js | |||
@@ -1,9 +1,11 @@ | |||
1 | import autoUpdate from './autoUpdate'; | 1 | import autoUpdate from './autoUpdate'; |
2 | import settings from './settings'; | 2 | import settings from './settings'; |
3 | import appIndicator from './appIndicator'; | 3 | import appIndicator from './appIndicator'; |
4 | import download from './download'; | ||
4 | 5 | ||
5 | export default (params) => { | 6 | export default (params) => { |
6 | settings(params); | 7 | settings(params); |
7 | autoUpdate(params); | 8 | autoUpdate(params); |
8 | appIndicator(params); | 9 | appIndicator(params); |
10 | download(params); | ||
9 | }; | 11 | }; |
diff --git a/src/electron/ipc-api/settings.js b/src/electron/ipc-api/settings.js index 3eab68a91..ce006bb92 100644 --- a/src/electron/ipc-api/settings.js +++ b/src/electron/ipc-api/settings.js | |||
@@ -1,11 +1,15 @@ | |||
1 | import { ipcMain } from 'electron'; | 1 | import { ipcMain } from 'electron'; |
2 | 2 | ||
3 | export default (params) => { | 3 | export default (params) => { |
4 | ipcMain.on('getAppSettings', () => { | 4 | ipcMain.on('getAppSettings', (event, type) => { |
5 | params.mainWindow.webContents.send('appSettings', params.settings.all); | 5 | console.log('getAppSettings', type, params.settings[type].all); |
6 | params.mainWindow.webContents.send('appSettings', { | ||
7 | type, | ||
8 | data: params.settings[type].all, | ||
9 | }); | ||
6 | }); | 10 | }); |
7 | 11 | ||
8 | ipcMain.on('updateAppSettings', (event, args) => { | 12 | ipcMain.on('updateAppSettings', (event, args) => { |
9 | params.settings.set(args); | 13 | params.settings[args.type].set(args.data); |
10 | }); | 14 | }); |
11 | }; | 15 | }; |
diff --git a/src/features/delayApp/Component.js b/src/features/delayApp/Component.js new file mode 100644 index 000000000..403340c7b --- /dev/null +++ b/src/features/delayApp/Component.js | |||
@@ -0,0 +1,88 @@ | |||
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 | |||
7 | import Button from '../../components/ui/Button'; | ||
8 | |||
9 | import { config } from './'; | ||
10 | import styles from './styles'; | ||
11 | |||
12 | const messages = defineMessages({ | ||
13 | headline: { | ||
14 | id: 'feature.delayApp.headline', | ||
15 | defaultMessage: '!!!Please purchase license to skip waiting', | ||
16 | }, | ||
17 | action: { | ||
18 | id: 'feature.delayApp.action', | ||
19 | defaultMessage: '!!!Get a Franz Supporter License', | ||
20 | }, | ||
21 | text: { | ||
22 | id: 'feature.delayApp.text', | ||
23 | defaultMessage: '!!!Franz will continue in {seconds} seconds.', | ||
24 | }, | ||
25 | }); | ||
26 | |||
27 | export default @inject('actions') @injectSheet(styles) @observer class DelayApp extends Component { | ||
28 | static propTypes = { | ||
29 | // eslint-disable-next-line | ||
30 | classes: PropTypes.object.isRequired, | ||
31 | }; | ||
32 | |||
33 | static contextTypes = { | ||
34 | intl: intlShape, | ||
35 | }; | ||
36 | |||
37 | state = { | ||
38 | countdown: config.delayDuration, | ||
39 | } | ||
40 | |||
41 | componentDidMount() { | ||
42 | this.countdownInterval = setInterval(() => { | ||
43 | this.setState({ | ||
44 | countdown: this.state.countdown - this.countdownIntervalTimeout, | ||
45 | }); | ||
46 | |||
47 | if (this.state.countdown <= 0) { | ||
48 | // reload(); | ||
49 | clearInterval(this.countdownInterval); | ||
50 | } | ||
51 | }, this.countdownIntervalTimeout); | ||
52 | } | ||
53 | |||
54 | componentWillUnmount() { | ||
55 | clearInterval(this.countdownInterval); | ||
56 | } | ||
57 | |||
58 | countdownInterval = null; | ||
59 | countdownIntervalTimeout = 1000; | ||
60 | |||
61 | render() { | ||
62 | const { classes, actions } = this.props; | ||
63 | const { intl } = this.context; | ||
64 | |||
65 | return ( | ||
66 | <div className={`${classes.container}`}> | ||
67 | <h1 className={classes.headline}>{intl.formatMessage(messages.headline)}</h1> | ||
68 | <Button | ||
69 | label={intl.formatMessage(messages.action)} | ||
70 | className={classes.button} | ||
71 | buttonType="inverted" | ||
72 | onClick={() => actions.ui.openSettings({ path: 'user' })} | ||
73 | /> | ||
74 | <p className="footnote">{intl.formatMessage(messages.text, { | ||
75 | seconds: this.state.countdown / 1000, | ||
76 | })}</p> | ||
77 | </div> | ||
78 | ); | ||
79 | } | ||
80 | } | ||
81 | |||
82 | DelayApp.wrappedComponent.propTypes = { | ||
83 | actions: PropTypes.shape({ | ||
84 | ui: PropTypes.shape({ | ||
85 | openSettings: PropTypes.func.isRequired, | ||
86 | }).isRequired, | ||
87 | }).isRequired, | ||
88 | }; | ||
diff --git a/src/features/delayApp/index.js b/src/features/delayApp/index.js new file mode 100644 index 000000000..9ffa1d2fd --- /dev/null +++ b/src/features/delayApp/index.js | |||
@@ -0,0 +1,70 @@ | |||
1 | import { autorun, observable, reaction } from 'mobx'; | ||
2 | import moment from 'moment'; | ||
3 | import DelayAppComponent from './Component'; | ||
4 | |||
5 | import { DEFAULT_FEATURES_CONFIG } from '../../config'; | ||
6 | |||
7 | const debug = require('debug')('Franz:feature:delayApp'); | ||
8 | |||
9 | export const config = { | ||
10 | delayOffset: DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.delayOffset, | ||
11 | delayDuration: DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait, | ||
12 | }; | ||
13 | |||
14 | export const state = observable({ | ||
15 | isDelayAppScreenVisible: DEFAULT_FEATURES_CONFIG.needToWaitToProceed, | ||
16 | }); | ||
17 | |||
18 | function setVisibility(value) { | ||
19 | Object.assign(state, { | ||
20 | isDelayAppScreenVisible: value, | ||
21 | }); | ||
22 | } | ||
23 | |||
24 | export default function init(stores) { | ||
25 | reaction( | ||
26 | () => stores.features.features.needToWaitToProceed, | ||
27 | (enabled, r) => { | ||
28 | if (enabled) { | ||
29 | debug('Initializing `delayApp` feature'); | ||
30 | |||
31 | // Dispose the reaction to run this only once | ||
32 | r.dispose(); | ||
33 | |||
34 | const { needToWaitToProceedConfig: globalConfig } = stores.features.features; | ||
35 | |||
36 | let shownAfterLaunch = false; | ||
37 | let timeLastDelay = moment(); | ||
38 | |||
39 | config.delayOffset = globalConfig.delayOffset !== undefined ? globalConfig.delayOffset : DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.delayOffset; | ||
40 | config.delayDuration = globalConfig.wait !== undefined ? globalConfig.wait : DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait; | ||
41 | |||
42 | autorun(() => { | ||
43 | if (stores.services.all.length === 0) { | ||
44 | shownAfterLaunch = true; | ||
45 | return; | ||
46 | } | ||
47 | |||
48 | const diff = moment().diff(timeLastDelay); | ||
49 | if ((stores.app.isFocused && diff >= config.delayOffset) || !shownAfterLaunch) { | ||
50 | debug(`App will be delayed for ${config.delayDuration / 1000}s`); | ||
51 | |||
52 | setVisibility(true); | ||
53 | |||
54 | timeLastDelay = moment(); | ||
55 | shownAfterLaunch = true; | ||
56 | |||
57 | setTimeout(() => { | ||
58 | debug('Resetting app delay'); | ||
59 | |||
60 | setVisibility(false); | ||
61 | }, DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait + 1000); // timer needs to be able to hit 0 | ||
62 | } | ||
63 | }); | ||
64 | } | ||
65 | }, | ||
66 | ); | ||
67 | } | ||
68 | |||
69 | export const Component = DelayAppComponent; | ||
70 | |||
diff --git a/src/features/delayApp/styles.js b/src/features/delayApp/styles.js new file mode 100644 index 000000000..5c214cfdf --- /dev/null +++ b/src/features/delayApp/styles.js | |||
@@ -0,0 +1,23 @@ | |||
1 | export default theme => ({ | ||
2 | container: { | ||
3 | background: theme.colorBackground, | ||
4 | position: 'absolute', | ||
5 | top: 0, | ||
6 | width: '100%', | ||
7 | display: 'flex', | ||
8 | 'flex-direction': 'column', | ||
9 | 'align-items': 'center', | ||
10 | 'justify-content': 'center', | ||
11 | 'z-index': 150, | ||
12 | }, | ||
13 | headline: { | ||
14 | color: theme.colorHeadline, | ||
15 | margin: [25, 0, 40], | ||
16 | 'max-width': 500, | ||
17 | 'text-align': 'center', | ||
18 | 'line-height': '1.3em', | ||
19 | }, | ||
20 | button: { | ||
21 | margin: [40, 0, 20], | ||
22 | }, | ||
23 | }); | ||
diff --git a/src/features/serviceProxy/index.js b/src/features/serviceProxy/index.js new file mode 100644 index 000000000..cad9844fd --- /dev/null +++ b/src/features/serviceProxy/index.js | |||
@@ -0,0 +1,45 @@ | |||
1 | import { autorun, observable } from 'mobx'; | ||
2 | import { remote } from 'electron'; | ||
3 | |||
4 | import { DEFAULT_FEATURES_CONFIG } from '../../config'; | ||
5 | |||
6 | const { session } = remote; | ||
7 | |||
8 | const debug = require('debug')('Franz:feature:serviceProxy'); | ||
9 | |||
10 | export const config = observable({ | ||
11 | isEnabled: DEFAULT_FEATURES_CONFIG.isServiceProxyEnabled, | ||
12 | isPremium: DEFAULT_FEATURES_CONFIG.isServiceProxyPremiumFeature, | ||
13 | }); | ||
14 | |||
15 | export default function init(stores) { | ||
16 | debug('Initializing `serviceProxy` feature'); | ||
17 | |||
18 | autorun(() => { | ||
19 | const { isServiceProxyEnabled, isServiceProxyPremiumFeature } = stores.features.features; | ||
20 | |||
21 | config.isEnabled = isServiceProxyEnabled !== undefined ? isServiceProxyEnabled : DEFAULT_FEATURES_CONFIG.isServiceProxyEnabled; | ||
22 | config.isPremium = isServiceProxyPremiumFeature !== undefined ? isServiceProxyPremiumFeature : DEFAULT_FEATURES_CONFIG.isServiceProxyPremiumFeature; | ||
23 | |||
24 | const services = stores.services.all; | ||
25 | const isPremiumUser = stores.user.data.isPremium; | ||
26 | |||
27 | services.forEach((service) => { | ||
28 | const s = session.fromPartition(`persist:service-${service.id}`); | ||
29 | let proxyHost = 'direct://'; | ||
30 | |||
31 | if (config.isEnabled && (isPremiumUser || !config.isPremium)) { | ||
32 | const serviceProxyConfig = stores.settings.proxy[service.id]; | ||
33 | |||
34 | if (serviceProxyConfig && serviceProxyConfig.isEnabled && serviceProxyConfig.host) { | ||
35 | proxyHost = serviceProxyConfig.host; | ||
36 | } | ||
37 | } | ||
38 | |||
39 | s.setProxy({ proxyRules: proxyHost }, (e) => { | ||
40 | debug(`Using proxy "${proxyHost}" for "${service.name}" (${service.id})`, e); | ||
41 | }); | ||
42 | }); | ||
43 | }); | ||
44 | } | ||
45 | |||
diff --git a/src/features/spellchecker/index.js b/src/features/spellchecker/index.js new file mode 100644 index 000000000..63506103c --- /dev/null +++ b/src/features/spellchecker/index.js | |||
@@ -0,0 +1,27 @@ | |||
1 | import { autorun, observable } from 'mobx'; | ||
2 | |||
3 | import { DEFAULT_FEATURES_CONFIG } from '../../config'; | ||
4 | |||
5 | const debug = require('debug')('Franz:feature:spellchecker'); | ||
6 | |||
7 | export const config = observable({ | ||
8 | isPremiumFeature: DEFAULT_FEATURES_CONFIG.isSpellcheckerPremiumFeature, | ||
9 | }); | ||
10 | |||
11 | export default function init(stores) { | ||
12 | debug('Initializing `spellchecker` feature'); | ||
13 | |||
14 | autorun(() => { | ||
15 | const { isSpellcheckerPremiumFeature } = stores.features.features; | ||
16 | |||
17 | config.isPremiumFeature = isSpellcheckerPremiumFeature !== undefined ? isSpellcheckerPremiumFeature : DEFAULT_FEATURES_CONFIG.isSpellcheckerPremiumFeature; | ||
18 | |||
19 | if (!stores.user.data.isPremium && config.isPremiumFeature && stores.settings.app.enableSpellchecking) { | ||
20 | debug('Override settings.spellcheckerEnabled flag to false'); | ||
21 | |||
22 | Object.assign(stores.settings.app, { | ||
23 | enableSpellchecking: false, | ||
24 | }); | ||
25 | } | ||
26 | }); | ||
27 | } | ||
diff --git a/src/helpers/i18n-helpers.js b/src/helpers/i18n-helpers.js new file mode 100644 index 000000000..00a2061c1 --- /dev/null +++ b/src/helpers/i18n-helpers.js | |||
@@ -0,0 +1,27 @@ | |||
1 | export function getLocale({ locale, locales, defaultLocale, fallbackLocale }) { | ||
2 | let localeStr = locale; | ||
3 | if (locales[locale] === undefined) { | ||
4 | let localeFuzzy; | ||
5 | Object.keys(locales).forEach((localStr) => { | ||
6 | if (locales && Object.hasOwnProperty.call(locales, localStr)) { | ||
7 | if (locale.substring(0, 2) === localStr.substring(0, 2)) { | ||
8 | localeFuzzy = localStr; | ||
9 | } | ||
10 | } | ||
11 | }); | ||
12 | |||
13 | if (localeFuzzy !== undefined) { | ||
14 | localeStr = localeFuzzy; | ||
15 | } | ||
16 | } | ||
17 | |||
18 | if (locales[localeStr] === undefined) { | ||
19 | localeStr = defaultLocale; | ||
20 | } | ||
21 | |||
22 | if (!localeStr) { | ||
23 | localeStr = fallbackLocale; | ||
24 | } | ||
25 | |||
26 | return localeStr; | ||
27 | } | ||
diff --git a/src/helpers/visibility-helper.js b/src/helpers/visibility-helper.js new file mode 100644 index 000000000..8456c4ecf --- /dev/null +++ b/src/helpers/visibility-helper.js | |||
@@ -0,0 +1,27 @@ | |||
1 | export function onVisibilityChange(cb) { | ||
2 | let isVisible = true; | ||
3 | |||
4 | if (!cb) { | ||
5 | throw new Error('no callback given'); | ||
6 | } | ||
7 | |||
8 | function focused() { | ||
9 | if (!isVisible) { | ||
10 | cb(isVisible = true); | ||
11 | } | ||
12 | } | ||
13 | |||
14 | function unfocused() { | ||
15 | if (isVisible) { | ||
16 | cb(isVisible = false); | ||
17 | } | ||
18 | } | ||
19 | |||
20 | document.addEventListener('visibilitychange', () => { (document.hidden ? unfocused : focused)(); }); | ||
21 | |||
22 | window.onpageshow = focused; | ||
23 | window.onfocus = focused; | ||
24 | |||
25 | window.onpagehid = unfocused; | ||
26 | window.onblur = unfocused; | ||
27 | } | ||
diff --git a/src/i18n/languages.js b/src/i18n/languages.js index 34b369da7..b262df01e 100644 --- a/src/i18n/languages.js +++ b/src/i18n/languages.js | |||
@@ -27,45 +27,43 @@ export const APP_LOCALES = { | |||
27 | es: 'Español', | 27 | es: 'Español', |
28 | }; | 28 | }; |
29 | 29 | ||
30 | export default APP_LOCALES; | 30 | // Hunspell compatible keys |
31 | export const SPELLCHECKER_LOCALES = { | ||
32 | 'bg-bg': 'българÑки език', | ||
33 | 'ca-es': 'Català ', | ||
34 | 'cs-cz': 'Čeština', | ||
35 | 'da-dk': 'Dansk', | ||
36 | 'de-de': 'Deutsch', | ||
37 | 'el-gr': 'λληνικά (Greek)', | ||
38 | 'en-us': 'English', | ||
39 | 'es-es': 'Español', | ||
40 | 'et-ee': 'Estonian', | ||
41 | 'fa-ir': 'Ùارسی (Persian)', | ||
42 | 'fo-fo': 'Faroese', | ||
43 | 'fr-fr': 'Français', | ||
44 | 'he-il': 'עברית (Hebrew)', | ||
45 | 'hr-hr': 'Hrvatski jezik', | ||
46 | 'hu-hu': 'Magyar', | ||
47 | 'it-it': 'Italiano', | ||
48 | ko: 'Korean', | ||
49 | 'lt-lt': 'Lietuvių kalba', | ||
50 | 'lv-lv': 'Latviešu valoda', | ||
51 | 'nb-no': 'Norsk bokmål', | ||
52 | 'nl-nl': 'Nederlands', | ||
53 | 'pl-pl': 'Język polski', | ||
54 | 'pt-br': 'Português (Brazil)', | ||
55 | 'pt-pt': 'Português', | ||
56 | 'ro-ro': 'Limba română', | ||
57 | 'ru-ru': 'РуÑÑкий (Russian)', | ||
58 | 'sk-sk': 'SlovenÄina', | ||
59 | 'sl-si': 'Slovenski jezik', | ||
60 | sr: 'СрпÑки језик (Serbian)', | ||
61 | 'sv-se': 'Svenska', | ||
62 | 'ta-in': 'தமிழ௠(Tamil)', | ||
63 | 'tg-tg': 'Тоҷикӣ (Tajik)', | ||
64 | tr: 'Türkçe', | ||
65 | 'uk-ua': 'УкраїнÑька (Ukrainian)', | ||
66 | vi: 'Tiếng Việt', | ||
67 | }; | ||
31 | 68 | ||
32 | // export const SPELLCHECKER_LOCALES = { | 69 | export default APP_LOCALES; |
33 | // af: 'Afrikaans', | ||
34 | // sq: 'Albanian', | ||
35 | // ar: 'Arabic', | ||
36 | // bg: 'Bulgarian', | ||
37 | // zh: 'Chinese', | ||
38 | // hr: 'Croatian', | ||
39 | // cs: 'Czech', | ||
40 | // da: 'Danish', | ||
41 | // nl: 'Dutch', | ||
42 | // en: 'English', | ||
43 | // 'en-AU': 'English (AU)', | ||
44 | // 'en-CA': 'English (CA)', | ||
45 | // 'en-GB': 'English (GB)', | ||
46 | // fi: 'Finnish', | ||
47 | // fr: 'French', | ||
48 | // ka: 'Georgian', | ||
49 | // de: 'German', | ||
50 | // el: 'Greek, Modern', | ||
51 | // hi: 'Hindi', | ||
52 | // hu: 'Hungarian', | ||
53 | // id: 'Indonesian', | ||
54 | // it: 'Italian', | ||
55 | // ja: 'Japanese', | ||
56 | // jv: 'Javanese', | ||
57 | // ko: 'Korean', | ||
58 | // lt: 'Lithuanian', | ||
59 | // lv: 'Latvian', | ||
60 | // ms: 'Malay', | ||
61 | // no: 'Norwegian', | ||
62 | // pl: 'Polish', | ||
63 | // pt: 'Portuguese', | ||
64 | // ro: 'Romanian, Moldavian, Moldovan', | ||
65 | // ru: 'Russian', | ||
66 | // sk: 'Slovak', | ||
67 | // es: 'Spanish', | ||
68 | // sv: 'Swedish', | ||
69 | // uk: 'Ukrainian', | ||
70 | // vi: 'Vietnamese', | ||
71 | // }; | ||
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json index 4ea3eb1a7..117e66d76 100644 --- a/src/i18n/locales/ca.json +++ b/src/i18n/locales/ca.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "No es pot connectar amb els serveis en lÃnia de Franz", | 5 | "global.api.unhealthy" : "No es pot connectar amb els serveis en lÃnia de Franz", |
3 | "global.notConnectedToTheInternet" : "No esteu connectat a Internet.", | 6 | "global.notConnectedToTheInternet" : "No esteu connectat a Internet.", |
4 | "import.headline" : "Importa els teus serveis Franz 4", | 7 | "import.headline" : "Importa els teus serveis Franz 4", |
@@ -7,23 +10,23 @@ | |||
7 | "import.submit.label" : "Importa serveis", | 10 | "import.submit.label" : "Importa serveis", |
8 | "infobar.buttonChangelog" : "Que hi ha de nou?", | 11 | "infobar.buttonChangelog" : "Que hi ha de nou?", |
9 | "infobar.buttonInstallUpdate" : "Reinicia i instal·la l'actualització", | 12 | "infobar.buttonInstallUpdate" : "Reinicia i instal·la l'actualització", |
10 | "infobar.buttonReloadServices" : "Recarrega serveis", | 13 | "infobar.buttonReloadServices" : "Recarrega els serveis", |
11 | "infobar.requiredRequestsFailed" : "No s'han pogut carregar els serveis i la informació de l'usuari", | 14 | "infobar.requiredRequestsFailed" : "No s'han pogut carregar els serveis i la informació de l'usuari", |
12 | "infobar.servicesUpdated" : "Els vostres serveis s'han actualitzat.", | 15 | "infobar.servicesUpdated" : "Els teus serveis s'han actualitzat.", |
13 | "infobar.updateAvailable" : "Hi ha disponible una nova actualització per a Franz.", | 16 | "infobar.updateAvailable" : "Hi ha disponible una nova actualització per a Franz.", |
14 | "invite.email.label" : "Correu electrònic", | 17 | "invite.email.label" : "Correu electrònic", |
15 | "invite.headline.friends" : "Convida 3 dels teus amics o companys", | 18 | "invite.headline.friends" : "Convida a tres dels teus amics o companys", |
16 | "invite.name.label" : "Nom", | 19 | "invite.name.label" : "Nom", |
17 | "invite.skip.label" : "Vull fer-ho més tard", | 20 | "invite.skip.label" : "Ho vull fer més tard", |
18 | "invite.submit.label" : "Enviar invitacions", | 21 | "invite.submit.label" : "Enviar invitacions", |
19 | "invite.successInfo" : "Invitacions enviades correctament", | 22 | "invite.successInfo" : "Invitacions enviades correctament", |
20 | "login.email.label" : "Correu electrònic", | 23 | "login.email.label" : "Correu electrònic", |
21 | "login.headline" : "Accedir", | 24 | "login.headline" : "Accedir-hi", |
22 | "login.invalidCredentials" : "El correu electrònic o la contrasenya no són và lids", | 25 | "login.invalidCredentials" : "El correu electrònic o la contrasenya no són và lids", |
23 | "login.link.password" : "Restablir contrasenya", | 26 | "login.link.password" : "Restablir la contrasenya", |
24 | "login.link.signup" : "Crea un compte gratuït", | 27 | "login.link.signup" : "Crea un compte gratuït", |
25 | "login.password.label" : "Contrasenya", | 28 | "login.password.label" : "Contrasenya", |
26 | "login.serverLogout" : "La teva sessió ha caducat, torna a iniciar la sessió.", | 29 | "login.serverLogout" : "La teva sessió ha caducat, torna-la a iniciar.", |
27 | "login.submit.label" : "Accedir", | 30 | "login.submit.label" : "Accedir", |
28 | "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.", | 31 | "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.", |
29 | "menu.app.about" : "Sobre Franz", | 32 | "menu.app.about" : "Sobre Franz", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "No s'ha trobat cap usuari amb aquesta adreça de correu electrònic", | 79 | "password.noUser" : "No s'ha trobat cap usuari amb aquesta adreça de correu electrònic", |
77 | "password.submit.label" : "Enviar", | 80 | "password.submit.label" : "Enviar", |
78 | "password.successInfo" : "Comproveu el vostre correu electrònic", | 81 | "password.successInfo" : "Comproveu el vostre correu electrònic", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Donar suport a Franz", | 83 | "pricing.headline" : "Donar suport a Franz", |
80 | "pricing.link.skipPayment" : "No vull donar suport al desenvolupament de Franz.", | 84 | "pricing.link.skipPayment" : "No vull donar suport al desenvolupament de Franz.", |
81 | "pricing.submit.label" : "Vull donar suport al desenvolupament de Franz", | 85 | "pricing.submit.label" : "Vull donar suport al desenvolupament de Franz", |
@@ -116,7 +120,8 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Obrir en segon plà ", | 120 | "settings.app.form.autoLaunchInBackground" : "Obrir en segon plà ", |
117 | "settings.app.form.autoLaunchOnStart" : "Iniciar Franz a l'inici", | 121 | "settings.app.form.autoLaunchOnStart" : "Iniciar Franz a l'inici", |
118 | "settings.app.form.beta" : "Inclou versions beta", | 122 | "settings.app.form.beta" : "Inclou versions beta", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Activar acceleració GPU", | ||
120 | "settings.app.form.enableMenuBar" : "Mostra Franz a la barra de menú", | 125 | "settings.app.form.enableMenuBar" : "Mostra Franz a la barra de menú", |
121 | "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogrà fica", | 126 | "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogrà fica", |
122 | "settings.app.form.enableSystemTray" : "Mostra Franz a la safata del sistema", | 127 | "settings.app.form.enableSystemTray" : "Mostra Franz a la safata del sistema", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Mantén a Franz en segon pla en tancar la finestra", | 131 | "settings.app.form.runInBackground" : "Mantén a Franz en segon pla en tancar la finestra", |
127 | "settings.app.form.showDisabledServices" : "Mostra les pestanyes dels serveis desactivats", | 132 | "settings.app.form.showDisabledServices" : "Mostra les pestanyes dels serveis desactivats", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostra la insÃgnia de missatges no llegits quan les notificacions estiguin desactivades", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostra la insÃgnia de missatges no llegits quan les notificacions estiguin desactivades", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Configuració", | 135 | "settings.app.headline" : "Configuració", |
130 | "settings.app.headlineAdvanced" : "Avançat", | 136 | "settings.app.headlineAdvanced" : "Avançat", |
131 | "settings.app.headlineAppearance" : "Aparença", | 137 | "settings.app.headlineAppearance" : "Aparença", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Edita {name}", | 172 | "settings.service.form.editServiceHeadline" : "Edita {name}", |
167 | "settings.service.form.enableAudio" : "Activa l'Ã udio", | 173 | "settings.service.form.enableAudio" : "Activa l'Ã udio", |
168 | "settings.service.form.enableBadge" : "Mostra les insÃgnies als missatges no llegits.", | 174 | "settings.service.form.enableBadge" : "Mostra les insÃgnies als missatges no llegits.", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Activa les notificacions", | 176 | "settings.service.form.enableNotification" : "Activa les notificacions", |
170 | "settings.service.form.enableService" : "Activa el servei", | 177 | "settings.service.form.enableService" : "Activa el servei", |
171 | "settings.service.form.headlineBadges" : "InsÃgnies de missatges no llegits", | 178 | "settings.service.form.headlineBadges" : "InsÃgnies de missatges no llegits", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Mostra la insÃgnia de missatge per a tots els missatges nous", | 185 | "settings.service.form.indirectMessages" : "Mostra la insÃgnia de missatge per a tots els missatges nous", |
179 | "settings.service.form.isMutedInfo" : "Quan es desactiva, tots els sons de notificació i reproducció d'à udio es silenciaran", | 186 | "settings.service.form.isMutedInfo" : "Quan es desactiva, tots els sons de notificació i reproducció d'à udio es silenciaran", |
180 | "settings.service.form.name" : "Nom", | 187 | "settings.service.form.name" : "Nom", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Desa el servei", | 194 | "settings.service.form.saveButton" : "Desa el servei", |
182 | "settings.service.form.tabHosted" : "Allotjat", | 195 | "settings.service.form.tabHosted" : "Allotjat", |
183 | "settings.service.form.tabOnPremise" : "Allotjat per si mateix âï¸", | 196 | "settings.service.form.tabOnPremise" : "Allotjat per si mateix âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Residents d'EU: es poden aplicar impostos locals", | 233 | "subscription.euTaxInfo" : "Residents d'EU: es poden aplicar impostos locals", |
221 | "subscription.features.ads" : "Sense anuncis, mai!", | 234 | "subscription.features.ads" : "Sense anuncis, mai!", |
222 | "subscription.features.comingSoon" : "properament", | 235 | "subscription.features.comingSoon" : "properament", |
223 | "subscription.features.customServices" : "Serveis privats per a vostè i el seu equip", | ||
224 | "subscription.features.encryptedSync" : "Sincronització de sessió xifrada", | 236 | "subscription.features.encryptedSync" : "Sincronització de sessió xifrada", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Afegiu serveis en premissa\/allotjats com HipChat", | 238 | "subscription.features.onpremise" : "Afegiu serveis en premissa\/allotjats com HipChat", |
226 | "subscription.features.vpn" : "Compatibilitat amb proxy i VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "El compte de pagament Franz Premium Supporter inclou", | 242 | "subscription.includedFeatures" : "El compte de pagament Franz Premium Supporter inclou", |
228 | "subscription.paymentSessionError" : "No s'ha pogut inicialitzar el formulari de pagament", | 243 | "subscription.paymentSessionError" : "No s'ha pogut inicialitzar el formulari de pagament", |
229 | "subscription.submit.label" : "Vull donar suport al desenvolupament de Franz", | 244 | "subscription.submit.label" : "Vull donar suport al desenvolupament de Franz", |
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json index ed4c7a468..eb8088e28 100644 --- a/src/i18n/locales/cs.json +++ b/src/i18n/locales/cs.json | |||
@@ -1,5 +1,8 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Nemůžeme Franz připojit k online službám", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
5 | "global.api.unhealthy" : "Nemůžeme připojit Franz k online službám", | ||
3 | "global.notConnectedToTheInternet" : "Připojenà k internetu nenà k dispozici.", | 6 | "global.notConnectedToTheInternet" : "Připojenà k internetu nenà k dispozici.", |
4 | "import.headline" : "Importovat služby z Franz 4", | 7 | "import.headline" : "Importovat služby z Franz 4", |
5 | "import.notSupportedHeadline" : "Služby nejsou podporovány ve verzi Franz 5", | 8 | "import.notSupportedHeadline" : "Služby nejsou podporovány ve verzi Franz 5", |
@@ -11,13 +14,13 @@ | |||
11 | "infobar.requiredRequestsFailed" : "Nenà možné nahrát služby a informace o uživateli", | 14 | "infobar.requiredRequestsFailed" : "Nenà možné nahrát služby a informace o uživateli", |
12 | "infobar.servicesUpdated" : "Vaše služby byly aktualizovány", | 15 | "infobar.servicesUpdated" : "Vaše služby byly aktualizovány", |
13 | "infobar.updateAvailable" : "Nová aktualizace Franz je k dispozici", | 16 | "infobar.updateAvailable" : "Nová aktualizace Franz je k dispozici", |
14 | "invite.email.label" : "Email", | 17 | "invite.email.label" : "E-mailová adresa", |
15 | "invite.headline.friends" : "Pozvěte 3 přátele nebo kolegy", | 18 | "invite.headline.friends" : "Pozvěte 3 přátele nebo kolegy", |
16 | "invite.name.label" : "Jméno", | 19 | "invite.name.label" : "Jméno", |
17 | "invite.skip.label" : "Nechat na později", | 20 | "invite.skip.label" : "Nechat na později", |
18 | "invite.submit.label" : "Poslat pozvánky", | 21 | "invite.submit.label" : "Poslat pozvánky", |
19 | "invite.successInfo" : "Pozvánky byly úspěšně odeslány.", | 22 | "invite.successInfo" : "Pozvánky byly úspěšně odeslány.", |
20 | "login.email.label" : "Email", | 23 | "login.email.label" : "E-mailová adresa", |
21 | "login.headline" : "Přihlásit se", | 24 | "login.headline" : "Přihlásit se", |
22 | "login.invalidCredentials" : "Email nebo heslo nesouhlasÃ", | 25 | "login.invalidCredentials" : "Email nebo heslo nesouhlasÃ", |
23 | "login.link.password" : "Obnovit heslo", | 26 | "login.link.password" : "Obnovit heslo", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Pro emailovou adresu nebyl nalezený žádný uživatel", | 79 | "password.noUser" : "Pro emailovou adresu nebyl nalezený žádný uživatel", |
77 | "password.submit.label" : "Odeslat", | 80 | "password.submit.label" : "Odeslat", |
78 | "password.successInfo" : "ProsÃm, zkontrolujte svůj e-mail", | 81 | "password.successInfo" : "ProsÃm, zkontrolujte svůj e-mail", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Podpořit Franz", | 83 | "pricing.headline" : "Podpořit Franz", |
80 | "pricing.link.skipPayment" : "Nechci podporovat vývoj aplikace Franz.", | 84 | "pricing.link.skipPayment" : "Nechci podporovat vývoj aplikace Franz.", |
81 | "pricing.submit.label" : "Chci podpořit vývoj aplikace Franz", | 85 | "pricing.submit.label" : "Chci podpořit vývoj aplikace Franz", |
@@ -116,6 +120,7 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Spustit na pozadÃ", | 120 | "settings.app.form.autoLaunchInBackground" : "Spustit na pozadÃ", |
117 | "settings.app.form.autoLaunchOnStart" : "Spustit Franz při startu", | 121 | "settings.app.form.autoLaunchOnStart" : "Spustit Franz při startu", |
118 | "settings.app.form.beta" : "Zahrnout beta verze", | 122 | "settings.app.form.beta" : "Zahrnout beta verze", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "Aktivovat GPU zrychlenÃ", | 124 | "settings.app.form.enableGPUAcceleration" : "Aktivovat GPU zrychlenÃ", |
120 | "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu nabÃdce", | 125 | "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu nabÃdce", |
121 | "settings.app.form.enableSpellchecking" : "Zapnout kontrolu pravopisu", | 126 | "settings.app.form.enableSpellchecking" : "Zapnout kontrolu pravopisu", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Ponechat Franze v pozadà pÅ™i zavÃránà okna", | 131 | "settings.app.form.runInBackground" : "Ponechat Franze v pozadà pÅ™i zavÃránà okna", |
127 | "settings.app.form.showDisabledServices" : "Zobrazit záložky vypnutých služeb", | 132 | "settings.app.form.showDisabledServices" : "Zobrazit záložky vypnutých služeb", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Zobrazit odznak pro nepÅ™eÄtené zprávy když jsou upozornÄ›nà vypnutá", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Zobrazit odznak pro nepÅ™eÄtené zprávy když jsou upozornÄ›nà vypnutá", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "NastavenÃ", | 135 | "settings.app.headline" : "NastavenÃ", |
130 | "settings.app.headlineAdvanced" : "PokroÄilé", | 136 | "settings.app.headlineAdvanced" : "PokroÄilé", |
131 | "settings.app.headlineAppearance" : "Vzhled", | 137 | "settings.app.headlineAppearance" : "Vzhled", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Upravit {name}", | 172 | "settings.service.form.editServiceHeadline" : "Upravit {name}", |
167 | "settings.service.form.enableAudio" : "Zapnout zvuk", | 173 | "settings.service.form.enableAudio" : "Zapnout zvuk", |
168 | "settings.service.form.enableBadge" : "Ukázat odznaky nepÅ™eÄtených zpráv", | 174 | "settings.service.form.enableBadge" : "Ukázat odznaky nepÅ™eÄtených zpráv", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Povolit upozornÄ›nÃ", | 176 | "settings.service.form.enableNotification" : "Povolit upozornÄ›nÃ", |
170 | "settings.service.form.enableService" : "Povolit službu", | 177 | "settings.service.form.enableService" : "Povolit službu", |
171 | "settings.service.form.headlineBadges" : "Odznaky nepÅ™eÄtených zpráv", | 178 | "settings.service.form.headlineBadges" : "Odznaky nepÅ™eÄtených zpráv", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Zobrazovat znak zprávy pro všechny nové zprávy", | 185 | "settings.service.form.indirectMessages" : "Zobrazovat znak zprávy pro všechny nové zprávy", |
179 | "settings.service.form.isMutedInfo" : "Pokud je vypnuto, všechny zvuky notifikacà a jiného audia budou ztišeny", | 186 | "settings.service.form.isMutedInfo" : "Pokud je vypnuto, všechny zvuky notifikacà a jiného audia budou ztišeny", |
180 | "settings.service.form.name" : "Jméno", | 187 | "settings.service.form.name" : "Jméno", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Uložit službu", | 194 | "settings.service.form.saveButton" : "Uložit službu", |
182 | "settings.service.form.tabHosted" : "Hostováno", | 195 | "settings.service.form.tabHosted" : "Hostováno", |
183 | "settings.service.form.tabOnPremise" : "SamostatnÄ› hostované âï¸", | 196 | "settings.service.form.tabOnPremise" : "SamostatnÄ› hostované âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Pro obyvatelé EU: mohou být aplikovány lokálnà daně", | 233 | "subscription.euTaxInfo" : "Pro obyvatelé EU: mohou být aplikovány lokálnà daně", |
221 | "subscription.features.ads" : "Žádné reklamy, nikdy!", | 234 | "subscription.features.ads" : "Žádné reklamy, nikdy!", |
222 | "subscription.features.comingSoon" : "již brzy", | 235 | "subscription.features.comingSoon" : "již brzy", |
223 | "subscription.features.customServices" : "Privátnà služby pro vás a váš tým", | ||
224 | "subscription.features.encryptedSync" : "Å ifrovaná synchronizace relacÃ", | 236 | "subscription.features.encryptedSync" : "Å ifrovaná synchronizace relacÃ", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Přidat hostované služby jako HipChat", | 238 | "subscription.features.onpremise" : "Přidat hostované služby jako HipChat", |
226 | "subscription.features.vpn" : "Proxy & VPN podpora", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Placený úÄet Premium Supporter Franz zahrnuje", | 242 | "subscription.includedFeatures" : "Placený úÄet Premium Supporter Franz zahrnuje", |
228 | "subscription.paymentSessionError" : "Nebylo možné inicializovat platbu od", | 243 | "subscription.paymentSessionError" : "Nebylo možné inicializovat platbu od", |
229 | "subscription.submit.label" : "Chci podpořit vývoj aplikace Franz", | 244 | "subscription.submit.label" : "Chci podpořit vývoj aplikace Franz", |
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index fa61d26d4..6aa909519 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json | |||
@@ -1,37 +1,40 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Upgrade deinen Account", | ||
3 | "feature.delayApp.headline" : "Erspare dir das Warten mit einer Franz Supporter Lizenz", | ||
4 | "feature.delayApp.text" : "Es geht in {seconds} Sekunden weiter.", | ||
2 | "global.api.unhealthy" : "Verbindung mit dem Franz Online Service fehlgeschlagen", | 5 | "global.api.unhealthy" : "Verbindung mit dem Franz Online Service fehlgeschlagen", |
3 | "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.", | 6 | "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.", |
4 | "import.headline" : "Deine Franz 4 Dienste importieren", | 7 | "import.headline" : "Deine Franz 4 Dienste importieren", |
5 | "import.notSupportedHeadline" : "Dienste, die noch nicht von Franz 5 unterstützt werden", | 8 | "import.notSupportedHeadline" : "Dienste, die noch nicht von Franz 5 unterstützt werden", |
6 | "import.skip.label" : "Ich möchte Dienste selbst hinzufügen", | 9 | "import.skip.label" : "Ich möchte Dienste selbst hinzufügen", |
7 | "import.submit.label" : "Dienste importieren", | 10 | "import.submit.label" : "Dienste importieren", |
8 | "infobar.buttonChangelog" : "Was gibt es neues?", | 11 | "infobar.buttonChangelog" : "Was ist neu?", |
9 | "infobar.buttonInstallUpdate" : "Neu starten & Update installieren", | 12 | "infobar.buttonInstallUpdate" : "Neu starten & Update installieren", |
10 | "infobar.buttonReloadServices" : "Dienste neuladen", | 13 | "infobar.buttonReloadServices" : "Dienste neuladen", |
11 | "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden", | 14 | "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden", |
12 | "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.", | 15 | "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.", |
13 | "infobar.updateAvailable" : "Eine neue Version von Franz ist verfügbar.", | 16 | "infobar.updateAvailable" : "Eine neue Version von Franz ist verfügbar.", |
14 | "invite.email.label" : "E-Mail Adresse", | 17 | "invite.email.label" : "E-Mail-Adresse", |
15 | "invite.headline.friends" : "Lade 3 Freunde ein", | 18 | "invite.headline.friends" : "Lade 3 Freunde oder Kollegen ein", |
16 | "invite.name.label" : "Name", | 19 | "invite.name.label" : "Name", |
17 | "invite.skip.label" : "Ich möchte das später tun", | 20 | "invite.skip.label" : "Ich möchte das später tun", |
18 | "invite.submit.label" : "Einladungen schicken", | 21 | "invite.submit.label" : "Einladungen schicken", |
19 | "invite.successInfo" : "Einladungen wurden erfolgreich gesendet, vielen Dank.", | 22 | "invite.successInfo" : "Die Einladungen wurden erfolgreich gesendet.", |
20 | "login.email.label" : "E-Mail Adresse", | 23 | "login.email.label" : "E-Mail-Adresse", |
21 | "login.headline" : "Anmelden", | 24 | "login.headline" : "Anmelden", |
22 | "login.invalidCredentials" : "E-Mail Adresse oder Passwort ungültig", | 25 | "login.invalidCredentials" : "E-Mail Adresse oder Passwort ungültig", |
23 | "login.link.password" : "Passwort zurücksetzen", | 26 | "login.link.password" : "Passwort zurücksetzen", |
24 | "login.link.signup" : "Kostenloses Konto erstellen", | 27 | "login.link.signup" : "Kostenloses Konto erstellen", |
25 | "login.password.label" : "Passwort", | 28 | "login.password.label" : "Passwort", |
26 | "login.serverLogout" : "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.", | 29 | "login.serverLogout" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", |
27 | "login.submit.label" : "Anmelden", | 30 | "login.submit.label" : "Anmelden", |
28 | "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.", | 31 | "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", |
29 | "menu.app.about" : "Ãœber Franz", | 32 | "menu.app.about" : "Ãœber Franz", |
30 | "menu.app.hide" : "Franz ausblenden", | 33 | "menu.app.hide" : "Ausblenden", |
31 | "menu.app.hideOthers" : "Andere ausblenden", | 34 | "menu.app.hideOthers" : "Andere ausblenden", |
32 | "menu.app.quit" : "Franz Beenden", | 35 | "menu.app.quit" : "Beenden", |
33 | "menu.app.settings" : "Einstellungen", | 36 | "menu.app.settings" : "Einstellungen", |
34 | "menu.app.unhide" : "Alle einblenden", | 37 | "menu.app.unhide" : "Einblenden", |
35 | "menu.edit" : "Bearbeiten", | 38 | "menu.edit" : "Bearbeiten", |
36 | "menu.edit.copy" : "Kopieren", | 39 | "menu.edit.copy" : "Kopieren", |
37 | "menu.edit.cut" : "Ausschneiden", | 40 | "menu.edit.cut" : "Ausschneiden", |
@@ -42,7 +45,7 @@ | |||
42 | "menu.edit.redo" : "Wiederholen", | 45 | "menu.edit.redo" : "Wiederholen", |
43 | "menu.edit.selectAll" : "Alle auswählen", | 46 | "menu.edit.selectAll" : "Alle auswählen", |
44 | "menu.edit.speech" : "Sprachausgabe", | 47 | "menu.edit.speech" : "Sprachausgabe", |
45 | "menu.edit.startDictation" : "Diktat starten ...", | 48 | "menu.edit.startDictation" : "Diktat starten", |
46 | "menu.edit.startSpeaking" : "Sprachausgabe starten", | 49 | "menu.edit.startSpeaking" : "Sprachausgabe starten", |
47 | "menu.edit.stopSpeaking" : "Sprachausgabe stoppen", | 50 | "menu.edit.stopSpeaking" : "Sprachausgabe stoppen", |
48 | "menu.edit.undo" : "Widerrufen", | 51 | "menu.edit.undo" : "Widerrufen", |
@@ -71,15 +74,16 @@ | |||
71 | "menu.window.minimize" : "Minimieren", | 74 | "menu.window.minimize" : "Minimieren", |
72 | "password.email.label" : "E-Mail Adresse", | 75 | "password.email.label" : "E-Mail Adresse", |
73 | "password.headline" : "Passwort zurücksetzen", | 76 | "password.headline" : "Passwort zurücksetzen", |
74 | "password.link.login" : "An deinem Konto anmelden", | 77 | "password.link.login" : "An Deinem Konto anmelden", |
75 | "password.link.signup" : "Kostenloses Konto erstellen", | 78 | "password.link.signup" : "Kostenloses Konto erstellen", |
76 | "password.noUser" : "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.", | 79 | "password.noUser" : "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.", |
77 | "password.submit.label" : "Absenden", | 80 | "password.submit.label" : "Absenden", |
78 | "password.successInfo" : "Wir haben dir eine E-Mail mit weiteren Anweisungen geschickt.", | 81 | "password.successInfo" : "Wir haben Dir eine E-Mail mit weiteren Anweisungen geschickt.", |
82 | "premiumFeature.button.upgradeAccount" : "Account upgraden", | ||
79 | "pricing.headline" : "Franz unterstützen", | 83 | "pricing.headline" : "Franz unterstützen", |
80 | "pricing.link.skipPayment" : "Ich möchte die Entwicklung von Franz nicht unterstützen.", | 84 | "pricing.link.skipPayment" : "Ich möchte die Entwicklung von Franz nicht unterstützen.", |
81 | "pricing.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen.", | 85 | "pricing.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen.", |
82 | "pricing.support.label" : "Wie möchtest du Franz unterstützen?", | 86 | "pricing.support.label" : "Wie möchtest Du Franz unterstützen?", |
83 | "service.crashHandler.action" : "{name} neuladen", | 87 | "service.crashHandler.action" : "{name} neuladen", |
84 | "service.crashHandler.autoReload" : "{name} wird in {seconds} Sekunden automatisch wiederhergestellt", | 88 | "service.crashHandler.autoReload" : "{name} wird in {seconds} Sekunden automatisch wiederhergestellt", |
85 | "service.crashHandler.headline" : "Oh nein!", | 89 | "service.crashHandler.headline" : "Oh nein!", |
@@ -93,8 +97,8 @@ | |||
93 | "settings.account.accountType.premium" : "Premium-Supporter Konto", | 97 | "settings.account.accountType.premium" : "Premium-Supporter Konto", |
94 | "settings.account.buttonSave" : "Profil aktualisieren", | 98 | "settings.account.buttonSave" : "Profil aktualisieren", |
95 | "settings.account.deleteAccount" : "Benutzerkonto löschen", | 99 | "settings.account.deleteAccount" : "Benutzerkonto löschen", |
96 | "settings.account.deleteEmailSent" : "Du hast eine Email zur Bestätigung der Löschung deines Benutzerkontos erhalten. Dein Benutzerkonto und deine Daten können nach der Löschung nicht wiederhergestellt werden!", | 100 | "settings.account.deleteEmailSent" : "Du hast eine Email zur Bestätigung der Löschung Deines Benutzerkontos erhalten. Dein Benutzerkonto und Deine Daten können nach der Löschung nicht wiederhergestellt werden!", |
97 | "settings.account.deleteInfo" : "Hier kannst du dein Franz Benutzerkonto, und alle dazugehörigen Daten, löschen.", | 101 | "settings.account.deleteInfo" : "Wenn du dein Franz Benutzerkonto nicht mehr länger benötigst, kannst du hier deinen Account und alle dazugehörigen Daten löschen.", |
98 | "settings.account.headline" : "Konto", | 102 | "settings.account.headline" : "Konto", |
99 | "settings.account.headlineAccount" : "Konto Informationen", | 103 | "settings.account.headlineAccount" : "Konto Informationen", |
100 | "settings.account.headlineDangerZone" : "Benutzerkonto löschen", | 104 | "settings.account.headlineDangerZone" : "Benutzerkonto löschen", |
@@ -116,29 +120,31 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen", | 120 | "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen", |
117 | "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen", | 121 | "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen", |
118 | "settings.app.form.beta" : "Beta-Versionen einbeziehen", | 122 | "settings.app.form.beta" : "Beta-Versionen einbeziehen", |
123 | "settings.app.form.darkMode" : "Die dunkle Seite erwartet dich (Dark Mode)", | ||
119 | "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren", | 124 | "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren", |
120 | "settings.app.form.enableMenuBar" : "Franz in Menüleiste anzeigen", | 125 | "settings.app.form.enableMenuBar" : "Franz in Menüleiste anzeigen", |
121 | "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren", | 126 | "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren", |
122 | "settings.app.form.enableSystemTray" : "Franz in der Systemleiste anzeigen", | 127 | "settings.app.form.enableSystemTray" : "Franz in der Taskleiste anzeigen", |
123 | "settings.app.form.hideDockIcon" : "Franz Icon im Dock ausblenden", | 128 | "settings.app.form.hideDockIcon" : "Franz Icon im Dock ausblenden", |
124 | "settings.app.form.language" : "Sprache", | 129 | "settings.app.form.language" : "Sprache", |
125 | "settings.app.form.minimizeToSystemTray" : "Franz in die Systemleiste minimieren", | 130 | "settings.app.form.minimizeToSystemTray" : "Franz in die Systemleiste minimieren", |
126 | "settings.app.form.runInBackground" : "Franz im Hintergrund behalten, wenn das Fenster geschlossen wird", | 131 | "settings.app.form.runInBackground" : "Franz im Hintergrund behalten, wenn das Fenster geschlossen wird", |
127 | "settings.app.form.showDisabledServices" : "Deaktivierte Services-Tabs anzeigen", | 132 | "settings.app.form.showDisabledServices" : "Deaktivierte Services-Tabs anzeigen", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Ungelesene Nachrichten zeigen, wenn die Benachrichtigungen deaktiviert sind", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Ungelesene Nachrichten zeigen, wenn die Benachrichtigungen deaktiviert sind", |
134 | "settings.app.form.spellcheckerLanguage" : "Sprache für Rechtschreibprüfung", | ||
129 | "settings.app.headline" : "Einstellungen", | 135 | "settings.app.headline" : "Einstellungen", |
130 | "settings.app.headlineAdvanced" : "Erweitert", | 136 | "settings.app.headlineAdvanced" : "Erweitert", |
131 | "settings.app.headlineAppearance" : "Darstellung", | 137 | "settings.app.headlineAppearance" : "Darstellung", |
132 | "settings.app.headlineGeneral" : "Allgemeines", | 138 | "settings.app.headlineGeneral" : "Allgemeines", |
133 | "settings.app.headlineLanguage" : "Sprache", | 139 | "settings.app.headlineLanguage" : "Sprache", |
134 | "settings.app.headlineUpdates" : "Updates", | 140 | "settings.app.headlineUpdates" : "Updates", |
135 | "settings.app.restartRequired" : "Änderungen werden erst nach einem Neustart wirksam. ", | 141 | "settings.app.restartRequired" : "Änderungen werden erst nach einem Neustart wirksam.", |
136 | "settings.app.subheadlineCache" : "Cache", | 142 | "settings.app.subheadlineCache" : "Cache", |
137 | "settings.app.translationHelp" : "Hilf uns, Franz in deine Sprache zu übersetzen.", | 143 | "settings.app.translationHelp" : "Hilf uns, Franz in Deine Sprache zu übersetzen.", |
138 | "settings.app.updateStatusAvailable" : "Update verfügbar, herunterladen...", | 144 | "settings.app.updateStatusAvailable" : "Update verfügbar, lädt herunter...", |
139 | "settings.app.updateStatusSearching" : "Suche nach Updates", | 145 | "settings.app.updateStatusSearching" : "Suche nach Updates", |
140 | "settings.app.updateStatusUpToDate" : "Du nutzt die aktuellste Version von Franz", | 146 | "settings.app.updateStatusUpToDate" : "Du nutzt die aktuellste Version von Franz", |
141 | "settings.invite.headline" : "Lade 3 deiner Freunde ein", | 147 | "settings.invite.headline" : "Lade 3 Deiner Freunde ein", |
142 | "settings.navigation.account" : "Konto", | 148 | "settings.navigation.account" : "Konto", |
143 | "settings.navigation.availableServices" : "Verfügbare Dienste", | 149 | "settings.navigation.availableServices" : "Verfügbare Dienste", |
144 | "settings.navigation.inviteFriends" : "Freunde einladen", | 150 | "settings.navigation.inviteFriends" : "Freunde einladen", |
@@ -150,7 +156,7 @@ | |||
150 | "settings.recipes.headline" : "Verfügbare Dienste", | 156 | "settings.recipes.headline" : "Verfügbare Dienste", |
151 | "settings.recipes.missingService" : "Fehlt ein Service?", | 157 | "settings.recipes.missingService" : "Fehlt ein Service?", |
152 | "settings.recipes.mostPopular" : "Am beliebtesten", | 158 | "settings.recipes.mostPopular" : "Am beliebtesten", |
153 | "settings.recipes.nothingFound" : "Entschuldigung, aber kein Dienst entspricht deiner Suchanfrage.", | 159 | "settings.recipes.nothingFound" : "Entschuldigung, aber der von Dir gesuchte Dienst konnte nicht gefunden werden.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Dienst erfolgreich hinzugefügt", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Dienst erfolgreich hinzugefügt", |
155 | "settings.searchService" : "Service suchen", | 161 | "settings.searchService" : "Service suchen", |
156 | "settings.service.error.goBack" : "Zurück zu den Diensten", | 162 | "settings.service.error.goBack" : "Zurück zu den Diensten", |
@@ -159,13 +165,14 @@ | |||
159 | "settings.service.form.addServiceHeadline" : "{name} hinzufügen", | 165 | "settings.service.form.addServiceHeadline" : "{name} hinzufügen", |
160 | "settings.service.form.availableServices" : "Verfügbare Dienste", | 166 | "settings.service.form.availableServices" : "Verfügbare Dienste", |
161 | "settings.service.form.customUrl" : "Eigener Server", | 167 | "settings.service.form.customUrl" : "Eigener Server", |
162 | "settings.service.form.customUrlPremiumInfo" : "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst du ein Franz Premium-Supporter Konto.", | 168 | "settings.service.form.customUrlPremiumInfo" : "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst Du ein Franz Premium-Supporter Konto.", |
163 | "settings.service.form.customUrlUpgradeAccount" : "Dein Konto upgraden", | 169 | "settings.service.form.customUrlUpgradeAccount" : "Dein Konto upgraden", |
164 | "settings.service.form.customUrlValidationError" : "Dein {name}-Server konnte nicht verifiziert werden.", | 170 | "settings.service.form.customUrlValidationError" : "Dein {name}-Server konnte nicht verifiziert werden.", |
165 | "settings.service.form.deleteButton" : "Dienst löschen", | 171 | "settings.service.form.deleteButton" : "Dienst löschen", |
166 | "settings.service.form.editServiceHeadline" : "{name} bearbeiten", | 172 | "settings.service.form.editServiceHeadline" : "{name} bearbeiten", |
167 | "settings.service.form.enableAudio" : "Audio aktivieren", | 173 | "settings.service.form.enableAudio" : "Audio aktivieren", |
168 | "settings.service.form.enableBadge" : "Nachrichten-Badge anzeigen", | 174 | "settings.service.form.enableBadge" : "Nachrichten-Badge anzeigen", |
175 | "settings.service.form.enableDarkMode" : "Dark Mode aktivieren", | ||
169 | "settings.service.form.enableNotification" : "Benachrichtigungen aktivieren", | 176 | "settings.service.form.enableNotification" : "Benachrichtigungen aktivieren", |
170 | "settings.service.form.enableService" : "Dienst aktivieren", | 177 | "settings.service.form.enableService" : "Dienst aktivieren", |
171 | "settings.service.form.headlineBadges" : "Nachrichten-Badge", | 178 | "settings.service.form.headlineBadges" : "Nachrichten-Badge", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Nachrichten-Badge für alle neuen Nachrichten anzeigen", | 185 | "settings.service.form.indirectMessages" : "Nachrichten-Badge für alle neuen Nachrichten anzeigen", |
179 | "settings.service.form.isMutedInfo" : "Sämtliche Wiedergabe von Tönen wird deaktiviert", | 186 | "settings.service.form.isMutedInfo" : "Sämtliche Wiedergabe von Tönen wird deaktiviert", |
180 | "settings.service.form.name" : "Name", | 187 | "settings.service.form.name" : "Name", |
188 | "settings.service.form.proxy.headline" : "Proxy Einstellungen", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy Einstellungen werden nicht mit den Franz Servern synchronisiert.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Proxy Server verwenden", | ||
192 | "settings.service.form.proxy.password" : "Passwort (optional)", | ||
193 | "settings.service.form.proxy.user" : "Benutzer (optional)", | ||
181 | "settings.service.form.saveButton" : "Dienst speichern", | 194 | "settings.service.form.saveButton" : "Dienst speichern", |
182 | "settings.service.form.tabHosted" : "Gehostet", | 195 | "settings.service.form.tabHosted" : "Gehostet", |
183 | "settings.service.form.tabOnPremise" : "Selbst gehostet âï¸", | 196 | "settings.service.form.tabOnPremise" : "Selbst gehostet âï¸", |
@@ -211,19 +224,21 @@ | |||
211 | "signup.firstname.label" : "Vorname", | 224 | "signup.firstname.label" : "Vorname", |
212 | "signup.headline" : "Anmelden", | 225 | "signup.headline" : "Anmelden", |
213 | "signup.lastname.label" : "Nachname", | 226 | "signup.lastname.label" : "Nachname", |
214 | "signup.legal.info" : "Mit der Erstellung eines Franz Kontos akzeptierst du die", | 227 | "signup.legal.info" : "Mit der Erstellung eines Franz Kontos akzeptierst Du die", |
215 | "signup.legal.privacy" : "Datenschutzerklärung", | 228 | "signup.legal.privacy" : "Datenschutzerklärung", |
216 | "signup.legal.terms" : "Nutzungsbedingungen", | 229 | "signup.legal.terms" : "Nutzungsbedingungen", |
217 | "signup.link.login" : "Du hast bereits ein Konto? Melde dich an.", | 230 | "signup.link.login" : "Du hast bereits ein Konto? Melde Dich an.", |
218 | "signup.password.label" : "Passwort", | 231 | "signup.password.label" : "Passwort", |
219 | "signup.submit.label" : "Konto erstellen", | 232 | "signup.submit.label" : "Konto erstellen", |
220 | "subscription.euTaxInfo" : "Preise sind exklusive Steuern.", | 233 | "subscription.euTaxInfo" : "Preise sind exklusive Steuern.", |
221 | "subscription.features.ads" : "Nie mehr Werbung!", | 234 | "subscription.features.ads" : "Werbefrei auf Lebenszeit!", |
222 | "subscription.features.comingSoon" : "folgt bald", | 235 | "subscription.features.comingSoon" : "folgt bald", |
223 | "subscription.features.customServices" : "Private Dienste für dich und dein Team", | ||
224 | "subscription.features.encryptedSync" : "Verschlüsselte Sitzungs-Synchronisation", | 236 | "subscription.features.encryptedSync" : "Verschlüsselte Sitzungs-Synchronisation", |
237 | "subscription.features.noInterruptions" : "Keine Wartezeiten um Franz zu verwenden", | ||
225 | "subscription.features.onpremise" : "Integration von gehosteten Diensten, wie HipChat", | 238 | "subscription.features.onpremise" : "Integration von gehosteten Diensten, wie HipChat", |
226 | "subscription.features.vpn" : "Proxy- & VPN-Unterstützung", | 239 | "subscription.features.onpremise.mattermost" : "Integration von gehosteten Diensten, wie Mattermost", |
240 | "subscription.features.proxy" : "Proxy Support für Dienste", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Bezahlte Franz Premium Support Konten beinhalten", | 242 | "subscription.includedFeatures" : "Bezahlte Franz Premium Support Konten beinhalten", |
228 | "subscription.paymentSessionError" : "Das Zahlungs-Formular konnte nicht geladen werden.", | 243 | "subscription.paymentSessionError" : "Das Zahlungs-Formular konnte nicht geladen werden.", |
229 | "subscription.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen", | 244 | "subscription.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen", |
@@ -247,5 +262,5 @@ | |||
247 | "validation.url" : "{field} ist keine gültige URL", | 262 | "validation.url" : "{field} ist keine gültige URL", |
248 | "welcome.loginButton" : "Bei Franz einloggen", | 263 | "welcome.loginButton" : "Bei Franz einloggen", |
249 | "welcome.signupButton" : "Kostenloses Konto erstellen", | 264 | "welcome.signupButton" : "Kostenloses Konto erstellen", |
250 | "welcome.slogan" : "Kommunikation, die für dich funktioniert" | 265 | "welcome.slogan" : "Kommunikation, die für Dich funktioniert" |
251 | } | 266 | } |
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json index 7361d29b7..31852d20c 100644 --- a/src/i18n/locales/el.json +++ b/src/i18n/locales/el.json | |||
@@ -1,7 +1,10 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Δεν είναι δυνατή η σÏνδεση με τις online υπηÏεσίες του Franz", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "Δεν είστε συνδεδεμÎνοι στο διαδίκτυο.", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "import.headline" : "Εισαγάγετε τις Franz 4 υπηÏεσίες σας", | 4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
5 | "global.api.unhealthy" : "Δεν είναι δυνατή η σÏνδεση με τις ζωντανÎÏ‚ υπηÏεσίες του Franz", | ||
6 | "global.notConnectedToTheInternet" : "Έχετε αποσυνδεθεί από το Διαδίκτυο", | ||
7 | "import.headline" : "Εισαγάγετε τις υπηÏεσίες σας Franz 4", | ||
5 | "import.notSupportedHeadline" : "ΥπηÏεσίες που δεν υποστηÏίζονται ακόμα στο Franz 5", | 8 | "import.notSupportedHeadline" : "ΥπηÏεσίες που δεν υποστηÏίζονται ακόμα στο Franz 5", |
6 | "import.skip.label" : "ΘÎλω να Ï€ÏοσθÎσω υπηÏεσίες χειÏοκίνητα", | 9 | "import.skip.label" : "ΘÎλω να Ï€ÏοσθÎσω υπηÏεσίες χειÏοκίνητα", |
7 | "import.submit.label" : "Εισαγωγή υπηÏεσιών", | 10 | "import.submit.label" : "Εισαγωγή υπηÏεσιών", |
@@ -16,7 +19,7 @@ | |||
16 | "invite.name.label" : "Όνομα", | 19 | "invite.name.label" : "Όνομα", |
17 | "invite.skip.label" : "ΘÎλω να το κάνω αÏγότεÏα", | 20 | "invite.skip.label" : "ΘÎλω να το κάνω αÏγότεÏα", |
18 | "invite.submit.label" : "Αποστολή Ï€Ïοσκλήσεων", | 21 | "invite.submit.label" : "Αποστολή Ï€Ïοσκλήσεων", |
19 | "invite.successInfo" : "Invitations sent successfully", | 22 | "invite.successInfo" : "Επιτυχής αποστολή Ï€Ïοσκλήσεων", |
20 | "login.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", | 23 | "login.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", |
21 | "login.headline" : "ΣÏνδεση", | 24 | "login.headline" : "ΣÏνδεση", |
22 | "login.invalidCredentials" : "Το email ή ο κωδικός Ï€Ïόσβασης δεν είναι ÎγκυÏος", | 25 | "login.invalidCredentials" : "Το email ή ο κωδικός Ï€Ïόσβασης δεν είναι ÎγκυÏος", |
@@ -26,49 +29,49 @@ | |||
26 | "login.serverLogout" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", | 29 | "login.serverLogout" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", |
27 | "login.submit.label" : "ΣÏνδεση", | 30 | "login.submit.label" : "ΣÏνδεση", |
28 | "login.tokenExpired" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", | 31 | "login.tokenExpired" : "Η συνεδÏία σας Îληξε, συνδεθείτε ξανά.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "Σχετικά με το Franz", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "ΑπόκÏυψη", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "ΑπόκÏυψη των άλλων", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Έξοδος", |
33 | "menu.app.settings" : "Ρυθμίσεις", | 36 | "menu.app.settings" : "Ρυθμίσεις", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Εμφάνιση", |
35 | "menu.edit" : "ΕπεξεÏγασία", | 38 | "menu.edit" : "ΕπεξεÏγασία", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "ΑντιγÏαφή", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Αποκοπή", |
38 | "menu.edit.delete" : "ΔιαγÏαφή", | 41 | "menu.edit.delete" : "ΔιαγÏαφή", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emoji & ΣÏμβολα", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Επικόλληση", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Επικόλληση και διατήÏηση μοÏφοποίησης", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "ΑκÏÏωση αναίÏεσης", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Επιλογή Όλων", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Ομιλία", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "ΈναÏξη φωνητικής πληκτÏολόγησης", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "ΈναÏξη εκφώνησης", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Σταμάτημα εκφώνησης", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "ΑναίÏεση", |
49 | "menu.file" : "File", | 52 | "menu.file" : "ΑÏχείο", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Βοήθεια", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Î Ïόσφατες αλλαγÎÏ‚", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Μάθετε πεÏισσότεÏα", |
53 | "menu.help.privacy" : "Δήλωση αποÏÏήτου", | 56 | "menu.help.privacy" : "Δήλωση αποÏÏήτου", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "ΥποστήÏιξη", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "ÎŒÏοι ΧÏήσης", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "ΥπηÏεσίες", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "ÎÎα ΥπηÏεσία", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Î Ïοβολή", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "ΠλήÏης Οθόνη", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "Έξοδος από πλήÏη οθόνη", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "ΑνανÎωση Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "ΑνανÎωση ΥπηÏεσίας", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Î Ïαγματικό μÎγεθος", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Άνοιγμα ΕÏγαλειοθήκη Î ÏογÏαμματιστών", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "ΛειτουÏγία πλήÏους οθόνης", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "ΛειτουÏγεία ΥπηÏεσίασ ΕÏγαλειοθήκης Î ÏογÏαμματιστών", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "ΜεγÎθυνση", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "ΣμίκÏυνση", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "ΠαÏάθυÏο", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Κλείσιμο", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Ελαχιστοποίηση", |
72 | "password.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", | 75 | "password.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", |
73 | "password.headline" : "ΕπαναφοÏά ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης", | 76 | "password.headline" : "ΕπαναφοÏά ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης", |
74 | "password.link.login" : "ΣÏνδεση στο λογαÏιασμό σας", | 77 | "password.link.login" : "ΣÏνδεση στο λογαÏιασμό σας", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Δεν βÏÎθηκε χÏήστης με τη συγκεκÏιμÎνη διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", | 79 | "password.noUser" : "Δεν βÏÎθηκε χÏήστης με τη συγκεκÏιμÎνη διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", |
77 | "password.submit.label" : "Υποβολή", | 80 | "password.submit.label" : "Υποβολή", |
78 | "password.successInfo" : "ΕλÎγξτε το email σας", | 81 | "password.successInfo" : "ΕλÎγξτε το email σας", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "ΥποστηÏίξτε το Franz", | 83 | "pricing.headline" : "ΥποστηÏίξτε το Franz", |
80 | "pricing.link.skipPayment" : "Δεν θÎλω να βοηθήσω στην ανάπτυξη του Franz.", | 84 | "pricing.link.skipPayment" : "Δεν θÎλω να βοηθήσω στην ανάπτυξη του Franz.", |
81 | "pricing.submit.label" : "ΘÎλω να βοηθήσω στην ανάπτυξη του Franz", | 85 | "pricing.submit.label" : "ΘÎλω να βοηθήσω στην ανάπτυξη του Franz", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Άνοιγμα στο παÏασκήνιο", | 120 | "settings.app.form.autoLaunchInBackground" : "Άνοιγμα στο παÏασκήνιο", |
117 | "settings.app.form.autoLaunchOnStart" : "Εκκίνηση του Franz κατά την εκκίνηση του συστήματος", | 121 | "settings.app.form.autoLaunchOnStart" : "Εκκίνηση του Franz κατά την εκκίνηση του συστήματος", |
118 | "settings.app.form.beta" : "ΣυμπεÏιλάβετε εκδόσεις beta", | 122 | "settings.app.form.beta" : "ΣυμπεÏιλάβετε εκδόσεις beta", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 124 | "settings.app.form.enableGPUAcceleration" : "ΕνεÏγοποιήση Ενίσχυσης GPU ", |
125 | "settings.app.form.enableMenuBar" : "Εμφάνιση ΓÏαμμής ÎœÎµÎ½Î¿Ï Franz", | ||
121 | "settings.app.form.enableSpellchecking" : "ΕνεÏγοποίηση οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Îγχου", | 126 | "settings.app.form.enableSpellchecking" : "ΕνεÏγοποίηση οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Îγχου", |
122 | "settings.app.form.enableSystemTray" : "Εμφάνιση του Franz στη γÏαμμή ειδοποιήσεων", | 127 | "settings.app.form.enableSystemTray" : "Εμφάνιση του Franz στη γÏαμμή ειδοποιήσεων", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "ΑπόκÏυψη εικονιδίου Franz", |
124 | "settings.app.form.language" : "Γλώσσα", | 129 | "settings.app.form.language" : "Γλώσσα", |
125 | "settings.app.form.minimizeToSystemTray" : "Ελαχιστοποίηση του Franz στη γÏαμμή ειδοποιήσεων", | 130 | "settings.app.form.minimizeToSystemTray" : "Ελαχιστοποίηση του Franz στη γÏαμμή ειδοποιήσεων", |
126 | "settings.app.form.runInBackground" : "ΚÏατήστε το Franz στο παÏασκήνιο κατά το κλείσιμο του παÏαθÏÏου", | 131 | "settings.app.form.runInBackground" : "ΚÏατήστε το Franz στο παÏασκήνιο κατά το κλείσιμο του παÏαθÏÏου", |
127 | "settings.app.form.showDisabledServices" : "Î Ïοβολή καÏτελών των απενεÏγοποιημÎνων υπηÏεσιών", | 132 | "settings.app.form.showDisabledServices" : "Î Ïοβολή καÏτελών των απενεÏγοποιημÎνων υπηÏεσιών", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Î Ïοβολή του εικονιδίου μη αναγνωσμÎνου μηνÏματος όταν οι ειδοποιήσεις είναι απενεÏγοποιημÎνες", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Î Ïοβολή του εικονιδίου μη αναγνωσμÎνου μηνÏματος όταν οι ειδοποιήσεις είναι απενεÏγοποιημÎνες", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Ρυθμίσεις", | 135 | "settings.app.headline" : "Ρυθμίσεις", |
130 | "settings.app.headlineAdvanced" : "Για Ï€ÏοχωÏημÎνους", | 136 | "settings.app.headlineAdvanced" : "Για Ï€ÏοχωÏημÎνους", |
131 | "settings.app.headlineAppearance" : "Εμφάνιση", | 137 | "settings.app.headlineAppearance" : "Εμφάνιση", |
@@ -138,10 +144,10 @@ | |||
138 | "settings.app.updateStatusAvailable" : "ΥπάÏχει διαθÎσιμη ενημÎÏωση, γίνεται λήψη...", | 144 | "settings.app.updateStatusAvailable" : "ΥπάÏχει διαθÎσιμη ενημÎÏωση, γίνεται λήψη...", |
139 | "settings.app.updateStatusSearching" : " Γίνεται αναζήτηση για ενημÎÏωση", | 145 | "settings.app.updateStatusSearching" : " Γίνεται αναζήτηση για ενημÎÏωση", |
140 | "settings.app.updateStatusUpToDate" : "ΧÏησιμοποιείτε την τελευταία Îκδοση του Franz", | 146 | "settings.app.updateStatusUpToDate" : "ΧÏησιμοποιείτε την τελευταία Îκδοση του Franz", |
141 | "settings.invite.headline" : "Invite Friends", | 147 | "settings.invite.headline" : "Î ÏοσκαλÎστε Φίλους", |
142 | "settings.navigation.account" : "ΛογαÏιασμός", | 148 | "settings.navigation.account" : "ΛογαÏιασμός", |
143 | "settings.navigation.availableServices" : "ΔιαθÎσιμες υπηÏεσίες", | 149 | "settings.navigation.availableServices" : "ΔιαθÎσιμες υπηÏεσίες", |
144 | "settings.navigation.inviteFriends" : "Invite Friends", | 150 | "settings.navigation.inviteFriends" : "Î ÏασκαλÎστε Φίλους", |
145 | "settings.navigation.logout" : "ΑποσÏνδεση", | 151 | "settings.navigation.logout" : "ΑποσÏνδεση", |
146 | "settings.navigation.settings" : "Ρυθμίσεις", | 152 | "settings.navigation.settings" : "Ρυθμίσεις", |
147 | "settings.navigation.yourServices" : "Οι υπηÏεσίες σας", | 153 | "settings.navigation.yourServices" : "Οι υπηÏεσίες σας", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "ΕπεξεÏγασία {name}", | 172 | "settings.service.form.editServiceHeadline" : "ΕπεξεÏγασία {name}", |
167 | "settings.service.form.enableAudio" : "ΕνεÏγοποίηση ήχου", | 173 | "settings.service.form.enableAudio" : "ΕνεÏγοποίηση ήχου", |
168 | "settings.service.form.enableBadge" : "Εμφάνιση εικονιδίων μη αναγνωσμÎνου μηνÏματος", | 174 | "settings.service.form.enableBadge" : "Εμφάνιση εικονιδίων μη αναγνωσμÎνου μηνÏματος", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "ΕνεÏγοποίηση ειδοποιήσεων", | 176 | "settings.service.form.enableNotification" : "ΕνεÏγοποίηση ειδοποιήσεων", |
170 | "settings.service.form.enableService" : "ΕνεÏγοποίηση υπηÏεσίας", | 177 | "settings.service.form.enableService" : "ΕνεÏγοποίηση υπηÏεσίας", |
171 | "settings.service.form.headlineBadges" : "Εικονίδια μη αναγνωσμÎνου μηνÏματος", | 178 | "settings.service.form.headlineBadges" : "Εικονίδια μη αναγνωσμÎνου μηνÏματος", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Εμφάνιση ειδοποίησης μηνÏματος για όλα τα νÎα μηνÏματα", | 185 | "settings.service.form.indirectMessages" : "Εμφάνιση ειδοποίησης μηνÏματος για όλα τα νÎα μηνÏματα", |
179 | "settings.service.form.isMutedInfo" : "Όλοι οι ήχοι καθώς και η αναπαÏαγωγή ήχου θα απενεÏγοποιηθοÏν", | 186 | "settings.service.form.isMutedInfo" : "Όλοι οι ήχοι καθώς και η αναπαÏαγωγή ήχου θα απενεÏγοποιηθοÏν", |
180 | "settings.service.form.name" : "Όνομα", | 187 | "settings.service.form.name" : "Όνομα", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Αποθήκευση υπηÏεσίας", | 194 | "settings.service.form.saveButton" : "Αποθήκευση υπηÏεσίας", |
182 | "settings.service.form.tabHosted" : "Φιλοξενείται", | 195 | "settings.service.form.tabHosted" : "Φιλοξενείται", |
183 | "settings.service.form.tabOnPremise" : "Αυτο-φιλοξενείται âï¸", | 196 | "settings.service.form.tabOnPremise" : "Αυτο-φιλοξενείται âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Πολίτες Ε.Ε.: Στις τιμÎÏ‚ δεν πεÏιλαμβάνονται τυχόν φόÏοι και άλλες τοπικÎÏ‚ επιβαÏÏνσεις", | 233 | "subscription.euTaxInfo" : "Πολίτες Ε.Ε.: Στις τιμÎÏ‚ δεν πεÏιλαμβάνονται τυχόν φόÏοι και άλλες τοπικÎÏ‚ επιβαÏÏνσεις", |
221 | "subscription.features.ads" : "ΤÎλος στις διαφημίσεις", | 234 | "subscription.features.ads" : "ΤÎλος στις διαφημίσεις", |
222 | "subscription.features.comingSoon" : "σÏντομα", | 235 | "subscription.features.comingSoon" : "σÏντομα", |
223 | "subscription.features.customServices" : "ΙδιωτικÎÏ‚ υπηÏεσίες για εσάς και την ομάδα σας", | ||
224 | "subscription.features.encryptedSync" : "ΚÏυπτογÏαφημÎνος συγχÏονισμός πεÏιόδου σÏνδεσης", | 236 | "subscription.features.encryptedSync" : "ΚÏυπτογÏαφημÎνος συγχÏονισμός πεÏιόδου σÏνδεσης", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Add on-premise \/ hosted services όπως το HipChat", | 238 | "subscription.features.onpremise" : "Add on-premise \/ hosted services όπως το HipChat", |
226 | "subscription.features.vpn" : "ΥποστήÏιξη μεσολαβητή (Proxy) και VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Ο Premium λογαÏιασμός υποστήÏιξης Franz πεÏιλαμβάνει", | 242 | "subscription.includedFeatures" : "Ο Premium λογαÏιασμός υποστήÏιξης Franz πεÏιλαμβάνει", |
228 | "subscription.paymentSessionError" : "Δεν ήταν δυνατή η Ï€Ïοετοιμασία της φόÏμας πληÏωμής", | 243 | "subscription.paymentSessionError" : "Δεν ήταν δυνατή η Ï€Ïοετοιμασία της φόÏμας πληÏωμής", |
229 | "subscription.submit.label" : "ΘÎλω να βοηθήσω στην ανάπτυξη του Franz", | 244 | "subscription.submit.label" : "ΘÎλω να βοηθήσω στην ανάπτυξη του Franz", |
@@ -241,10 +256,10 @@ | |||
241 | "tabs.item.enableNotification" : "ΕνεÏγοποίηση ειδοποιήσεων", | 256 | "tabs.item.enableNotification" : "ΕνεÏγοποίηση ειδοποιήσεων", |
242 | "tabs.item.enableService" : "ΕνεÏγοποίηση υπηÏεσίας", | 257 | "tabs.item.enableService" : "ΕνεÏγοποίηση υπηÏεσίας", |
243 | "tabs.item.reload" : "ΕπαναφόÏτωση", | 258 | "tabs.item.reload" : "ΕπαναφόÏτωση", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} δεν είναι ÎγκυÏο", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} Ï€ÏÎπει να είναι τουλάχιστον {length} χαÏακτήÏες", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} είναι υποχÏεωτικό", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} δεν είναι ÎγκυÏος σÏνδεσμος URL", |
248 | "welcome.loginButton" : "ΣÏνδεση στο λογαÏιασμό σας", | 263 | "welcome.loginButton" : "ΣÏνδεση στο λογαÏιασμό σας", |
249 | "welcome.signupButton" : "ΔημιουÏγία δωÏεάν λογαÏιασμοÏ", | 264 | "welcome.signupButton" : "ΔημιουÏγία δωÏεάν λογαÏιασμοÏ", |
250 | "welcome.slogan" : "Επικοινωνία που λειτουÏγεί για εσάς" | 265 | "welcome.slogan" : "Επικοινωνία που λειτουÏγεί για εσάς" |
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 0c62da44a..aa55f5dfe 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json | |||
@@ -50,10 +50,12 @@ | |||
50 | "subscription.paymentSessionError": "Could not initialize payment form", | 50 | "subscription.paymentSessionError": "Could not initialize payment form", |
51 | "subscription.includedFeatures": "Paid Franz Premium Supporter Account includes", | 51 | "subscription.includedFeatures": "Paid Franz Premium Supporter Account includes", |
52 | "subscription.features.onpremise": "Add on-premise/hosted services like HipChat", | 52 | "subscription.features.onpremise": "Add on-premise/hosted services like HipChat", |
53 | "subscription.features.customServices": "Private services for you and your team", | 53 | "subscription.features.onpremise.mattermost": "Add on-premise/hosted services like Mattermost", |
54 | "subscription.features.encryptedSync": "Encrypted session synchronization", | 54 | "subscription.features.encryptedSync": "Encrypted session synchronization", |
55 | "subscription.features.vpn": "Proxy & VPN support", | 55 | "subscription.features.proxy": "Proxy support for services", |
56 | "subscription.features.ads": "No ads, ever!", | 56 | "subscription.features.ads": "No ads, ever!", |
57 | "subscription.features.spellchecker": "Support for spellchecker", | ||
58 | "subscription.features.noInterruptions": "No app delays & nagging to upgrade license", | ||
57 | "subscription.features.comingSoon": "coming soon", | 59 | "subscription.features.comingSoon": "coming soon", |
58 | "infobar.servicesUpdated": "Your services have been updated.", | 60 | "infobar.servicesUpdated": "Your services have been updated.", |
59 | "infobar.updateAvailable": "A new update for Franz is available.", | 61 | "infobar.updateAvailable": "A new update for Franz is available.", |
@@ -130,6 +132,13 @@ | |||
130 | "settings.service.form.icon": "Custom icon", | 132 | "settings.service.form.icon": "Custom icon", |
131 | "settings.service.form.iconDelete": "Delete", | 133 | "settings.service.form.iconDelete": "Delete", |
132 | "settings.service.form.iconUpload": "Drop your image, or click here", | 134 | "settings.service.form.iconUpload": "Drop your image, or click here", |
135 | "settings.service.form.enableDarkMode": "Enable Dark Mode", | ||
136 | "settings.service.form.proxy.headline": "Proxy Settings", | ||
137 | "settings.service.form.proxy.isEnabled": "Use Proxy", | ||
138 | "settings.service.form.proxy.host": "Proxy Host/IP", | ||
139 | "settings.service.form.proxy.user": "User (optional)", | ||
140 | "settings.service.form.proxy.password": "Password (optional)", | ||
141 | "settings.service.form.proxy.info": "Proxy settings will not synced with the Franz servers.", | ||
133 | "settings.service.error.headline": "Error", | 142 | "settings.service.error.headline": "Error", |
134 | "settings.service.error.goBack": "Back to services", | 143 | "settings.service.error.goBack": "Back to services", |
135 | "settings.service.error.message": "Could not load service recipe.", | 144 | "settings.service.error.message": "Could not load service recipe.", |
@@ -158,12 +167,14 @@ | |||
158 | "settings.app.form.autoLaunchOnStart": "Launch Franz on start", | 167 | "settings.app.form.autoLaunchOnStart": "Launch Franz on start", |
159 | "settings.app.form.autoLaunchInBackground": "Open in background", | 168 | "settings.app.form.autoLaunchInBackground": "Open in background", |
160 | "settings.app.form.enableSystemTray": "Show Franz in system tray", | 169 | "settings.app.form.enableSystemTray": "Show Franz in system tray", |
170 | "settings.app.form.darkMode": "Join the Dark Side", | ||
161 | "settings.app.form.minimizeToSystemTray": "Minimize Franz to system tray", | 171 | "settings.app.form.minimizeToSystemTray": "Minimize Franz to system tray", |
162 | "settings.app.form.enableMenuBar": "Show Franz in Menu Bar", | 172 | "settings.app.form.enableMenuBar": "Show Franz in Menu Bar", |
163 | "settings.app.form.hideDockIcon": "Hide Franz icon in Dock", | 173 | "settings.app.form.hideDockIcon": "Hide Franz icon in Dock", |
164 | "settings.app.form.runInBackground": "Keep Franz in background when closing the window", | 174 | "settings.app.form.runInBackground": "Keep Franz in background when closing the window", |
165 | "settings.app.form.language": "Language", | 175 | "settings.app.form.language": "Language", |
166 | "settings.app.form.enableSpellchecking": "Enable spell checking", | 176 | "settings.app.form.enableSpellchecking": "Enable spell checking", |
177 | "settings.app.form.spellcheckerLanguage": "Spell checking language", | ||
167 | "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", | 178 | "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", |
168 | "settings.app.form.showDisabledServices": "Display disabled services tabs", | 179 | "settings.app.form.showDisabledServices": "Display disabled services tabs", |
169 | "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", | 180 | "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", |
@@ -247,5 +258,9 @@ | |||
247 | "validation.required": "{field} is required", | 258 | "validation.required": "{field} is required", |
248 | "validation.email": "{field} is not valid", | 259 | "validation.email": "{field} is not valid", |
249 | "validation.url": "{field} is not a valid URL", | 260 | "validation.url": "{field} is not a valid URL", |
250 | "validation.minLength": "{field} should be at least {length} characters long" | 261 | "validation.minLength": "{field} should be at least {length} characters long", |
262 | "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting", | ||
263 | "feature.delayApp.action": "Get a Franz Supporter License", | ||
264 | "feature.delayApp.text": "Franz will continue in {seconds} seconds.", | ||
265 | "premiumFeature.button.upgradeAccount": "Upgrade account" | ||
251 | } | 266 | } |
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 75047a613..a5984dd1c 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json | |||
@@ -1,8 +1,11 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "No se puede conectar a los servicios en lÃnea de Franz", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "No está conectado a Internet.", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
5 | "global.api.unhealthy" : "No es posible conectarse a los servicios en lÃnea de Franz.", | ||
6 | "global.notConnectedToTheInternet" : "No estás conectado a Internet", | ||
4 | "import.headline" : "Importa tus servicios de Franz 4", | 7 | "import.headline" : "Importa tus servicios de Franz 4", |
5 | "import.notSupportedHeadline" : "Servicios no soportados aún en Franz 5", | 8 | "import.notSupportedHeadline" : "Servicios no admitidos aún en Franz 5", |
6 | "import.skip.label" : "Quiero agregar servicios manualmente", | 9 | "import.skip.label" : "Quiero agregar servicios manualmente", |
7 | "import.submit.label" : "Importar servicios", | 10 | "import.submit.label" : "Importar servicios", |
8 | "infobar.buttonChangelog" : "¿Qué hay de nuevo?", | 11 | "infobar.buttonChangelog" : "¿Qué hay de nuevo?", |
@@ -14,7 +17,7 @@ | |||
14 | "invite.email.label" : "Dirección de correo electrónico", | 17 | "invite.email.label" : "Dirección de correo electrónico", |
15 | "invite.headline.friends" : "Invita a 3 de tus amigos o compañeros", | 18 | "invite.headline.friends" : "Invita a 3 de tus amigos o compañeros", |
16 | "invite.name.label" : "Nombre", | 19 | "invite.name.label" : "Nombre", |
17 | "invite.skip.label" : "Quiero hacer esto después", | 20 | "invite.skip.label" : "Lo haré más tarde", |
18 | "invite.submit.label" : "Enviar invitaciones", | 21 | "invite.submit.label" : "Enviar invitaciones", |
19 | "invite.successInfo" : "Invitaciones enviadas correctamente", | 22 | "invite.successInfo" : "Invitaciones enviadas correctamente", |
20 | "login.email.label" : "Dirección de correo electrónico", | 23 | "login.email.label" : "Dirección de correo electrónico", |
@@ -25,7 +28,7 @@ | |||
25 | "login.password.label" : "Contraseña", | 28 | "login.password.label" : "Contraseña", |
26 | "login.serverLogout" : "Tu sesión ha expirado, por favor inicia la sesión de nuevo.", | 29 | "login.serverLogout" : "Tu sesión ha expirado, por favor inicia la sesión de nuevo.", |
27 | "login.submit.label" : "Iniciar sesión", | 30 | "login.submit.label" : "Iniciar sesión", |
28 | "login.tokenExpired" : "Tu sesión expiró, por favor inicia sesión otra vez.", | 31 | "login.tokenExpired" : "Tu sesión ha expirado, por favor inicia sesión de nuevo.", |
29 | "menu.app.about" : "Sobre Franz", | 32 | "menu.app.about" : "Sobre Franz", |
30 | "menu.app.hide" : "Ocultar", | 33 | "menu.app.hide" : "Ocultar", |
31 | "menu.app.hideOthers" : "Ocultar otros", | 34 | "menu.app.hideOthers" : "Ocultar otros", |
@@ -51,12 +54,12 @@ | |||
51 | "menu.help.changelog" : "Registro de cambios", | 54 | "menu.help.changelog" : "Registro de cambios", |
52 | "menu.help.learnMore" : "Conocer más", | 55 | "menu.help.learnMore" : "Conocer más", |
53 | "menu.help.privacy" : "Declaración de privacidad", | 56 | "menu.help.privacy" : "Declaración de privacidad", |
54 | "menu.help.support" : "Soporte", | 57 | "menu.help.support" : "Ayuda técnica", |
55 | "menu.help.tos" : "Términos del Servicio", | 58 | "menu.help.tos" : "Términos del Servicio", |
56 | "menu.services" : "Servicios", | 59 | "menu.services" : "Servicios", |
57 | "menu.services.addNewService" : "Añadir Nuevo Servicio...", | 60 | "menu.services.addNewService" : "Añadir Nuevo Servicio...", |
58 | "menu.view" : "Mostrar", | 61 | "menu.view" : "Mostrar", |
59 | "menu.view.enterFullScreen" : "Entrar a Pantalla Completa", | 62 | "menu.view.enterFullScreen" : "Pasar a pantalla completa", |
60 | "menu.view.exitFullScreen" : "Salir de Pantalla Completa", | 63 | "menu.view.exitFullScreen" : "Salir de Pantalla Completa", |
61 | "menu.view.reloadFranz" : "Recargar Franz", | 64 | "menu.view.reloadFranz" : "Recargar Franz", |
62 | "menu.view.reloadService" : "Recargar Servicio", | 65 | "menu.view.reloadService" : "Recargar Servicio", |
@@ -71,11 +74,12 @@ | |||
71 | "menu.window.minimize" : "Minimizar", | 74 | "menu.window.minimize" : "Minimizar", |
72 | "password.email.label" : "Dirección de correo electrónico", | 75 | "password.email.label" : "Dirección de correo electrónico", |
73 | "password.headline" : "Restablecer contraseña", | 76 | "password.headline" : "Restablecer contraseña", |
74 | "password.link.login" : "Iniciar sesión en tu cuenta", | 77 | "password.link.login" : "Inicia sesión en tu cuenta", |
75 | "password.link.signup" : "Crear una cuenta gratuita", | 78 | "password.link.signup" : "Crear una cuenta gratuita", |
76 | "password.noUser" : "No se encontró un usuario con esa dirección de correo electrónico", | 79 | "password.noUser" : "No se encontró un usuario con esa dirección de correo electrónico", |
77 | "password.submit.label" : "Enviar", | 80 | "password.submit.label" : "Enviar", |
78 | "password.successInfo" : "Por favor revisa tu correo electrónico", | 81 | "password.successInfo" : "Por favor revisa tu correo electrónico", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Apoya a Franz", | 83 | "pricing.headline" : "Apoya a Franz", |
80 | "pricing.link.skipPayment" : "No quiero apoyar el desarrollo de Franz.", | 84 | "pricing.link.skipPayment" : "No quiero apoyar el desarrollo de Franz.", |
81 | "pricing.submit.label" : "Quiero apoyar el desarrollo de Franz", | 85 | "pricing.submit.label" : "Quiero apoyar el desarrollo de Franz", |
@@ -116,8 +120,9 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Abrir en segundo plano", | 120 | "settings.app.form.autoLaunchInBackground" : "Abrir en segundo plano", |
117 | "settings.app.form.autoLaunchOnStart" : "Iniciar Franz al iniciar", | 121 | "settings.app.form.autoLaunchOnStart" : "Iniciar Franz al iniciar", |
118 | "settings.app.form.beta" : "Incluir versiones beta", | 122 | "settings.app.form.beta" : "Incluir versiones beta", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "mostrar a franz en La barra de menús", | 124 | "settings.app.form.enableGPUAcceleration" : "Habilitar aceleración de GPU", |
125 | "settings.app.form.enableMenuBar" : "Mostrar a Franz en la barra de menús", | ||
121 | "settings.app.form.enableSpellchecking" : "Activar corrección ortográfica", | 126 | "settings.app.form.enableSpellchecking" : "Activar corrección ortográfica", |
122 | "settings.app.form.enableSystemTray" : "Mostrar Franz en la bandeja del sistema", | 127 | "settings.app.form.enableSystemTray" : "Mostrar Franz en la bandeja del sistema", |
123 | "settings.app.form.hideDockIcon" : "Ocultar Icono de Franz en barra de herramientas", | 128 | "settings.app.form.hideDockIcon" : "Ocultar Icono de Franz en barra de herramientas", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Mantener Franz en segundo plano al cerrar la ventana", | 131 | "settings.app.form.runInBackground" : "Mantener Franz en segundo plano al cerrar la ventana", |
127 | "settings.app.form.showDisabledServices" : "Mostrar pestañas de servicios desactivados", | 132 | "settings.app.form.showDisabledServices" : "Mostrar pestañas de servicios desactivados", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostrar la insignia de mensajes sin leer cuando las notificaciones están desactivadas", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostrar la insignia de mensajes sin leer cuando las notificaciones están desactivadas", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Configuración", | 135 | "settings.app.headline" : "Configuración", |
130 | "settings.app.headlineAdvanced" : "Avanzado", | 136 | "settings.app.headlineAdvanced" : "Avanzado", |
131 | "settings.app.headlineAppearance" : "Apariencia", | 137 | "settings.app.headlineAppearance" : "Apariencia", |
@@ -134,7 +140,7 @@ | |||
134 | "settings.app.headlineUpdates" : "Actualizaciones", | 140 | "settings.app.headlineUpdates" : "Actualizaciones", |
135 | "settings.app.restartRequired" : "Los cambios requieren reiniciar", | 141 | "settings.app.restartRequired" : "Los cambios requieren reiniciar", |
136 | "settings.app.subheadlineCache" : "Caché", | 142 | "settings.app.subheadlineCache" : "Caché", |
137 | "settings.app.translationHelp" : "Ayúdenos a traducir Franz a tu idioma.", | 143 | "settings.app.translationHelp" : "Ayúdanos a traducir Franz a tu idioma.", |
138 | "settings.app.updateStatusAvailable" : "Actualización disponible, descargando...", | 144 | "settings.app.updateStatusAvailable" : "Actualización disponible, descargando...", |
139 | "settings.app.updateStatusSearching" : "Buscando actualizaciones", | 145 | "settings.app.updateStatusSearching" : "Buscando actualizaciones", |
140 | "settings.app.updateStatusUpToDate" : "Estás utilizando la última versión de Franz", | 146 | "settings.app.updateStatusUpToDate" : "Estás utilizando la última versión de Franz", |
@@ -144,18 +150,18 @@ | |||
144 | "settings.navigation.inviteFriends" : "Invita a tus amigos", | 150 | "settings.navigation.inviteFriends" : "Invita a tus amigos", |
145 | "settings.navigation.logout" : "Cerrar sesión", | 151 | "settings.navigation.logout" : "Cerrar sesión", |
146 | "settings.navigation.settings" : "Configuración", | 152 | "settings.navigation.settings" : "Configuración", |
147 | "settings.navigation.yourServices" : "Sus servicios", | 153 | "settings.navigation.yourServices" : "Tus servicios", |
148 | "settings.recipes.all" : "Todos los servicios", | 154 | "settings.recipes.all" : "Todos los servicios", |
149 | "settings.recipes.dev" : "Desarrollo", | 155 | "settings.recipes.dev" : "Desarrollo", |
150 | "settings.recipes.headline" : "Servicios disponibles", | 156 | "settings.recipes.headline" : "Servicios disponibles", |
151 | "settings.recipes.missingService" : "¿Falta algún servicio?", | 157 | "settings.recipes.missingService" : "¿Echas de menos algún servicio?", |
152 | "settings.recipes.mostPopular" : "Más populares", | 158 | "settings.recipes.mostPopular" : "Más populares", |
153 | "settings.recipes.nothingFound" : "Lo siento, pero no hay ningún servicio coincidente con tus términos de búsqueda.", | 159 | "settings.recipes.nothingFound" : "Lo siento, pero no hay ningún servicio coincidente con tus términos de búsqueda.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Servicio añadido exitosamente", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Servicio añadido con éxito", |
155 | "settings.searchService" : "Buscar servicio", | 161 | "settings.searchService" : "Buscar servicio", |
156 | "settings.service.error.goBack" : "Volver a los servicios", | 162 | "settings.service.error.goBack" : "Volver a los servicios", |
157 | "settings.service.error.headline" : "Error", | 163 | "settings.service.error.headline" : "Error", |
158 | "settings.service.error.message" : "No se pudo cargar el servicio", | 164 | "settings.service.error.message" : "No se pudo cargar el servicio.", |
159 | "settings.service.form.addServiceHeadline" : "Añadir {name}", | 165 | "settings.service.form.addServiceHeadline" : "Añadir {name}", |
160 | "settings.service.form.availableServices" : "Servicios disponibles", | 166 | "settings.service.form.availableServices" : "Servicios disponibles", |
161 | "settings.service.form.customUrl" : "Servidor personalizado", | 167 | "settings.service.form.customUrl" : "Servidor personalizado", |
@@ -165,7 +171,8 @@ | |||
165 | "settings.service.form.deleteButton" : "Eliminar servicio", | 171 | "settings.service.form.deleteButton" : "Eliminar servicio", |
166 | "settings.service.form.editServiceHeadline" : "Editar {name}", | 172 | "settings.service.form.editServiceHeadline" : "Editar {name}", |
167 | "settings.service.form.enableAudio" : "Habilitar audio", | 173 | "settings.service.form.enableAudio" : "Habilitar audio", |
168 | "settings.service.form.enableBadge" : "Mostrar insignia de mensajes no leÃdos", | 174 | "settings.service.form.enableBadge" : "Mostrar señal de mensajes no leÃdos", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Activar notificaciones", | 176 | "settings.service.form.enableNotification" : "Activar notificaciones", |
170 | "settings.service.form.enableService" : "Activar servicio", | 177 | "settings.service.form.enableService" : "Activar servicio", |
171 | "settings.service.form.headlineBadges" : "Insignias de mensaje no leÃdos", | 178 | "settings.service.form.headlineBadges" : "Insignias de mensaje no leÃdos", |
@@ -175,9 +182,15 @@ | |||
175 | "settings.service.form.iconDelete" : "Borrar", | 182 | "settings.service.form.iconDelete" : "Borrar", |
176 | "settings.service.form.iconUpload" : "Arrastra tu imagen, o haz clic aquÃ", | 183 | "settings.service.form.iconUpload" : "Arrastra tu imagen, o haz clic aquÃ", |
177 | "settings.service.form.indirectMessageInfo" : "Serás notificado de todos los mensajes del canal, no sólo @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Serás notificado de todos los mensajes del canal, no sólo @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Mostrar insignia de notificación para todos los mensajes nuevos", | 185 | "settings.service.form.indirectMessages" : "Mostrar señal de notificación para todos los mensajes nuevos", |
179 | "settings.service.form.isMutedInfo" : "Cuando estén desactivados, todos los sonidos de notificación y la reproducción de audio serán silenciados", | 186 | "settings.service.form.isMutedInfo" : "Cuando estén desactivados, todos los sonidos de notificación y la reproducción de audio serán silenciados", |
180 | "settings.service.form.name" : "Nombre", | 187 | "settings.service.form.name" : "Nombre", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Guardar servicio", | 194 | "settings.service.form.saveButton" : "Guardar servicio", |
182 | "settings.service.form.tabHosted" : "Alojado", | 195 | "settings.service.form.tabHosted" : "Alojado", |
183 | "settings.service.form.tabOnPremise" : "Auto alojado âï¸", | 196 | "settings.service.form.tabOnPremise" : "Auto alojado âï¸", |
@@ -192,10 +205,10 @@ | |||
192 | "settings.services.tooltip.isMuted" : "Todos los sonidos están silenciados", | 205 | "settings.services.tooltip.isMuted" : "Todos los sonidos están silenciados", |
193 | "settings.services.tooltip.notificationsDisabled" : "Las notificaciones están desactivadas", | 206 | "settings.services.tooltip.notificationsDisabled" : "Las notificaciones están desactivadas", |
194 | "settings.services.updatedInfo" : "Tus cambios han sido guardados", | 207 | "settings.services.updatedInfo" : "Tus cambios han sido guardados", |
195 | "settings.user.form.accountType.company" : "CompañÃa", | 208 | "settings.user.form.accountType.company" : "Empresa", |
196 | "settings.user.form.accountType.individual" : "Individual", | 209 | "settings.user.form.accountType.individual" : "Individual", |
197 | "settings.user.form.accountType.label" : "Tipo de cuenta", | 210 | "settings.user.form.accountType.label" : "Tipo de cuenta", |
198 | "settings.user.form.accountType.non-profit" : "Sin fines de lucro", | 211 | "settings.user.form.accountType.non-profit" : "Sin ánimo de lucro", |
199 | "settings.user.form.currentPassword" : "Contraseña actual", | 212 | "settings.user.form.currentPassword" : "Contraseña actual", |
200 | "settings.user.form.email" : "Correo electrónico", | 213 | "settings.user.form.email" : "Correo electrónico", |
201 | "settings.user.form.firstname" : "Nombre", | 214 | "settings.user.form.firstname" : "Nombre", |
@@ -211,7 +224,7 @@ | |||
211 | "signup.firstname.label" : "Nombre", | 224 | "signup.firstname.label" : "Nombre", |
212 | "signup.headline" : "Registrarse", | 225 | "signup.headline" : "Registrarse", |
213 | "signup.lastname.label" : "Apellido", | 226 | "signup.lastname.label" : "Apellido", |
214 | "signup.legal.info" : "Al crear una cuenta en Franz usted acepta las", | 227 | "signup.legal.info" : "Al crear una cuenta en Franz usted acepta", |
215 | "signup.legal.privacy" : "Declaración de privacidad", | 228 | "signup.legal.privacy" : "Declaración de privacidad", |
216 | "signup.legal.terms" : "Términos de servicio", | 229 | "signup.legal.terms" : "Términos de servicio", |
217 | "signup.link.login" : "Ya tienes una cuenta, ¿Iniciar sesión?", | 230 | "signup.link.login" : "Ya tienes una cuenta, ¿Iniciar sesión?", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Residentes de la UE: pueden aplicarse impuestos locales", | 233 | "subscription.euTaxInfo" : "Residentes de la UE: pueden aplicarse impuestos locales", |
221 | "subscription.features.ads" : "¡Sin publicidad, para siempre!", | 234 | "subscription.features.ads" : "¡Sin publicidad, para siempre!", |
222 | "subscription.features.comingSoon" : "próximamente", | 235 | "subscription.features.comingSoon" : "próximamente", |
223 | "subscription.features.customServices" : "Servicios privados para ti y tu equipo", | ||
224 | "subscription.features.encryptedSync" : "Sincronización de sesión encriptada", | 236 | "subscription.features.encryptedSync" : "Sincronización de sesión encriptada", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Añade servicios locales\/autoalojados como HipChat", | 238 | "subscription.features.onpremise" : "Añade servicios locales\/autoalojados como HipChat", |
226 | "subscription.features.vpn" : "Soporte para Proxy y VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "La Cuenta pagada de Colaborador Premium de Franz incluye", | 242 | "subscription.includedFeatures" : "La Cuenta pagada de Colaborador Premium de Franz incluye", |
228 | "subscription.paymentSessionError" : "No se pudo inicializar el formulario de pago", | 243 | "subscription.paymentSessionError" : "No se pudo inicializar el formulario de pago", |
229 | "subscription.submit.label" : "Quiero apoyar el desarrollo de Franz", | 244 | "subscription.submit.label" : "Quiero apoyar el desarrollo de Franz", |
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index e00a5671b..6964d27d2 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz", | 5 | "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz", |
3 | "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.", | 6 | "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.", |
4 | "import.headline" : "Importez vos services depuis la version 4 de Franz.", | 7 | "import.headline" : "Importez vos services depuis la version 4 de Franz.", |
@@ -11,20 +14,20 @@ | |||
11 | "infobar.requiredRequestsFailed" : "Impossible d'accéder aux services et informations de l'utilisateur", | 14 | "infobar.requiredRequestsFailed" : "Impossible d'accéder aux services et informations de l'utilisateur", |
12 | "infobar.servicesUpdated" : "Vos services ont été mis à jour.", | 15 | "infobar.servicesUpdated" : "Vos services ont été mis à jour.", |
13 | "infobar.updateAvailable" : "Une nouvelle mise à jour pour Franz est disponible.", | 16 | "infobar.updateAvailable" : "Une nouvelle mise à jour pour Franz est disponible.", |
14 | "invite.email.label" : "Adresse e-mail", | 17 | "invite.email.label" : "Adresse Email", |
15 | "invite.headline.friends" : "Invitez 3 amis ou collègues", | 18 | "invite.headline.friends" : "Invitez 3 amis ou collègues", |
16 | "invite.name.label" : "Nom", | 19 | "invite.name.label" : "Nom", |
17 | "invite.skip.label" : "Je veux faire cela plus tard", | 20 | "invite.skip.label" : "Je veux faire cela plus tard", |
18 | "invite.submit.label" : "Envoyer des invitations", | 21 | "invite.submit.label" : "Envoyer des invitations", |
19 | "invite.successInfo" : "Invitations envoyées", | 22 | "invite.successInfo" : "Invitations envoyées avec succès", |
20 | "login.email.label" : "Adresse e-mail", | 23 | "login.email.label" : "Adresse email", |
21 | "login.headline" : "S'inscrire", | 24 | "login.headline" : "S'identifier", |
22 | "login.invalidCredentials" : "E-mail ou mot de passe invalide", | 25 | "login.invalidCredentials" : "Email ou mot de passe invalide", |
23 | "login.link.password" : "Réinitialiser le mot de passe", | 26 | "login.link.password" : "Réinitialiser le mot de passe", |
24 | "login.link.signup" : "Créer un compte gratuit", | 27 | "login.link.signup" : "Créer un compte gratuit", |
25 | "login.password.label" : "Mot de passe", | 28 | "login.password.label" : "Mot de passe", |
26 | "login.serverLogout" : "Votre session a expiré. Reconnectez-vous s'il vous plaît.", | 29 | "login.serverLogout" : "Votre session a expiré. Reconnectez-vous s'il vous plaît.", |
27 | "login.submit.label" : "Connexion", | 30 | "login.submit.label" : "Se connecter", |
28 | "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", | 31 | "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", |
29 | "menu.app.about" : "À propos de Franz", | 32 | "menu.app.about" : "À propos de Franz", |
30 | "menu.app.hide" : "Masquer", | 33 | "menu.app.hide" : "Masquer", |
@@ -55,7 +58,7 @@ | |||
55 | "menu.help.tos" : "Conditions d'utilisation", | 58 | "menu.help.tos" : "Conditions d'utilisation", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Services", |
57 | "menu.services.addNewService" : "Ajouter un nouveau service...", | 60 | "menu.services.addNewService" : "Ajouter un nouveau service...", |
58 | "menu.view" : "Affichage", | 61 | "menu.view" : "Aperçu", |
59 | "menu.view.enterFullScreen" : "Entrer en mode plein écran", | 62 | "menu.view.enterFullScreen" : "Entrer en mode plein écran", |
60 | "menu.view.exitFullScreen" : "Sortir du mode plein écran", | 63 | "menu.view.exitFullScreen" : "Sortir du mode plein écran", |
61 | "menu.view.reloadFranz" : "Actualiser Franz", | 64 | "menu.view.reloadFranz" : "Actualiser Franz", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Aucun utilisateur n'a été trouvé avec cette adresse e-mail", | 79 | "password.noUser" : "Aucun utilisateur n'a été trouvé avec cette adresse e-mail", |
77 | "password.submit.label" : "Soumettre", | 80 | "password.submit.label" : "Soumettre", |
78 | "password.successInfo" : "Merci de consulter vos e-mails", | 81 | "password.successInfo" : "Merci de consulter vos e-mails", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Soutenez Franz", | 83 | "pricing.headline" : "Soutenez Franz", |
80 | "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.", | 84 | "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.", |
81 | "pricing.submit.label" : "Je veux soutenir le développement de Franz", | 85 | "pricing.submit.label" : "Je veux soutenir le développement de Franz", |
@@ -116,7 +120,8 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan", | 120 | "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan", |
117 | "settings.app.form.autoLaunchOnStart" : "Lancer Franz au démarrage", | 121 | "settings.app.form.autoLaunchOnStart" : "Lancer Franz au démarrage", |
118 | "settings.app.form.beta" : "Accepter les versions bêta", | 122 | "settings.app.form.beta" : "Accepter les versions bêta", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Activer l'accélération GPU", | ||
120 | "settings.app.form.enableMenuBar" : "Afficher Franz dans la barre des menus", | 125 | "settings.app.form.enableMenuBar" : "Afficher Franz dans la barre des menus", |
121 | "settings.app.form.enableSpellchecking" : "Activer la vérification orthographique", | 126 | "settings.app.form.enableSpellchecking" : "Activer la vérification orthographique", |
122 | "settings.app.form.enableSystemTray" : "Afficher Franz dans la barre d'état système", | 127 | "settings.app.form.enableSystemTray" : "Afficher Franz dans la barre d'état système", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Garder Franz ouvert en arrière-plan à la fermeture de la fenêtre", | 131 | "settings.app.form.runInBackground" : "Garder Franz ouvert en arrière-plan à la fermeture de la fenêtre", |
127 | "settings.app.form.showDisabledServices" : "Afficher les onglets des services désactivés", | 132 | "settings.app.form.showDisabledServices" : "Afficher les onglets des services désactivés", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Afficher les badges de messages non lus quand les notifications sont désactivées.", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Afficher les badges de messages non lus quand les notifications sont désactivées.", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Paramètres", | 135 | "settings.app.headline" : "Paramètres", |
130 | "settings.app.headlineAdvanced" : "Paramètres avancés", | 136 | "settings.app.headlineAdvanced" : "Paramètres avancés", |
131 | "settings.app.headlineAppearance" : "Apparence", | 137 | "settings.app.headlineAppearance" : "Apparence", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Modifier {name}", | 172 | "settings.service.form.editServiceHeadline" : "Modifier {name}", |
167 | "settings.service.form.enableAudio" : "Activer l'audio", | 173 | "settings.service.form.enableAudio" : "Activer l'audio", |
168 | "settings.service.form.enableBadge" : "Afficher le badge des messages non lus", | 174 | "settings.service.form.enableBadge" : "Afficher le badge des messages non lus", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Activer les notifications", | 176 | "settings.service.form.enableNotification" : "Activer les notifications", |
170 | "settings.service.form.enableService" : "Activer le service", | 177 | "settings.service.form.enableService" : "Activer le service", |
171 | "settings.service.form.headlineBadges" : "Badge des messages non lus", | 178 | "settings.service.form.headlineBadges" : "Badge des messages non lus", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Afficher le badge des messages pour tous les nouveaux messages", | 185 | "settings.service.form.indirectMessages" : "Afficher le badge des messages pour tous les nouveaux messages", |
179 | "settings.service.form.isMutedInfo" : "Lorsque désactivé, tous les sons de notifications ainsi que l'audio sont coupés", | 186 | "settings.service.form.isMutedInfo" : "Lorsque désactivé, tous les sons de notifications ainsi que l'audio sont coupés", |
180 | "settings.service.form.name" : "Nom", | 187 | "settings.service.form.name" : "Nom", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Enregistrer le service", | 194 | "settings.service.form.saveButton" : "Enregistrer le service", |
182 | "settings.service.form.tabHosted" : "Hébergé", | 195 | "settings.service.form.tabHosted" : "Hébergé", |
183 | "settings.service.form.tabOnPremise" : "Auto-hébergé âï¸", | 196 | "settings.service.form.tabOnPremise" : "Auto-hébergé âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Résidents de l'UE : une taxe locale peut s'appliquer", | 233 | "subscription.euTaxInfo" : "Résidents de l'UE : une taxe locale peut s'appliquer", |
221 | "subscription.features.ads" : "Plus de pubs !", | 234 | "subscription.features.ads" : "Plus de pubs !", |
222 | "subscription.features.comingSoon" : "Bientôt disponible", | 235 | "subscription.features.comingSoon" : "Bientôt disponible", |
223 | "subscription.features.customServices" : "Services privés pour vous et votre équipe", | ||
224 | "subscription.features.encryptedSync" : "Synchronisation de session cryptée", | 236 | "subscription.features.encryptedSync" : "Synchronisation de session cryptée", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Ajouter des services locaux\/hébergés comme HipChat", | 238 | "subscription.features.onpremise" : "Ajouter des services locaux\/hébergés comme HipChat", |
226 | "subscription.features.vpn" : "Support des Proxy et VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Le compte payant Supporter Premium Franz inclut", | 242 | "subscription.includedFeatures" : "Le compte payant Supporter Premium Franz inclut", |
228 | "subscription.paymentSessionError" : "Initialisation du paiement impossible", | 243 | "subscription.paymentSessionError" : "Initialisation du paiement impossible", |
229 | "subscription.submit.label" : "Je souhaite aider au développement de Franz", | 244 | "subscription.submit.label" : "Je souhaite aider au développement de Franz", |
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json index 1c0b537b2..3bb838ba3 100644 --- a/src/i18n/locales/ga.json +++ b/src/i18n/locales/ga.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Nà féidir nascadh le seirbhÃsà Franz ar lÃne", | 5 | "global.api.unhealthy" : "Nà féidir nascadh le seirbhÃsà Franz ar lÃne", |
3 | "global.notConnectedToTheInternet" : "NÃl tú nasctha leis an IdirlÃon.", | 6 | "global.notConnectedToTheInternet" : "NÃl tú nasctha leis an IdirlÃon.", |
4 | "import.headline" : "Iompórtáil do sheirbhÃsà Franz 4", | 7 | "import.headline" : "Iompórtáil do sheirbhÃsà Franz 4", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "NÃor aimsÃodh úsáideoir leis an seoladh rÃomhphoist seo", | 79 | "password.noUser" : "NÃor aimsÃodh úsáideoir leis an seoladh rÃomhphoist seo", |
77 | "password.submit.label" : "Cuir isteach", | 80 | "password.submit.label" : "Cuir isteach", |
78 | "password.successInfo" : "Seiceáil do chuid rÃomhphoist le do thoil", | 81 | "password.successInfo" : "Seiceáil do chuid rÃomhphoist le do thoil", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Tabhair tacaÃocht do Franz", | 83 | "pricing.headline" : "Tabhair tacaÃocht do Franz", |
80 | "pricing.link.skipPayment" : "NÃor mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz.", | 84 | "pricing.link.skipPayment" : "NÃor mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz.", |
81 | "pricing.submit.label" : "Ba mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz.", | 85 | "pricing.submit.label" : "Ba mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz.", |
@@ -116,6 +120,7 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Oscail sa chúlra", | 120 | "settings.app.form.autoLaunchInBackground" : "Oscail sa chúlra", |
117 | "settings.app.form.autoLaunchOnStart" : "Láinseáil Franz ón tús", | 121 | "settings.app.form.autoLaunchOnStart" : "Láinseáil Franz ón tús", |
118 | "settings.app.form.beta" : "Cuir leagain béite san áireamh", | 122 | "settings.app.form.beta" : "Cuir leagain béite san áireamh", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "Cumasaigh luasghéarú APG", | 124 | "settings.app.form.enableGPUAcceleration" : "Cumasaigh luasghéarú APG", |
120 | "settings.app.form.enableMenuBar" : "Taispeáin Franz sa bharra roghchláir", | 125 | "settings.app.form.enableMenuBar" : "Taispeáin Franz sa bharra roghchláir", |
121 | "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe", | 126 | "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Coimeád Franz sa chúlra nuair a dhúntar an fhuinneog", | 131 | "settings.app.form.runInBackground" : "Coimeád Franz sa chúlra nuair a dhúntar an fhuinneog", |
127 | "settings.app.form.showDisabledServices" : "Taispeáin tabanna do sheirbhÃsà dhÃchumasaithe", | 132 | "settings.app.form.showDisabledServices" : "Taispeáin tabanna do sheirbhÃsà dhÃchumasaithe", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Taispeáin teachtaireachtaà neamhléite, nuair a dhÃchumasaÃtear fógraÃ", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Taispeáin teachtaireachtaà neamhléite, nuair a dhÃchumasaÃtear fógraÃ", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Socruithe", | 135 | "settings.app.headline" : "Socruithe", |
130 | "settings.app.headlineAdvanced" : "Casta", | 136 | "settings.app.headlineAdvanced" : "Casta", |
131 | "settings.app.headlineAppearance" : "Dealramh", | 137 | "settings.app.headlineAppearance" : "Dealramh", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Cuir {name} in eagar", | 172 | "settings.service.form.editServiceHeadline" : "Cuir {name} in eagar", |
167 | "settings.service.form.enableAudio" : "Cumasaigh fuaim", | 173 | "settings.service.form.enableAudio" : "Cumasaigh fuaim", |
168 | "settings.service.form.enableBadge" : "Taispeáin comhartha do theachtaireachtaà neamhléite", | 174 | "settings.service.form.enableBadge" : "Taispeáin comhartha do theachtaireachtaà neamhléite", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Cumasaigh fógraÃ", | 176 | "settings.service.form.enableNotification" : "Cumasaigh fógraÃ", |
170 | "settings.service.form.enableService" : "Cumasaigh seirbhÃs", | 177 | "settings.service.form.enableService" : "Cumasaigh seirbhÃs", |
171 | "settings.service.form.headlineBadges" : "Comhartha do theachtaireachtaà neamhléite", | 178 | "settings.service.form.headlineBadges" : "Comhartha do theachtaireachtaà neamhléite", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Taispeáin comhartha theachtaireachta do gach teachtaireacht nua", | 185 | "settings.service.form.indirectMessages" : "Taispeáin comhartha theachtaireachta do gach teachtaireacht nua", |
179 | "settings.service.form.isMutedInfo" : "Tachtar gach fuaim fógraà agus athchasadh fuaime", | 186 | "settings.service.form.isMutedInfo" : "Tachtar gach fuaim fógraà agus athchasadh fuaime", |
180 | "settings.service.form.name" : "Ainm", | 187 | "settings.service.form.name" : "Ainm", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Sábháil seirbhÃs", | 194 | "settings.service.form.saveButton" : "Sábháil seirbhÃs", |
182 | "settings.service.form.tabHosted" : "Óstáilte", | 195 | "settings.service.form.tabHosted" : "Óstáilte", |
183 | "settings.service.form.tabOnPremise" : "Féinóstáilte âï¸", | 196 | "settings.service.form.tabOnPremise" : "Féinóstáilte âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Ãithritheoirà an tAÉ: is féidir cáin dÃolacháin áitiúla a chur i bhfeidhm", | 233 | "subscription.euTaxInfo" : "Ãithritheoirà an tAÉ: is féidir cáin dÃolacháin áitiúla a chur i bhfeidhm", |
221 | "subscription.features.ads" : "Fógraà ar bith, choÃche!", | 234 | "subscription.features.ads" : "Fógraà ar bith, choÃche!", |
222 | "subscription.features.comingSoon" : "ag teacht go luath", | 235 | "subscription.features.comingSoon" : "ag teacht go luath", |
223 | "subscription.features.customServices" : "SeirbhÃsà phrÃobháideach dhuitse agus do d'fhoireann", | ||
224 | "subscription.features.encryptedSync" : "Sionchronú seisiúin chriptithe", | 236 | "subscription.features.encryptedSync" : "Sionchronú seisiúin chriptithe", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Cuir seirbhÃsà óstáilte ar nós HipChat leis", | 238 | "subscription.features.onpremise" : "Cuir seirbhÃsà óstáilte ar nós HipChat leis", |
226 | "subscription.features.vpn" : "TacaÃocht seachfhreastalaà ⊠LPF", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Cuireann Cuntas Phŕeimhthacadóra Franz san áireamh", | 242 | "subscription.includedFeatures" : "Cuireann Cuntas Phŕeimhthacadóra Franz san áireamh", |
228 | "subscription.paymentSessionError" : "Nà féidir an bhfoirm ÃocaÃochta a lódáil", | 243 | "subscription.paymentSessionError" : "Nà féidir an bhfoirm ÃocaÃochta a lódáil", |
229 | "subscription.submit.label" : "Ba mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz", | 244 | "subscription.submit.label" : "Ba mhaith liom tacaÃocht a thabhairt d'fhorbairt Franz", |
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json index e227c4537..ae9f25695 100644 --- a/src/i18n/locales/hr.json +++ b/src/i18n/locales/hr.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Nije se moguće povezati na Francove on-line servise. ", | 5 | "global.api.unhealthy" : "Nije se moguće povezati na Francove on-line servise. ", |
3 | "global.notConnectedToTheInternet" : "Sada ste povezani s internetom. ", | 6 | "global.notConnectedToTheInternet" : "Sada ste povezani s internetom. ", |
4 | "import.headline" : "Uvezite svoje Franc 4 servise. ", | 7 | "import.headline" : "Uvezite svoje Franc 4 servise. ", |
@@ -26,7 +29,7 @@ | |||
26 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", | 29 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", |
27 | "login.submit.label" : "Prijavite se", | 30 | "login.submit.label" : "Prijavite se", |
28 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", | 31 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "O aplikaciji", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Hide", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Hide Others", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Quit", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Ne postoji ni jedan korisnik s tom e-mail adresom", | 79 | "password.noUser" : "Ne postoji ni jedan korisnik s tom e-mail adresom", |
77 | "password.submit.label" : "Pošalji", | 80 | "password.submit.label" : "Pošalji", |
78 | "password.successInfo" : "Molimo Vas da provjerite svoju e-mail adresu", | 81 | "password.successInfo" : "Molimo Vas da provjerite svoju e-mail adresu", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Podržite Franz aplikaciju", | 83 | "pricing.headline" : "Podržite Franz aplikaciju", |
80 | "pricing.link.skipPayment" : "Ne želim da podržim razvoj Franz-a.", | 84 | "pricing.link.skipPayment" : "Ne želim da podržim razvoj Franz-a.", |
81 | "pricing.submit.label" : "Želim da podržim razvoj Franz-a.", | 85 | "pricing.submit.label" : "Želim da podržim razvoj Franz-a.", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini", | 120 | "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini", |
117 | "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom", | 121 | "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom", |
118 | "settings.app.form.beta" : "Obuhvati i beta verzije", | 122 | "settings.app.form.beta" : "Obuhvati i beta verzije", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 124 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", |
120 | "settings.app.form.enableMenuBar" : "Prikaži Franz u traci izbornika", | 125 | "settings.app.form.enableMenuBar" : "Prikaži Franz u traci izbornika", |
121 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", | 126 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", |
122 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", | 127 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "Sakrij ikonu Franz u prostoru za obavijesti", |
124 | "settings.app.form.language" : "Jezik", | 129 | "settings.app.form.language" : "Jezik", |
125 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", | 130 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", |
126 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", | 131 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", |
127 | "settings.app.form.showDisabledServices" : "Prikaži ploÄe s onemogućenim servisima", | 132 | "settings.app.form.showDisabledServices" : "Prikaži ploÄe s onemogućenim servisima", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Pokaži neproÄitane znaÄke poruka kad se obavjeÅ¡tenja onemoguće", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Pokaži neproÄitane znaÄke poruka kad se obavjeÅ¡tenja onemoguće", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Postavke", | 135 | "settings.app.headline" : "Postavke", |
130 | "settings.app.headlineAdvanced" : "Napredne alatke", | 136 | "settings.app.headlineAdvanced" : "Napredne alatke", |
131 | "settings.app.headlineAppearance" : "Izgled", | 137 | "settings.app.headlineAppearance" : "Izgled", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Uredite {ime}", | 172 | "settings.service.form.editServiceHeadline" : "Uredite {ime}", |
167 | "settings.service.form.enableAudio" : "Omogućite zvuk", | 173 | "settings.service.form.enableAudio" : "Omogućite zvuk", |
168 | "settings.service.form.enableBadge" : "Show unread message badges", | 174 | "settings.service.form.enableBadge" : "Show unread message badges", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Omogućite obavijesti", | 176 | "settings.service.form.enableNotification" : "Omogućite obavijesti", |
170 | "settings.service.form.enableService" : "Omogućite usluge", | 177 | "settings.service.form.enableService" : "Omogućite usluge", |
171 | "settings.service.form.headlineBadges" : "Unread message badges", | 178 | "settings.service.form.headlineBadges" : "Unread message badges", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Prikaži znaÄku na svim novim porukuama", | 185 | "settings.service.form.indirectMessages" : "Prikaži znaÄku na svim novim porukuama", |
179 | "settings.service.form.isMutedInfo" : "Kada je onemogućeno, sve obavijesti, svi zvukovi i sva pozadinska podrÅ¡ka će biti neÄujna. ", | 186 | "settings.service.form.isMutedInfo" : "Kada je onemogućeno, sve obavijesti, svi zvukovi i sva pozadinska podrÅ¡ka će biti neÄujna. ", |
180 | "settings.service.form.name" : "Ime", | 187 | "settings.service.form.name" : "Ime", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "SaÄuvaj uslugu\/e", | 194 | "settings.service.form.saveButton" : "SaÄuvaj uslugu\/e", |
182 | "settings.service.form.tabHosted" : "Hostovano", | 195 | "settings.service.form.tabHosted" : "Hostovano", |
183 | "settings.service.form.tabOnPremise" : "Samo-hostovano âï¸", | 196 | "settings.service.form.tabOnPremise" : "Samo-hostovano âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "EU državljani, upozerenje: Moguće taksiranje ", | 233 | "subscription.euTaxInfo" : "EU državljani, upozerenje: Moguće taksiranje ", |
221 | "subscription.features.ads" : "Bez reklama, doživotno!", | 234 | "subscription.features.ads" : "Bez reklama, doživotno!", |
222 | "subscription.features.comingSoon" : "Dolazi uskoro", | 235 | "subscription.features.comingSoon" : "Dolazi uskoro", |
223 | "subscription.features.customServices" : "Privatni servisi za Vas i Vaš tim", | ||
224 | "subscription.features.encryptedSync" : "Kodirano usklađivanje sesija.", | 236 | "subscription.features.encryptedSync" : "Kodirano usklađivanje sesija.", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Dodajte pretpostavljeni\/hostirani servis kao Å¡to ima usluga HipChat ", | 238 | "subscription.features.onpremise" : "Dodajte pretpostavljeni\/hostirani servis kao Å¡to ima usluga HipChat ", |
226 | "subscription.features.vpn" : "Podrška za Proxy i VPM ( VPN )", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće: ", | 242 | "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće: ", |
228 | "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", | 243 | "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", |
229 | "subscription.submit.label" : "Želim da podržim razvoj Franca. ", | 244 | "subscription.submit.label" : "Želim da podržim razvoj Franca. ", |
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json index 3571ad453..365dec9c6 100644 --- a/src/i18n/locales/hu.json +++ b/src/i18n/locales/hu.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Nem lehet csatlakozni a Franz online szolgáltatáshoz", | 5 | "global.api.unhealthy" : "Nem lehet csatlakozni a Franz online szolgáltatáshoz", |
3 | "global.notConnectedToTheInternet" : "Nincs hálózati kapcsolat.", | 6 | "global.notConnectedToTheInternet" : "Nincs hálózati kapcsolat.", |
4 | "import.headline" : "Importáld szolgáltatásaidat a Franz 4-ből", | 7 | "import.headline" : "Importáld szolgáltatásaidat a Franz 4-ből", |
@@ -16,7 +19,7 @@ | |||
16 | "invite.name.label" : "Név", | 19 | "invite.name.label" : "Név", |
17 | "invite.skip.label" : "Későbbre halasztom", | 20 | "invite.skip.label" : "Későbbre halasztom", |
18 | "invite.submit.label" : "MeghÃvók küldése", | 21 | "invite.submit.label" : "MeghÃvók küldése", |
19 | "invite.successInfo" : "Invitations sent successfully", | 22 | "invite.successInfo" : "MeghÃvás sikeresen elküldve", |
20 | "login.email.label" : "Email cÃm", | 23 | "login.email.label" : "Email cÃm", |
21 | "login.headline" : "Bejelentkezés", | 24 | "login.headline" : "Bejelentkezés", |
22 | "login.invalidCredentials" : "Hibás email cÃm vagy jelszó", | 25 | "login.invalidCredentials" : "Hibás email cÃm vagy jelszó", |
@@ -26,49 +29,49 @@ | |||
26 | "login.serverLogout" : "A munkamenet lejárt, kérlek lépj be újra.", | 29 | "login.serverLogout" : "A munkamenet lejárt, kérlek lépj be újra.", |
27 | "login.submit.label" : "Bejelentkezés", | 30 | "login.submit.label" : "Bejelentkezés", |
28 | "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.", | 31 | "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "Névjegy", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Elrejt", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Többi elrejtése", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Kilépés", |
33 | "menu.app.settings" : "BeállÃtások", | 36 | "menu.app.settings" : "BeállÃtások", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "MegjelenÃt", |
35 | "menu.edit" : "Szerkesztés", | 38 | "menu.edit" : "Szerkesztés", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "Másolás", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Kivágás", |
38 | "menu.edit.delete" : "Törlés", | 41 | "menu.edit.delete" : "Törlés", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emoji és Szimbólumok", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Beillesztés", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Beillesztés ugyanazzal a megjelenéssel", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Újra", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Összes kijelölése", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Beszéd", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Diktálás elkezdése", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Beszélgetés kezdeményezése", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Beszéd vége", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Visszavonás", |
49 | "menu.file" : "File", | 52 | "menu.file" : "fájl", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Súgó", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Változások listája", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Tudjon meg többet", |
53 | "menu.help.privacy" : "Adatvédelmi Nyilatkozatot", | 56 | "menu.help.privacy" : "Adatvédelmi Nyilatkozatot", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Támogatás", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Felhasználói feltételek", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Szolgáltatások", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Új kiszolgáló hozzáadása", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Nézet", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Kilépés a teljes képernyős módból", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "Kilépés a teljes képernyős módból", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Franz újrainditása", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Kiszolgáló újraindÃtása", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Tényleges méret", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "fejlesztői eszközök bekapcsolása", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Váltás Teljes képernyős módra", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Kiszolgáló Fejlesztői Eszközök Bekapcsolása", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "NagyÃtás", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "KicsinyÃtés", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Ablak", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Bezárás", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Tálcára", |
72 | "password.email.label" : "Email cÃm", | 75 | "password.email.label" : "Email cÃm", |
73 | "password.headline" : "Jelszó visszaállÃtása", | 76 | "password.headline" : "Jelszó visszaállÃtása", |
74 | "password.link.login" : "Jelentkezz be a fiókodba", | 77 | "password.link.login" : "Jelentkezz be a fiókodba", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Nem található felhasználó a megadott email cÃmmel", | 79 | "password.noUser" : "Nem található felhasználó a megadott email cÃmmel", |
77 | "password.submit.label" : "Küldés", | 80 | "password.submit.label" : "Küldés", |
78 | "password.successInfo" : "Ellenőrizd az email fiókodat", | 81 | "password.successInfo" : "Ellenőrizd az email fiókodat", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Támogasd a Franz-ot", | 83 | "pricing.headline" : "Támogasd a Franz-ot", |
80 | "pricing.link.skipPayment" : "Nem szeretném támogatni a Franz fejlesztését.", | 84 | "pricing.link.skipPayment" : "Nem szeretném támogatni a Franz fejlesztését.", |
81 | "pricing.submit.label" : "Támogatni szeretném a Franz fejlesztését.", | 85 | "pricing.submit.label" : "Támogatni szeretném a Franz fejlesztését.", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Megnyitás háttérben", | 120 | "settings.app.form.autoLaunchInBackground" : "Megnyitás háttérben", |
117 | "settings.app.form.autoLaunchOnStart" : "Franz betöltése indÃtáskor", | 121 | "settings.app.form.autoLaunchOnStart" : "Franz betöltése indÃtáskor", |
118 | "settings.app.form.beta" : "Béta verziók keresése", | 122 | "settings.app.form.beta" : "Béta verziók keresése", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 124 | "settings.app.form.enableGPUAcceleration" : "hardveres gyorsÃtás engedélyezése", |
125 | "settings.app.form.enableMenuBar" : "Franz megjelenÃtése a menüsorban", | ||
121 | "settings.app.form.enableSpellchecking" : "HelyesÃrás-ellenÅ‘rzés engedélyezése", | 126 | "settings.app.form.enableSpellchecking" : "HelyesÃrás-ellenÅ‘rzés engedélyezése", |
122 | "settings.app.form.enableSystemTray" : "Franz mutatása a tálcán", | 127 | "settings.app.form.enableSystemTray" : "Franz mutatása a tálcán", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "Franz ikon elrejtése a Dock mögött", |
124 | "settings.app.form.language" : "Nyelv", | 129 | "settings.app.form.language" : "Nyelv", |
125 | "settings.app.form.minimizeToSystemTray" : "Franz kicsinyÃtése a tálcára", | 130 | "settings.app.form.minimizeToSystemTray" : "Franz kicsinyÃtése a tálcára", |
126 | "settings.app.form.runInBackground" : "Franz fusson a háttérben az ablak bezárásakor", | 131 | "settings.app.form.runInBackground" : "Franz fusson a háttérben az ablak bezárásakor", |
127 | "settings.app.form.showDisabledServices" : "Letiltott szolgáltatások megjelenÃtése", | 132 | "settings.app.form.showDisabledServices" : "Letiltott szolgáltatások megjelenÃtése", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mutass az 'olvasatlan üzenet' jelzést amikor az értesÃtések le vannak tiltva.", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mutass az 'olvasatlan üzenet' jelzést amikor az értesÃtések le vannak tiltva.", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "BeállÃtások", | 135 | "settings.app.headline" : "BeállÃtások", |
130 | "settings.app.headlineAdvanced" : "Haladó", | 136 | "settings.app.headlineAdvanced" : "Haladó", |
131 | "settings.app.headlineAppearance" : "Megjelenés", | 137 | "settings.app.headlineAppearance" : "Megjelenés", |
@@ -138,10 +144,10 @@ | |||
138 | "settings.app.updateStatusAvailable" : "FrissÃtés elérhetÅ‘, letöltés folyamatban...", | 144 | "settings.app.updateStatusAvailable" : "FrissÃtés elérhetÅ‘, letöltés folyamatban...", |
139 | "settings.app.updateStatusSearching" : "FrissÃtéseket keres", | 145 | "settings.app.updateStatusSearching" : "FrissÃtéseket keres", |
140 | "settings.app.updateStatusUpToDate" : "A Franz legfrissebb verzióját használod", | 146 | "settings.app.updateStatusUpToDate" : "A Franz legfrissebb verzióját használod", |
141 | "settings.invite.headline" : "Invite Friends", | 147 | "settings.invite.headline" : "Barát meghÃvása", |
142 | "settings.navigation.account" : "Fiók", | 148 | "settings.navigation.account" : "Fiók", |
143 | "settings.navigation.availableServices" : "Elérhető szolgáltatások", | 149 | "settings.navigation.availableServices" : "Elérhető szolgáltatások", |
144 | "settings.navigation.inviteFriends" : "Invite Friends", | 150 | "settings.navigation.inviteFriends" : "Barát meghÃvása", |
145 | "settings.navigation.logout" : "Kijelentkezés", | 151 | "settings.navigation.logout" : "Kijelentkezés", |
146 | "settings.navigation.settings" : "BeállÃtások", | 152 | "settings.navigation.settings" : "BeállÃtások", |
147 | "settings.navigation.yourServices" : "Szolgáltatásaid", | 153 | "settings.navigation.yourServices" : "Szolgáltatásaid", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "{name} szerkesztése", | 172 | "settings.service.form.editServiceHeadline" : "{name} szerkesztése", |
167 | "settings.service.form.enableAudio" : "Hang engedélyezése", | 173 | "settings.service.form.enableAudio" : "Hang engedélyezése", |
168 | "settings.service.form.enableBadge" : "Mutasd az olvasatlan jelzéseket", | 174 | "settings.service.form.enableBadge" : "Mutasd az olvasatlan jelzéseket", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "ÉrtesÃtések engedélyezése", | 176 | "settings.service.form.enableNotification" : "ÉrtesÃtések engedélyezése", |
170 | "settings.service.form.enableService" : "Szolgáltatás engedélyezése", | 177 | "settings.service.form.enableService" : "Szolgáltatás engedélyezése", |
171 | "settings.service.form.headlineBadges" : "Olvasatlan üzenet jelzések", | 178 | "settings.service.form.headlineBadges" : "Olvasatlan üzenet jelzések", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Ãœzenet kitűzÅ‘ megjelenÃtése minden üzenethez", | 185 | "settings.service.form.indirectMessages" : "Ãœzenet kitűzÅ‘ megjelenÃtése minden üzenethez", |
179 | "settings.service.form.isMutedInfo" : "Ha kikapcsolod, minden értesÃtési és lejátszott hang némÃtásra kerül.", | 186 | "settings.service.form.isMutedInfo" : "Ha kikapcsolod, minden értesÃtési és lejátszott hang némÃtásra kerül.", |
180 | "settings.service.form.name" : "Név", | 187 | "settings.service.form.name" : "Név", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Szolgáltatás mentése", | 194 | "settings.service.form.saveButton" : "Szolgáltatás mentése", |
182 | "settings.service.form.tabHosted" : "Ãœzemeltetett", | 195 | "settings.service.form.tabHosted" : "Ãœzemeltetett", |
183 | "settings.service.form.tabOnPremise" : "Egyénileg üzemeltetett", | 196 | "settings.service.form.tabOnPremise" : "Egyénileg üzemeltetett", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "EU állampolgárok: helyi vásárlás esetén adók kerülhetnek felszámolásra", | 233 | "subscription.euTaxInfo" : "EU állampolgárok: helyi vásárlás esetén adók kerülhetnek felszámolásra", |
221 | "subscription.features.ads" : "Hirdetésmentes, mindig!", | 234 | "subscription.features.ads" : "Hirdetésmentes, mindig!", |
222 | "subscription.features.comingSoon" : "Hamarosan!", | 235 | "subscription.features.comingSoon" : "Hamarosan!", |
223 | "subscription.features.customServices" : "Privát szolgáltatások neked és a csapatodnak", | ||
224 | "subscription.features.encryptedSync" : "TitkosÃtott munkamenet szinkronizálás", | 236 | "subscription.features.encryptedSync" : "TitkosÃtott munkamenet szinkronizálás", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Helyi\/üzemeltetett szolgáltatások használata, pl. HipChat", | 238 | "subscription.features.onpremise" : "Helyi\/üzemeltetett szolgáltatások használata, pl. HipChat", |
226 | "subscription.features.vpn" : "Proxy & VPN támogatás", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza", | 242 | "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza", |
228 | "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni", | 243 | "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni", |
229 | "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését", | 244 | "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését", |
@@ -241,10 +256,10 @@ | |||
241 | "tabs.item.enableNotification" : "ÉrtesÃtések engedélyezése", | 256 | "tabs.item.enableNotification" : "ÉrtesÃtések engedélyezése", |
242 | "tabs.item.enableService" : "Szolgáltatás engedélyezése", | 257 | "tabs.item.enableService" : "Szolgáltatás engedélyezése", |
243 | "tabs.item.reload" : "Újratöltés", | 258 | "tabs.item.reload" : "Újratöltés", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} nem érvényes", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} legalább {length} karakter hosszúnak kell lennie", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} Kitöltése kötelező", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} nem érvényes URL", |
248 | "welcome.loginButton" : "Jelentkezz be a fiókodba", | 263 | "welcome.loginButton" : "Jelentkezz be a fiókodba", |
249 | "welcome.signupButton" : "Új fiók létrehozása", | 264 | "welcome.signupButton" : "Új fiók létrehozása", |
250 | "welcome.slogan" : "Üzenetküldés okosan" | 265 | "welcome.slogan" : "Üzenetküldés okosan" |
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json index e6d671c1b..437c1304f 100644 --- a/src/i18n/locales/id.json +++ b/src/i18n/locales/id.json | |||
@@ -1,74 +1,77 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Tidak bisa tersambung ke layanan Franz", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "Anda tidak tersambung ke internet.", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
5 | "global.api.unhealthy" : "Tidak dapat tersambung ke layanan Franz", | ||
6 | "global.notConnectedToTheInternet" : "Anda tidak mempunyai koneksi internet", | ||
4 | "import.headline" : "Impor layanan Franz 4 Anda", | 7 | "import.headline" : "Impor layanan Franz 4 Anda", |
5 | "import.notSupportedHeadline" : "Layanan belum didukung di Franz 5", | 8 | "import.notSupportedHeadline" : "Layanan belum didukung di Franz 5", |
6 | "import.skip.label" : "Saya ingin menambahkan layanan secara manual", | 9 | "import.skip.label" : "Saya ingin menambahkan layanan secara manual", |
7 | "import.submit.label" : "Impor layanan", | 10 | "import.submit.label" : "Impor layanan", |
8 | "infobar.buttonChangelog" : "Yang baru", | 11 | "infobar.buttonChangelog" : "Apa yang baru?", |
9 | "infobar.buttonInstallUpdate" : "Mulai ulang dan instal versi baru", | 12 | "infobar.buttonInstallUpdate" : "Mulai ulang & instal pembaruan", |
10 | "infobar.buttonReloadServices" : "Muat ulang layanan", | 13 | "infobar.buttonReloadServices" : "Muat ulang layanan", |
11 | "infobar.requiredRequestsFailed" : "Tidak bisa memuat layanan dan informasi pengguna", | 14 | "infobar.requiredRequestsFailed" : "Gagal memuat layanan dan informasi pengguna", |
12 | "infobar.servicesUpdated" : "Layanan Anda telah diperbarui", | 15 | "infobar.servicesUpdated" : "Layanan Anda telah diperbarui", |
13 | "infobar.updateAvailable" : "Versi baru Franz tersedia.", | 16 | "infobar.updateAvailable" : "Versi baru Franz tersedia.", |
14 | "invite.email.label" : "Alamat email", | 17 | "invite.email.label" : "Alamat email", |
15 | "invite.headline.friends" : "Undang 3 teman atau kolega Anda", | 18 | "invite.headline.friends" : "Undang 3 teman atau kolega Anda", |
16 | "invite.name.label" : "Nama", | 19 | "invite.name.label" : "Nama", |
17 | "invite.skip.label" : "Saya ingin melakukannya nanti saja", | 20 | "invite.skip.label" : "Nanti saja", |
18 | "invite.submit.label" : "Kirim undangan", | 21 | "invite.submit.label" : "Kirim undangan", |
19 | "invite.successInfo" : "Undangan berhasil dikirim", | 22 | "invite.successInfo" : "Undangan berhasil dikirim", |
20 | "login.email.label" : "Alamat email", | 23 | "login.email.label" : "Alamat email", |
21 | "login.headline" : "Masuk", | 24 | "login.headline" : "Masuk", |
22 | "login.invalidCredentials" : "Email atau sandi tidak valid", | 25 | "login.invalidCredentials" : "Email atau sandi salah", |
23 | "login.link.password" : "Setel ulang sandi", | 26 | "login.link.password" : "Setel ulang sandi", |
24 | "login.link.signup" : "Buat akun gratis", | 27 | "login.link.signup" : "Buat akun gratis", |
25 | "login.password.label" : "Sandi", | 28 | "login.password.label" : "Sandi", |
26 | "login.serverLogout" : "Sesi Anda telah berakhir, silakan masuk kembali.", | 29 | "login.serverLogout" : "Sesi Anda telah berakhir, silakan masuk kembali.", |
27 | "login.submit.label" : "Masuk", | 30 | "login.submit.label" : "Masuk", |
28 | "login.tokenExpired" : "Sesi Anda kedaluwarsa, silakan masuk kembali.", | 31 | "login.tokenExpired" : "Sesi Anda telah kedaluwarsa, silakan masuk kembali.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "Tentang Franz", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Sembunyikan", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Sembunyikan Lainnya", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Keluar", |
33 | "menu.app.settings" : "Pengaturan", | 36 | "menu.app.settings" : "Pengaturan", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Perlihatkan", |
35 | "menu.edit" : "Edit", | 38 | "menu.edit" : "Edit", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "Salin", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Potong", |
38 | "menu.edit.delete" : "Hapus", | 41 | "menu.edit.delete" : "Hapus", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emoji & Simbol", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Tempel", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Tempel dan Cocokkan Gaya", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Ulangi lagi", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Pilih Semua", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Bicara", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Mulai Dikte", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Mulai Berbicara", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Berhenti Berbicara", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Batalkan", |
49 | "menu.file" : "File", | 52 | "menu.file" : "Berkas", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Bantuan", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Log Perubahan", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Pelajari Lebih Lanjut", |
53 | "menu.help.privacy" : "Pernyataan Privasi", | 56 | "menu.help.privacy" : "Pernyataan Privasi", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Dukungan", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Ketentuan Layanan", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Layanan", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Tambahkan Layanan Baru...", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Tampilan", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Masuk ke Mode Layar Penuh", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "Keluar dari Layar Penuh", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Muat Ulang Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Muat ulang Layanan", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Ukuran Sebenarnya", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Aktif\/Nonaktifkan alat pengembang", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Aktif\/Nonaktifkan Layar Penuh", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Aktif\/Nonaktifkan layanan alat pengembang", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "Perbesar", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Perkecil", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Jendela", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Tutup", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Minimalkan", |
72 | "password.email.label" : "Alamat email", | 75 | "password.email.label" : "Alamat email", |
73 | "password.headline" : "Setel ulang sandi", | 76 | "password.headline" : "Setel ulang sandi", |
74 | "password.link.login" : "Masuk ke akun Anda", | 77 | "password.link.login" : "Masuk ke akun Anda", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Tidak ditemukan pengguna dengan email tersebut", | 79 | "password.noUser" : "Tidak ditemukan pengguna dengan email tersebut", |
77 | "password.submit.label" : "Kirim", | 80 | "password.submit.label" : "Kirim", |
78 | "password.successInfo" : "Periksa email Anda", | 81 | "password.successInfo" : "Periksa email Anda", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Dukung Franz", | 83 | "pricing.headline" : "Dukung Franz", |
80 | "pricing.link.skipPayment" : "Saya tidak ingin mendukung pengembangan Franz.", | 84 | "pricing.link.skipPayment" : "Saya tidak ingin mendukung pengembangan Franz.", |
81 | "pricing.submit.label" : "Saya ingin mendukung pengembangan Franz", | 85 | "pricing.submit.label" : "Saya ingin mendukung pengembangan Franz", |
@@ -86,7 +90,7 @@ | |||
86 | "service.crashHandler.text" : "{name} menyebabkan kesalahan.", | 90 | "service.crashHandler.text" : "{name} menyebabkan kesalahan.", |
87 | "service.disabledHandler.action" : "Aktifkan {name}", | 91 | "service.disabledHandler.action" : "Aktifkan {name}", |
88 | "service.disabledHandler.headline" : "{name} dinonaktifkan", | 92 | "service.disabledHandler.headline" : "{name} dinonaktifkan", |
89 | "services.getStarted" : "Memulai", | 93 | "services.getStarted" : "Ayo mulai!", |
90 | "services.welcome" : "Selamat datang di Franz", | 94 | "services.welcome" : "Selamat datang di Franz", |
91 | "settings.account.account.editButton" : "Edit akun", | 95 | "settings.account.account.editButton" : "Edit akun", |
92 | "settings.account.accountType.basic" : "Akun Dasar", | 96 | "settings.account.accountType.basic" : "Akun Dasar", |
@@ -107,7 +111,7 @@ | |||
107 | "settings.account.manageSubscription.label" : "Kelola langganan Anda", | 111 | "settings.account.manageSubscription.label" : "Kelola langganan Anda", |
108 | "settings.account.successInfo" : "Perubahan Anda telah disimpan", | 112 | "settings.account.successInfo" : "Perubahan Anda telah disimpan", |
109 | "settings.account.tryReloadUserInfoRequest" : "Coba lagi", | 113 | "settings.account.tryReloadUserInfoRequest" : "Coba lagi", |
110 | "settings.account.userInfoRequestFailed" : "Tidak bisa memuat informasi pengguna", | 114 | "settings.account.userInfoRequestFailed" : "Gagal memuat informasi pengguna", |
111 | "settings.app.buttonClearAllCache" : "Bersihkan singgahan", | 115 | "settings.app.buttonClearAllCache" : "Bersihkan singgahan", |
112 | "settings.app.buttonInstallUpdate" : "Mulai ulang dan instal versi baru", | 116 | "settings.app.buttonInstallUpdate" : "Mulai ulang dan instal versi baru", |
113 | "settings.app.buttonSearchForUpdate" : "Periksa versi baru", | 117 | "settings.app.buttonSearchForUpdate" : "Periksa versi baru", |
@@ -116,7 +120,8 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Buka di latar belakang", | 120 | "settings.app.form.autoLaunchInBackground" : "Buka di latar belakang", |
117 | "settings.app.form.autoLaunchOnStart" : "Jalankan Franz saat komputer dimulai", | 121 | "settings.app.form.autoLaunchOnStart" : "Jalankan Franz saat komputer dimulai", |
118 | "settings.app.form.beta" : "Sertakan versi beta", | 122 | "settings.app.form.beta" : "Sertakan versi beta", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Aktifkan Akselerasi GPU", | ||
120 | "settings.app.form.enableMenuBar" : "Tampilkan Franz di Bilah Menu", | 125 | "settings.app.form.enableMenuBar" : "Tampilkan Franz di Bilah Menu", |
121 | "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan", | 126 | "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan", |
122 | "settings.app.form.enableSystemTray" : "Tampilkan Franz di baki sistem", | 127 | "settings.app.form.enableSystemTray" : "Tampilkan Franz di baki sistem", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Tetap jalankan Franz di latar belakang saat menutup jendela", | 131 | "settings.app.form.runInBackground" : "Tetap jalankan Franz di latar belakang saat menutup jendela", |
127 | "settings.app.form.showDisabledServices" : "Tampilkan tab layanan yang dinonaktifkan", | 132 | "settings.app.form.showDisabledServices" : "Tampilkan tab layanan yang dinonaktifkan", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Tampilkan lencana pesan belum dibaca saat pemberitahuan dinonaktifkan", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Tampilkan lencana pesan belum dibaca saat pemberitahuan dinonaktifkan", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Pengaturan", | 135 | "settings.app.headline" : "Pengaturan", |
130 | "settings.app.headlineAdvanced" : "Tingkat Lanjut", | 136 | "settings.app.headlineAdvanced" : "Tingkat Lanjut", |
131 | "settings.app.headlineAppearance" : "Tampilan", | 137 | "settings.app.headlineAppearance" : "Tampilan", |
@@ -149,7 +155,7 @@ | |||
149 | "settings.recipes.dev" : "Pengembangan", | 155 | "settings.recipes.dev" : "Pengembangan", |
150 | "settings.recipes.headline" : "Layanan tersedia", | 156 | "settings.recipes.headline" : "Layanan tersedia", |
151 | "settings.recipes.missingService" : "Layanan tidak tersedia?", | 157 | "settings.recipes.missingService" : "Layanan tidak tersedia?", |
152 | "settings.recipes.mostPopular" : "Paling populer", | 158 | "settings.recipes.mostPopular" : "Terpopuler", |
153 | "settings.recipes.nothingFound" : "Maaf, tidak ada layanan yang cocok dengan pencarian Anda.", | 159 | "settings.recipes.nothingFound" : "Maaf, tidak ada layanan yang cocok dengan pencarian Anda.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Layanan berhasil ditambahkan", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Layanan berhasil ditambahkan", |
155 | "settings.searchService" : "Cari layanan", | 161 | "settings.searchService" : "Cari layanan", |
@@ -161,11 +167,12 @@ | |||
161 | "settings.service.form.customUrl" : "Server khusus", | 167 | "settings.service.form.customUrl" : "Server khusus", |
162 | "settings.service.form.customUrlPremiumInfo" : "Untuk menambahkan layanan hosted yang dijalankan mandiri, Anda membutuhkan Franz Premium Supporter Account.", | 168 | "settings.service.form.customUrlPremiumInfo" : "Untuk menambahkan layanan hosted yang dijalankan mandiri, Anda membutuhkan Franz Premium Supporter Account.", |
163 | "settings.service.form.customUrlUpgradeAccount" : "Tingkatkan akun Anda", | 169 | "settings.service.form.customUrlUpgradeAccount" : "Tingkatkan akun Anda", |
164 | "settings.service.form.customUrlValidationError" : "Tidak bisa memvalidasi server {name} khusus.", | 170 | "settings.service.form.customUrlValidationError" : "Gagal memvalidasi server {nama} khusus.", |
165 | "settings.service.form.deleteButton" : "Hapus layanan", | 171 | "settings.service.form.deleteButton" : "Hapus layanan", |
166 | "settings.service.form.editServiceHeadline" : "Edit {name}", | 172 | "settings.service.form.editServiceHeadline" : "Edit {nama}", |
167 | "settings.service.form.enableAudio" : "Aktifkan audio", | 173 | "settings.service.form.enableAudio" : "Aktifkan audio", |
168 | "settings.service.form.enableBadge" : "Tampilkan lencana pesan belum dibaca", | 174 | "settings.service.form.enableBadge" : "Tampilkan lencana pesan belum dibaca", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Aktifkan pemberitahuan", | 176 | "settings.service.form.enableNotification" : "Aktifkan pemberitahuan", |
170 | "settings.service.form.enableService" : "Aktifkan layanan", | 177 | "settings.service.form.enableService" : "Aktifkan layanan", |
171 | "settings.service.form.headlineBadges" : "Lencana pesan belum dibaca", | 178 | "settings.service.form.headlineBadges" : "Lencana pesan belum dibaca", |
@@ -175,9 +182,15 @@ | |||
175 | "settings.service.form.iconDelete" : "Hapus", | 182 | "settings.service.form.iconDelete" : "Hapus", |
176 | "settings.service.form.iconUpload" : "Lepaskan gambar atau klik di sini", | 183 | "settings.service.form.iconUpload" : "Lepaskan gambar atau klik di sini", |
177 | "settings.service.form.indirectMessageInfo" : "Anda akan diberi tahu tentang semua pesan dalam kanal, bukan hanya @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Anda akan diberi tahu tentang semua pesan dalam kanal, bukan hanya @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Tampilkan lencana pesan untuk semua pesan", | 185 | "settings.service.form.indirectMessages" : "Tampilkan lencana pesan untuk semua pesan baru", |
179 | "settings.service.form.isMutedInfo" : "Saat dinonaktifkan, semua suara pemberitahuan dan pemutaran audio akan dibisukan", | 186 | "settings.service.form.isMutedInfo" : "Saat dinonaktifkan, semua suara pemberitahuan dan pemutaran audio akan dibisukan", |
180 | "settings.service.form.name" : "Nama", | 187 | "settings.service.form.name" : "Nama", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Simpan layanan", | 194 | "settings.service.form.saveButton" : "Simpan layanan", |
182 | "settings.service.form.tabHosted" : "Hosted", | 195 | "settings.service.form.tabHosted" : "Hosted", |
183 | "settings.service.form.tabOnPremise" : "Hosted mandiri", | 196 | "settings.service.form.tabOnPremise" : "Hosted mandiri", |
@@ -187,7 +200,7 @@ | |||
187 | "settings.services.deletedInfo" : "Layanan telah dihapus", | 200 | "settings.services.deletedInfo" : "Layanan telah dihapus", |
188 | "settings.services.discoverServices" : "Temukan layanan", | 201 | "settings.services.discoverServices" : "Temukan layanan", |
189 | "settings.services.headline" : "Layanan Anda", | 202 | "settings.services.headline" : "Layanan Anda", |
190 | "settings.services.noServicesAdded" : "Anda belum menambahkan layanan.", | 203 | "settings.services.noServicesAdded" : "Anda belum menambahkan layanan apa pun.", |
191 | "settings.services.tooltip.isDisabled" : "Layanan dinonaktifkan", | 204 | "settings.services.tooltip.isDisabled" : "Layanan dinonaktifkan", |
192 | "settings.services.tooltip.isMuted" : "Semua suara dibisukan", | 205 | "settings.services.tooltip.isMuted" : "Semua suara dibisukan", |
193 | "settings.services.tooltip.notificationsDisabled" : "Pemberitahuan dinonaktifkan", | 206 | "settings.services.tooltip.notificationsDisabled" : "Pemberitahuan dinonaktifkan", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Warga UE: pajak penjualan lokal mungkin berlaku", | 233 | "subscription.euTaxInfo" : "Warga UE: pajak penjualan lokal mungkin berlaku", |
221 | "subscription.features.ads" : "Tanpa iklan, selamanya!", | 234 | "subscription.features.ads" : "Tanpa iklan, selamanya!", |
222 | "subscription.features.comingSoon" : "segera hadir", | 235 | "subscription.features.comingSoon" : "segera hadir", |
223 | "subscription.features.customServices" : "Layanan pribadi untuk Anda dan tim Anda", | ||
224 | "subscription.features.encryptedSync" : "Sinkronisasi sesi terenkripsi", | 236 | "subscription.features.encryptedSync" : "Sinkronisasi sesi terenkripsi", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Layanan add-on premise\/hosted seperti HipChat", | 238 | "subscription.features.onpremise" : "Layanan add-on premise\/hosted seperti HipChat", |
226 | "subscription.features.vpn" : "Dukungan proxy & VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Franz Premium Supporter Account berbayar menyertakan", | 242 | "subscription.includedFeatures" : "Franz Premium Supporter Account berbayar menyertakan", |
228 | "subscription.paymentSessionError" : "Tidak bisa menginisialisasi formulir pembayaran", | 243 | "subscription.paymentSessionError" : "Tidak bisa menginisialisasi formulir pembayaran", |
229 | "subscription.submit.label" : "Saya ingin mendukung pengembangan Franz", | 244 | "subscription.submit.label" : "Saya ingin mendukung pengembangan Franz", |
@@ -236,15 +251,15 @@ | |||
236 | "tabs.item.disableAudio" : "Nonaktifkan audio", | 251 | "tabs.item.disableAudio" : "Nonaktifkan audio", |
237 | "tabs.item.disableNotifications" : "Nonaktifkan pemberitahuan", | 252 | "tabs.item.disableNotifications" : "Nonaktifkan pemberitahuan", |
238 | "tabs.item.disableService" : "Nonaktifkan layanan", | 253 | "tabs.item.disableService" : "Nonaktifkan layanan", |
239 | "tabs.item.edit" : "Edit", | 254 | "tabs.item.edit" : "Sunting", |
240 | "tabs.item.enableAudio" : "Aktifkan audio", | 255 | "tabs.item.enableAudio" : "Aktifkan audio", |
241 | "tabs.item.enableNotification" : "Aktifkan pemberitahuan", | 256 | "tabs.item.enableNotification" : "Aktifkan pemberitahuan", |
242 | "tabs.item.enableService" : "Aktifkan layanan", | 257 | "tabs.item.enableService" : "Aktifkan layanan", |
243 | "tabs.item.reload" : "Muat Ulang", | 258 | "tabs.item.reload" : "Muat Ulang", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} tidak benar", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} setidaknya harus {length} karakter", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} wajib diisi", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} bukan URL yang benar", |
248 | "welcome.loginButton" : "Masuk ke akun Anda", | 263 | "welcome.loginButton" : "Masuk ke akun Anda", |
249 | "welcome.signupButton" : "Buat akun gratis", | 264 | "welcome.signupButton" : "Buat akun gratis", |
250 | "welcome.slogan" : "Perpesanan yang bekerja untuk Anda" | 265 | "welcome.slogan" : "Perpesanan yang bekerja untuk Anda" |
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 9d23a309b..958d1470d 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json | |||
@@ -1,14 +1,17 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Impossibile connettersi ai servizi online di Franz", | 5 | "global.api.unhealthy" : "Impossibile connettersi ai servizi online di Franz", |
3 | "global.notConnectedToTheInternet" : "Non sei connesso a Internet.", | 6 | "global.notConnectedToTheInternet" : "Non sei connesso a Internet.", |
4 | "import.headline" : "Importa i servizi di Franz 4", | 7 | "import.headline" : "Importa i servizi di Franz 4", |
5 | "import.notSupportedHeadline" : "Servizi non ancora supportati in Franz 5", | 8 | "import.notSupportedHeadline" : "Servizi non ancora supportati in Franz 5", |
6 | "import.skip.label" : "Voglio aggiungere servizi manualmente", | 9 | "import.skip.label" : "Voglio aggiungere i servizi manualmente", |
7 | "import.submit.label" : "Importa servizi", | 10 | "import.submit.label" : "Importa servizi", |
8 | "infobar.buttonChangelog" : "Cosa c'è di nuovo?", | 11 | "infobar.buttonChangelog" : "Cosa c'è di nuovo?", |
9 | "infobar.buttonInstallUpdate" : "Riavvia e installa aggiornamento", | 12 | "infobar.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", |
10 | "infobar.buttonReloadServices" : "Ricarica servizi", | 13 | "infobar.buttonReloadServices" : "Ricarica servizi", |
11 | "infobar.requiredRequestsFailed" : "Impossibile caricare servizi e info utente", | 14 | "infobar.requiredRequestsFailed" : "Impossibile caricare i servizi e le informazioni dell'utente", |
12 | "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.", | 15 | "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.", |
13 | "infobar.updateAvailable" : "È disponibile un nuovo aggiornamento di Franz.", | 16 | "infobar.updateAvailable" : "È disponibile un nuovo aggiornamento di Franz.", |
14 | "invite.email.label" : "Indirizzo email", | 17 | "invite.email.label" : "Indirizzo email", |
@@ -23,14 +26,14 @@ | |||
23 | "login.link.password" : "Reimposta password", | 26 | "login.link.password" : "Reimposta password", |
24 | "login.link.signup" : "Crea un account gratuito", | 27 | "login.link.signup" : "Crea un account gratuito", |
25 | "login.password.label" : "Password", | 28 | "login.password.label" : "Password", |
26 | "login.serverLogout" : "La tua sessione è scaduta, accedi nuovamente.", | 29 | "login.serverLogout" : "La tua sessione è scaduta, per favore accedi di nuovo.", |
27 | "login.submit.label" : "Accedi", | 30 | "login.submit.label" : "Accedi", |
28 | "login.tokenExpired" : "La tua sessione è scaduta, accedi nuovamente.", | 31 | "login.tokenExpired" : "La tua sessione è scaduta, per favore accedi di nuovo.", |
29 | "menu.app.about" : "Info su Franz", | 32 | "menu.app.about" : "Info su Franz", |
30 | "menu.app.hide" : "Nascondi", | 33 | "menu.app.hide" : "Nascondi", |
31 | "menu.app.hideOthers" : "Nascondi Altri", | 34 | "menu.app.hideOthers" : "Nascondi Altri", |
32 | "menu.app.quit" : "Esci", | 35 | "menu.app.quit" : "Esci", |
33 | "menu.app.settings" : "Impostazioni", | 36 | "menu.app.settings" : "Settings", |
34 | "menu.app.unhide" : "Mostra", | 37 | "menu.app.unhide" : "Mostra", |
35 | "menu.edit" : "Modifica", | 38 | "menu.edit" : "Modifica", |
36 | "menu.edit.copy" : "Copia", | 39 | "menu.edit.copy" : "Copia", |
@@ -50,20 +53,20 @@ | |||
50 | "menu.help" : "Aiuto", | 53 | "menu.help" : "Aiuto", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Changelog", |
52 | "menu.help.learnMore" : "Maggiori Informazioni", | 55 | "menu.help.learnMore" : "Maggiori Informazioni", |
53 | "menu.help.privacy" : "Informativa sulla Privacy", | 56 | "menu.help.privacy" : "Dichiarazione della Privacy", |
54 | "menu.help.support" : "Supporto", | 57 | "menu.help.support" : "Supporto", |
55 | "menu.help.tos" : "Termini di Servizio", | 58 | "menu.help.tos" : "Termini di Servizio", |
56 | "menu.services" : "Servizi", | 59 | "menu.services" : "Servizi", |
57 | "menu.services.addNewService" : "Aggiungi Nuovo Servizio...", | 60 | "menu.services.addNewService" : "Aggiungi Nuovo Servizio...", |
58 | "menu.view" : "Visualizza", | 61 | "menu.view" : "Visualizza", |
59 | "menu.view.enterFullScreen" : "Visualizza a Tutto Schermo", | 62 | "menu.view.enterFullScreen" : "Visualizza a Schermo Intero", |
60 | "menu.view.exitFullScreen" : "Modalità Finestra", | 63 | "menu.view.exitFullScreen" : "Esci da Schermo Intero", |
61 | "menu.view.reloadFranz" : "Ricarica Franz", | 64 | "menu.view.reloadFranz" : "Ricarica Franz", |
62 | "menu.view.reloadService" : "Ricarica Servizio", | 65 | "menu.view.reloadService" : "Ricarica Servizio", |
63 | "menu.view.resetZoom" : "Dimensione Attuale", | 66 | "menu.view.resetZoom" : "Dimensione Attuale", |
64 | "menu.view.toggleDevTools" : "Attiva Strumenti Sviluppo", | 67 | "menu.view.toggleDevTools" : "Attiva\/Disattiva Strumenti Sviluppo", |
65 | "menu.view.toggleFullScreen" : "Passa a Schermo Intero", | 68 | "menu.view.toggleFullScreen" : "Attiva\/Disattiva Schermo Intero", |
66 | "menu.view.toggleServiceDevTools" : "Attiva Strumenti per Sviluppatori di Servizi", | 69 | "menu.view.toggleServiceDevTools" : "Attiva\/Disattiva Strumenti per Sviluppatori di Servizi", |
67 | "menu.view.zoomIn" : "Aumenta Zoom", | 70 | "menu.view.zoomIn" : "Aumenta Zoom", |
68 | "menu.view.zoomOut" : "Diminuisci Zoom", | 71 | "menu.view.zoomOut" : "Diminuisci Zoom", |
69 | "menu.window" : "Finestra", | 72 | "menu.window" : "Finestra", |
@@ -75,11 +78,12 @@ | |||
75 | "password.link.signup" : "Crea un account gratuito", | 78 | "password.link.signup" : "Crea un account gratuito", |
76 | "password.noUser" : "Non è stato trovato nessun utente con questo indirizzo e-mail", | 79 | "password.noUser" : "Non è stato trovato nessun utente con questo indirizzo e-mail", |
77 | "password.submit.label" : "Invia", | 80 | "password.submit.label" : "Invia", |
78 | "password.successInfo" : "Please check your email", | 81 | "password.successInfo" : "Per favore controlla la tua email", |
79 | "pricing.headline" : "Support Franz", | 82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
80 | "pricing.link.skipPayment" : "Non voglio supportare lo sviluppo di Franz.", | 83 | "pricing.headline" : "Supporta Franz", |
84 | "pricing.link.skipPayment" : "Non voglio supportare lo sviluppo di Franz", | ||
81 | "pricing.submit.label" : "Voglio supportare lo sviluppo di Franz", | 85 | "pricing.submit.label" : "Voglio supportare lo sviluppo di Franz", |
82 | "pricing.support.label" : "Select your support plan", | 86 | "pricing.support.label" : "Seleziona la modalità di supporto", |
83 | "service.crashHandler.action" : "Ricarica {name}", | 87 | "service.crashHandler.action" : "Ricarica {name}", |
84 | "service.crashHandler.autoReload" : "Tentativo di ripristino automatico di {name} in {seconds} secondi", | 88 | "service.crashHandler.autoReload" : "Tentativo di ripristino automatico di {name} in {seconds} secondi", |
85 | "service.crashHandler.headline" : "Oh no!", | 89 | "service.crashHandler.headline" : "Oh no!", |
@@ -87,13 +91,13 @@ | |||
87 | "service.disabledHandler.action" : "Attiva {name}", | 91 | "service.disabledHandler.action" : "Attiva {name}", |
88 | "service.disabledHandler.headline" : "{name} è disattivato", | 92 | "service.disabledHandler.headline" : "{name} è disattivato", |
89 | "services.getStarted" : "Iniziamo", | 93 | "services.getStarted" : "Iniziamo", |
90 | "services.welcome" : "Welcome to Franz", | 94 | "services.welcome" : "Benvenuto su Franz", |
91 | "settings.account.account.editButton" : "Modifica account", | 95 | "settings.account.account.editButton" : "Modifica account", |
92 | "settings.account.accountType.basic" : "Account Basic", | 96 | "settings.account.accountType.basic" : "Account Base", |
93 | "settings.account.accountType.premium" : "Premium Supporter Account", | 97 | "settings.account.accountType.premium" : "Account Supporto Premium ", |
94 | "settings.account.buttonSave" : "Aggiorna profilo", | 98 | "settings.account.buttonSave" : "Aggiorna profilo", |
95 | "settings.account.deleteAccount" : "Elimina account", | 99 | "settings.account.deleteAccount" : "Elimina account", |
96 | "settings.account.deleteEmailSent" : "Hai ricevuto un'email con un link per confermare l'eliminazione del tuo account. I dati del tuo account non potranno più essere ripristinati!", | 100 | "settings.account.deleteEmailSent" : "Hai ricevuto un'email con un link per confermare l'eliminazione del tuo account.I dati del tuo account non potranno più essere ripristinati!", |
97 | "settings.account.deleteInfo" : "Se non hai più bisogno dell'account Franz, puoi eliminare il tuo account e tutti i dati relativi qui.", | 101 | "settings.account.deleteInfo" : "Se non hai più bisogno dell'account Franz, puoi eliminare il tuo account e tutti i dati relativi qui.", |
98 | "settings.account.headline" : "Account", | 102 | "settings.account.headline" : "Account", |
99 | "settings.account.headlineAccount" : "Informazioni account", | 103 | "settings.account.headlineAccount" : "Informazioni account", |
@@ -101,13 +105,13 @@ | |||
101 | "settings.account.headlineInvoices" : "Fatture", | 105 | "settings.account.headlineInvoices" : "Fatture", |
102 | "settings.account.headlinePassword" : "Cambia password", | 106 | "settings.account.headlinePassword" : "Cambia password", |
103 | "settings.account.headlineProfile" : "Aggiorna profilo", | 107 | "settings.account.headlineProfile" : "Aggiorna profilo", |
104 | "settings.account.headlineSubscription" : "La tua iscrizione", | 108 | "settings.account.headlineSubscription" : "Il tuo abbonamento", |
105 | "settings.account.headlineUpgrade" : "Aggiorna il tuo account e supporta Franz", | 109 | "settings.account.headlineUpgrade" : "Aggiorna il tuo account e supporta Franz", |
106 | "settings.account.invoiceDownload" : "Scarica", | 110 | "settings.account.invoiceDownload" : "Scarica", |
107 | "settings.account.manageSubscription.label" : "Gestisci la tua iscrizione", | 111 | "settings.account.manageSubscription.label" : "Gestisci il tuo abbonamento", |
108 | "settings.account.successInfo" : "Le tue modifiche sono state salvate", | 112 | "settings.account.successInfo" : "Le tue modifiche sono state salvate", |
109 | "settings.account.tryReloadUserInfoRequest" : "Prova ancora", | 113 | "settings.account.tryReloadUserInfoRequest" : "Prova di nuovo", |
110 | "settings.account.userInfoRequestFailed" : "Impossibile caricare informazioni utente.", | 114 | "settings.account.userInfoRequestFailed" : "Impossibile caricare le informazioni dell'utente.", |
111 | "settings.app.buttonClearAllCache" : "Svuota la cache", | 115 | "settings.app.buttonClearAllCache" : "Svuota la cache", |
112 | "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", | 116 | "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", |
113 | "settings.app.buttonSearchForUpdate" : "Controlla aggiornamenti", | 117 | "settings.app.buttonSearchForUpdate" : "Controlla aggiornamenti", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Apri in background", | 120 | "settings.app.form.autoLaunchInBackground" : "Apri in background", |
117 | "settings.app.form.autoLaunchOnStart" : "Esegui Franz all'avvio", | 121 | "settings.app.form.autoLaunchOnStart" : "Esegui Franz all'avvio", |
118 | "settings.app.form.beta" : "Includi versioni beta", | 122 | "settings.app.form.beta" : "Includi versioni beta", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "Attiva Accelerazione GPU", | 124 | "settings.app.form.enableGPUAcceleration" : "Attiva Accelerazione GPU", |
120 | "settings.app.form.enableMenuBar" : "Mostra Franz nella Barra del Menu", | 125 | "settings.app.form.enableMenuBar" : "Mostra Franz nella Barra del Menu", |
121 | "settings.app.form.enableSpellchecking" : "Attiva controllo ortografico", | 126 | "settings.app.form.enableSpellchecking" : "Attiva controllo ortografico", |
122 | "settings.app.form.enableSystemTray" : "Mostra Franz nell'area di notifica", | 127 | "settings.app.form.enableSystemTray" : "Mostra Franz nell'area di notifica", |
123 | "settings.app.form.hideDockIcon" : "Nascondi icona Franz nella Dock", | 128 | "settings.app.form.hideDockIcon" : "Nascondi l'icona Franz nel Dock", |
124 | "settings.app.form.language" : "Lingua", | 129 | "settings.app.form.language" : "Lingua", |
125 | "settings.app.form.minimizeToSystemTray" : "Minimizza Franz nell'area di notifica", | 130 | "settings.app.form.minimizeToSystemTray" : "Minimizza Franz nell'area di notifica", |
126 | "settings.app.form.runInBackground" : "Mantieni Franz in esecuzione quando chiudi la finestra", | 131 | "settings.app.form.runInBackground" : "Mantieni Franz in esecuzione quando chiudi la finestra", |
127 | "settings.app.form.showDisabledServices" : "Mostra schede servizi disattivati", | 132 | "settings.app.form.showDisabledServices" : "Mostra schede servizi disattivati", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostra l'etichetta dei messaggi non letti quanto le notifiche sono disattivate", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostra l'etichetta dei messaggi non letti quando le notifiche sono disattivate", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Impostazioni", | 135 | "settings.app.headline" : "Impostazioni", |
130 | "settings.app.headlineAdvanced" : "Avanzate", | 136 | "settings.app.headlineAdvanced" : "Avanzate", |
131 | "settings.app.headlineAppearance" : "Aspetto", | 137 | "settings.app.headlineAppearance" : "Aspetto", |
@@ -136,7 +142,7 @@ | |||
136 | "settings.app.subheadlineCache" : "Cache", | 142 | "settings.app.subheadlineCache" : "Cache", |
137 | "settings.app.translationHelp" : "Aiutaci a tradurre Franz nella tua lingua.", | 143 | "settings.app.translationHelp" : "Aiutaci a tradurre Franz nella tua lingua.", |
138 | "settings.app.updateStatusAvailable" : "Aggiornamento disponibile, download in corso...", | 144 | "settings.app.updateStatusAvailable" : "Aggiornamento disponibile, download in corso...", |
139 | "settings.app.updateStatusSearching" : "Ricerca aggiornamenti...", | 145 | "settings.app.updateStatusSearching" : "Ricerca aggiornamenti", |
140 | "settings.app.updateStatusUpToDate" : "Stai utilizzando l'ultima versione di Franz", | 146 | "settings.app.updateStatusUpToDate" : "Stai utilizzando l'ultima versione di Franz", |
141 | "settings.invite.headline" : "Invita Amici", | 147 | "settings.invite.headline" : "Invita Amici", |
142 | "settings.navigation.account" : "Account", | 148 | "settings.navigation.account" : "Account", |
@@ -148,14 +154,14 @@ | |||
148 | "settings.recipes.all" : "Tutti i servizi", | 154 | "settings.recipes.all" : "Tutti i servizi", |
149 | "settings.recipes.dev" : "Sviluppo", | 155 | "settings.recipes.dev" : "Sviluppo", |
150 | "settings.recipes.headline" : "Servizi disponibili", | 156 | "settings.recipes.headline" : "Servizi disponibili", |
151 | "settings.recipes.missingService" : "Richiedi un servizio", | 157 | "settings.recipes.missingService" : "Manca un servizio?", |
152 | "settings.recipes.mostPopular" : "Più popolari", | 158 | "settings.recipes.mostPopular" : "Più popolari", |
153 | "settings.recipes.nothingFound" : "Ci dispiace, ma nessun servizio corrisponde alla tua ricerca.", | 159 | "settings.recipes.nothingFound" : "Ci dispiace, ma nessun servizio corrisponde alla tua ricerca.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Servizio aggiunto con successo", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Servizio aggiunto con successo", |
155 | "settings.searchService" : "Cerca servizio", | 161 | "settings.searchService" : "Cerca servizio", |
156 | "settings.service.error.goBack" : "Torna ai servizi", | 162 | "settings.service.error.goBack" : "Torna ai servizi", |
157 | "settings.service.error.headline" : "Errore", | 163 | "settings.service.error.headline" : "Errore", |
158 | "settings.service.error.message" : "Impossibile caricare il servizio.", | 164 | "settings.service.error.message" : "Impossibile caricare il contenuto del servizio.", |
159 | "settings.service.form.addServiceHeadline" : "Aggiungi {name}", | 165 | "settings.service.form.addServiceHeadline" : "Aggiungi {name}", |
160 | "settings.service.form.availableServices" : "Servizi disponibili", | 166 | "settings.service.form.availableServices" : "Servizi disponibili", |
161 | "settings.service.form.customUrl" : "Server personalizzato", | 167 | "settings.service.form.customUrl" : "Server personalizzato", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Modifica {name}", | 172 | "settings.service.form.editServiceHeadline" : "Modifica {name}", |
167 | "settings.service.form.enableAudio" : "Attiva audio", | 173 | "settings.service.form.enableAudio" : "Attiva audio", |
168 | "settings.service.form.enableBadge" : "Mostra l'etichetta dei messaggi non letti", | 174 | "settings.service.form.enableBadge" : "Mostra l'etichetta dei messaggi non letti", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Attiva le notifiche", | 176 | "settings.service.form.enableNotification" : "Attiva le notifiche", |
170 | "settings.service.form.enableService" : "Attiva il servizio", | 177 | "settings.service.form.enableService" : "Attiva il servizio", |
171 | "settings.service.form.headlineBadges" : "Etichetta dei messaggi non letti", | 178 | "settings.service.form.headlineBadges" : "Etichetta dei messaggi non letti", |
@@ -175,9 +182,15 @@ | |||
175 | "settings.service.form.iconDelete" : "Elimina", | 182 | "settings.service.form.iconDelete" : "Elimina", |
176 | "settings.service.form.iconUpload" : "Trascina la tua immagine o clicca qui", | 183 | "settings.service.form.iconUpload" : "Trascina la tua immagine o clicca qui", |
177 | "settings.service.form.indirectMessageInfo" : "Verranno notificati tutti i messaggi di un canale, non solo @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Verranno notificati tutti i messaggi di un canale, non solo @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Mostra l'etichetta per tutti i messaggi", | 185 | "settings.service.form.indirectMessages" : "Mostra l'etichetta per tutti i nuovi messaggi", |
179 | "settings.service.form.isMutedInfo" : "Se disattivato, tutte le notifiche sonore e le riproduzioni audio saranno mute", | 186 | "settings.service.form.isMutedInfo" : "Se disattivato, tutte le notifiche sonore e le riproduzioni audio saranno mutate", |
180 | "settings.service.form.name" : "Nome", | 187 | "settings.service.form.name" : "Nome", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Salva servizio", | 194 | "settings.service.form.saveButton" : "Salva servizio", |
182 | "settings.service.form.tabHosted" : "Hosted", | 195 | "settings.service.form.tabHosted" : "Hosted", |
183 | "settings.service.form.tabOnPremise" : "Self hosted âï¸", | 196 | "settings.service.form.tabOnPremise" : "Self hosted âï¸", |
@@ -187,15 +200,15 @@ | |||
187 | "settings.services.deletedInfo" : "Il servizio è stato eliminato", | 200 | "settings.services.deletedInfo" : "Il servizio è stato eliminato", |
188 | "settings.services.discoverServices" : "Scopri servizi", | 201 | "settings.services.discoverServices" : "Scopri servizi", |
189 | "settings.services.headline" : "I tuoi servizi", | 202 | "settings.services.headline" : "I tuoi servizi", |
190 | "settings.services.noServicesAdded" : "Non aggiunto nessun servizio.", | 203 | "settings.services.noServicesAdded" : "Non hai aggiunto ancora nessun servizio.", |
191 | "settings.services.tooltip.isDisabled" : "Il servizio è disattivato", | 204 | "settings.services.tooltip.isDisabled" : "Il servizio è disattivato", |
192 | "settings.services.tooltip.isMuted" : "Tutti i suoni sono stati disattivati", | 205 | "settings.services.tooltip.isMuted" : "Tutti i suoni sono disattivati", |
193 | "settings.services.tooltip.notificationsDisabled" : "Le notifiche sono state disattivate", | 206 | "settings.services.tooltip.notificationsDisabled" : "Le notifiche sono disattivate", |
194 | "settings.services.updatedInfo" : "Le modifiche sono state salvate", | 207 | "settings.services.updatedInfo" : "Le tue modifiche sono state salvate", |
195 | "settings.user.form.accountType.company" : "Società ", | 208 | "settings.user.form.accountType.company" : "Società ", |
196 | "settings.user.form.accountType.individual" : "Individuo", | 209 | "settings.user.form.accountType.individual" : "Individuale", |
197 | "settings.user.form.accountType.label" : "Tipo account", | 210 | "settings.user.form.accountType.label" : "Tipo di account", |
198 | "settings.user.form.accountType.non-profit" : "Non-Profit", | 211 | "settings.user.form.accountType.non-profit" : "No profit", |
199 | "settings.user.form.currentPassword" : "Password attuale", | 212 | "settings.user.form.currentPassword" : "Password attuale", |
200 | "settings.user.form.email" : "Email", | 213 | "settings.user.form.email" : "Email", |
201 | "settings.user.form.firstname" : "Nome", | 214 | "settings.user.form.firstname" : "Nome", |
@@ -211,21 +224,23 @@ | |||
211 | "signup.firstname.label" : "Nome", | 224 | "signup.firstname.label" : "Nome", |
212 | "signup.headline" : "Iscriviti", | 225 | "signup.headline" : "Iscriviti", |
213 | "signup.lastname.label" : "Cognome", | 226 | "signup.lastname.label" : "Cognome", |
214 | "signup.legal.info" : "Creando un account di Franz accetti", | 227 | "signup.legal.info" : "Creando un account di Franz accetti l' ", |
215 | "signup.legal.privacy" : "Informativa sulla Privacy", | 228 | "signup.legal.privacy" : "Informativa sulla Privacy", |
216 | "signup.legal.terms" : "Termini del Servizio", | 229 | "signup.legal.terms" : "Termini di Servizio", |
217 | "signup.link.login" : "Hai già un account, accedi?", | 230 | "signup.link.login" : "Hai già un account, vuoi accedere?", |
218 | "signup.password.label" : "Password", | 231 | "signup.password.label" : "Password", |
219 | "signup.submit.label" : "Crea un account", | 232 | "signup.submit.label" : "Crea un account", |
220 | "subscription.euTaxInfo" : "Per i residenti UE: possono essere applicate tasse locali", | 233 | "subscription.euTaxInfo" : "Per i residenti UE: possono essere applicate tasse locali", |
221 | "subscription.features.ads" : "Nessuna pubblicità , mai!", | 234 | "subscription.features.ads" : "Nessuna pubblicità , mai!", |
222 | "subscription.features.comingSoon" : "in arrivo", | 235 | "subscription.features.comingSoon" : "in arrivo", |
223 | "subscription.features.customServices" : "Servizi privati per te e il tuo gruppo", | ||
224 | "subscription.features.encryptedSync" : "Sincronizzazione sessione crittografata", | 236 | "subscription.features.encryptedSync" : "Sincronizzazione sessione crittografata", |
225 | "subscription.features.onpremise" : "Aggiungi servizi on-premise\/in casa come HipChat", | 237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", |
226 | "subscription.features.vpn" : "Supporto Proxy e VPN", | 238 | "subscription.features.onpremise" : "Aggiungi servizi on-premise\/hosted come HipChat", |
239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", | ||
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "L'account a pagamento Franz Premium Supporter include", | 242 | "subscription.includedFeatures" : "L'account a pagamento Franz Premium Supporter include", |
228 | "subscription.paymentSessionError" : "Impossibile inizializzare il form del pagamento", | 243 | "subscription.paymentSessionError" : "Impossibile inizializzare il modulo per il pagamento", |
229 | "subscription.submit.label" : "Voglio supportare lo sviluppo di Franz", | 244 | "subscription.submit.label" : "Voglio supportare lo sviluppo di Franz", |
230 | "subscription.type.free" : "gratis", | 245 | "subscription.type.free" : "gratis", |
231 | "subscription.type.month" : "mese", | 246 | "subscription.type.month" : "mese", |
@@ -240,12 +255,12 @@ | |||
240 | "tabs.item.enableAudio" : "Attiva audio", | 255 | "tabs.item.enableAudio" : "Attiva audio", |
241 | "tabs.item.enableNotification" : "Attiva notifiche", | 256 | "tabs.item.enableNotification" : "Attiva notifiche", |
242 | "tabs.item.enableService" : "Attiva servizio", | 257 | "tabs.item.enableService" : "Attiva servizio", |
243 | "tabs.item.reload" : "Aggiorna", | 258 | "tabs.item.reload" : "Ricarica", |
244 | "validation.email" : "{field} non valido", | 259 | "validation.email" : "{field} non valido", |
245 | "validation.minLength" : "{field} dovrebbe contenere almeno {length} caratteri", | 260 | "validation.minLength" : "{field} dovrebbe contenere almeno {length} caratteri", |
246 | "validation.required" : "{field} è necessario", | 261 | "validation.required" : "{field} è necessario", |
247 | "validation.url" : "{field} non è un URL valido", | 262 | "validation.url" : "{field} non è un URL valido", |
248 | "welcome.loginButton" : "Accedi al tuo account", | 263 | "welcome.loginButton" : "Accedi al tuo account", |
249 | "welcome.signupButton" : "Crea un account gratuito", | 264 | "welcome.signupButton" : "Crea un account gratuito", |
250 | "welcome.slogan" : "Un sistema di messaggistica che funziona" | 265 | "welcome.slogan" : "Un sistema di messaggistica che va bene per te" |
251 | } | 266 | } |
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index a7af10aba..57b767ef1 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json | |||
@@ -1,11 +1,14 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Franzオンラインサービスã«æŽ¥ç¶šã§ãã¾ã›ã‚“。", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
5 | "global.api.unhealthy" : "Franzã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。", | ||
3 | "global.notConnectedToTheInternet" : "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。", | 6 | "global.notConnectedToTheInternet" : "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。", |
4 | "import.headline" : "Franz 4ã®ã‚µãƒ¼ãƒ“スをインãƒãƒ¼ãƒˆ", | 7 | "import.headline" : "Franz 4ã®ã‚µãƒ¼ãƒ“スをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", |
5 | "import.notSupportedHeadline" : "Franz 5ã§ã¯ã“ã®ã‚µãƒ¼ãƒ“スã«ã¾ã 対応ã—ã¦ã„ã¾ã›ã‚“", | 8 | "import.notSupportedHeadline" : "Franz 5ã§ã¯ã“ã®ã‚µãƒ¼ãƒ“スã«ã¾ã 対応ã—ã¦ã„ã¾ã›ã‚“", |
6 | "import.skip.label" : "後ã§æ‰‹å‹•ã§ã‚µãƒ¼ãƒ“ã‚¹ã‚’è¿½åŠ ã™ã‚‹", | 9 | "import.skip.label" : "手動ã§ã‚µãƒ¼ãƒ“ã‚¹ã‚’è¿½åŠ ã™ã‚‹", |
7 | "import.submit.label" : "サービスをインãƒãƒ¼ãƒˆ", | 10 | "import.submit.label" : "サービスをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", |
8 | "infobar.buttonChangelog" : "æœ€æ–°æƒ…å ±", | 11 | "infobar.buttonChangelog" : "最新ã®æƒ…å ±", |
9 | "infobar.buttonInstallUpdate" : "å†èµ·å‹•ã—ã¦æ›´æ–°ã‚’インストールã™ã‚‹", | 12 | "infobar.buttonInstallUpdate" : "å†èµ·å‹•ã—ã¦æ›´æ–°ã‚’インストールã™ã‚‹", |
10 | "infobar.buttonReloadServices" : "サービスã®å†èªã¿è¾¼ã¿", | 13 | "infobar.buttonReloadServices" : "サービスã®å†èªã¿è¾¼ã¿", |
11 | "infobar.requiredRequestsFailed" : "サービスã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", | 14 | "infobar.requiredRequestsFailed" : "サービスã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", |
@@ -26,7 +29,7 @@ | |||
26 | "login.serverLogout" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", | 29 | "login.serverLogout" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", |
27 | "login.submit.label" : "サインイン", | 30 | "login.submit.label" : "サインイン", |
28 | "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", | 31 | "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ãƒã‚°ã‚¤ãƒ³ã—ç›´ã—ã¦ä¸‹ã•ã„。", |
29 | "menu.app.about" : "Franzã«ã¤ã„ã¦", | 32 | "menu.app.about" : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±", |
30 | "menu.app.hide" : "éš ã™", | 33 | "menu.app.hide" : "éš ã™", |
31 | "menu.app.hideOthers" : "ä»–ã‚’éš ã™", | 34 | "menu.app.hideOthers" : "ä»–ã‚’éš ã™", |
32 | "menu.app.quit" : "終了", | 35 | "menu.app.quit" : "終了", |
@@ -49,7 +52,7 @@ | |||
49 | "menu.file" : "ファイル", | 52 | "menu.file" : "ファイル", |
50 | "menu.help" : "ヘルプ", | 53 | "menu.help" : "ヘルプ", |
51 | "menu.help.changelog" : "æ›´æ–°å±¥æ´", | 54 | "menu.help.changelog" : "æ›´æ–°å±¥æ´", |
52 | "menu.help.learnMore" : "詳細ã«ã¤ã„ã¦", | 55 | "menu.help.learnMore" : "Franzã«ã¤ã„ã¦", |
53 | "menu.help.privacy" : "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦", | 56 | "menu.help.privacy" : "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦", |
54 | "menu.help.support" : "サãƒãƒ¼ãƒˆ", | 57 | "menu.help.support" : "サãƒãƒ¼ãƒˆ", |
55 | "menu.help.tos" : "サービス利用è¦ç´„", | 58 | "menu.help.tos" : "サービス利用è¦ç´„", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã¾ã 登録ã•ã‚Œã¦ã„ã¾ã›ã‚“", | 79 | "password.noUser" : "ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã¾ã 登録ã•ã‚Œã¦ã„ã¾ã›ã‚“", |
77 | "password.submit.label" : "é€ä¿¡", | 80 | "password.submit.label" : "é€ä¿¡", |
78 | "password.successInfo" : "メールを確èªã—ã¦ä¸‹ã•ã„", | 81 | "password.successInfo" : "メールを確èªã—ã¦ä¸‹ã•ã„", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Franzを支æ´ã™ã‚‹", | 83 | "pricing.headline" : "Franzを支æ´ã™ã‚‹", |
80 | "pricing.link.skipPayment" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸããªã„。", | 84 | "pricing.link.skipPayment" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸããªã„。", |
81 | "pricing.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„。", | 85 | "pricing.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„。", |
@@ -116,6 +120,7 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹ã", | 120 | "settings.app.form.autoLaunchInBackground" : "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹ã", |
117 | "settings.app.form.autoLaunchOnStart" : "システム起動時ã«Franzã‚’é–‹ã", | 121 | "settings.app.form.autoLaunchOnStart" : "システム起動時ã«Franzã‚’é–‹ã", |
118 | "settings.app.form.beta" : "Betaãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹", | 122 | "settings.app.form.beta" : "Betaãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "GPUアクセラレーションを有効ã«ã™ã‚‹", | 124 | "settings.app.form.enableGPUAcceleration" : "GPUアクセラレーションを有効ã«ã™ã‚‹", |
120 | "settings.app.form.enableMenuBar" : "メニューãƒãƒ¼ã«Franzを表示ã™ã‚‹", | 125 | "settings.app.form.enableMenuBar" : "メニューãƒãƒ¼ã«Franzを表示ã™ã‚‹", |
121 | "settings.app.form.enableSpellchecking" : "スペルãƒã‚§ãƒƒã‚¯ã‚’有効ã«ã™ã‚‹", | 126 | "settings.app.form.enableSpellchecking" : "スペルãƒã‚§ãƒƒã‚¯ã‚’有効ã«ã™ã‚‹", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "ウインドウを閉ã˜ãŸéš›ã«Franzã‚’ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã•ã›ã¦ãŠã", | 131 | "settings.app.form.runInBackground" : "ウインドウを閉ã˜ãŸéš›ã«Franzã‚’ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã•ã›ã¦ãŠã", |
127 | "settings.app.form.showDisabledServices" : "無効化ã•ã‚ŒãŸã‚µãƒ¼ãƒ“スã®ã‚¿ãƒ–を表示ã™ã‚‹", | 132 | "settings.app.form.showDisabledServices" : "無効化ã•ã‚ŒãŸã‚µãƒ¼ãƒ“スã®ã‚¿ãƒ–を表示ã™ã‚‹", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "通知ã®ç„¡åŠ¹æ™‚ã«æœªèªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ä»¶æ•°ã‚’表示ã™ã‚‹", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "通知ã®ç„¡åŠ¹æ™‚ã«æœªèªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ä»¶æ•°ã‚’表示ã™ã‚‹", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "è¨å®š", | 135 | "settings.app.headline" : "è¨å®š", |
130 | "settings.app.headlineAdvanced" : "詳細", | 136 | "settings.app.headlineAdvanced" : "詳細", |
131 | "settings.app.headlineAppearance" : "表示スタイル", | 137 | "settings.app.headlineAppearance" : "表示スタイル", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "{name}を編集", | 172 | "settings.service.form.editServiceHeadline" : "{name}を編集", |
167 | "settings.service.form.enableAudio" : "オーディオを有効ã«ã™ã‚‹", | 173 | "settings.service.form.enableAudio" : "オーディオを有効ã«ã™ã‚‹", |
168 | "settings.service.form.enableBadge" : "未èªä»¶æ•°ã®é€šçŸ¥ãƒãƒƒã‚¸ã‚’表示ã™ã‚‹", | 174 | "settings.service.form.enableBadge" : "未èªä»¶æ•°ã®é€šçŸ¥ãƒãƒƒã‚¸ã‚’表示ã™ã‚‹", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "通知を有効ã«ã™ã‚‹", | 176 | "settings.service.form.enableNotification" : "通知を有効ã«ã™ã‚‹", |
170 | "settings.service.form.enableService" : "サービスを有効ã«ã™ã‚‹", | 177 | "settings.service.form.enableService" : "サービスを有効ã«ã™ã‚‹", |
171 | "settings.service.form.headlineBadges" : "未èªä»¶æ•°ã®é€šçŸ¥ãƒãƒƒã‚¸", | 178 | "settings.service.form.headlineBadges" : "未èªä»¶æ•°ã®é€šçŸ¥ãƒãƒƒã‚¸", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "ã™ã¹ã¦ã®æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¤ã„ã¦ãƒãƒƒã‚¸ã‚’表示ã™ã‚‹", | 185 | "settings.service.form.indirectMessages" : "ã™ã¹ã¦ã®æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¤ã„ã¦ãƒãƒƒã‚¸ã‚’表示ã™ã‚‹", |
179 | "settings.service.form.isMutedInfo" : "無効化ã•ã‚Œã¦ã„ã‚‹å ´åˆã€å…¨ã¦ã®é€šçŸ¥éŸ³ã‚„オーディオå†ç”Ÿã¯ç„¡éŸ³ã«ãªã‚Šã¾ã™", | 186 | "settings.service.form.isMutedInfo" : "無効化ã•ã‚Œã¦ã„ã‚‹å ´åˆã€å…¨ã¦ã®é€šçŸ¥éŸ³ã‚„オーディオå†ç”Ÿã¯ç„¡éŸ³ã«ãªã‚Šã¾ã™", |
180 | "settings.service.form.name" : "サービスå", | 187 | "settings.service.form.name" : "サービスå", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "サービスã®ä¿å˜", | 194 | "settings.service.form.saveButton" : "サービスã®ä¿å˜", |
182 | "settings.service.form.tabHosted" : "ホスト", | 195 | "settings.service.form.tabHosted" : "ホスト", |
183 | "settings.service.form.tabOnPremise" : "セルフホスト âï¸", | 196 | "settings.service.form.tabOnPremise" : "セルフホスト âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "EU在ä½è€… : 地域ã®æ¶ˆè²»ç¨ŽãŒé©ç”¨ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™", | 233 | "subscription.euTaxInfo" : "EU在ä½è€… : 地域ã®æ¶ˆè²»ç¨ŽãŒé©ç”¨ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™", |
221 | "subscription.features.ads" : "広告ã¯ä¸€åˆ‡ã‚ã‚Šã¾ã›ã‚“!", | 234 | "subscription.features.ads" : "広告ã¯ä¸€åˆ‡ã‚ã‚Šã¾ã›ã‚“!", |
222 | "subscription.features.comingSoon" : "ã¾ã‚‚ãªãç™»å ´", | 235 | "subscription.features.comingSoon" : "ã¾ã‚‚ãªãç™»å ´", |
223 | "subscription.features.customServices" : "ã‚ãªãŸã¨ã‚ãªãŸã®ãƒãƒ¼ãƒ ã®ãŸã‚ã®ãƒ—ライベートサービス", | ||
224 | "subscription.features.encryptedSync" : "æš—å·åŒ–ã•ã‚ŒãŸã‚»ãƒƒã‚·ãƒ§ãƒ³ã®åŒæœŸ", | 236 | "subscription.features.encryptedSync" : "æš—å·åŒ–ã•ã‚ŒãŸã‚»ãƒƒã‚·ãƒ§ãƒ³ã®åŒæœŸ", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "HipChatã®ã‚ˆã†ãªã‚ªãƒ³ãƒ—レミス\/ホスト型サービスã®è¿½åŠ ", | 238 | "subscription.features.onpremise" : "HipChatã®ã‚ˆã†ãªã‚ªãƒ³ãƒ—レミス\/ホスト型サービスã®è¿½åŠ ", |
226 | "subscription.features.vpn" : "プãƒã‚シサーãƒãƒ¼ã¨VPNã®ã‚µãƒãƒ¼ãƒˆ", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Franz Premium Supporter有料アカウントã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™", | 242 | "subscription.includedFeatures" : "Franz Premium Supporter有料アカウントã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™", |
228 | "subscription.paymentSessionError" : "支払ã„フォームをåˆæœŸåŒ–出æ¥ã¾ã›ã‚“", | 243 | "subscription.paymentSessionError" : "支払ã„フォームをåˆæœŸåŒ–出æ¥ã¾ã›ã‚“", |
229 | "subscription.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„", | 244 | "subscription.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„", |
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json index 7679bc6fc..d521c838a 100644 --- a/src/i18n/locales/ka.json +++ b/src/i18n/locales/ka.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Franz-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებრვერმáƒáƒ®áƒ”რხდáƒ", | 5 | "global.api.unhealthy" : "Franz-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებრვერმáƒáƒ®áƒ”რხდáƒ", |
3 | "global.notConnectedToTheInternet" : "თქვენ áƒáƒ ხáƒáƒ თ ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებული.", | 6 | "global.notConnectedToTheInternet" : "თქვენ áƒáƒ ხáƒáƒ თ ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებული.", |
4 | "import.headline" : "შემáƒáƒ˜áƒ¢áƒáƒœáƒ” Franz 4-ის სერვისები", | 7 | "import.headline" : "შემáƒáƒ˜áƒ¢áƒáƒœáƒ” Franz 4-ის სერვისები", |
@@ -26,23 +29,23 @@ | |||
26 | "login.serverLogout" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", | 29 | "login.serverLogout" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", |
27 | "login.submit.label" : "შესვლáƒ", | 30 | "login.submit.label" : "შესვლáƒ", |
28 | "login.tokenExpired" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", | 31 | "login.tokenExpired" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ იშში ხელáƒáƒ®áƒšáƒ.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "Franz-ის შესáƒáƒ®áƒ”ბ", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Hide", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "სხვების დáƒáƒ›áƒáƒšáƒ•áƒ", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ", |
33 | "menu.app.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები", | 36 | "menu.app.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Unhide", |
35 | "menu.edit" : "რედáƒáƒ¥áƒ¢áƒ˜áƒ ებáƒ", | 38 | "menu.edit" : "რედáƒáƒ¥áƒ¢áƒ˜áƒ ებáƒ", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "კáƒáƒžáƒ˜áƒ ებáƒ", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "áƒáƒ›áƒáƒáƒ áƒ", |
38 | "menu.edit.delete" : "Delete", | 41 | "menu.edit.delete" : "წáƒáƒ¨áƒšáƒ", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "გრáƒáƒ¤áƒ˜áƒ™áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბები & სიმბáƒáƒšáƒáƒ”ბი", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "ჩáƒáƒ¡áƒ›áƒ", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "áƒáƒ¦áƒ“გენáƒ", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "ყველáƒáƒ¡ მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "სáƒáƒ£áƒ‘რები", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ დáƒáƒ¬áƒ§áƒ”ბáƒ", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Start Speaking", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Stop Speaking", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Undo", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "მáƒáƒ›áƒ®áƒ›áƒáƒ ებელი მითითებული მეილით ვერმáƒáƒ˜áƒ«áƒ”ბნáƒ", | 79 | "password.noUser" : "მáƒáƒ›áƒ®áƒ›áƒáƒ ებელი მითითებული მეილით ვერმáƒáƒ˜áƒ«áƒ”ბნáƒ", |
77 | "password.submit.label" : "დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ ებáƒ", | 80 | "password.submit.label" : "დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ ებáƒ", |
78 | "password.successInfo" : "გთხáƒáƒ•áƒ— შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ მეილი", | 81 | "password.successInfo" : "გთხáƒáƒ•áƒ— შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ მეილი", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Franz-ის მხáƒáƒ დáƒáƒáƒ”რáƒ", | 83 | "pricing.headline" : "Franz-ის მხáƒáƒ დáƒáƒáƒ”რáƒ", |
80 | "pricing.link.skipPayment" : "áƒáƒ მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡.", | 84 | "pricing.link.skipPayment" : "áƒáƒ მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡.", |
81 | "pricing.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡", | 85 | "pricing.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡", |
@@ -116,6 +120,7 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "გáƒáƒ®áƒ¡áƒ”ნით ფáƒáƒœáƒ–ე", | 120 | "settings.app.form.autoLaunchInBackground" : "გáƒáƒ®áƒ¡áƒ”ნით ფáƒáƒœáƒ–ე", |
117 | "settings.app.form.autoLaunchOnStart" : "გáƒáƒ”შვáƒáƒ¡ Franz სისტემის ჩáƒáƒ¢áƒ•áƒ˜áƒ თვისáƒáƒ¡", | 121 | "settings.app.form.autoLaunchOnStart" : "გáƒáƒ”შვáƒáƒ¡ Franz სისტემის ჩáƒáƒ¢áƒ•áƒ˜áƒ თვისáƒáƒ¡", |
118 | "settings.app.form.beta" : "ჩáƒáƒ თეთ ბეტრვერსიები", | 122 | "settings.app.form.beta" : "ჩáƒáƒ თეთ ბეტრვერსიები", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 124 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 125 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", |
121 | "settings.app.form.enableSpellchecking" : "Enable spell checking", | 126 | "settings.app.form.enableSpellchecking" : "Enable spell checking", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "დáƒáƒ¢áƒáƒ•áƒ”თ Franz გáƒáƒ¨áƒ•áƒ”ბული რáƒáƒ“ესáƒáƒª ფáƒáƒœáƒ¯áƒáƒ რდáƒáƒ˜áƒ®áƒ£áƒ ებáƒ", | 131 | "settings.app.form.runInBackground" : "დáƒáƒ¢áƒáƒ•áƒ”თ Franz გáƒáƒ¨áƒ•áƒ”ბული რáƒáƒ“ესáƒáƒª ფáƒáƒœáƒ¯áƒáƒ რდáƒáƒ˜áƒ®áƒ£áƒ ებáƒ", |
127 | "settings.app.form.showDisabledServices" : "Display disabled services tabs", | 132 | "settings.app.form.showDisabledServices" : "Display disabled services tabs", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Show unread message badge when notifications are disabled", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Show unread message badge when notifications are disabled", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "პáƒáƒ áƒáƒ›áƒ”ტრები", | 135 | "settings.app.headline" : "პáƒáƒ áƒáƒ›áƒ”ტრები", |
130 | "settings.app.headlineAdvanced" : "Advanced", | 136 | "settings.app.headlineAdvanced" : "Advanced", |
131 | "settings.app.headlineAppearance" : "Appearance", | 137 | "settings.app.headlineAppearance" : "Appearance", |
@@ -166,18 +172,25 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "შეáƒáƒ¡áƒ¬áƒáƒ ე {name}", | 172 | "settings.service.form.editServiceHeadline" : "შეáƒáƒ¡áƒ¬áƒáƒ ე {name}", |
167 | "settings.service.form.enableAudio" : "Enable audio", | 173 | "settings.service.form.enableAudio" : "Enable audio", |
168 | "settings.service.form.enableBadge" : "Show unread message badges", | 174 | "settings.service.form.enableBadge" : "Show unread message badges", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "შეტყáƒáƒ‘ინებების ჩáƒáƒ თვáƒ", | 176 | "settings.service.form.enableNotification" : "შეტყáƒáƒ‘ინებების ჩáƒáƒ თვáƒ", |
170 | "settings.service.form.enableService" : "სერვისის ჩáƒáƒ თვáƒ", | 177 | "settings.service.form.enableService" : "სერვისის ჩáƒáƒ თვáƒ", |
171 | "settings.service.form.headlineBadges" : "Unread message badges", | 178 | "settings.service.form.headlineBadges" : "Unread message badges", |
172 | "settings.service.form.headlineGeneral" : "მთáƒáƒ•áƒáƒ ი", | 179 | "settings.service.form.headlineGeneral" : "მთáƒáƒ•áƒáƒ ი", |
173 | "settings.service.form.headlineNotifications" : "Notifications", | 180 | "settings.service.form.headlineNotifications" : "Notifications", |
174 | "settings.service.form.icon" : "Custom icon", | 181 | "settings.service.form.icon" : "Custom icon", |
175 | "settings.service.form.iconDelete" : "Delete", | 182 | "settings.service.form.iconDelete" : "წáƒáƒ¨áƒšáƒ", |
176 | "settings.service.form.iconUpload" : "Drop your image, or click here", | 183 | "settings.service.form.iconUpload" : "Drop your image, or click here", |
177 | "settings.service.form.indirectMessageInfo" : "თქვენ მიიღებთ შეტყáƒáƒ‘ინებáƒáƒ¡ ყáƒáƒ•áƒ”ლი áƒáƒ®áƒáƒšáƒ˜ შეტყáƒáƒ‘ინებისáƒáƒ¡ áƒáƒ ხზე, áƒáƒ áƒáƒ›áƒáƒ ტრ@username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "თქვენ მიიღებთ შეტყáƒáƒ‘ინებáƒáƒ¡ ყáƒáƒ•áƒ”ლი áƒáƒ®áƒáƒšáƒ˜ შეტყáƒáƒ‘ინებისáƒáƒ¡ áƒáƒ ხზე, áƒáƒ áƒáƒ›áƒáƒ ტრ@username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "áƒáƒ©áƒ•áƒ”ნე შეტყáƒáƒ‘ინებების ნიშáƒáƒœáƒ˜ ყáƒáƒ•áƒ”ლი áƒáƒ®áƒáƒšáƒ˜ შეტყáƒáƒ‘ინებისთვის", | 185 | "settings.service.form.indirectMessages" : "áƒáƒ©áƒ•áƒ”ნე შეტყáƒáƒ‘ინებების ნიშáƒáƒœáƒ˜ ყáƒáƒ•áƒ”ლი áƒáƒ®áƒáƒšáƒ˜ შეტყáƒáƒ‘ინებისთვის", |
179 | "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted", | 186 | "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted", |
180 | "settings.service.form.name" : "სáƒáƒ®áƒ”ლი", | 187 | "settings.service.form.name" : "სáƒáƒ®áƒ”ლი", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "სერვისის შენáƒáƒ®áƒ•áƒ", | 194 | "settings.service.form.saveButton" : "სერვისის შენáƒáƒ®áƒ•áƒ", |
182 | "settings.service.form.tabHosted" : "დáƒáƒ°áƒáƒ¡áƒ¢áƒ˜áƒšáƒ˜", | 195 | "settings.service.form.tabHosted" : "დáƒáƒ°áƒáƒ¡áƒ¢áƒ˜áƒšáƒ˜", |
183 | "settings.service.form.tabOnPremise" : "თვით დáƒáƒ°áƒáƒ¡áƒ¢áƒ˜áƒšáƒ˜ âï¸", | 196 | "settings.service.form.tabOnPremise" : "თვით დáƒáƒ°áƒáƒ¡áƒ¢áƒ˜áƒšáƒ˜ âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "EU residents: local sales tax may apply", | 233 | "subscription.euTaxInfo" : "EU residents: local sales tax may apply", |
221 | "subscription.features.ads" : "áƒáƒ áƒáƒœáƒáƒ˜áƒ ი რეკლáƒáƒ›áƒ”ბი, áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡!", | 234 | "subscription.features.ads" : "áƒáƒ áƒáƒœáƒáƒ˜áƒ ი რეკლáƒáƒ›áƒ”ბი, áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡!", |
222 | "subscription.features.comingSoon" : "მáƒáƒšáƒ”", | 235 | "subscription.features.comingSoon" : "მáƒáƒšáƒ”", |
223 | "subscription.features.customServices" : "პირáƒáƒ“ი მáƒáƒ›áƒ¡áƒáƒ®áƒ£áƒ ებრთქვენთვის დრთქვენი გუნდისთვის", | ||
224 | "subscription.features.encryptedSync" : "დáƒáƒ¨áƒ˜áƒ¤áƒ ული სესიის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ", | 236 | "subscription.features.encryptedSync" : "დáƒáƒ¨áƒ˜áƒ¤áƒ ული სესიის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "on-premise\/hosted სერვისების დáƒáƒ›áƒáƒ¢áƒ”ბáƒ, რáƒáƒ’áƒáƒ იცáƒáƒ HipChat", | 238 | "subscription.features.onpremise" : "on-premise\/hosted სერვისების დáƒáƒ›áƒáƒ¢áƒ”ბáƒ, რáƒáƒ’áƒáƒ იცáƒáƒ HipChat", |
226 | "subscription.features.vpn" : "Proxy-სრდრVPN-ის მხáƒáƒ დáƒáƒáƒ”რáƒ", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "ფáƒáƒ¡áƒ˜áƒáƒœáƒ˜ Franz-ის პრემიუმ მხáƒáƒ მდáƒáƒ›áƒáƒ”რი áƒáƒœáƒ’áƒáƒ იში", | 242 | "subscription.includedFeatures" : "ფáƒáƒ¡áƒ˜áƒáƒœáƒ˜ Franz-ის პრემიუმ მხáƒáƒ მდáƒáƒ›áƒáƒ”რი áƒáƒœáƒ’áƒáƒ იში", |
228 | "subscription.paymentSessionError" : "გáƒáƒ“áƒáƒ®áƒ“ის ფáƒáƒ მáƒáƒ¢áƒ˜áƒ¡ ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერმáƒáƒ®áƒ”რხდáƒ", | 243 | "subscription.paymentSessionError" : "გáƒáƒ“áƒáƒ®áƒ“ის ფáƒáƒ მáƒáƒ¢áƒ˜áƒ¡ ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერმáƒáƒ®áƒ”რხდáƒ", |
229 | "subscription.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡", | 244 | "subscription.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ ებáƒáƒ¡", |
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json index 13dc7548e..5807f11f6 100644 --- a/src/i18n/locales/nl-BE.json +++ b/src/i18n/locales/nl-BE.json | |||
@@ -1,11 +1,14 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services", | 5 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services", |
3 | "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.", | 6 | "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.", |
4 | "import.headline" : "Importeer je Franz 4 services", | 7 | "import.headline" : "Importeer je Franz 4 services", |
5 | "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5", | 8 | "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5", |
6 | "import.skip.label" : "I want to add services manually", | 9 | "import.skip.label" : "Ik wens services manueel toe te voegen", |
7 | "import.submit.label" : "Importeer services", | 10 | "import.submit.label" : "Importeer services", |
8 | "infobar.buttonChangelog" : "What is new?", | 11 | "infobar.buttonChangelog" : "Wat is er nieuw?", |
9 | "infobar.buttonInstallUpdate" : "Start opnieuw op & installeer de update", | 12 | "infobar.buttonInstallUpdate" : "Start opnieuw op & installeer de update", |
10 | "infobar.buttonReloadServices" : "Herlaad de services", | 13 | "infobar.buttonReloadServices" : "Herlaad de services", |
11 | "infobar.requiredRequestsFailed" : "Kan de services en gebruikers informatie niet laden", | 14 | "infobar.requiredRequestsFailed" : "Kan de services en gebruikers informatie niet laden", |
@@ -16,7 +19,7 @@ | |||
16 | "invite.name.label" : "Naam", | 19 | "invite.name.label" : "Naam", |
17 | "invite.skip.label" : "Ik wil dit later doen", | 20 | "invite.skip.label" : "Ik wil dit later doen", |
18 | "invite.submit.label" : "Verzend uitnodigingen", | 21 | "invite.submit.label" : "Verzend uitnodigingen", |
19 | "invite.successInfo" : "Invitations sent successfully", | 22 | "invite.successInfo" : "Uitnodiging met succes verzonden", |
20 | "login.email.label" : "E-mailadres", | 23 | "login.email.label" : "E-mailadres", |
21 | "login.headline" : "Inloggen", | 24 | "login.headline" : "Inloggen", |
22 | "login.invalidCredentials" : "E-mailadres of wachtwoord ongeldig", | 25 | "login.invalidCredentials" : "E-mailadres of wachtwoord ongeldig", |
@@ -26,49 +29,49 @@ | |||
26 | "login.serverLogout" : "De sessie is verlopen, log opnieuw in alsjeblieft.", | 29 | "login.serverLogout" : "De sessie is verlopen, log opnieuw in alsjeblieft.", |
27 | "login.submit.label" : "Log in", | 30 | "login.submit.label" : "Log in", |
28 | "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", | 31 | "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "Over Franz", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Verbergen", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Andere verbergen", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Afsluiten", |
33 | "menu.app.settings" : "Instellingen", | 36 | "menu.app.settings" : "Instellingen", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Zichtbaar maken", |
35 | "menu.edit" : "Aanpassen", | 38 | "menu.edit" : "Aanpassen", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "Kopiëren", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Knippen", |
38 | "menu.edit.delete" : "Delete", | 41 | "menu.edit.delete" : "Verwijderen", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emoji & Symbolen", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Plakken", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Plakken en stijl overeen laten komen", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Opnieuw uitvoeren", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Selecteer alles", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Spraakuitvoer", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Beginnen met dicteren", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Begin met spreken", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Stoppen met spreken", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Ongedaan maken", |
49 | "menu.file" : "File", | 52 | "menu.file" : "Bestand", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Help", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Logboek", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Meer weten", |
53 | "menu.help.privacy" : "Privacyverklaring", | 56 | "menu.help.privacy" : "Privacyverklaring", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Ondersteuning", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Servicevoorwaarden", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Diensten", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Nieuwe service toevoegen...", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Beeld", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Volledig scherm openen", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Franz Herladen", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Service herladen", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Werkelijke grootte", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Toggle Developer Tools", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Volledig scherm aan\/uit", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "Inzoomen", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Uitzoomen", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Venster", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Sluiten", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Minimaliseren", |
72 | "password.email.label" : "E-mailadres", | 75 | "password.email.label" : "E-mailadres", |
73 | "password.headline" : "Wachtwoord resetten", | 76 | "password.headline" : "Wachtwoord resetten", |
74 | "password.link.login" : "Log in op je account", | 77 | "password.link.login" : "Log in op je account", |
@@ -76,28 +79,29 @@ | |||
76 | "password.noUser" : "Geen gebruiker bekend met dat e-mailadres", | 79 | "password.noUser" : "Geen gebruiker bekend met dat e-mailadres", |
77 | "password.submit.label" : "Doorgaan", | 80 | "password.submit.label" : "Doorgaan", |
78 | "password.successInfo" : "Controleer alsjeblieft je e-mail", | 81 | "password.successInfo" : "Controleer alsjeblieft je e-mail", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Ondersteun Franz", | 83 | "pricing.headline" : "Ondersteun Franz", |
80 | "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Franz niet ondersteunen.", | 84 | "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Franz niet ondersteunen.", |
81 | "pricing.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen", | 85 | "pricing.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen", |
82 | "pricing.support.label" : "Selecteer je ondersteuningsplan", | 86 | "pricing.support.label" : "Selecteer je ondersteuningsplan", |
83 | "service.crashHandler.action" : "{naam} herladen", | 87 | "service.crashHandler.action" : "{naam} herladen", |
84 | "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds", | 88 | "service.crashHandler.autoReload" : "Automatisch herstellen {name} proberen in {seconds} seconden", |
85 | "service.crashHandler.headline" : "Oh no!", | 89 | "service.crashHandler.headline" : "Oh nee!", |
86 | "service.crashHandler.text" : "{name} has caused an error.", | 90 | "service.crashHandler.text" : "{name} heeft een probleem veroorzaakt.", |
87 | "service.disabledHandler.action" : "Enable {name}", | 91 | "service.disabledHandler.action" : "Activeer {name}", |
88 | "service.disabledHandler.headline" : "{name} is disabled", | 92 | "service.disabledHandler.headline" : "{name} is uitgeschakeld", |
89 | "services.getStarted" : "Beginnen", | 93 | "services.getStarted" : "Beginnen", |
90 | "services.welcome" : "Welkom bij Franz", | 94 | "services.welcome" : "Welkom bij Franz", |
91 | "settings.account.account.editButton" : "Bewerk account", | 95 | "settings.account.account.editButton" : "Bewerk account", |
92 | "settings.account.accountType.basic" : "Basis Account", | 96 | "settings.account.accountType.basic" : "Basis Account", |
93 | "settings.account.accountType.premium" : "Premium Supporter Account", | 97 | "settings.account.accountType.premium" : "Premium Supporter Account", |
94 | "settings.account.buttonSave" : "Profiel aanpassen", | 98 | "settings.account.buttonSave" : "Profiel aanpassen", |
95 | "settings.account.deleteAccount" : "Delete account", | 99 | "settings.account.deleteAccount" : "Account verwijderen", |
96 | "settings.account.deleteEmailSent" : "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 100 | "settings.account.deleteEmailSent" : "U heeft een email ontvangen met een bevestiginslink om uw account te verwijderen. Uw account en de bijhorende gegevens kunnen niet meer worden herstel na deze actie!", |
97 | "settings.account.deleteInfo" : "If you don't need your Franz account any longer, you can delete your account and all related data here.", | 101 | "settings.account.deleteInfo" : "Indien u uw Franz account nietmeer nodig heeft, kan u hier uw account en de gerelateerde gegegevens verwijderen.", |
98 | "settings.account.headline" : "Account", | 102 | "settings.account.headline" : "Account", |
99 | "settings.account.headlineAccount" : "Account informatie", | 103 | "settings.account.headlineAccount" : "Account informatie", |
100 | "settings.account.headlineDangerZone" : "Danger Zone", | 104 | "settings.account.headlineDangerZone" : "Gevaren Zone", |
101 | "settings.account.headlineInvoices" : "Facturen", | 105 | "settings.account.headlineInvoices" : "Facturen", |
102 | "settings.account.headlinePassword" : "Wijzig wachtwoord", | 106 | "settings.account.headlinePassword" : "Wijzig wachtwoord", |
103 | "settings.account.headlineProfile" : "Profiel aanpassen", | 107 | "settings.account.headlineProfile" : "Profiel aanpassen", |
@@ -108,17 +112,18 @@ | |||
108 | "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen", | 112 | "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen", |
109 | "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw", | 113 | "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw", |
110 | "settings.account.userInfoRequestFailed" : "Kon gebruikerinformatie niet laden", | 114 | "settings.account.userInfoRequestFailed" : "Kon gebruikerinformatie niet laden", |
111 | "settings.app.buttonClearAllCache" : "Clear cache", | 115 | "settings.app.buttonClearAllCache" : "Cache wissen", |
112 | "settings.app.buttonInstallUpdate" : "Herstart & installeer update", | 116 | "settings.app.buttonInstallUpdate" : "Herstart & installeer update", |
113 | "settings.app.buttonSearchForUpdate" : "Controleer op updates", | 117 | "settings.app.buttonSearchForUpdate" : "Controleer op updates", |
114 | "settings.app.cacheInfo" : "Franz cache is currently using {size} of disk space.", | 118 | "settings.app.cacheInfo" : "Franz cache gebruikt momenteel {size} schijfruimte.", |
115 | "settings.app.currentVersion" : "Huidige versie:", | 119 | "settings.app.currentVersion" : "Huidige versie:", |
116 | "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", | 120 | "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", |
117 | "settings.app.form.autoLaunchOnStart" : "Lanceer Franz bij opstarten", | 121 | "settings.app.form.autoLaunchOnStart" : "Lanceer Franz bij opstarten", |
118 | "settings.app.form.beta" : "Inclusief bèta versies", | 122 | "settings.app.form.beta" : "Inclusief bèta versies", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 124 | "settings.app.form.enableGPUAcceleration" : "GPU Acceleratie Activeren", |
121 | "settings.app.form.enableSpellchecking" : "Enable spell checking", | 125 | "settings.app.form.enableMenuBar" : "Toon Franz in Menu Bar", |
126 | "settings.app.form.enableSpellchecking" : "Spellingcontrole inschakelen", | ||
122 | "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", | 127 | "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", |
124 | "settings.app.form.language" : "Taal", | 129 | "settings.app.form.language" : "Taal", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Houd Franz op de achtergrond wanneer het venster gesloten wordt", | 131 | "settings.app.form.runInBackground" : "Houd Franz op de achtergrond wanneer het venster gesloten wordt", |
127 | "settings.app.form.showDisabledServices" : "Display disabled services tabs", | 132 | "settings.app.form.showDisabledServices" : "Display disabled services tabs", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Show unread message badge when notifications are disabled", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Show unread message badge when notifications are disabled", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Instellingen", | 135 | "settings.app.headline" : "Instellingen", |
130 | "settings.app.headlineAdvanced" : "Advanced", | 136 | "settings.app.headlineAdvanced" : "Advanced", |
131 | "settings.app.headlineAppearance" : "Appearance", | 137 | "settings.app.headlineAppearance" : "Appearance", |
@@ -166,18 +172,25 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "{name} aanpassen", | 172 | "settings.service.form.editServiceHeadline" : "{name} aanpassen", |
167 | "settings.service.form.enableAudio" : "Enable audio", | 173 | "settings.service.form.enableAudio" : "Enable audio", |
168 | "settings.service.form.enableBadge" : "Show unread message badges", | 174 | "settings.service.form.enableBadge" : "Show unread message badges", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Notificaties aanzetten", | 176 | "settings.service.form.enableNotification" : "Notificaties aanzetten", |
170 | "settings.service.form.enableService" : "Service aanzetten", | 177 | "settings.service.form.enableService" : "Service aanzetten", |
171 | "settings.service.form.headlineBadges" : "Unread message badges", | 178 | "settings.service.form.headlineBadges" : "Unread message badges", |
172 | "settings.service.form.headlineGeneral" : "Algemeen", | 179 | "settings.service.form.headlineGeneral" : "Algemeen", |
173 | "settings.service.form.headlineNotifications" : "Notifications", | 180 | "settings.service.form.headlineNotifications" : "Notifications", |
174 | "settings.service.form.icon" : "Custom icon", | 181 | "settings.service.form.icon" : "Custom icon", |
175 | "settings.service.form.iconDelete" : "Delete", | 182 | "settings.service.form.iconDelete" : "Verwijderen", |
176 | "settings.service.form.iconUpload" : "Drop your image, or click here", | 183 | "settings.service.form.iconUpload" : "Drop your image, or click here", |
177 | "settings.service.form.indirectMessageInfo" : "Je wordt verwittigd over alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Je wordt verwittigd over alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Toon berichten-badge voor alle nieuwe berichten", | 185 | "settings.service.form.indirectMessages" : "Toon berichten-badge voor alle nieuwe berichten", |
179 | "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted", | 186 | "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted", |
180 | "settings.service.form.name" : "Naam", | 187 | "settings.service.form.name" : "Naam", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Service bewaren", | 194 | "settings.service.form.saveButton" : "Service bewaren", |
182 | "settings.service.form.tabHosted" : "Gehost", | 195 | "settings.service.form.tabHosted" : "Gehost", |
183 | "settings.service.form.tabOnPremise" : "Intern gehost âï¸", | 196 | "settings.service.form.tabOnPremise" : "Intern gehost âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "EU residents: local sales tax may apply", | 233 | "subscription.euTaxInfo" : "EU residents: local sales tax may apply", |
221 | "subscription.features.ads" : "Geen reclame, nooit!", | 234 | "subscription.features.ads" : "Geen reclame, nooit!", |
222 | "subscription.features.comingSoon" : "komt binnenkort", | 235 | "subscription.features.comingSoon" : "komt binnenkort", |
223 | "subscription.features.customServices" : "Persoonlijke services voor jou en je team", | ||
224 | "subscription.features.encryptedSync" : "Synchronisatie van geëncrypteerde sessies", | 236 | "subscription.features.encryptedSync" : "Synchronisatie van geëncrypteerde sessies", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Intern gehoste services zoals HipChat", | 238 | "subscription.features.onpremise" : "Intern gehoste services zoals HipChat", |
226 | "subscription.features.vpn" : "Proxy & VPN ondersteuning", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Een betalend account voor Franz omvat", | 242 | "subscription.includedFeatures" : "Een betalend account voor Franz omvat", |
228 | "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden", | 243 | "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden", |
229 | "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen", | 244 | "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen", |
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json index 4ff3cdd80..a6db3d773 100644 --- a/src/i18n/locales/nl.json +++ b/src/i18n/locales/nl.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz-services", | 5 | "global.api.unhealthy" : "Kan geen verbinding maken met de Franz-services", |
3 | "global.notConnectedToTheInternet" : "U bent niet verbonden met het internet.", | 6 | "global.notConnectedToTheInternet" : "U bent niet verbonden met het internet.", |
4 | "import.headline" : "Importeer uw Franz 4-services", | 7 | "import.headline" : "Importeer uw Franz 4-services", |
@@ -21,7 +24,7 @@ | |||
21 | "login.headline" : "Inloggen", | 24 | "login.headline" : "Inloggen", |
22 | "login.invalidCredentials" : "E-mailadres of wachtwoord ongeldig", | 25 | "login.invalidCredentials" : "E-mailadres of wachtwoord ongeldig", |
23 | "login.link.password" : "Wachtwoord vergeten", | 26 | "login.link.password" : "Wachtwoord vergeten", |
24 | "login.link.signup" : "Maak een gratis account", | 27 | "login.link.signup" : "Maak een gratis account aan", |
25 | "login.password.label" : "Wachtwoord", | 28 | "login.password.label" : "Wachtwoord", |
26 | "login.serverLogout" : "De sessie is verlopen, log alsjeblieft opnieuw in.", | 29 | "login.serverLogout" : "De sessie is verlopen, log alsjeblieft opnieuw in.", |
27 | "login.submit.label" : "Inloggen", | 30 | "login.submit.label" : "Inloggen", |
@@ -59,16 +62,16 @@ | |||
59 | "menu.view.enterFullScreen" : "Gebruik volledig scherm", | 62 | "menu.view.enterFullScreen" : "Gebruik volledig scherm", |
60 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", | 63 | "menu.view.exitFullScreen" : "Volledig scherm verlaten", |
61 | "menu.view.reloadFranz" : "Herlaad Franz", | 64 | "menu.view.reloadFranz" : "Herlaad Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Een service opnieuw laden", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Werkelijke grootte", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Ontwikkelaarstools aan\/uit", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Volledig scherm aan\/uit", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Service ontwikkelaarstools aan\/uit", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "Inzoomen", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Uitzoomen", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Venster", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Sluiten", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Minimaliseren", |
72 | "password.email.label" : "E-mailadres", | 75 | "password.email.label" : "E-mailadres", |
73 | "password.headline" : "Wachtwoord vergeten", | 76 | "password.headline" : "Wachtwoord vergeten", |
74 | "password.link.login" : "Log in op je account", | 77 | "password.link.login" : "Log in op je account", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Geen gebruiker bekend met dat e-mailadres", | 79 | "password.noUser" : "Geen gebruiker bekend met dat e-mailadres", |
77 | "password.submit.label" : "Verzenden", | 80 | "password.submit.label" : "Verzenden", |
78 | "password.successInfo" : "Controleer alsjeblieft je e-mail", | 81 | "password.successInfo" : "Controleer alsjeblieft je e-mail", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Steun Franz", | 83 | "pricing.headline" : "Steun Franz", |
80 | "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Franz niet ondersteunen.", | 84 | "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Franz niet ondersteunen.", |
81 | "pricing.submit.label" : "Ik wil de ontwikkeling van Franz steunen", | 85 | "pricing.submit.label" : "Ik wil de ontwikkeling van Franz steunen", |
@@ -116,7 +120,8 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", | 120 | "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", |
117 | "settings.app.form.autoLaunchOnStart" : "Open Franz bij opstarten", | 121 | "settings.app.form.autoLaunchOnStart" : "Open Franz bij opstarten", |
118 | "settings.app.form.beta" : "Inclusief bètaversies", | 122 | "settings.app.form.beta" : "Inclusief bètaversies", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Schakel videokaart acceleratie in ", | ||
120 | "settings.app.form.enableMenuBar" : "Toon Franz in menubalk", | 125 | "settings.app.form.enableMenuBar" : "Toon Franz in menubalk", |
121 | "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan", | 126 | "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan", |
122 | "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", | 127 | "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Houd Franz op de achtergrond wanneer het venster gesloten wordt", | 131 | "settings.app.form.runInBackground" : "Houd Franz op de achtergrond wanneer het venster gesloten wordt", |
127 | "settings.app.form.showDisabledServices" : "Toon uitgeschakelde services", | 132 | "settings.app.form.showDisabledServices" : "Toon uitgeschakelde services", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Instellingen", | 135 | "settings.app.headline" : "Instellingen", |
130 | "settings.app.headlineAdvanced" : "Geavanceerd", | 136 | "settings.app.headlineAdvanced" : "Geavanceerd", |
131 | "settings.app.headlineAppearance" : "Weergave", | 137 | "settings.app.headlineAppearance" : "Weergave", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Bewerk {name}", | 172 | "settings.service.form.editServiceHeadline" : "Bewerk {name}", |
167 | "settings.service.form.enableAudio" : "Audio inschakelen", | 173 | "settings.service.form.enableAudio" : "Audio inschakelen", |
168 | "settings.service.form.enableBadge" : "Toon badges met ongelezen berichten", | 174 | "settings.service.form.enableBadge" : "Toon badges met ongelezen berichten", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Meldingen inschakelen", | 176 | "settings.service.form.enableNotification" : "Meldingen inschakelen", |
170 | "settings.service.form.enableService" : "Service inschakelen", | 177 | "settings.service.form.enableService" : "Service inschakelen", |
171 | "settings.service.form.headlineBadges" : "Ongelezen berichten badges", | 178 | "settings.service.form.headlineBadges" : "Ongelezen berichten badges", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Toon berichtenbadge voor alle nieuwe berichten", | 185 | "settings.service.form.indirectMessages" : "Toon berichtenbadge voor alle nieuwe berichten", |
179 | "settings.service.form.isMutedInfo" : "Indien uitgeschakeld zullen alle meldinggeluiden en afgespeelde audio uitgeschakeld zijn", | 186 | "settings.service.form.isMutedInfo" : "Indien uitgeschakeld zullen alle meldinggeluiden en afgespeelde audio uitgeschakeld zijn", |
180 | "settings.service.form.name" : "Naam", | 187 | "settings.service.form.name" : "Naam", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Service opslaan", | 194 | "settings.service.form.saveButton" : "Service opslaan", |
182 | "settings.service.form.tabHosted" : "Gehost", | 195 | "settings.service.form.tabHosted" : "Gehost", |
183 | "settings.service.form.tabOnPremise" : "Zelf-gehost âï¸", | 196 | "settings.service.form.tabOnPremise" : "Zelf-gehost âï¸", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Bewoners binnen EU: lokale belasting kan van toepassing zijn", | 233 | "subscription.euTaxInfo" : "Bewoners binnen EU: lokale belasting kan van toepassing zijn", |
221 | "subscription.features.ads" : "Geen advertenties, nooit!", | 234 | "subscription.features.ads" : "Geen advertenties, nooit!", |
222 | "subscription.features.comingSoon" : "komt binnenkort", | 235 | "subscription.features.comingSoon" : "komt binnenkort", |
223 | "subscription.features.customServices" : "Privé-services voor jou en je team", | ||
224 | "subscription.features.encryptedSync" : "Beveiligde sessie synchronisatie", | 236 | "subscription.features.encryptedSync" : "Beveiligde sessie synchronisatie", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Add on-geschikt\/gehoste services zoals HipChat", | 238 | "subscription.features.onpremise" : "Add on-geschikt\/gehoste services zoals HipChat", |
226 | "subscription.features.vpn" : "Proxy & VPN ondersteuning", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat", | 242 | "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat", |
228 | "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren", | 243 | "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren", |
229 | "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen", | 244 | "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen", |
@@ -236,15 +251,15 @@ | |||
236 | "tabs.item.disableAudio" : "Schakel audio uit", | 251 | "tabs.item.disableAudio" : "Schakel audio uit", |
237 | "tabs.item.disableNotifications" : "Schakel meldingen uit", | 252 | "tabs.item.disableNotifications" : "Schakel meldingen uit", |
238 | "tabs.item.disableService" : "Schakel service uit", | 253 | "tabs.item.disableService" : "Schakel service uit", |
239 | "tabs.item.edit" : "Bewerk", | 254 | "tabs.item.edit" : "Bewerken", |
240 | "tabs.item.enableAudio" : "Audio inschakelen", | 255 | "tabs.item.enableAudio" : "Audio inschakelen", |
241 | "tabs.item.enableNotification" : "Meldingen inschakelen", | 256 | "tabs.item.enableNotification" : "Meldingen inschakelen", |
242 | "tabs.item.enableService" : "Service inschakelen", | 257 | "tabs.item.enableService" : "Service inschakelen", |
243 | "tabs.item.reload" : "Laad opnieuw", | 258 | "tabs.item.reload" : "Laad opnieuw", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} is niet geldig", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} moet minimaal {length} karakters lang zijn", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} is vereist", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} is niet een geldige URL", |
248 | "welcome.loginButton" : "Log in op je account", | 263 | "welcome.loginButton" : "Log in op je account", |
249 | "welcome.signupButton" : "Maak een gratis account", | 264 | "welcome.signupButton" : "Maak een gratis account", |
250 | "welcome.slogan" : "Messaging die voor jou werkt" | 265 | "welcome.slogan" : "Messaging die voor jou werkt" |
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 9fb72b9c9..60ced5933 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Nie można połączyć się z usługami Franz online", | 5 | "global.api.unhealthy" : "Nie można połączyć się z usługami Franz online", |
3 | "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.", | 6 | "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.", |
4 | "import.headline" : "Importuj usługi Franz 4", | 7 | "import.headline" : "Importuj usługi Franz 4", |
@@ -28,20 +31,20 @@ | |||
28 | "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.", | 31 | "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.", |
29 | "menu.app.about" : "O Franz", | 32 | "menu.app.about" : "O Franz", |
30 | "menu.app.hide" : "Ukryj", | 33 | "menu.app.hide" : "Ukryj", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Ukryj pozostałe", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Zakończ", |
33 | "menu.app.settings" : "Ustawienia", | 36 | "menu.app.settings" : "Ustawienia", |
34 | "menu.app.unhide" : "Pokaż", | 37 | "menu.app.unhide" : "Pokaż", |
35 | "menu.edit" : "Edytuj", | 38 | "menu.edit" : "Edytuj", |
36 | "menu.edit.copy" : "Skopiuj", | 39 | "menu.edit.copy" : "Skopiuj", |
37 | "menu.edit.cut" : "Wytnij", | 40 | "menu.edit.cut" : "Wytnij", |
38 | "menu.edit.delete" : "Usuń", | 41 | "menu.edit.delete" : "Usuń", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emoji i symbole", |
40 | "menu.edit.paste" : "Wklej", | 43 | "menu.edit.paste" : "Wklej", |
41 | "menu.edit.pasteAndMatchStyle" : "Wklej i dopasuj styl", | 44 | "menu.edit.pasteAndMatchStyle" : "Wklej i dopasuj styl", |
42 | "menu.edit.redo" : "Ponów", | 45 | "menu.edit.redo" : "Ponów", |
43 | "menu.edit.selectAll" : "Zaznacz wszystko", | 46 | "menu.edit.selectAll" : "Zaznacz wszystko", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Mowa", |
45 | "menu.edit.startDictation" : "Zacznij dyktować", | 48 | "menu.edit.startDictation" : "Zacznij dyktować", |
46 | "menu.edit.startSpeaking" : "Zacznij mówić", | 49 | "menu.edit.startSpeaking" : "Zacznij mówić", |
47 | "menu.edit.stopSpeaking" : "Przestań mówić", | 50 | "menu.edit.stopSpeaking" : "Przestań mówić", |
@@ -52,7 +55,7 @@ | |||
52 | "menu.help.learnMore" : "Dowiedz się więcej", | 55 | "menu.help.learnMore" : "Dowiedz się więcej", |
53 | "menu.help.privacy" : "Polityka prywatności", | 56 | "menu.help.privacy" : "Polityka prywatności", |
54 | "menu.help.support" : "Wsparcie", | 57 | "menu.help.support" : "Wsparcie", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Warunki świadczenia usług", |
56 | "menu.services" : "Usługi", | 59 | "menu.services" : "Usługi", |
57 | "menu.services.addNewService" : "Dodaj nową usługę...", | 60 | "menu.services.addNewService" : "Dodaj nową usługę...", |
58 | "menu.view" : "Widok", | 61 | "menu.view" : "Widok", |
@@ -61,9 +64,9 @@ | |||
61 | "menu.view.reloadFranz" : "Przeładuj Franz", | 64 | "menu.view.reloadFranz" : "Przeładuj Franz", |
62 | "menu.view.reloadService" : "Przeładuj usługę", | 65 | "menu.view.reloadService" : "Przeładuj usługę", |
63 | "menu.view.resetZoom" : "Domyślny rozmiar", | 66 | "menu.view.resetZoom" : "Domyślny rozmiar", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Pokaż narzędzia developerskie", |
65 | "menu.view.toggleFullScreen" : "Przełącz tryb pełnoekranowy", | 68 | "menu.view.toggleFullScreen" : "Przełącz tryb pełnoekranowy", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Włącz narzędzia developerskie serwisu", |
67 | "menu.view.zoomIn" : "Powiększ", | 70 | "menu.view.zoomIn" : "Powiększ", |
68 | "menu.view.zoomOut" : "Pomniejsz", | 71 | "menu.view.zoomOut" : "Pomniejsz", |
69 | "menu.window" : "Okno", | 72 | "menu.window" : "Okno", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Nie znaleziono użytkownika z takim adresem email", | 79 | "password.noUser" : "Nie znaleziono użytkownika z takim adresem email", |
77 | "password.submit.label" : "Wyślij", | 80 | "password.submit.label" : "Wyślij", |
78 | "password.successInfo" : "Proszę sprawdzić swój email", | 81 | "password.successInfo" : "Proszę sprawdzić swój email", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Wspieraj Franz", | 83 | "pricing.headline" : "Wspieraj Franz", |
80 | "pricing.link.skipPayment" : "Nie chcę wspierać rozwoju aplikacji Franz.", | 84 | "pricing.link.skipPayment" : "Nie chcę wspierać rozwoju aplikacji Franz.", |
81 | "pricing.submit.label" : "Chcę wspierać rozwój aplikacji Franz", | 85 | "pricing.submit.label" : "Chcę wspierać rozwój aplikacji Franz", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Otwórz w tle", | 120 | "settings.app.form.autoLaunchInBackground" : "Otwórz w tle", |
117 | "settings.app.form.autoLaunchOnStart" : "Uruchom Franz na poczÄ…tku", | 121 | "settings.app.form.autoLaunchOnStart" : "Uruchom Franz na poczÄ…tku", |
118 | "settings.app.form.beta" : "Uwzględnij wersje beta", | 122 | "settings.app.form.beta" : "Uwzględnij wersje beta", |
123 | "settings.app.form.darkMode" : "Join the Dark Side", | ||
119 | "settings.app.form.enableGPUAcceleration" : "WÅ‚Ä…cz akceleracjÄ™ GPU", | 124 | "settings.app.form.enableGPUAcceleration" : "WÅ‚Ä…cz akceleracjÄ™ GPU", |
120 | "settings.app.form.enableMenuBar" : "Pokaż Franz na pasku menu", | 125 | "settings.app.form.enableMenuBar" : "Pokaż Franz na pasku menu", |
121 | "settings.app.form.enableSpellchecking" : "WÅ‚Ä…cz sprawdzanie pisowni", | 126 | "settings.app.form.enableSpellchecking" : "WÅ‚Ä…cz sprawdzanie pisowni", |
122 | "settings.app.form.enableSystemTray" : "Pokaż Franza w tacy systemowej", | 127 | "settings.app.form.enableSystemTray" : "Pokaż Franza w obszarze powiadomień", |
123 | "settings.app.form.hideDockIcon" : "Ukrywaj ikonÄ™ Franz w zasobniku systemowym", | 128 | "settings.app.form.hideDockIcon" : "Ukrywaj ikonÄ™ Franz w zasobniku systemowym", |
124 | "settings.app.form.language" : "Język", | 129 | "settings.app.form.language" : "Język", |
125 | "settings.app.form.minimizeToSystemTray" : "Zminimalizuj aplikacjÄ™ Franz", | 130 | "settings.app.form.minimizeToSystemTray" : "Zminimalizuj aplikacjÄ™ Franz", |
126 | "settings.app.form.runInBackground" : "Zachowaj aplikację Franz w tle po zamknięciu okna", | 131 | "settings.app.form.runInBackground" : "Zachowaj aplikację Franz w tle po zamknięciu okna", |
127 | "settings.app.form.showDisabledServices" : "Wyłącz wyświetlanie zakładek z usługami", | 132 | "settings.app.form.showDisabledServices" : "Wyłącz wyświetlanie zakładek z usługami", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Pokaż licznik nieprzeczytanych wiadomości gdy powiadomienia są wyłączone", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Pokaż licznik nieprzeczytanych wiadomości gdy powiadomienia są wyłączone", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Ustawienia", | 135 | "settings.app.headline" : "Ustawienia", |
130 | "settings.app.headlineAdvanced" : "Zaawansowane", | 136 | "settings.app.headlineAdvanced" : "Zaawansowane", |
131 | "settings.app.headlineAppearance" : "WyglÄ…d", | 137 | "settings.app.headlineAppearance" : "WyglÄ…d", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Edytuj {name}", | 172 | "settings.service.form.editServiceHeadline" : "Edytuj {name}", |
167 | "settings.service.form.enableAudio" : "Włącz dźwięk", | 173 | "settings.service.form.enableAudio" : "Włącz dźwięk", |
168 | "settings.service.form.enableBadge" : "Pokaż znacznik nieprzeczytanych wiadomości", | 174 | "settings.service.form.enableBadge" : "Pokaż znacznik nieprzeczytanych wiadomości", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Aktywuj powiadomienia", | 176 | "settings.service.form.enableNotification" : "Aktywuj powiadomienia", |
170 | "settings.service.form.enableService" : "Aktywuj usługę", | 177 | "settings.service.form.enableService" : "Aktywuj usługę", |
171 | "settings.service.form.headlineBadges" : "Znaczniki nieprzeczytanych wiadomości", | 178 | "settings.service.form.headlineBadges" : "Znaczniki nieprzeczytanych wiadomości", |
@@ -178,11 +185,17 @@ | |||
178 | "settings.service.form.indirectMessages" : "Pokaż ikonę wiadomości dla wszystkich nowych wiadomości", | 185 | "settings.service.form.indirectMessages" : "Pokaż ikonę wiadomości dla wszystkich nowych wiadomości", |
179 | "settings.service.form.isMutedInfo" : "Kiedy nieaktywne, wszystkie dźwięki powiadomień są wyciszone", | 186 | "settings.service.form.isMutedInfo" : "Kiedy nieaktywne, wszystkie dźwięki powiadomień są wyciszone", |
180 | "settings.service.form.name" : "Nazwa", | 187 | "settings.service.form.name" : "Nazwa", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Zapisz usługę", | 194 | "settings.service.form.saveButton" : "Zapisz usługę", |
182 | "settings.service.form.tabHosted" : "Hostowane", | 195 | "settings.service.form.tabHosted" : "Hostowane", |
183 | "settings.service.form.tabOnPremise" : "Hostowane lokalnie âï¸", | 196 | "settings.service.form.tabOnPremise" : "Hostowane lokalnie âï¸", |
184 | "settings.service.form.team" : "Zespół", | 197 | "settings.service.form.team" : "Zespół", |
185 | "settings.service.form.useHostedService" : "Use the hosted {name} service.", | 198 | "settings.service.form.useHostedService" : "Użyj hostowanej usługi {name}", |
186 | "settings.service.form.yourServices" : "Twoje usługi", | 199 | "settings.service.form.yourServices" : "Twoje usługi", |
187 | "settings.services.deletedInfo" : "Usługa została usunięta", | 200 | "settings.services.deletedInfo" : "Usługa została usunięta", |
188 | "settings.services.discoverServices" : "Przeglądaj usługi", | 201 | "settings.services.discoverServices" : "Przeglądaj usługi", |
@@ -195,13 +208,13 @@ | |||
195 | "settings.user.form.accountType.company" : "Firma", | 208 | "settings.user.form.accountType.company" : "Firma", |
196 | "settings.user.form.accountType.individual" : "Prywatne", | 209 | "settings.user.form.accountType.individual" : "Prywatne", |
197 | "settings.user.form.accountType.label" : "Typ konta", | 210 | "settings.user.form.accountType.label" : "Typ konta", |
198 | "settings.user.form.accountType.non-profit" : "Non-profit", | 211 | "settings.user.form.accountType.non-profit" : "Non-Profit", |
199 | "settings.user.form.currentPassword" : "Obecne hasło", | 212 | "settings.user.form.currentPassword" : "Obecne hasło", |
200 | "settings.user.form.email" : "Adres email", | 213 | "settings.user.form.email" : "Adres email", |
201 | "settings.user.form.firstname" : "ImiÄ™", | 214 | "settings.user.form.firstname" : "ImiÄ™", |
202 | "settings.user.form.lastname" : "Nazwisko", | 215 | "settings.user.form.lastname" : "Nazwisko", |
203 | "settings.user.form.newPassword" : "Nowe hasło", | 216 | "settings.user.form.newPassword" : "Nowe hasło", |
204 | "sidebar.addNewService" : "!!!Add new service", | 217 | "sidebar.addNewService" : "Dodaj kolejną usługę", |
205 | "sidebar.muteApp" : "Wyłącz powiadomienia i dźwięki", | 218 | "sidebar.muteApp" : "Wyłącz powiadomienia i dźwięki", |
206 | "sidebar.settings" : "Ustawienia", | 219 | "sidebar.settings" : "Ustawienia", |
207 | "sidebar.unmuteApp" : "Włącz powiadomienia i dźwięki", | 220 | "sidebar.unmuteApp" : "Włącz powiadomienia i dźwięki", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Rezydenci UE: lokalne stawki VAT mogą zostać zaaplikowane", | 233 | "subscription.euTaxInfo" : "Rezydenci UE: lokalne stawki VAT mogą zostać zaaplikowane", |
221 | "subscription.features.ads" : "Brak reklam, na zawsze!", | 234 | "subscription.features.ads" : "Brak reklam, na zawsze!", |
222 | "subscription.features.comingSoon" : "wkrótce dostępne", | 235 | "subscription.features.comingSoon" : "wkrótce dostępne", |
223 | "subscription.features.customServices" : "Prywatne usługi dla Ciebie i Twojego zespołu", | ||
224 | "subscription.features.encryptedSync" : "Szyfrowana synchronizacja sesji", | 236 | "subscription.features.encryptedSync" : "Szyfrowana synchronizacja sesji", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Dodawanie lokalnych\/hostowanych usług takich jak HipChat", | 238 | "subscription.features.onpremise" : "Dodawanie lokalnych\/hostowanych usług takich jak HipChat", |
226 | "subscription.features.vpn" : "Wsprarcie Proxy i VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "PÅ‚atne konto Franz Premium obejmuje", | 242 | "subscription.includedFeatures" : "PÅ‚atne konto Franz Premium obejmuje", |
228 | "subscription.paymentSessionError" : "Nie można wczytać formularza płatności\"", | 243 | "subscription.paymentSessionError" : "Nie można wczytać formularza płatności\"", |
229 | "subscription.submit.label" : "Chcę wspierać rozwój aplikacji Franz", | 244 | "subscription.submit.label" : "Chcę wspierać rozwój aplikacji Franz", |
@@ -241,10 +256,10 @@ | |||
241 | "tabs.item.enableNotification" : "WÅ‚Ä…cz powiadomienia", | 256 | "tabs.item.enableNotification" : "WÅ‚Ä…cz powiadomienia", |
242 | "tabs.item.enableService" : "Aktywuj usługę", | 257 | "tabs.item.enableService" : "Aktywuj usługę", |
243 | "tabs.item.reload" : "Przeładuj", | 258 | "tabs.item.reload" : "Przeładuj", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "Pole {field} nie jest poprawne", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "Pole {field} powinno składać się z co najmniej {length} znaków", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "Pole {field} jest wymagane", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "Pole {field} nie jest poprawnym ciÄ…giem URL.", |
248 | "welcome.loginButton" : "Zaloguj siÄ™ na swoje konto", | 263 | "welcome.loginButton" : "Zaloguj siÄ™ na swoje konto", |
249 | "welcome.signupButton" : "Stwórz darmowe konto", | 264 | "welcome.signupButton" : "Stwórz darmowe konto", |
250 | "welcome.slogan" : "Komunikator który działa" | 265 | "welcome.slogan" : "Komunikator który działa" |
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index ceb35ce30..70f6431df 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json | |||
@@ -1,23 +1,26 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Não foi possÃvel conectar aos serviços do Franz", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "Você não está conectado à internet.", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "import.headline" : "Importe seus serviços do Franz 4", | 4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
5 | "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5", | 5 | "global.api.unhealthy" : "Não foi possÃvel conectar-se aos serviços on-line do Franz.", |
6 | "global.notConnectedToTheInternet" : "Você não está conectado à internet", | ||
7 | "import.headline" : "Importe seus serviços do Franz 4 ", | ||
8 | "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5 ", | ||
6 | "import.skip.label" : "Quero adicionar serviços manualmente", | 9 | "import.skip.label" : "Quero adicionar serviços manualmente", |
7 | "import.submit.label" : "Importar serviços", | 10 | "import.submit.label" : "Importar serviços", |
8 | "infobar.buttonChangelog" : "O que há de novo?", | 11 | "infobar.buttonChangelog" : "O que há de novo?", |
9 | "infobar.buttonInstallUpdate" : "Reiniciar e instalar atualizações", | 12 | "infobar.buttonInstallUpdate" : "Reiniciar e instalar atualizações ", |
10 | "infobar.buttonReloadServices" : "Recarregar serviços", | 13 | "infobar.buttonReloadServices" : "Recarregar serviços", |
11 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar serviços e informações do usuário", | 14 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar os serviços e informações de usuário", |
12 | "infobar.servicesUpdated" : "Seus serviços foram atualizados.", | 15 | "infobar.servicesUpdated" : "Seus serviços foram atualizados.", |
13 | "infobar.updateAvailable" : "Uma nova atualização do Franz está disponÃvel.", | 16 | "infobar.updateAvailable" : "Uma nova atualização do Franz está disponÃvel.", |
14 | "invite.email.label" : "Endereço de e-mail ", | 17 | "invite.email.label" : "Endereço de E-mail", |
15 | "invite.headline.friends" : "Convide três de seus amigos ou colegas", | 18 | "invite.headline.friends" : "Convide 3 amigos ou colegas", |
16 | "invite.name.label" : "Nome", | 19 | "invite.name.label" : "Nome", |
17 | "invite.skip.label" : "Quero fazer isso depois", | 20 | "invite.skip.label" : "Quero fazer isso depois", |
18 | "invite.submit.label" : "Enviar convites", | 21 | "invite.submit.label" : "Enviar convites", |
19 | "invite.successInfo" : "Convites enviados com sucesso", | 22 | "invite.successInfo" : "Convites enviados com sucesso", |
20 | "login.email.label" : "Endereço de e-mail", | 23 | "login.email.label" : "E-mail", |
21 | "login.headline" : "Entrar", | 24 | "login.headline" : "Entrar", |
22 | "login.invalidCredentials" : "E-mail ou senha inválida", | 25 | "login.invalidCredentials" : "E-mail ou senha inválida", |
23 | "login.link.password" : "Trocar a senha", | 26 | "login.link.password" : "Trocar a senha", |
@@ -28,58 +31,59 @@ | |||
28 | "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.", | 31 | "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.", |
29 | "menu.app.about" : "Sobre Franz", | 32 | "menu.app.about" : "Sobre Franz", |
30 | "menu.app.hide" : "Ocultar", | 33 | "menu.app.hide" : "Ocultar", |
31 | "menu.app.hideOthers" : "Ocultar os demais", | 34 | "menu.app.hideOthers" : "Ocultar Outros", |
32 | "menu.app.quit" : "Sair", | 35 | "menu.app.quit" : "Sair", |
33 | "menu.app.settings" : "Ajustes", | 36 | "menu.app.settings" : "Configurações", |
34 | "menu.app.unhide" : "Exibir", | 37 | "menu.app.unhide" : "Reexibir", |
35 | "menu.edit" : "Editar", | 38 | "menu.edit" : "Editar", |
36 | "menu.edit.copy" : "Copiar", | 39 | "menu.edit.copy" : "Copiar", |
37 | "menu.edit.cut" : "Cortar", | 40 | "menu.edit.cut" : "Cortar", |
38 | "menu.edit.delete" : "Excluir", | 41 | "menu.edit.delete" : "Excluir", |
39 | "menu.edit.emojiSymbols" : "Emoji & SÃmbolos ", | 42 | "menu.edit.emojiSymbols" : "Emoji & SÃmbolos", |
40 | "menu.edit.paste" : "Colar", | 43 | "menu.edit.paste" : "Colar", |
41 | "menu.edit.pasteAndMatchStyle" : "Colar e corresponder ao estilo", | 44 | "menu.edit.pasteAndMatchStyle" : "Colar e Corresponder ao Estilo", |
42 | "menu.edit.redo" : "Refazer", | 45 | "menu.edit.redo" : "Refazer", |
43 | "menu.edit.selectAll" : "Selecionar tudo", | 46 | "menu.edit.selectAll" : "Selecionar Tudo", |
44 | "menu.edit.speech" : "Discurso", | 47 | "menu.edit.speech" : "Discurso", |
45 | "menu.edit.startDictation" : "iniciar digitação por voz", | 48 | "menu.edit.startDictation" : "Iniciar Digitação", |
46 | "menu.edit.startSpeaking" : "começar a falar", | 49 | "menu.edit.startSpeaking" : "Começar a Falar", |
47 | "menu.edit.stopSpeaking" : "Parar de falar", | 50 | "menu.edit.stopSpeaking" : "Parar de Falar", |
48 | "menu.edit.undo" : "Desfazer", | 51 | "menu.edit.undo" : "Desfazer", |
49 | "menu.file" : "Arquivo", | 52 | "menu.file" : "Arquivo", |
50 | "menu.help" : "Ajuda", | 53 | "menu.help" : "Ajuda", |
51 | "menu.help.changelog" : "Registro de alterações", | 54 | "menu.help.changelog" : "Registro de Alterações ", |
52 | "menu.help.learnMore" : "Saiba Mais", | 55 | "menu.help.learnMore" : "Saiba Mais ", |
53 | "menu.help.privacy" : "Declaração de privacidade", | 56 | "menu.help.privacy" : "Declaração de Privacidade ", |
54 | "menu.help.support" : "Suporte", | 57 | "menu.help.support" : "Suporte", |
55 | "menu.help.tos" : "Termos de Serviço", | 58 | "menu.help.tos" : "Termos de Serviço", |
56 | "menu.services" : "Serviços", | 59 | "menu.services" : "Serviços", |
57 | "menu.services.addNewService" : "Adicionar Novo Serviço", | 60 | "menu.services.addNewService" : "Adicionar Novo Serviço", |
58 | "menu.view" : "Visualizar", | 61 | "menu.view" : "Visualizar ", |
59 | "menu.view.enterFullScreen" : "Entrar na tela cheia", | 62 | "menu.view.enterFullScreen" : "Modo Tela Cheia", |
60 | "menu.view.exitFullScreen" : "Sair da tela cheia", | 63 | "menu.view.exitFullScreen" : "Sair da Tela Cheia", |
61 | "menu.view.reloadFranz" : "Recarregar Franz", | 64 | "menu.view.reloadFranz" : "Recarregar Franz", |
62 | "menu.view.reloadService" : "Reiniciar o serviço", | 65 | "menu.view.reloadService" : "Reiniciar o Serviço", |
63 | "menu.view.resetZoom" : "Tamanho real", | 66 | "menu.view.resetZoom" : "Tamanho real", |
64 | "menu.view.toggleDevTools" : "alternar ferramentas de desenvolvedor", | 67 | "menu.view.toggleDevTools" : "Ferramentas de Desenvolvedor", |
65 | "menu.view.toggleFullScreen" : "tela cheia", | 68 | "menu.view.toggleFullScreen" : "Modo Tela Cheia", |
66 | "menu.view.toggleServiceDevTools" : "habilitar ferramentas de serviços de desenvolvedor", | 69 | "menu.view.toggleServiceDevTools" : "Ferramentas de Serviços de Desenvolvedor", |
67 | "menu.view.zoomIn" : "Ampliar", | 70 | "menu.view.zoomIn" : "Ampliar", |
68 | "menu.view.zoomOut" : "reduzir", | 71 | "menu.view.zoomOut" : "Reduzir", |
69 | "menu.window" : "Janela", | 72 | "menu.window" : "Modo Janela", |
70 | "menu.window.close" : "Fechar", | 73 | "menu.window.close" : "Fechar", |
71 | "menu.window.minimize" : "Minimizar", | 74 | "menu.window.minimize" : "Minimizar", |
72 | "password.email.label" : "Endereço de e-mail", | 75 | "password.email.label" : "E-mail", |
73 | "password.headline" : "Trocar a senha", | 76 | "password.headline" : "Trocar senha", |
74 | "password.link.login" : "Fazer login na sua conta", | 77 | "password.link.login" : "Fazer login na sua conta", |
75 | "password.link.signup" : "Criar uma conta grátis", | 78 | "password.link.signup" : "Criar uma conta grátis", |
76 | "password.noUser" : "Nenhum usuário com este e-mail foi encontrado", | 79 | "password.noUser" : "Nenhum usuário com este e-mail foi encontrado", |
77 | "password.submit.label" : "Enviar", | 80 | "password.submit.label" : "Enviar", |
78 | "password.successInfo" : "Por favor, verifique o seu e-mail", | 81 | "password.successInfo" : "Por favor, verifique o seu e-mail", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Apoie o Franz", | 83 | "pricing.headline" : "Apoie o Franz", |
80 | "pricing.link.skipPayment" : "Eu não quero apoiar o desenvolvimento do Franz.", | 84 | "pricing.link.skipPayment" : "Eu não quero apoiar o desenvolvimento do Franz.", |
81 | "pricing.submit.label" : "Eu quero apoiar o desenvolvimento do Franz", | 85 | "pricing.submit.label" : "Eu quero apoiar o desenvolvimento do Franz", |
82 | "pricing.support.label" : "Selecione uma opção de apoio", | 86 | "pricing.support.label" : "Selecione uma opção de plano", |
83 | "service.crashHandler.action" : "Recarregar {name}", | 87 | "service.crashHandler.action" : "Recarregar {name}", |
84 | "service.crashHandler.autoReload" : "Tentando reestabelecer {name} automaticamente em {seconds} segundos", | 88 | "service.crashHandler.autoReload" : "Tentando reestabelecer {name} automaticamente em {seconds} segundos", |
85 | "service.crashHandler.headline" : "Ah, não!", | 89 | "service.crashHandler.headline" : "Ah, não!", |
@@ -97,7 +101,7 @@ | |||
97 | "settings.account.deleteInfo" : "Se você não precisa mais de sua conta Franz, pode exclui-la juntamente com todos os dados relacionados, aqui.", | 101 | "settings.account.deleteInfo" : "Se você não precisa mais de sua conta Franz, pode exclui-la juntamente com todos os dados relacionados, aqui.", |
98 | "settings.account.headline" : "Conta", | 102 | "settings.account.headline" : "Conta", |
99 | "settings.account.headlineAccount" : "Informações de conta", | 103 | "settings.account.headlineAccount" : "Informações de conta", |
100 | "settings.account.headlineDangerZone" : "Zona de perigo", | 104 | "settings.account.headlineDangerZone" : "Zona de Perigo", |
101 | "settings.account.headlineInvoices" : "Recibos", | 105 | "settings.account.headlineInvoices" : "Recibos", |
102 | "settings.account.headlinePassword" : "Mudar senha", | 106 | "settings.account.headlinePassword" : "Mudar senha", |
103 | "settings.account.headlineProfile" : "Atualizar perfil", | 107 | "settings.account.headlineProfile" : "Atualizar perfil", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", | 120 | "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", |
117 | "settings.app.form.autoLaunchOnStart" : "Abrir o Franz ao iniciar o sistema", | 121 | "settings.app.form.autoLaunchOnStart" : "Abrir o Franz ao iniciar o sistema", |
118 | "settings.app.form.beta" : "Incluir versões beta", | 122 | "settings.app.form.beta" : "Incluir versões beta", |
119 | "settings.app.form.enableGPUAcceleration" : "Ativar Aceleração de GPU (Unidade de Processamento Gráfico)", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Ativar Aceleração de GPU", | ||
120 | "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu", | 125 | "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu", |
121 | "settings.app.form.enableSpellchecking" : "Ativar correção ortográfica", | 126 | "settings.app.form.enableSpellchecking" : "Ativar correção ortográfica", |
122 | "settings.app.form.enableSystemTray" : "Exibir o Franz na área de notificações", | 127 | "settings.app.form.enableSystemTray" : "Exibir o Franz na barra de sistema", |
123 | "settings.app.form.hideDockIcon" : "Ocultar Ãcone do Franz no Dock", | 128 | "settings.app.form.hideDockIcon" : "Ocultar Ãcone do Franz no Dock", |
124 | "settings.app.form.language" : "Idioma", | 129 | "settings.app.form.language" : "Idioma", |
125 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Franz para a área de notificações", | 130 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Franz para a área de sistema", |
126 | "settings.app.form.runInBackground" : "Manter o Franz no fundo quando fechar a janela", | 131 | "settings.app.form.runInBackground" : "Manter o Franz no fundo quando fechar a janela", |
127 | "settings.app.form.showDisabledServices" : "Mostrar abas de serviços desativados", | 132 | "settings.app.form.showDisabledServices" : "Mostrar abas de serviços desativados", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostrar Ãcone de mensagem não lida quando as notificações estiverem desativadas", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Mostrar Ãcone de mensagem não lida quando as notificações estiverem desativadas", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Configurações", | 135 | "settings.app.headline" : "Configurações", |
130 | "settings.app.headlineAdvanced" : "Avançado", | 136 | "settings.app.headlineAdvanced" : "Avançado", |
131 | "settings.app.headlineAppearance" : "Aparência", | 137 | "settings.app.headlineAppearance" : "Aparência", |
@@ -133,20 +139,20 @@ | |||
133 | "settings.app.headlineLanguage" : "Idioma", | 139 | "settings.app.headlineLanguage" : "Idioma", |
134 | "settings.app.headlineUpdates" : "Atualizações", | 140 | "settings.app.headlineUpdates" : "Atualizações", |
135 | "settings.app.restartRequired" : "As atualizações exigem reiniciar o sistema", | 141 | "settings.app.restartRequired" : "As atualizações exigem reiniciar o sistema", |
136 | "settings.app.subheadlineCache" : "Cache", | 142 | "settings.app.subheadlineCache" : "Cachê", |
137 | "settings.app.translationHelp" : "Ajude-nos a traduzir o Franz para seu idioma.", | 143 | "settings.app.translationHelp" : "Ajude-nos a traduzir o Franz para seu idioma.", |
138 | "settings.app.updateStatusAvailable" : "Atualização disponÃvel, baixando...", | 144 | "settings.app.updateStatusAvailable" : "Atualização disponÃvel, baixando...", |
139 | "settings.app.updateStatusSearching" : "Buscando atualizações", | 145 | "settings.app.updateStatusSearching" : "Buscando atualizações", |
140 | "settings.app.updateStatusUpToDate" : "Você está usando a última versão do Franz", | 146 | "settings.app.updateStatusUpToDate" : "Você está usando a última versão do Franz", |
141 | "settings.invite.headline" : "Convidar amigos", | 147 | "settings.invite.headline" : "Convidar Amigos", |
142 | "settings.navigation.account" : "Conta", | 148 | "settings.navigation.account" : "Conta", |
143 | "settings.navigation.availableServices" : "Serviços disponÃveis", | 149 | "settings.navigation.availableServices" : "Serviços disponÃveis", |
144 | "settings.navigation.inviteFriends" : "Convidar amigos", | 150 | "settings.navigation.inviteFriends" : "Convidar Amigos", |
145 | "settings.navigation.logout" : "Sair", | 151 | "settings.navigation.logout" : "Sair", |
146 | "settings.navigation.settings" : "Ajustes", | 152 | "settings.navigation.settings" : "Ajustes", |
147 | "settings.navigation.yourServices" : "Seus serviços", | 153 | "settings.navigation.yourServices" : "Seus serviços", |
148 | "settings.recipes.all" : "Todos os serviços", | 154 | "settings.recipes.all" : "Todos os serviços", |
149 | "settings.recipes.dev" : "Desenvolvimento ", | 155 | "settings.recipes.dev" : "Desenvolvimento", |
150 | "settings.recipes.headline" : "Serviços disponÃveis", | 156 | "settings.recipes.headline" : "Serviços disponÃveis", |
151 | "settings.recipes.missingService" : "Sentiu falta de algum serviço?", | 157 | "settings.recipes.missingService" : "Sentiu falta de algum serviço?", |
152 | "settings.recipes.mostPopular" : "Mais populares", | 158 | "settings.recipes.mostPopular" : "Mais populares", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "Editar {name}", | 172 | "settings.service.form.editServiceHeadline" : "Editar {name}", |
167 | "settings.service.form.enableAudio" : "Ativar áudio", | 173 | "settings.service.form.enableAudio" : "Ativar áudio", |
168 | "settings.service.form.enableBadge" : "Mostrar aviso de mensagens não lidas", | 174 | "settings.service.form.enableBadge" : "Mostrar aviso de mensagens não lidas", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Ativar notificações", | 176 | "settings.service.form.enableNotification" : "Ativar notificações", |
170 | "settings.service.form.enableService" : "Ativar serviço", | 177 | "settings.service.form.enableService" : "Ativar serviço", |
171 | "settings.service.form.headlineBadges" : "Mensagens não lidas", | 178 | "settings.service.form.headlineBadges" : "Mensagens não lidas", |
@@ -178,7 +185,13 @@ | |||
178 | "settings.service.form.indirectMessages" : "Mostrar avisos para todas as mensagens", | 185 | "settings.service.form.indirectMessages" : "Mostrar avisos para todas as mensagens", |
179 | "settings.service.form.isMutedInfo" : "Quando desativado, as notificações sonoras e áudios ficarão em silêncio", | 186 | "settings.service.form.isMutedInfo" : "Quando desativado, as notificações sonoras e áudios ficarão em silêncio", |
180 | "settings.service.form.name" : "Nome", | 187 | "settings.service.form.name" : "Nome", |
181 | "settings.service.form.saveButton" : "Gravar serviço", | 188 | "settings.service.form.proxy.headline" : "Proxy Settings", |
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
194 | "settings.service.form.saveButton" : "Salvar serviço", | ||
182 | "settings.service.form.tabHosted" : "Hospedado", | 195 | "settings.service.form.tabHosted" : "Hospedado", |
183 | "settings.service.form.tabOnPremise" : "Auto-hospedado âï¸", | 196 | "settings.service.form.tabOnPremise" : "Auto-hospedado âï¸", |
184 | "settings.service.form.team" : "Equipe", | 197 | "settings.service.form.team" : "Equipe", |
@@ -212,18 +225,20 @@ | |||
212 | "signup.headline" : "Cadastrar-se", | 225 | "signup.headline" : "Cadastrar-se", |
213 | "signup.lastname.label" : "Sobrenome", | 226 | "signup.lastname.label" : "Sobrenome", |
214 | "signup.legal.info" : "Ao criar uma conta Franz, você aceita os ", | 227 | "signup.legal.info" : "Ao criar uma conta Franz, você aceita os ", |
215 | "signup.legal.privacy" : "Declaração de privacidade", | 228 | "signup.legal.privacy" : "Declaração de Privacidade", |
216 | "signup.legal.terms" : "Termos de serviço", | 229 | "signup.legal.terms" : "Termos de serviço", |
217 | "signup.link.login" : "Já tem uma conta?", | 230 | "signup.link.login" : "Já tem uma conta?", |
218 | "signup.password.label" : "Senha", | 231 | "signup.password.label" : "Senha", |
219 | "signup.submit.label" : "Criar uma conta", | 232 | "signup.submit.label" : "Criar uma conta", |
220 | "subscription.euTaxInfo" : "Residentes na União Europeia: taxas locais serão aplicadas", | 233 | "subscription.euTaxInfo" : "Residentes na União Europeia: taxas locais serão aplicadas", |
221 | "subscription.features.ads" : "Sem anúncios, sempre!", | 234 | "subscription.features.ads" : "Sem anúncios, pra sempre!", |
222 | "subscription.features.comingSoon" : "em breve", | 235 | "subscription.features.comingSoon" : "em breve", |
223 | "subscription.features.customServices" : "Serviços privados para você e sua equipe", | ||
224 | "subscription.features.encryptedSync" : "Sincronização encriptada das sessões", | 236 | "subscription.features.encryptedSync" : "Sincronização encriptada das sessões", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Adicionar serviços locais\/hospedados como o HipChat", | 238 | "subscription.features.onpremise" : "Adicionar serviços locais\/hospedados como o HipChat", |
226 | "subscription.features.vpn" : "Suporte a proxy e VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "A conta Apoiador Franz Premium inclui", | 242 | "subscription.includedFeatures" : "A conta Apoiador Franz Premium inclui", |
228 | "subscription.paymentSessionError" : "Não foi possÃvel abrir o formulário de pagamento", | 243 | "subscription.paymentSessionError" : "Não foi possÃvel abrir o formulário de pagamento", |
229 | "subscription.submit.label" : "Eu quero apoiar o desenvolvimento do Franz", | 244 | "subscription.submit.label" : "Eu quero apoiar o desenvolvimento do Franz", |
@@ -242,7 +257,7 @@ | |||
242 | "tabs.item.enableService" : "Ativar serviço", | 257 | "tabs.item.enableService" : "Ativar serviço", |
243 | "tabs.item.reload" : "Recarregar", | 258 | "tabs.item.reload" : "Recarregar", |
244 | "validation.email" : "inválido", | 259 | "validation.email" : "inválido", |
245 | "validation.minLength" : "{campo} deve ser pelo menos {comprimento} mais caracteres ", | 260 | "validation.minLength" : "{campo} deve ter pelo menos {comprimento} mais caracteres ", |
246 | "validation.required" : "{campo} obrigatório", | 261 | "validation.required" : "{campo} obrigatório", |
247 | "validation.url" : "{campo} essa URL não é válida", | 262 | "validation.url" : "{campo} essa URL não é válida", |
248 | "welcome.loginButton" : "Entrar na sua conta", | 263 | "welcome.loginButton" : "Entrar na sua conta", |
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index 44048e505..71978ed6b 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json | |||
@@ -1,32 +1,35 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Não foi possÃvel conetar aos serviços do Franz", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "Não existe ligação à Internet.", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
5 | "global.api.unhealthy" : "Não foi possÃvel estabelecer ligação aos serviços do Franz", | ||
6 | "global.notConnectedToTheInternet" : "Não existe ligação à Internet", | ||
4 | "import.headline" : "Importe os seus serviços do Franz 4", | 7 | "import.headline" : "Importe os seus serviços do Franz 4", |
5 | "import.notSupportedHeadline" : "Serviços ainda não são suportados pelo Franz 5", | 8 | "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5", |
6 | "import.skip.label" : "Quero adicionar serviços manualmente", | 9 | "import.skip.label" : "Pretendo adicionar serviços manualmente", |
7 | "import.submit.label" : "Importar serviços", | 10 | "import.submit.label" : "Importar serviços", |
8 | "infobar.buttonChangelog" : "Novidades?", | 11 | "infobar.buttonChangelog" : "O que há de novo?", |
9 | "infobar.buttonInstallUpdate" : "Reiniciar & Instalar Atualizações", | 12 | "infobar.buttonInstallUpdate" : "Reiniciar e instalar atualizações", |
10 | "infobar.buttonReloadServices" : "Recarregar serviços", | 13 | "infobar.buttonReloadServices" : "Recarregar serviços", |
11 | "infobar.requiredRequestsFailed" : "Não foi possivel carregar os serviços e informações do utilizador", | 14 | "infobar.requiredRequestsFailed" : "Não foi possÃvel carregar os serviços e informações do utilizador", |
12 | "infobar.servicesUpdated" : "Os seus serviços foram atualizados.", | 15 | "infobar.servicesUpdated" : "Os seus serviços foram atualizados.", |
13 | "infobar.updateAvailable" : "Está disponÃvel uma atualização", | 16 | "infobar.updateAvailable" : "Está disponÃvel uma nova atualização para o Franz", |
14 | "invite.email.label" : "Endereço de e-mail", | 17 | "invite.email.label" : "Endereço de e-mail", |
15 | "invite.headline.friends" : "Convide 3 amigos ou colegas", | 18 | "invite.headline.friends" : "Convide 3 amigos ou colegas", |
16 | "invite.name.label" : "Nome", | 19 | "invite.name.label" : "Nome", |
17 | "invite.skip.label" : "Quero fazer isto mais tarde", | 20 | "invite.skip.label" : "Pretendo fazer isto mais tarde", |
18 | "invite.submit.label" : "Enviar convites", | 21 | "invite.submit.label" : "Enviar convites", |
19 | "invite.successInfo" : "Convites enviados com sucesso", | 22 | "invite.successInfo" : "Convites enviados com sucesso", |
20 | "login.email.label" : "Endereço de e-mail", | 23 | "login.email.label" : "Endereço de e-mail", |
21 | "login.headline" : "Registar", | 24 | "login.headline" : "Iniciar Sessão", |
22 | "login.invalidCredentials" : "O email ou a palavra-passe estão incorretos", | 25 | "login.invalidCredentials" : "O email ou a palavra-passe estão incorrectos", |
23 | "login.link.password" : "Repor a minha palavra-passe", | 26 | "login.link.password" : "Repor a minha palavra-passe", |
24 | "login.link.signup" : "Criar uma conta gratuita", | 27 | "login.link.signup" : "Criar uma conta gratuita", |
25 | "login.password.label" : "Palavra-passe", | 28 | "login.password.label" : "Palavra-passe", |
26 | "login.serverLogout" : "A sua sessão expirou, inicie sessão novamente.", | 29 | "login.serverLogout" : "A sua sessão expirou, inicie sessão novamente.", |
27 | "login.submit.label" : "Iniciar sessão", | 30 | "login.submit.label" : "Iniciar sessão", |
28 | "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.", | 31 | "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.", |
29 | "menu.app.about" : "Sobre Franz", | 32 | "menu.app.about" : "Sobre o Franz", |
30 | "menu.app.hide" : "Ocultar", | 33 | "menu.app.hide" : "Ocultar", |
31 | "menu.app.hideOthers" : "Ocultar Outros", | 34 | "menu.app.hideOthers" : "Ocultar Outros", |
32 | "menu.app.quit" : "Sair", | 35 | "menu.app.quit" : "Sair", |
@@ -36,51 +39,52 @@ | |||
36 | "menu.edit.copy" : "Copiar", | 39 | "menu.edit.copy" : "Copiar", |
37 | "menu.edit.cut" : "Cortar", | 40 | "menu.edit.cut" : "Cortar", |
38 | "menu.edit.delete" : "Apagar", | 41 | "menu.edit.delete" : "Apagar", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emojis e SÃmbolos", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Colar", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Colar e Manter Estilo", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Refazer", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Selecionar Tudo", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Voz", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Começar a ditar", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Comece a falar", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Pare de Falar", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Desfazer", |
49 | "menu.file" : "File", | 52 | "menu.file" : "Ficheiro", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Ajuda", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Registo de alterações", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Saber mais", |
53 | "menu.help.privacy" : "Declaração de privacidade", | 56 | "menu.help.privacy" : "Declaração de privacidade", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Suporte", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Termos do Serviço", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Serviços", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Adicionar Novo Serviço...", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Ver", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Ativar Modo de Ecrã Completo", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "Sair do Modo de Ecrã Completo", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Recarregar Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Recarregar serviço", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Tamanho Real", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Activar\/Desativar Ferramentas de Desenvolvimento", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Ativar\/Desativar Ecrã Completo", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Ativar\/Desativar Ferramentas de Desenvolvimento de Serviços", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "Aumentar", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Reduzir", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Janela", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Fechar", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Minimizar", |
72 | "password.email.label" : "Endereço de e-mail", | 75 | "password.email.label" : "Endereço de e-mail", |
73 | "password.headline" : "Repor a minha palavra-passe", | 76 | "password.headline" : "Repor a minha palavra-passe", |
74 | "password.link.login" : "Iniciar sessão", | 77 | "password.link.login" : "Iniciar sessão", |
75 | "password.link.signup" : "Criar uma conta gratuita", | 78 | "password.link.signup" : "Criar uma conta gratuita", |
76 | "password.noUser" : "Não existe nenhuma conta associada a esse email", | 79 | "password.noUser" : "Não existe nenhuma conta associada a esse endereço de e-mail", |
77 | "password.submit.label" : "Submeter", | 80 | "password.submit.label" : "Submeter", |
78 | "password.successInfo" : "Por favor reveja o seu email", | 81 | "password.successInfo" : "Por favor verifique o seu endereço de e-mail", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Apoie o Franz", | 83 | "pricing.headline" : "Apoie o Franz", |
80 | "pricing.link.skipPayment" : "Não pretendo ajudar no desenvolvimento do Franz", | 84 | "pricing.link.skipPayment" : "Não pretendo patrocinar o desenvolvimento do Franz", |
81 | "pricing.submit.label" : "Pretendo ajudar no desenvolvimento do Franz", | 85 | "pricing.submit.label" : "Pretendo patrocinar o desenvolvimento do Franz", |
82 | "pricing.support.label" : "Selecione o seu plano", | 86 | "pricing.support.label" : "Selecione o seu plano", |
83 | "service.crashHandler.action" : "Recarregar", | 87 | "service.crashHandler.action" : "Recarregar {name}", |
84 | "service.crashHandler.autoReload" : "A tentar restaurar automaticamente {name} em {seconds} segundos", | 88 | "service.crashHandler.autoReload" : "A tentar restaurar automaticamente {name} em {seconds} segundos", |
85 | "service.crashHandler.headline" : "Oh não!", | 89 | "service.crashHandler.headline" : "Oh não!", |
86 | "service.crashHandler.text" : "{name} causou um erro.", | 90 | "service.crashHandler.text" : "{name} causou um erro.", |
@@ -94,7 +98,7 @@ | |||
94 | "settings.account.buttonSave" : "Atualizar o perfil", | 98 | "settings.account.buttonSave" : "Atualizar o perfil", |
95 | "settings.account.deleteAccount" : "Apagar conta", | 99 | "settings.account.deleteAccount" : "Apagar conta", |
96 | "settings.account.deleteEmailSent" : "Recebeu um email com um endereço para confirmar a remoção da sua conta. A sua conta e dados não poderão ser restaurados!", | 100 | "settings.account.deleteEmailSent" : "Recebeu um email com um endereço para confirmar a remoção da sua conta. A sua conta e dados não poderão ser restaurados!", |
97 | "settings.account.deleteInfo" : "Se não necessita mais da sua conta Franz, pode apagar a sua conta e dados aqui.", | 101 | "settings.account.deleteInfo" : "Se já não necessita da sua conta Franz, pode apagar a sua conta e todos os dados aqui.", |
98 | "settings.account.headline" : "Conta", | 102 | "settings.account.headline" : "Conta", |
99 | "settings.account.headlineAccount" : "Informação da conta", | 103 | "settings.account.headlineAccount" : "Informação da conta", |
100 | "settings.account.headlineDangerZone" : "Zona de perigo", | 104 | "settings.account.headlineDangerZone" : "Zona de perigo", |
@@ -105,38 +109,40 @@ | |||
105 | "settings.account.headlineUpgrade" : "Atualize a sua conta e ajude o Franz", | 109 | "settings.account.headlineUpgrade" : "Atualize a sua conta e ajude o Franz", |
106 | "settings.account.invoiceDownload" : "Transferir", | 110 | "settings.account.invoiceDownload" : "Transferir", |
107 | "settings.account.manageSubscription.label" : "Gerir as minhas subscrições", | 111 | "settings.account.manageSubscription.label" : "Gerir as minhas subscrições", |
108 | "settings.account.successInfo" : "As suas mudanças foram efetuadas com sucesso", | 112 | "settings.account.successInfo" : "As suas alterações foram efetuadas com sucesso", |
109 | "settings.account.tryReloadUserInfoRequest" : "Tentar novamente", | 113 | "settings.account.tryReloadUserInfoRequest" : "Tentar novamente", |
110 | "settings.account.userInfoRequestFailed" : "Não é possÃvel carregar a informação do utilizador", | 114 | "settings.account.userInfoRequestFailed" : "Não é possÃvel carregar a informação do utilizador", |
111 | "settings.app.buttonClearAllCache" : "Limpar cache", | 115 | "settings.app.buttonClearAllCache" : "Limpar cache", |
112 | "settings.app.buttonInstallUpdate" : "Reiniciar & Instalar Atualizações", | 116 | "settings.app.buttonInstallUpdate" : "Reiniciar & instalar atualização", |
113 | "settings.app.buttonSearchForUpdate" : "Procurar por atualizações", | 117 | "settings.app.buttonSearchForUpdate" : "Procurar atualizações", |
114 | "settings.app.cacheInfo" : "A cache do Franz está a usar {size} do espaço em disco.", | 118 | "settings.app.cacheInfo" : "A cache do Franz está a usar {size} de espaço em disco.", |
115 | "settings.app.currentVersion" : "Versão atual", | 119 | "settings.app.currentVersion" : "Versão atual", |
116 | "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", | 120 | "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", |
117 | "settings.app.form.autoLaunchOnStart" : "Iniciar o Franz com o inÃcio de sessão", | 121 | "settings.app.form.autoLaunchOnStart" : "Iniciar o Franz após iniciar o computador", |
118 | "settings.app.form.beta" : "Incluir versões instáveis (beta)", | 122 | "settings.app.form.beta" : "Incluir versões instáveis (beta)", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Activar Aceleração de GPU", | ||
120 | "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu", | 125 | "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu", |
121 | "settings.app.form.enableSpellchecking" : "Ativar verificação ortográfica", | 126 | "settings.app.form.enableSpellchecking" : "Ativar verificação ortográfica", |
122 | "settings.app.form.enableSystemTray" : "Mostrar o Franz na barra do sistema", | 127 | "settings.app.form.enableSystemTray" : "Mostrar o Franz na barra do sistema", |
123 | "settings.app.form.hideDockIcon" : "Esconder Ãcone na Dock", | 128 | "settings.app.form.hideDockIcon" : "Esconder Ãcone na Dock", |
124 | "settings.app.form.language" : "Idioma:", | 129 | "settings.app.form.language" : "Idioma", |
125 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Franz para a barra do sistema", | 130 | "settings.app.form.minimizeToSystemTray" : "Minimizar o Franz para a barra do sistema", |
126 | "settings.app.form.runInBackground" : "Manter o Franz em segundo plano ao fechar a janela", | 131 | "settings.app.form.runInBackground" : "Manter o Franz em segundo plano ao fechar a janela", |
127 | "settings.app.form.showDisabledServices" : "Apresentar separadores de serviços desativados", | 132 | "settings.app.form.showDisabledServices" : "Apresentar separadores de serviços desativados", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Apresentar emblema com o número de mensagens não lidas quando as notificações estão desactivadas", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Apresentar emblema com o número de mensagens não lidas quando as notificações estão desativadas", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Definições", | 135 | "settings.app.headline" : "Definições", |
130 | "settings.app.headlineAdvanced" : "Avançado", | 136 | "settings.app.headlineAdvanced" : "Avançado", |
131 | "settings.app.headlineAppearance" : "Aparência", | 137 | "settings.app.headlineAppearance" : "Aparência", |
132 | "settings.app.headlineGeneral" : "Geral", | 138 | "settings.app.headlineGeneral" : "Geral", |
133 | "settings.app.headlineLanguage" : "Idioma:", | 139 | "settings.app.headlineLanguage" : "Idioma", |
134 | "settings.app.headlineUpdates" : "Atualizações", | 140 | "settings.app.headlineUpdates" : "Atualizações", |
135 | "settings.app.restartRequired" : "Alterações requerem reinÃcio", | 141 | "settings.app.restartRequired" : "Alterações requerem reinÃcio", |
136 | "settings.app.subheadlineCache" : "Cache", | 142 | "settings.app.subheadlineCache" : "Cache", |
137 | "settings.app.translationHelp" : "Ajude-nos a traduzir a Franz para a sua lÃngua.", | 143 | "settings.app.translationHelp" : "Ajude-nos a traduzir a Franz para a sua lÃngua.", |
138 | "settings.app.updateStatusAvailable" : "Atualização disponivel, a transferir...", | 144 | "settings.app.updateStatusAvailable" : "Atualização disponivel, a transferir...", |
139 | "settings.app.updateStatusSearching" : "Procurando por atualizações", | 145 | "settings.app.updateStatusSearching" : "A procurar atualizações", |
140 | "settings.app.updateStatusUpToDate" : "Está a usar a versão mais recente do Franz", | 146 | "settings.app.updateStatusUpToDate" : "Está a usar a versão mais recente do Franz", |
141 | "settings.invite.headline" : "Convide amigos", | 147 | "settings.invite.headline" : "Convide amigos", |
142 | "settings.navigation.account" : "Conta", | 148 | "settings.navigation.account" : "Conta", |
@@ -148,9 +154,9 @@ | |||
148 | "settings.recipes.all" : "Todos os serviços", | 154 | "settings.recipes.all" : "Todos os serviços", |
149 | "settings.recipes.dev" : "Desenvolvimento", | 155 | "settings.recipes.dev" : "Desenvolvimento", |
150 | "settings.recipes.headline" : "Serviços disponÃveis", | 156 | "settings.recipes.headline" : "Serviços disponÃveis", |
151 | "settings.recipes.missingService" : "A faltar um serviço?", | 157 | "settings.recipes.missingService" : "Falta um serviço?", |
152 | "settings.recipes.mostPopular" : "Os mais populares", | 158 | "settings.recipes.mostPopular" : "Os mais populares", |
153 | "settings.recipes.nothingFound" : "Lamentamos, mas não existe nenhum serviço corresponde ao pesquisado.", | 159 | "settings.recipes.nothingFound" : "Lamentamos, nenhum serviço corresponde ao pesquisado.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Serviço adicionado", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Serviço adicionado", |
155 | "settings.searchService" : "Pesquisa de serviço", | 161 | "settings.searchService" : "Pesquisa de serviço", |
156 | "settings.service.error.goBack" : "Voltar aos serviços", | 162 | "settings.service.error.goBack" : "Voltar aos serviços", |
@@ -159,25 +165,32 @@ | |||
159 | "settings.service.form.addServiceHeadline" : "Adicionar {name}", | 165 | "settings.service.form.addServiceHeadline" : "Adicionar {name}", |
160 | "settings.service.form.availableServices" : "Serviços disponÃveis", | 166 | "settings.service.form.availableServices" : "Serviços disponÃveis", |
161 | "settings.service.form.customUrl" : "Servidor personalizado", | 167 | "settings.service.form.customUrl" : "Servidor personalizado", |
162 | "settings.service.form.customUrlPremiumInfo" : "Para adicionar serviços com domÃnio próprio, é necessário uma Conta Premium.", | 168 | "settings.service.form.customUrlPremiumInfo" : "Para adicionar serviços com domÃnio próprio, é necessário uma Conta Premium no Franz.", |
163 | "settings.service.form.customUrlUpgradeAccount" : "Atualizar a conta", | 169 | "settings.service.form.customUrlUpgradeAccount" : "Atualizar a conta", |
164 | "settings.service.form.customUrlValidationError" : "Não foi possÃvel validar o servidor {nome}.", | 170 | "settings.service.form.customUrlValidationError" : "Não foi possÃvel validar o servidor {nome}.", |
165 | "settings.service.form.deleteButton" : "Apagar serviço", | 171 | "settings.service.form.deleteButton" : "Apagar serviço", |
166 | "settings.service.form.editServiceHeadline" : "Editar {name}", | 172 | "settings.service.form.editServiceHeadline" : "Editar {name}", |
167 | "settings.service.form.enableAudio" : "Ativar áudio", | 173 | "settings.service.form.enableAudio" : "Ativar áudio", |
168 | "settings.service.form.enableBadge" : "Mostrar emblema de mensagens não vistas", | 174 | "settings.service.form.enableBadge" : "Mostrar emblemas de mensagens não lidas", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Ativar notificações", | 176 | "settings.service.form.enableNotification" : "Ativar notificações", |
170 | "settings.service.form.enableService" : "Ativar serviço", | 177 | "settings.service.form.enableService" : "Ativar serviço", |
171 | "settings.service.form.headlineBadges" : "Emblema de mensagem não vista", | 178 | "settings.service.form.headlineBadges" : "Emblema de mensagem não lida", |
172 | "settings.service.form.headlineGeneral" : "Geral", | 179 | "settings.service.form.headlineGeneral" : "Geral", |
173 | "settings.service.form.headlineNotifications" : "Notificações", | 180 | "settings.service.form.headlineNotifications" : "Notificações", |
174 | "settings.service.form.icon" : "Personalizar Ãcone", | 181 | "settings.service.form.icon" : "Personalizar Ãcone", |
175 | "settings.service.form.iconDelete" : "Apagar", | 182 | "settings.service.form.iconDelete" : "Apagar", |
176 | "settings.service.form.iconUpload" : "Arraste a sua imagem, ou clique aqui", | 183 | "settings.service.form.iconUpload" : "Arraste a sua imagem, ou clique aqui", |
177 | "settings.service.form.indirectMessageInfo" : "Será notificado sobre todas as novas mensagens de um canal, não apenas @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Será notificado sobre todas as novas mensagens num canal, não apenas @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Mostrar o emblema da mensagem para todas as novas mensagens", | 185 | "settings.service.form.indirectMessages" : "Mostrar o emblema da mensagem para todas as novas mensagens", |
179 | "settings.service.form.isMutedInfo" : "Quando desativado, todas as notificações de áudio serão silenciadas", | 186 | "settings.service.form.isMutedInfo" : "Quando desativado, todos sons e reproduções de áudio serão silenciados", |
180 | "settings.service.form.name" : "Nome", | 187 | "settings.service.form.name" : "Nome", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Guardar serviço", | 194 | "settings.service.form.saveButton" : "Guardar serviço", |
182 | "settings.service.form.tabHosted" : "Com domÃnio", | 195 | "settings.service.form.tabHosted" : "Com domÃnio", |
183 | "settings.service.form.tabOnPremise" : "Com domÃnio próprio âï¸", | 196 | "settings.service.form.tabOnPremise" : "Com domÃnio próprio âï¸", |
@@ -187,7 +200,7 @@ | |||
187 | "settings.services.deletedInfo" : "O serviço foi apagado", | 200 | "settings.services.deletedInfo" : "O serviço foi apagado", |
188 | "settings.services.discoverServices" : "Descobrir serviços", | 201 | "settings.services.discoverServices" : "Descobrir serviços", |
189 | "settings.services.headline" : "Os seus serviços", | 202 | "settings.services.headline" : "Os seus serviços", |
190 | "settings.services.noServicesAdded" : "Ainda não adicionou nenhum serviço.", | 203 | "settings.services.noServicesAdded" : "Ainda não adicionou um serviço.", |
191 | "settings.services.tooltip.isDisabled" : "O serviço está desativado", | 204 | "settings.services.tooltip.isDisabled" : "O serviço está desativado", |
192 | "settings.services.tooltip.isMuted" : "Todos os sons estão silenciados", | 205 | "settings.services.tooltip.isMuted" : "Todos os sons estão silenciados", |
193 | "settings.services.tooltip.notificationsDisabled" : "As notificações estão desativadas", | 206 | "settings.services.tooltip.notificationsDisabled" : "As notificações estão desativadas", |
@@ -206,28 +219,30 @@ | |||
206 | "sidebar.settings" : "Definições", | 219 | "sidebar.settings" : "Definições", |
207 | "sidebar.unmuteApp" : "Ativar notificações e áudio", | 220 | "sidebar.unmuteApp" : "Ativar notificações e áudio", |
208 | "signup.company.label" : "Empresa", | 221 | "signup.company.label" : "Empresa", |
209 | "signup.email.label" : "Endereço de e-mail", | 222 | "signup.email.label" : "Endereço de email", |
210 | "signup.emailDuplicate" : "Já existe uma conta associada a este endereço", | 223 | "signup.emailDuplicate" : "Já existe uma conta associada a este endereço de email", |
211 | "signup.firstname.label" : "Primeiro Nome", | 224 | "signup.firstname.label" : "Primeiro Nome", |
212 | "signup.headline" : "Criar conta", | 225 | "signup.headline" : "Criar conta", |
213 | "signup.lastname.label" : "Último Nome", | 226 | "signup.lastname.label" : "Último Nome", |
214 | "signup.legal.info" : "Ao criar uma conta Franz, aceita", | 227 | "signup.legal.info" : "Ao criar uma conta Franz, aceita", |
215 | "signup.legal.privacy" : "Declaração de privacidade", | 228 | "signup.legal.privacy" : "Declaração de Privacidade", |
216 | "signup.legal.terms" : "Termos de Serviço", | 229 | "signup.legal.terms" : "Termos do Serviço", |
217 | "signup.link.login" : "Já tem conta, iniciar sessão?", | 230 | "signup.link.login" : "Já tem uma conta, iniciar sessão?", |
218 | "signup.password.label" : "Palavra-passe", | 231 | "signup.password.label" : "Palavra-passe", |
219 | "signup.submit.label" : "Criar uma conta", | 232 | "signup.submit.label" : "Criar uma conta", |
220 | "subscription.euTaxInfo" : "Residentes EU: Taxas locais podem ser aplicadas", | 233 | "subscription.euTaxInfo" : "Residentes EU: Taxas locais podem ser aplicadas", |
221 | "subscription.features.ads" : "Sem anúncios, para sempre!", | 234 | "subscription.features.ads" : "Sem anúncios, para sempre!", |
222 | "subscription.features.comingSoon" : "Em breve!", | 235 | "subscription.features.comingSoon" : "em breve", |
223 | "subscription.features.customServices" : "Serviços privados para si e para a sua equipa", | 236 | "subscription.features.encryptedSync" : "Sincronização encriptada de sessão", |
224 | "subscription.features.encryptedSync" : "Sincronização encriptada de serviços", | 237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", |
225 | "subscription.features.onpremise" : "Adicionar serviços 'on-premise'\/hosted como o HipChat", | 238 | "subscription.features.onpremise" : "Adicionar serviços 'on-premise'\/hosted como o HipChat", |
226 | "subscription.features.vpn" : "Suporte para proxy\/VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Ao subscrever uma Conta Premium, tem acesso a", | 242 | "subscription.includedFeatures" : "Ao subscrever uma Conta Premium, tem acesso a", |
228 | "subscription.paymentSessionError" : "Erro no serviço de pagamento", | 243 | "subscription.paymentSessionError" : "Erro no serviço de pagamento", |
229 | "subscription.submit.label" : "Pretendo ajudar o desenvolvimento do Franz", | 244 | "subscription.submit.label" : "Pretendo ajudar o desenvolvimento do Franz", |
230 | "subscription.type.free" : "Gratuito", | 245 | "subscription.type.free" : "gratuito", |
231 | "subscription.type.month" : "mês", | 246 | "subscription.type.month" : "mês", |
232 | "subscription.type.year" : "ano", | 247 | "subscription.type.year" : "ano", |
233 | "subscriptionPopup.buttonCancel" : "Cancelar", | 248 | "subscriptionPopup.buttonCancel" : "Cancelar", |
@@ -241,11 +256,11 @@ | |||
241 | "tabs.item.enableNotification" : "Ativar notificações", | 256 | "tabs.item.enableNotification" : "Ativar notificações", |
242 | "tabs.item.enableService" : "Ativar serviço", | 257 | "tabs.item.enableService" : "Ativar serviço", |
243 | "tabs.item.reload" : "Recarregar", | 258 | "tabs.item.reload" : "Recarregar", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} não é válido", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} deveria ter pelo menos {comprimento} caracteres", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} é obrigatório", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} não é uma hiperligação válida", |
248 | "welcome.loginButton" : "Iniciar sessão", | 263 | "welcome.loginButton" : "Iniciar sessão", |
249 | "welcome.signupButton" : "Criar uma conta gratuita", | 264 | "welcome.signupButton" : "Criar uma conta gratuita", |
250 | "welcome.slogan" : "Messaging that works for you" | 265 | "welcome.slogan" : "Sistema de mensagens feito para si" |
251 | } | 266 | } |
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index ecebc46ee..78030dc15 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json | |||
@@ -1,25 +1,28 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Ðевозможно подключитьÑÑ Ðº ÑервиÑам Franz", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "Ðет Интернет-ÑоединениÑ", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "import.headline" : "Импортировать ÑервиÑÑ‹ из Franz 4", | 4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
5 | "import.notSupportedHeadline" : "СервиÑÑ‹ ещё не поддерживаютÑÑ Ð² Franz 5", | 5 | "global.api.unhealthy" : "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Franz", |
6 | "import.skip.label" : "Я хочу добавить ÑÐµÑ€Ð²Ð¸Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ", | 6 | "global.notConnectedToTheInternet" : "Ð’Ñ‹ не подключены к Ñети Интернет", |
7 | "import.headline" : "Импортировать ваши ÑервиÑÑ‹ из Franz 4", | ||
8 | "import.notSupportedHeadline" : "СервиÑÑ‹ пока ещё не поддерживаютÑÑ Ð² Franz 5", | ||
9 | "import.skip.label" : "Я хочу добавить ÑервиÑÑ‹ вручную", | ||
7 | "import.submit.label" : "Импортировать ÑервиÑÑ‹", | 10 | "import.submit.label" : "Импортировать ÑервиÑÑ‹", |
8 | "infobar.buttonChangelog" : "Что новенького?", | 11 | "infobar.buttonChangelog" : "Что новенького?", |
9 | "infobar.buttonInstallUpdate" : "ПерезапуÑтить и обновить", | 12 | "infobar.buttonInstallUpdate" : "ПерезапуÑтить и уÑтановить обновлениÑ", |
10 | "infobar.buttonReloadServices" : "Перезагрузить ÑервиÑÑ‹", | 13 | "infobar.buttonReloadServices" : "Перезагрузить ÑервиÑÑ‹", |
11 | "infobar.requiredRequestsFailed" : "Ðевозможно загрузить ÑервиÑÑ‹ и информацию пользователÑ", | 14 | "infobar.requiredRequestsFailed" : "Ðевозможно загрузить ÑервиÑÑ‹ и информацию пользователÑ", |
12 | "infobar.servicesUpdated" : "Ваши ÑервиÑÑ‹ были обновлены.", | 15 | "infobar.servicesUpdated" : "Ваши ÑервиÑÑ‹ были обновлены.", |
13 | "infobar.updateAvailable" : "ДоÑтупно обновление Franz.", | 16 | "infobar.updateAvailable" : "ДоÑтупно обновление Franz.", |
14 | "invite.email.label" : "Email адреÑ", | 17 | "invite.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
15 | "invite.headline.friends" : "ПриглаÑите 3-Ñ… друзей или коллег", | 18 | "invite.headline.friends" : "ПриглаÑите 3-Ñ… друзей или коллег", |
16 | "invite.name.label" : "ИмÑ", | 19 | "invite.name.label" : "ИмÑ", |
17 | "invite.skip.label" : "Я Ñделаю Ñто позже", | 20 | "invite.skip.label" : "Я Ñделаю Ñто позже", |
18 | "invite.submit.label" : "Ð’Ñ‹Ñлать приглашениÑ", | 21 | "invite.submit.label" : "Ð’Ñ‹Ñлать приглашениÑ", |
19 | "invite.successInfo" : "ÐŸÑ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ ÑƒÑпешно отправлены", | 22 | "invite.successInfo" : "ÐŸÑ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ ÑƒÑпешно отправлены", |
20 | "login.email.label" : "Email", | 23 | "login.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
21 | "login.headline" : "Вход", | 24 | "login.headline" : "Вход", |
22 | "login.invalidCredentials" : "Ðеправильный email или пароль", | 25 | "login.invalidCredentials" : "Ðеправильный Ð°Ð´Ñ€ÐµÑ Ñлектронной почты или пароль", |
23 | "login.link.password" : "ВоÑÑтановить пароль", | 26 | "login.link.password" : "ВоÑÑтановить пароль", |
24 | "login.link.signup" : "Создать беÑплатный аккаунт", | 27 | "login.link.signup" : "Создать беÑплатный аккаунт", |
25 | "login.password.label" : "Пароль", | 28 | "login.password.label" : "Пароль", |
@@ -32,19 +35,19 @@ | |||
32 | "menu.app.quit" : "Выйти", | 35 | "menu.app.quit" : "Выйти", |
33 | "menu.app.settings" : "ÐаÑтройки", | 36 | "menu.app.settings" : "ÐаÑтройки", |
34 | "menu.app.unhide" : "Показать", | 37 | "menu.app.unhide" : "Показать", |
35 | "menu.edit" : "Редактировать", | 38 | "menu.edit" : "Правка", |
36 | "menu.edit.copy" : "Копировать", | 39 | "menu.edit.copy" : "Копировать", |
37 | "menu.edit.cut" : "Вырезать", | 40 | "menu.edit.cut" : "Вырезать", |
38 | "menu.edit.delete" : "Удалить", | 41 | "menu.edit.delete" : "Удалить", |
39 | "menu.edit.emojiSymbols" : "Ðмодзи и Ñимволы", | 42 | "menu.edit.emojiSymbols" : "Ðмодзи и Ñимволы", |
40 | "menu.edit.paste" : "Ð’Ñтавить", | 43 | "menu.edit.paste" : "Ð’Ñтавить", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Ð’Ñтавить Ñ Ñоблюдением ÑтилÑ", |
42 | "menu.edit.redo" : "Вернуть", | 45 | "menu.edit.redo" : "Вернуть", |
43 | "menu.edit.selectAll" : "Выделить вÑÑ‘", | 46 | "menu.edit.selectAll" : "Выделить вÑÑ‘", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Речь", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Ðачать диктовать", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Ðачать говорить", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Закончить говорить", |
48 | "menu.edit.undo" : "Отменить", | 51 | "menu.edit.undo" : "Отменить", |
49 | "menu.file" : "Файл", | 52 | "menu.file" : "Файл", |
50 | "menu.help" : "Справка", | 53 | "menu.help" : "Справка", |
@@ -53,33 +56,34 @@ | |||
53 | "menu.help.privacy" : "Политика конфиденциальноÑти", | 56 | "menu.help.privacy" : "Политика конфиденциальноÑти", |
54 | "menu.help.support" : "Поддержка", | 57 | "menu.help.support" : "Поддержка", |
55 | "menu.help.tos" : "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ", | 58 | "menu.help.tos" : "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Службы", |
57 | "menu.services.addNewService" : "Добавить ÑервиÑ...", | 60 | "menu.services.addNewService" : "Добавить новый ÑервиÑ...", |
58 | "menu.view" : "Вид", | 61 | "menu.view" : "Вид", |
59 | "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран", | 62 | "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран", |
60 | "menu.view.exitFullScreen" : "В окне", | 63 | "menu.view.exitFullScreen" : "В окне", |
61 | "menu.view.reloadFranz" : "Перезагрузить Franz", | 64 | "menu.view.reloadFranz" : "Перезагрузить Franz", |
62 | "menu.view.reloadService" : "ПерезапуÑтить ÑервиÑ", | 65 | "menu.view.reloadService" : "ПерезапуÑтить ÑервиÑ", |
63 | "menu.view.resetZoom" : "ФактичеÑкий размер", | 66 | "menu.view.resetZoom" : "ФактичеÑкий размер", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Показать инÑтрументы разработчика", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "ПереключитьÑÑ Ð½Ð° полный Ñкран", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Показать инÑтрументы разработчика ÑервиÑа", |
67 | "menu.view.zoomIn" : "Увеличить маÑштаб", | 70 | "menu.view.zoomIn" : "Увеличить маÑштаб", |
68 | "menu.view.zoomOut" : "Уменьшить маÑштаб", | 71 | "menu.view.zoomOut" : "Уменьшить маÑштаб", |
69 | "menu.window" : "Окно", | 72 | "menu.window" : "Окно", |
70 | "menu.window.close" : "Закрыть", | 73 | "menu.window.close" : "Закрыть", |
71 | "menu.window.minimize" : "Свернуть", | 74 | "menu.window.minimize" : "Свернуть", |
72 | "password.email.label" : "Email адреÑ", | 75 | "password.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
73 | "password.headline" : "СброÑить пароль", | 76 | "password.headline" : "СброÑить пароль", |
74 | "password.link.login" : "Вход", | 77 | "password.link.login" : "Вход", |
75 | "password.link.signup" : "Создать учётную запиÑÑŒ пользователÑ", | 78 | "password.link.signup" : "Создать беÑплатную учётную запиÑÑŒ пользователÑ", |
76 | "password.noUser" : "Ðе найдено Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ñ‚Ð°ÐºÐ¸Ð¼ email", | 79 | "password.noUser" : "Ðе найдено Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ñ‚Ð°ÐºÐ¸Ð¼ адреÑом Ñлектронной почты", |
77 | "password.submit.label" : "ПринÑÑ‚ÑŒ", | 80 | "password.submit.label" : "ПринÑÑ‚ÑŒ", |
78 | "password.successInfo" : "Проверьте Вашу Ñлектронную почту", | 81 | "password.successInfo" : "Проверьте вашу Ñлектронную почту", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Поддержать Franz", | 83 | "pricing.headline" : "Поддержать Franz", |
80 | "pricing.link.skipPayment" : "Я не хочу поддерживать разработку Franz.", | 84 | "pricing.link.skipPayment" : "Я не хочу поддерживать разработку Franz.", |
81 | "pricing.submit.label" : "Я хочу поддержать разработку Franz", | 85 | "pricing.submit.label" : "Я хочу поддержать разработку Franz", |
82 | "pricing.support.label" : "Выберите план поддержки", | 86 | "pricing.support.label" : "Выберите ваш план поддержки", |
83 | "service.crashHandler.action" : "Перезагрузить {name}", | 87 | "service.crashHandler.action" : "Перезагрузить {name}", |
84 | "service.crashHandler.autoReload" : "ПытаюÑÑŒ автоматичеÑки воÑÑтановить {name} в течение {seconds} Ñекунд", | 88 | "service.crashHandler.autoReload" : "ПытаюÑÑŒ автоматичеÑки воÑÑтановить {name} в течение {seconds} Ñекунд", |
85 | "service.crashHandler.headline" : "О, нет!", | 89 | "service.crashHandler.headline" : "О, нет!", |
@@ -104,8 +108,8 @@ | |||
104 | "settings.account.headlineSubscription" : "Ваша подпиÑка", | 108 | "settings.account.headlineSubscription" : "Ваша подпиÑка", |
105 | "settings.account.headlineUpgrade" : "Улучшить аккаунт и поддержать Franz", | 109 | "settings.account.headlineUpgrade" : "Улучшить аккаунт и поддержать Franz", |
106 | "settings.account.invoiceDownload" : "Скачать", | 110 | "settings.account.invoiceDownload" : "Скачать", |
107 | "settings.account.manageSubscription.label" : "Управление подпиÑкой", | 111 | "settings.account.manageSubscription.label" : "Управление вашей подпиÑкой", |
108 | "settings.account.successInfo" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñохранены", | 112 | "settings.account.successInfo" : "Ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены", |
109 | "settings.account.tryReloadUserInfoRequest" : "Попробовать Ñнова", | 113 | "settings.account.tryReloadUserInfoRequest" : "Попробовать Ñнова", |
110 | "settings.account.userInfoRequestFailed" : "Ðевозможно загрузить информацию пользователÑ", | 114 | "settings.account.userInfoRequestFailed" : "Ðевозможно загрузить информацию пользователÑ", |
111 | "settings.app.buttonClearAllCache" : "ОчиÑтить кÑш", | 115 | "settings.app.buttonClearAllCache" : "ОчиÑтить кÑш", |
@@ -116,16 +120,18 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Открывать в фоне", | 120 | "settings.app.form.autoLaunchInBackground" : "Открывать в фоне", |
117 | "settings.app.form.autoLaunchOnStart" : "ЗапуÑкать Franz при Ñтарте", | 121 | "settings.app.form.autoLaunchOnStart" : "ЗапуÑкать Franz при Ñтарте", |
118 | "settings.app.form.beta" : "Ð’ÐºÐ»ÑŽÑ‡Ð°Ñ Ð±ÐµÑ‚Ð° верÑии", | 122 | "settings.app.form.beta" : "Ð’ÐºÐ»ÑŽÑ‡Ð°Ñ Ð±ÐµÑ‚Ð° верÑии", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 124 | "settings.app.form.enableGPUAcceleration" : "Включить уÑкорение GPU", |
125 | "settings.app.form.enableMenuBar" : "Показывать Franz на панели меню", | ||
121 | "settings.app.form.enableSpellchecking" : "Включить проверку правопиÑаниÑ", | 126 | "settings.app.form.enableSpellchecking" : "Включить проверку правопиÑаниÑ", |
122 | "settings.app.form.enableSystemTray" : "Показывать Franz в ÑиÑтемном трее", | 127 | "settings.app.form.enableSystemTray" : "Показывать Franz в ÑиÑтемном трее", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "СпрÑтать иконку Franz на панели", |
124 | "settings.app.form.language" : "Язык", | 129 | "settings.app.form.language" : "Язык", |
125 | "settings.app.form.minimizeToSystemTray" : "Сворачивать Franz в ÑиÑтемный трей", | 130 | "settings.app.form.minimizeToSystemTray" : "Сворачивать Franz в ÑиÑтемный трей", |
126 | "settings.app.form.runInBackground" : "ОÑтавлÑÑ‚ÑŒ Franz в фоне при закрытии окна", | 131 | "settings.app.form.runInBackground" : "ОÑтавлÑÑ‚ÑŒ Franz в фоне при закрытии окна", |
127 | "settings.app.form.showDisabledServices" : "Показывать вкладки отключённых Ñлужб", | 132 | "settings.app.form.showDisabledServices" : "Показывать вкладки отключённых Ñлужб", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Показывать значок непрочитанного ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ отключённых уведомлениÑÑ…", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Показывать значок непрочитанного ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ отключённых уведомлениÑÑ…", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "ÐаÑтройки", | 135 | "settings.app.headline" : "ÐаÑтройки", |
130 | "settings.app.headlineAdvanced" : "Дополнительно", | 136 | "settings.app.headlineAdvanced" : "Дополнительно", |
131 | "settings.app.headlineAppearance" : "Внешний вид", | 137 | "settings.app.headlineAppearance" : "Внешний вид", |
@@ -148,43 +154,50 @@ | |||
148 | "settings.recipes.all" : "Ð’Ñе ÑервиÑÑ‹", | 154 | "settings.recipes.all" : "Ð’Ñе ÑервиÑÑ‹", |
149 | "settings.recipes.dev" : "Разработка", | 155 | "settings.recipes.dev" : "Разработка", |
150 | "settings.recipes.headline" : "ДоÑтупные ÑервиÑÑ‹", | 156 | "settings.recipes.headline" : "ДоÑтупные ÑервиÑÑ‹", |
151 | "settings.recipes.missingService" : "Ðе можете найти Ñлужбу?", | 157 | "settings.recipes.missingService" : "Ðе можете найти ÑервиÑ?", |
152 | "settings.recipes.mostPopular" : "ПопулÑрные", | 158 | "settings.recipes.mostPopular" : "Самые популÑрные", |
153 | "settings.recipes.nothingFound" : "Ðичего не найдено по вашему запроÑу.", | 159 | "settings.recipes.nothingFound" : "Извините, но ничего не найдено по вашему поиÑковому запроÑу.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Ð¡ÐµÑ€Ð²Ð¸Ñ ÑƒÑпешно добавлен", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Ð¡ÐµÑ€Ð²Ð¸Ñ ÑƒÑпешно добавлен", |
155 | "settings.searchService" : "Ðайти ÑервиÑ", | 161 | "settings.searchService" : "Ðайти ÑервиÑ", |
156 | "settings.service.error.goBack" : "ВернутьÑÑ Ðº ÑервиÑам", | 162 | "settings.service.error.goBack" : "ВернутьÑÑ Ðº ÑервиÑам", |
157 | "settings.service.error.headline" : "Ошибка", | 163 | "settings.service.error.headline" : "Ошибка", |
158 | "settings.service.error.message" : "Ðевозможно загрузить рецепт ÑервиÑа.", | 164 | "settings.service.error.message" : "Ðевозможно загрузить \"рецепт\" ÑервиÑа.", |
159 | "settings.service.form.addServiceHeadline" : "Добавление {name}", | 165 | "settings.service.form.addServiceHeadline" : "Добавление {name}", |
160 | "settings.service.form.availableServices" : "ДоÑтупные ÑервиÑÑ‹", | 166 | "settings.service.form.availableServices" : "ДоÑтупные ÑервиÑÑ‹", |
161 | "settings.service.form.customUrl" : "ÐÐ´Ñ€ÐµÑ Ñервера", | 167 | "settings.service.form.customUrl" : "ПользовательÑкий Ñервер", |
162 | "settings.service.form.customUrlPremiumInfo" : "Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑервиÑа на Ñвоем хоÑтинге необходим аккаунт Franz Premium.", | 168 | "settings.service.form.customUrlPremiumInfo" : "Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑервиÑа на Ñвоем хоÑтинге необходим премиум аккаунт Franz.", |
163 | "settings.service.form.customUrlUpgradeAccount" : "Улучшить аккаунт", | 169 | "settings.service.form.customUrlUpgradeAccount" : "Улучшить ваш аккаунт", |
164 | "settings.service.form.customUrlValidationError" : "Ðевозможно проверить Ñервер {name}.", | 170 | "settings.service.form.customUrlValidationError" : "Ðевозможно проверить Ñервер {name}.", |
165 | "settings.service.form.deleteButton" : "Удалить ÑервиÑ", | 171 | "settings.service.form.deleteButton" : "Удалить ÑервиÑ", |
166 | "settings.service.form.editServiceHeadline" : "Редактирование {name}", | 172 | "settings.service.form.editServiceHeadline" : "Редактирование {name}", |
167 | "settings.service.form.enableAudio" : "Включить звук", | 173 | "settings.service.form.enableAudio" : "Включить звук", |
168 | "settings.service.form.enableBadge" : "Показывать иконку непрочитанных Ñообщений", | 174 | "settings.service.form.enableBadge" : "Показывать иконку непрочитанных Ñообщений", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Включить уведомлениÑ", | 176 | "settings.service.form.enableNotification" : "Включить уведомлениÑ", |
170 | "settings.service.form.enableService" : "Включить ÑервиÑ", | 177 | "settings.service.form.enableService" : "Включить ÑервиÑ", |
171 | "settings.service.form.headlineBadges" : "Значки непрочитанных Ñообщений", | 178 | "settings.service.form.headlineBadges" : "Значки непрочитанных Ñообщений", |
172 | "settings.service.form.headlineGeneral" : "Общие", | 179 | "settings.service.form.headlineGeneral" : "Общие", |
173 | "settings.service.form.headlineNotifications" : "УведомлениÑ", | 180 | "settings.service.form.headlineNotifications" : "УведомлениÑ", |
174 | "settings.service.form.icon" : "ÐеÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð¸ÐºÐ¾Ð½ÐºÐ°", | 181 | "settings.service.form.icon" : "ПользовательÑÐºÐ°Ñ Ð¸ÐºÐ¾Ð½ÐºÐ°", |
175 | "settings.service.form.iconDelete" : "Удалить", | 182 | "settings.service.form.iconDelete" : "Удалить", |
176 | "settings.service.form.iconUpload" : "Перетащите картинку или кликните здеÑÑŒ", | 183 | "settings.service.form.iconUpload" : "Перетащите ваше изображение или кликните здеÑÑŒ", |
177 | "settings.service.form.indirectMessageInfo" : "Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñех Ñообщений, не только Ð´Ð»Ñ @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð¾ вÑех новых Ñообщений на канале, не только Ð´Ð»Ñ @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Показывать значок уведомлений Ð´Ð»Ñ Ð²Ñех новых Ñообщений", | 185 | "settings.service.form.indirectMessages" : "Показывать значок уведомлений Ð´Ð»Ñ Ð²Ñех новых Ñообщений", |
179 | "settings.service.form.isMutedInfo" : "Когда выключено, вÑе звуковые ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ отключены", | 186 | "settings.service.form.isMutedInfo" : "Когда выключено, вÑе звуковые ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ отключены", |
180 | "settings.service.form.name" : "Ðазвание", | 187 | "settings.service.form.name" : "Ðазвание", |
181 | "settings.service.form.saveButton" : "Сохранить", | 188 | "settings.service.form.proxy.headline" : "Proxy Settings", |
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
194 | "settings.service.form.saveButton" : "Сохранить ÑервиÑ", | ||
182 | "settings.service.form.tabHosted" : "Размещено", | 195 | "settings.service.form.tabHosted" : "Размещено", |
183 | "settings.service.form.tabOnPremise" : "Свой хоÑтинг âï¸", | 196 | "settings.service.form.tabOnPremise" : "Свой хоÑтинг âï¸", |
184 | "settings.service.form.team" : "Команда", | 197 | "settings.service.form.team" : "Команда", |
185 | "settings.service.form.useHostedService" : "ИÑпользовать ÑобÑтвенный ÑÐµÑ€Ð²Ð¸Ñ {name}", | 198 | "settings.service.form.useHostedService" : "ИÑпользовать ÑобÑтвенный ÑÐµÑ€Ð²Ð¸Ñ {name}", |
186 | "settings.service.form.yourServices" : "Ваши ÑервиÑÑ‹", | 199 | "settings.service.form.yourServices" : "Ваши ÑервиÑÑ‹", |
187 | "settings.services.deletedInfo" : "Ð¡ÐµÑ€Ð²Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½", | 200 | "settings.services.deletedInfo" : "Ð¡ÐµÑ€Ð²Ð¸Ñ Ð±Ñ‹Ð» удален", |
188 | "settings.services.discoverServices" : "Ðайти ÑервиÑÑ‹", | 201 | "settings.services.discoverServices" : "Ðайти ÑервиÑÑ‹", |
189 | "settings.services.headline" : "Ваши ÑервиÑÑ‹", | 202 | "settings.services.headline" : "Ваши ÑервиÑÑ‹", |
190 | "settings.services.noServicesAdded" : "Ð’Ñ‹ пока не добавили никаких ÑервиÑов.", | 203 | "settings.services.noServicesAdded" : "Ð’Ñ‹ пока не добавили никаких ÑервиÑов.", |
@@ -197,7 +210,7 @@ | |||
197 | "settings.user.form.accountType.label" : "Тип аккаунта", | 210 | "settings.user.form.accountType.label" : "Тип аккаунта", |
198 | "settings.user.form.accountType.non-profit" : "ÐекоммерчеÑкий", | 211 | "settings.user.form.accountType.non-profit" : "ÐекоммерчеÑкий", |
199 | "settings.user.form.currentPassword" : "Текущий пароль", | 212 | "settings.user.form.currentPassword" : "Текущий пароль", |
200 | "settings.user.form.email" : "Email", | 213 | "settings.user.form.email" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
201 | "settings.user.form.firstname" : "ИмÑ", | 214 | "settings.user.form.firstname" : "ИмÑ", |
202 | "settings.user.form.lastname" : "ФамилиÑ", | 215 | "settings.user.form.lastname" : "ФамилиÑ", |
203 | "settings.user.form.newPassword" : "Ðовый пароль", | 216 | "settings.user.form.newPassword" : "Ðовый пароль", |
@@ -206,8 +219,8 @@ | |||
206 | "sidebar.settings" : "ÐаÑтройки", | 219 | "sidebar.settings" : "ÐаÑтройки", |
207 | "sidebar.unmuteApp" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук", | 220 | "sidebar.unmuteApp" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук", |
208 | "signup.company.label" : "ОрганизациÑ", | 221 | "signup.company.label" : "ОрганизациÑ", |
209 | "signup.email.label" : "Email адреÑ", | 222 | "signup.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", |
210 | "signup.emailDuplicate" : "Пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ email уже ÑущеÑтвует", | 223 | "signup.emailDuplicate" : "Пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ адреÑом Ñлектронной почты уже ÑущеÑтвует", |
211 | "signup.firstname.label" : "ИмÑ", | 224 | "signup.firstname.label" : "ИмÑ", |
212 | "signup.headline" : "РегиÑтрациÑ", | 225 | "signup.headline" : "РегиÑтрациÑ", |
213 | "signup.lastname.label" : "ФамилиÑ", | 226 | "signup.lastname.label" : "ФамилиÑ", |
@@ -220,11 +233,13 @@ | |||
220 | "subscription.euTaxInfo" : "Резидентам ЕвроСоюза: могут применÑÑ‚ÑŒÑÑ Ð¼ÐµÑтные налоги", | 233 | "subscription.euTaxInfo" : "Резидентам ЕвроСоюза: могут применÑÑ‚ÑŒÑÑ Ð¼ÐµÑтные налоги", |
221 | "subscription.features.ads" : "Без рекламы, навÑегда!", | 234 | "subscription.features.ads" : "Без рекламы, навÑегда!", |
222 | "subscription.features.comingSoon" : "Ñкоро", | 235 | "subscription.features.comingSoon" : "Ñкоро", |
223 | "subscription.features.customServices" : "ÐаÑтраиваемые ÑервиÑÑ‹ Ð´Ð»Ñ Ð²Ð°Ñ Ð¸ вашей команды", | 236 | "subscription.features.encryptedSync" : "Зашифрованные ÑеÑÑии Ñинхронизации", |
224 | "subscription.features.encryptedSync" : "Шифрование ÑеÑÑий Ñинхронизации", | 237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", |
225 | "subscription.features.onpremise" : "Добавление облачных Ñлужб или Ñлужб на Ñвоём хоÑтинге типа HipChat", | 238 | "subscription.features.onpremise" : "Добавление облачных Ñлужб или Ñлужб на Ñвоём хоÑтинге типа HipChat", |
226 | "subscription.features.vpn" : "Поддержку прокÑи и VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
227 | "subscription.includedFeatures" : "Платный аккаунт Franz Premium включает", | 240 | "subscription.features.proxy" : "Proxy support for services", |
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
242 | "subscription.includedFeatures" : "Платный премиум аккаунт Franz включает", | ||
228 | "subscription.paymentSessionError" : "Ðевозможно загрузить форму оплаты", | 243 | "subscription.paymentSessionError" : "Ðевозможно загрузить форму оплаты", |
229 | "subscription.submit.label" : "Я хочу поддержать разработку Franz", | 244 | "subscription.submit.label" : "Я хочу поддержать разработку Franz", |
230 | "subscription.type.free" : "беÑплатно", | 245 | "subscription.type.free" : "беÑплатно", |
@@ -241,11 +256,11 @@ | |||
241 | "tabs.item.enableNotification" : "Включить уведомлениÑ", | 256 | "tabs.item.enableNotification" : "Включить уведомлениÑ", |
242 | "tabs.item.enableService" : "Включить Ñлужбу", | 257 | "tabs.item.enableService" : "Включить Ñлужбу", |
243 | "tabs.item.reload" : "Перезагрузить", | 258 | "tabs.item.reload" : "Перезагрузить", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} недейÑтвительно", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} должно быть не менее {length} Ñимволов", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} обÑзательно", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} ÑвлÑетÑÑ Ð½ÐµÐ´ÐµÐ¹Ñтвительной ÑÑылкой", |
248 | "welcome.loginButton" : "Вход", | 263 | "welcome.loginButton" : "Вход", |
249 | "welcome.signupButton" : "Создать аккаунт", | 264 | "welcome.signupButton" : "Создать беÑплатный аккаунт", |
250 | "welcome.slogan" : "Общение, которое проÑто работает" | 265 | "welcome.slogan" : "Общение, которое работает Ð´Ð»Ñ Ð²Ð°Ñ" |
251 | } | 266 | } |
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json index c43e998a4..70e3e7f2d 100644 --- a/src/i18n/locales/sk.json +++ b/src/i18n/locales/sk.json | |||
@@ -1,233 +1,248 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Franz sa nemôže pripojit k online službám", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "global.notConnectedToTheInternet" : "Nie ste pripojený k internetu", | 3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", |
4 | "import.headline" : "Importovať služby z Franz 4", | 4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", |
5 | "global.api.unhealthy" : "Nedá sa pripojiť k online službám Franz", | ||
6 | "global.notConnectedToTheInternet" : "Nie ste pripojenà k internetu.", | ||
7 | "import.headline" : "Importovať vaše služby z Franz 4", | ||
5 | "import.notSupportedHeadline" : "Služby zatiaľ nie sú podporované vo verzii Franz 5", | 8 | "import.notSupportedHeadline" : "Služby zatiaľ nie sú podporované vo verzii Franz 5", |
6 | "import.skip.label" : "Chcem pridaÅ¥ službu ruÄne", | 9 | "import.skip.label" : "Chcem pridaÅ¥ služby ruÄne", |
7 | "import.submit.label" : "Importovať služby", | 10 | "import.submit.label" : "Importovať služby", |
8 | "infobar.buttonChangelog" : "Čo je nové:", | 11 | "infobar.buttonChangelog" : "Čo je nového?", |
9 | "infobar.buttonInstallUpdate" : "Reštartovať a inštalovať aktualizáciu", | 12 | "infobar.buttonInstallUpdate" : "Reštartovať a nainštalovať aktualizáciu", |
10 | "infobar.buttonReloadServices" : "Obnoviť služby", | 13 | "infobar.buttonReloadServices" : "Obnoviť služby", |
11 | "infobar.requiredRequestsFailed" : "Nie je možné naÄÃtaÅ¥ služby a informácie o užÃvateľovi", | 14 | "infobar.requiredRequestsFailed" : "Nie je možné naÄÃtaÅ¥ služby a informácie o použÃvateľovi", |
12 | "infobar.servicesUpdated" : "Vaše služby boli aktualizované.", | 15 | "infobar.servicesUpdated" : "Vaše služby boli aktualizované.", |
13 | "infobar.updateAvailable" : "Nová aktualizácia Franz je k dispozÃcii.", | 16 | "infobar.updateAvailable" : "Je k dispozÃcii nová aktualizácia Franz.", |
14 | "invite.email.label" : "E-mailová adresa", | 17 | "invite.email.label" : "E-mailová adresa", |
15 | "invite.headline.friends" : "Pozvite 3 priateľov alebo kolegov", | 18 | "invite.headline.friends" : "Pozvite troch vašich priateľov alebo kolegov", |
16 | "invite.name.label" : "Meno", | 19 | "invite.name.label" : "Meno", |
17 | "invite.skip.label" : "SpravÃm to neskôr", | 20 | "invite.skip.label" : "Chcem to urobiÅ¥ neskôr", |
18 | "invite.submit.label" : "Poslať pozvánky", | 21 | "invite.submit.label" : "Poslať pozvánky", |
19 | "invite.successInfo" : "Pozvánky boli úspešne odoslané", | 22 | "invite.successInfo" : "Pozvánky boli úspešne odoslané", |
20 | "login.email.label" : "Emailová adresa", | 23 | "login.email.label" : "E-mailová adresa", |
21 | "login.headline" : "Prihlásiť sa", | 24 | "login.headline" : "Prihlásiť sa", |
22 | "login.invalidCredentials" : "E-mail alebo heslo nesúhlasÃ", | 25 | "login.invalidCredentials" : "E-mail alebo heslo nesúhlasia", |
23 | "login.link.password" : "Obnoviť heslo", | 26 | "login.link.password" : "Obnoviť heslo", |
24 | "login.link.signup" : "VytvoriÅ¥ užÃvateľský úÄet zdarma", | 27 | "login.link.signup" : "VytvoriÅ¥ použÃvateľský úÄet zdarma", |
25 | "login.password.label" : "Heslo", | 28 | "login.password.label" : "Heslo", |
26 | "login.serverLogout" : "Relácia vyprÅ¡ala, prihláste sa prosÃm znova.", | 29 | "login.serverLogout" : "VaÅ¡a relácia vyprÅ¡ala, prihláste sa prosÃm znovu.", |
27 | "login.submit.label" : "Prihlásiť sa", | 30 | "login.submit.label" : "Prihlásiť sa", |
28 | "login.tokenExpired" : "Relácia vyprÅ¡ala, prosÃm prihláste sa znova.", | 31 | "login.tokenExpired" : "VaÅ¡a relácia vyprÅ¡ala, prihláste sa prosÃm znovu.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "O aplikácii", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Skryť", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Skryť ostatné", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "UkonÄiÅ¥", |
33 | "menu.app.settings" : "Nastavenia", | 36 | "menu.app.settings" : "Nastavenia", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Odkryť", |
35 | "menu.edit" : "Upraviť", | 38 | "menu.edit" : "Upraviť", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "KopÃrovaÅ¥", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Vystrihnúť", |
38 | "menu.edit.delete" : "Zmazať", | 41 | "menu.edit.delete" : "Zmazať", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Emoji a symboly", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Vložiť", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "VložiÅ¥ s prevzatÃm jestvujúceho Å¡týlu", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Znovu", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Vybrať všetko", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Rozprávanie", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "ZaÄaÅ¥ diktovanie", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "ZaÄaÅ¥ rozprávanie", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Zastaviť rozprávanie", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Späť", |
49 | "menu.file" : "File", | 52 | "menu.file" : "Súbor", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "PomocnÃk", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Záznam zmien", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Zistiť viac", |
53 | "menu.help.privacy" : "Vyhlásenie o ochrane súkromia", | 56 | "menu.help.privacy" : "Vyhlásenie o ochrane súkromia", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Podpora", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Podmienky použitia", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Služby", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Pridať novú službu...", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Zobraziť", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Na celú obrazovku", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "UkonÄiÅ¥ režim na celú obrazovku", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Obnoviť Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Obnoviť službu", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Pôvodná veľkosť", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Prepnúť vývojárske nástroje", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Prepnúť na celú obrazovku", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Prepnúť vývojárske nástroje služby", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "PriblÞiť", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Oddialiť", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Okno", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Zatvoriť", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Minimalizovať", |
72 | "password.email.label" : "Emailová adresa", | 75 | "password.email.label" : "E-mailová adresa", |
73 | "password.headline" : "Vynulovať heslo", | 76 | "password.headline" : "Obnoviť heslo", |
74 | "password.link.login" : "Prihlásenie do vaÅ¡eho úÄtu", | 77 | "password.link.login" : "PrihlásiÅ¥ sa do vášho úÄtu", |
75 | "password.link.signup" : "VytvoriÅ¥ užÃvateľský úÄet zdarma", | 78 | "password.link.signup" : "VytvoriÅ¥ použÃvateľský úÄet zdarma", |
76 | "password.noUser" : "UžÃvateľ s touto emailovou adresou nebol nájdený", | 79 | "password.noUser" : "PoužÃvateľ s touto e-mailovou adresou nebol nájdený", |
77 | "password.submit.label" : "Odoslať", | 80 | "password.submit.label" : "Odoslať", |
78 | "password.successInfo" : "ProsÃm, zkontrolujte svoj e-mail", | 81 | "password.successInfo" : "Skontrolujte prosÃm váš e-mail", |
79 | "pricing.headline" : "Podporte Franz", | 82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", |
83 | "pricing.headline" : "Podporiť Franz", | ||
80 | "pricing.link.skipPayment" : "Nechcem podporiť vývoj aplikácie Franz.", | 84 | "pricing.link.skipPayment" : "Nechcem podporiť vývoj aplikácie Franz.", |
81 | "pricing.submit.label" : "Chcem podporiť vývoj aplikácie Franz", | 85 | "pricing.submit.label" : "Chcem podporiť vývoj aplikácie Franz", |
82 | "pricing.support.label" : "Vyberte váš plán podpory", | 86 | "pricing.support.label" : "Vyberte si váš plán podpory", |
83 | "service.crashHandler.action" : "NaÄÃtaÅ¥ znovu {name}", | 87 | "service.crashHandler.action" : "Znovu naÄÃtaÅ¥ {name}", |
84 | "service.crashHandler.autoReload" : "Pokus o automatické obnovenie {name} za {seconds} sekúnd", | 88 | "service.crashHandler.autoReload" : "Najbližšà pokus o automatické obnovenie {name} o {seconds} sekúnd", |
85 | "service.crashHandler.headline" : "Ale nie!", | 89 | "service.crashHandler.headline" : "Ale nie!", |
86 | "service.crashHandler.text" : "{name} spôsobil chybu.", | 90 | "service.crashHandler.text" : "{name} spôsobil chybu.", |
87 | "service.disabledHandler.action" : "Zapnúť {name}", | 91 | "service.disabledHandler.action" : "Zapnúť {name}", |
88 | "service.disabledHandler.headline" : "{name} je vypnutý", | 92 | "service.disabledHandler.headline" : "{name} je vypnuté", |
89 | "services.getStarted" : "ZaÄÃname", | 93 | "services.getStarted" : "ZaÄÃname", |
90 | "services.welcome" : "VÃta vás Franz", | 94 | "services.welcome" : "VÃtajte v aplikácii Franz", |
91 | "settings.account.account.editButton" : "UpraviÅ¥ úÄet", | 95 | "settings.account.account.editButton" : "UpraviÅ¥ úÄet", |
92 | "settings.account.accountType.basic" : "Základný úÄet", | 96 | "settings.account.accountType.basic" : "Základný úÄet", |
93 | "settings.account.accountType.premium" : "Prémiový úÄet podporovateľa", | 97 | "settings.account.accountType.premium" : "Prémiový úÄet podporovateľa", |
94 | "settings.account.buttonSave" : "Aktualizovať profil", | 98 | "settings.account.buttonSave" : "Aktualizovať profil", |
95 | "settings.account.deleteAccount" : "OdstrániÅ¥ úÄet", | 99 | "settings.account.deleteAccount" : "OdstrániÅ¥ úÄet", |
96 | "settings.account.deleteEmailSent" : "Na váš mail bol odoslaný email s odkazom pre potvrdenie zmazanie úÄtu. Váš úÄet a dáta potom nepôjde obnoviÅ¥!", | 100 | "settings.account.deleteEmailSent" : "Bol vám odoslaný e-mail s odkazom pre potvrdenie odstránenia vášho úÄtu. Váš úÄet a údaje sa nebudú daÅ¥ obnoviÅ¥!", |
97 | "settings.account.deleteInfo" : "Ak už nepotrebujete váš Franz úÄet, môžete tu váš úÄet, a vÅ¡etky dáta v ňom, zmazaÅ¥.", | 101 | "settings.account.deleteInfo" : "Ak už nepotrebujete váš Franz úÄet, tu ho môžete zmazaÅ¥ spolu so vÅ¡etkými prislúchajúcimi údajmi.", |
98 | "settings.account.headline" : "ÚÄet", | 102 | "settings.account.headline" : "ÚÄet", |
99 | "settings.account.headlineAccount" : "Informácie o úÄte", | 103 | "settings.account.headlineAccount" : "Informácie o úÄte", |
100 | "settings.account.headlineDangerZone" : "NebezpeÄná zóna", | 104 | "settings.account.headlineDangerZone" : "NebezpeÄná zóna", |
101 | "settings.account.headlineInvoices" : "Faktúry", | 105 | "settings.account.headlineInvoices" : "Faktúry", |
102 | "settings.account.headlinePassword" : "Zmeniť heslo", | 106 | "settings.account.headlinePassword" : "Zmeniť heslo", |
103 | "settings.account.headlineProfile" : "Aktualizovať profil", | 107 | "settings.account.headlineProfile" : "Aktualizovať profil", |
104 | "settings.account.headlineSubscription" : "Vaše predplatné", | 108 | "settings.account.headlineSubscription" : "Vaše odoberanie", |
105 | "settings.account.headlineUpgrade" : "Inovujte svoj úÄet a podporte Franz", | 109 | "settings.account.headlineUpgrade" : "Povýšte svoj úÄet a podporte Franz", |
106 | "settings.account.invoiceDownload" : "Stiahnuť", | 110 | "settings.account.invoiceDownload" : "Prevziať", |
107 | "settings.account.manageSubscription.label" : "Spravovať vaše predplatné", | 111 | "settings.account.manageSubscription.label" : "Spravovať vaše odoberanie", |
108 | "settings.account.successInfo" : "Vaše zmeny boli uložené", | 112 | "settings.account.successInfo" : "Vaše zmeny boli uložené", |
109 | "settings.account.tryReloadUserInfoRequest" : "Skúsiť znova", | 113 | "settings.account.tryReloadUserInfoRequest" : "Skúsiť znova", |
110 | "settings.account.userInfoRequestFailed" : "Nebolo možné zÃskaÅ¥ informácie o užÃvateľovi", | 114 | "settings.account.userInfoRequestFailed" : "Nebolo možné naÄÃtaÅ¥ informácie o použÃvateľovi", |
111 | "settings.app.buttonClearAllCache" : "VyÄistiÅ¥ vyrovnávaciu pamäť", | 115 | "settings.app.buttonClearAllCache" : "VyÄistiÅ¥ vyrovnávaciu pamäť", |
112 | "settings.app.buttonInstallUpdate" : "ReÅ¡tart a inÅ¡talácia aktualizáciÃ", | 116 | "settings.app.buttonInstallUpdate" : "ReÅ¡tartovaÅ¥ a nainÅ¡talovaÅ¥ aktualizáciu", |
113 | "settings.app.buttonSearchForUpdate" : "Skontrolovať aktualizácie", | 117 | "settings.app.buttonSearchForUpdate" : "Skontrolovať aktualizácie", |
114 | "settings.app.cacheInfo" : "Franz momentálne použÃva {size} miesta na disku.", | 118 | "settings.app.cacheInfo" : "Vyrovnávacia pamäť Franz momentálne použÃva {size} miesta na disku.", |
115 | "settings.app.currentVersion" : "Aktuálna verzia:", | 119 | "settings.app.currentVersion" : "SúÄasná verzia:", |
116 | "settings.app.form.autoLaunchInBackground" : "OtvoriÅ¥ na pozadÃ", | 120 | "settings.app.form.autoLaunchInBackground" : "OtvoriÅ¥ na pozadÃ", |
117 | "settings.app.form.autoLaunchOnStart" : "Spustiť Franz pri štarte", | 121 | "settings.app.form.autoLaunchOnStart" : "Spustiť Franz pri štarte", |
118 | "settings.app.form.beta" : "Vrátane beta verziÃ", | 122 | "settings.app.form.beta" : "Vrátane beta verziÃ", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu bare", | 124 | "settings.app.form.enableGPUAcceleration" : "Zapnúť GPU zrýchlenie", |
121 | "settings.app.form.enableSpellchecking" : "Povoliť zvýraznenie preklepov", | 125 | "settings.app.form.enableMenuBar" : "Zobraziť Franz v ponuke menu", |
126 | "settings.app.form.enableSpellchecking" : "Zapnúť kontrolu pravopisu", | ||
122 | "settings.app.form.enableSystemTray" : "Zobrazovať Franz v systémovej lište", | 127 | "settings.app.form.enableSystemTray" : "Zobrazovať Franz v systémovej lište", |
123 | "settings.app.form.hideDockIcon" : "Schovaj ikonu Franz v doku", | 128 | "settings.app.form.hideDockIcon" : "Skryť ikonu Franz v doku", |
124 | "settings.app.form.language" : "Jazyk", | 129 | "settings.app.form.language" : "Jazyk", |
125 | "settings.app.form.minimizeToSystemTray" : "Minimalizovať Franz do systémovej lišty", | 130 | "settings.app.form.minimizeToSystemTray" : "Minimalizovať Franz do systémovej lišty", |
126 | "settings.app.form.runInBackground" : "PonechaÅ¥ Franz spustený v pozadà pri zatvorenà okna", | 131 | "settings.app.form.runInBackground" : "Po zatvorenà okna ponechaÅ¥ Franz spustený na pozadÃ", |
127 | "settings.app.form.showDisabledServices" : "Zobraziť záložky vypnutých služieb", | 132 | "settings.app.form.showDisabledServices" : "Zobraziť záložky vypnutých služieb", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "ZobraziÅ¥ odznak pre nepreÄÃtané správy keÄ sú upozornenia vypnutá", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "ZobraziÅ¥ symbol pre nepreÄÃtané správy, keÄ sú vypnuté upozornenia", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Nastavenia", | 135 | "settings.app.headline" : "Nastavenia", |
130 | "settings.app.headlineAdvanced" : "RozÅ¡Ãrené", | 136 | "settings.app.headlineAdvanced" : "PokroÄilé", |
131 | "settings.app.headlineAppearance" : "Vzhľad", | 137 | "settings.app.headlineAppearance" : "Vzhľad", |
132 | "settings.app.headlineGeneral" : "Všeobecné", | 138 | "settings.app.headlineGeneral" : "Všeobecné", |
133 | "settings.app.headlineLanguage" : "Jazyk", | 139 | "settings.app.headlineLanguage" : "Jazyk", |
134 | "settings.app.headlineUpdates" : "Aktualizácie", | 140 | "settings.app.headlineUpdates" : "Aktualizácie", |
135 | "settings.app.restartRequired" : "Zmeny vyžadujú restart", | 141 | "settings.app.restartRequired" : "Zmeny vyžadujú reštart", |
136 | "settings.app.subheadlineCache" : "Vyrovnávacia pamäť", | 142 | "settings.app.subheadlineCache" : "Vyrovnávacia pamäť", |
137 | "settings.app.translationHelp" : "Pomôžte nám preložiť Franz do svojho jazyka.", | 143 | "settings.app.translationHelp" : "Pomôžte nám preložiť Franz do svojho jazyka.", |
138 | "settings.app.updateStatusAvailable" : "Dostupná aktualizácia, sťahujem...", | 144 | "settings.app.updateStatusAvailable" : "Je dostupná aktualizácia, sťahuje sa...", |
139 | "settings.app.updateStatusSearching" : "Vyhľadávam aktualizácie", | 145 | "settings.app.updateStatusSearching" : "Vyhľadáva aktualizácie", |
140 | "settings.app.updateStatusUpToDate" : "PoužÃvate najnovÅ¡iu verziu Franz", | 146 | "settings.app.updateStatusUpToDate" : "PoužÃvate najnovÅ¡iu verziu Franz", |
141 | "settings.invite.headline" : "Pozvi priateľov", | 147 | "settings.invite.headline" : "Pozvať priateľov", |
142 | "settings.navigation.account" : "ÚÄet", | 148 | "settings.navigation.account" : "ÚÄet", |
143 | "settings.navigation.availableServices" : "Dostupné služby", | 149 | "settings.navigation.availableServices" : "Dostupné služby", |
144 | "settings.navigation.inviteFriends" : "Pozvi priateľov", | 150 | "settings.navigation.inviteFriends" : "Pozvať priateľov", |
145 | "settings.navigation.logout" : "Odhlásiť sa", | 151 | "settings.navigation.logout" : "Odhlásiť sa", |
146 | "settings.navigation.settings" : "Nastavenia", | 152 | "settings.navigation.settings" : "Nastavenia", |
147 | "settings.navigation.yourServices" : "Vaše služby", | 153 | "settings.navigation.yourServices" : "Vaše služby", |
148 | "settings.recipes.all" : "Všetky služby", | 154 | "settings.recipes.all" : "Všetky služby", |
149 | "settings.recipes.dev" : "Vývoj", | 155 | "settings.recipes.dev" : "Vývoj", |
150 | "settings.recipes.headline" : "Dostupné služby", | 156 | "settings.recipes.headline" : "Dostupné služby", |
151 | "settings.recipes.missingService" : "Chýbajúce služba?", | 157 | "settings.recipes.missingService" : "Chýba vám služba?", |
152 | "settings.recipes.mostPopular" : "Najpopulárnejšie", | 158 | "settings.recipes.mostPopular" : "Najpopulárnejšie", |
153 | "settings.recipes.nothingFound" : "Je nám ľúto, ale žiadna služba nezodpovedala vášmu hľadanému výrazu.", | 159 | "settings.recipes.nothingFound" : "Ľutujeme, ale žiadna služba nezodpovedá vami hľadanému výrazu.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Služba úspešne pridaná", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Služba bola úspešne pridaná", |
155 | "settings.searchService" : "Vyhľadať službu", | 161 | "settings.searchService" : "Vyhľadať službu", |
156 | "settings.service.error.goBack" : "Späť na služby", | 162 | "settings.service.error.goBack" : "Späť na služby", |
157 | "settings.service.error.headline" : "Chyba", | 163 | "settings.service.error.headline" : "Chyba", |
158 | "settings.service.error.message" : "Nepodarilo sa naÄÃtaÅ¥ službu.", | 164 | "settings.service.error.message" : "Nepodarilo sa naÄÃtaÅ¥ službu.", |
159 | "settings.service.form.addServiceHeadline" : "Pridať {názov}", | 165 | "settings.service.form.addServiceHeadline" : "Pridať {name}", |
160 | "settings.service.form.availableServices" : "Dostupné služby", | 166 | "settings.service.form.availableServices" : "Dostupné služby", |
161 | "settings.service.form.customUrl" : "Vlastný server", | 167 | "settings.service.form.customUrl" : "Vlastný server", |
162 | "settings.service.form.customUrlPremiumInfo" : "Ak chcete pridaÅ¥ vlastné hostované služby, potrebujete úÄet Franz Premium Supporter.", | 168 | "settings.service.form.customUrlPremiumInfo" : "Ak chcete pridaÅ¥ vlastné hostované služby, potrebujete úÄet Franz Premium Supporter.", |
163 | "settings.service.form.customUrlUpgradeAccount" : "Inovujte váš úÄet", | 169 | "settings.service.form.customUrlUpgradeAccount" : "Povýšte váš úÄet", |
164 | "settings.service.form.customUrlValidationError" : "Nebolo možné overiť vlastný server: {name}.", | 170 | "settings.service.form.customUrlValidationError" : "Nebolo možné overiť vlastný server: {name}.", |
165 | "settings.service.form.deleteButton" : "Odstrániť službu", | 171 | "settings.service.form.deleteButton" : "Odstrániť službu", |
166 | "settings.service.form.editServiceHeadline" : "Upraviť {meno}", | 172 | "settings.service.form.editServiceHeadline" : "Upraviť {name}", |
167 | "settings.service.form.enableAudio" : "Zapnúť zvuk", | 173 | "settings.service.form.enableAudio" : "Zapnúť zvuk", |
168 | "settings.service.form.enableBadge" : "UkázaÅ¥ odznaky nepreÄÃtaných správ", | 174 | "settings.service.form.enableBadge" : "ZobraziÅ¥ symboly nepreÄÃtaných správ", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Povoliť oznámenia", | 176 | "settings.service.form.enableNotification" : "Povoliť oznámenia", |
170 | "settings.service.form.enableService" : "Povoliť službu", | 177 | "settings.service.form.enableService" : "Povoliť službu", |
171 | "settings.service.form.headlineBadges" : "Odznaky nepreÄÃtaných správ", | 178 | "settings.service.form.headlineBadges" : "Symboly nepreÄÃtaných správ", |
172 | "settings.service.form.headlineGeneral" : "Všeobecné", | 179 | "settings.service.form.headlineGeneral" : "Všeobecné", |
173 | "settings.service.form.headlineNotifications" : "Upozornenia", | 180 | "settings.service.form.headlineNotifications" : "Oznámenia", |
174 | "settings.service.form.icon" : "Vlastná ikona", | 181 | "settings.service.form.icon" : "Vlastná ikona", |
175 | "settings.service.form.iconDelete" : "Zmazať", | 182 | "settings.service.form.iconDelete" : "Zmazať", |
176 | "settings.service.form.iconUpload" : "Presuňte váš obrázok, alebo kliknite sem", | 183 | "settings.service.form.iconUpload" : "Presuňte váš obrázok, alebo kliknite sem", |
177 | "settings.service.form.indirectMessageInfo" : "Budete dostávať upozornenia na všetky nové správy v kanáli, nielen na @meno, @kanál, @kde, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Budete dostávať upozornenia na všetky nové správy v kanáli, nielen na @username, @channel, @here, ......", |
178 | "settings.service.form.indirectMessages" : "Zobraziť znak správy pre všetky nové správy", | 185 | "settings.service.form.indirectMessages" : "Zobraziť symbol správy pre všetky nové správy", |
179 | "settings.service.form.isMutedInfo" : "Ak je vypnuté, vÅ¡etky zvuky notifikácià a iného audia budú stÃÅ¡ené", | 186 | "settings.service.form.isMutedInfo" : "Ak je vypnuté, vÅ¡etky zvuky oznámenà a iné prehrávania budú stÃÅ¡ené", |
180 | "settings.service.form.name" : "Meno", | 187 | "settings.service.form.name" : "Meno", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Uložiť službu", | 194 | "settings.service.form.saveButton" : "Uložiť službu", |
182 | "settings.service.form.tabHosted" : "Hostovaný", | 195 | "settings.service.form.tabHosted" : "Hostované", |
183 | "settings.service.form.tabOnPremise" : "Vlastné hosÅ¥ovanie âï¸", | 196 | "settings.service.form.tabOnPremise" : "Vlastné hostovanie âï¸", |
184 | "settings.service.form.team" : "TÃm", | 197 | "settings.service.form.team" : "TÃm", |
185 | "settings.service.form.useHostedService" : "Použite hostovanú {name} službu.", | 198 | "settings.service.form.useHostedService" : "Použiť hostovanú {name} službu.", |
186 | "settings.service.form.yourServices" : "Vaše služby", | 199 | "settings.service.form.yourServices" : "Vaše služby", |
187 | "settings.services.deletedInfo" : "Služba bola odstránená", | 200 | "settings.services.deletedInfo" : "Služba bola odstránená", |
188 | "settings.services.discoverServices" : "Preskúmajte služby", | 201 | "settings.services.discoverServices" : "Preskúmať služby", |
189 | "settings.services.headline" : "Vaše služby", | 202 | "settings.services.headline" : "Vaše služby", |
190 | "settings.services.noServicesAdded" : "Nepridali ste ešte žiadne služby", | 203 | "settings.services.noServicesAdded" : "Doposiaľ ste nepridali žiadne služby.", |
191 | "settings.services.tooltip.isDisabled" : "Služba je vypnutá", | 204 | "settings.services.tooltip.isDisabled" : "Služba je vypnutá", |
192 | "settings.services.tooltip.isMuted" : "VÅ¡etky zvuky sú stÃÅ¡ené", | 205 | "settings.services.tooltip.isMuted" : "VÅ¡etky zvuky sú stÃÅ¡ené", |
193 | "settings.services.tooltip.notificationsDisabled" : "Oznámenia sú vypnuté", | 206 | "settings.services.tooltip.notificationsDisabled" : "Oznámenia sú vypnuté", |
194 | "settings.services.updatedInfo" : "Vaše zmeny boli uložené", | 207 | "settings.services.updatedInfo" : "Vaše zmeny boli uložené", |
195 | "settings.user.form.accountType.company" : "SpoloÄnosÅ¥", | 208 | "settings.user.form.accountType.company" : "SpoloÄnosÅ¥", |
196 | "settings.user.form.accountType.individual" : "Jednotlivec", | 209 | "settings.user.form.accountType.individual" : "Osoba", |
197 | "settings.user.form.accountType.label" : "Typ úÄtu", | 210 | "settings.user.form.accountType.label" : "Typ úÄtu", |
198 | "settings.user.form.accountType.non-profit" : "Nezisková organizácia", | 211 | "settings.user.form.accountType.non-profit" : "Nezisková organizácia", |
199 | "settings.user.form.currentPassword" : "SúÄasné heslo", | 212 | "settings.user.form.currentPassword" : "SúÄasné heslo", |
200 | "settings.user.form.email" : "Email", | 213 | "settings.user.form.email" : "E-mail", |
201 | "settings.user.form.firstname" : "Krstné meno", | 214 | "settings.user.form.firstname" : "Krstné meno", |
202 | "settings.user.form.lastname" : "Priezvisko", | 215 | "settings.user.form.lastname" : "Priezvisko", |
203 | "settings.user.form.newPassword" : "Nové heslo", | 216 | "settings.user.form.newPassword" : "Nové heslo", |
204 | "sidebar.addNewService" : "Pridať novú službu", | 217 | "sidebar.addNewService" : "Pridať novú službu", |
205 | "sidebar.muteApp" : "Vypnúť upozornenia a zvuky", | 218 | "sidebar.muteApp" : "Vypnúť upozornenia a zvuky", |
206 | "sidebar.settings" : "Nastavenia", | 219 | "sidebar.settings" : "Nastavenia", |
207 | "sidebar.unmuteApp" : "Zapnúť upozornenia a zvuky", | 220 | "sidebar.unmuteApp" : "Povoliť oznámenia a zvuky", |
208 | "signup.company.label" : "SpoloÄnosÅ¥", | 221 | "signup.company.label" : "SpoloÄnosÅ¥", |
209 | "signup.email.label" : "Emailová adresa", | 222 | "signup.email.label" : "E-mailová adresa", |
210 | "signup.emailDuplicate" : "Kontakt s touto emailovou adresou už existuje", | 223 | "signup.emailDuplicate" : "PoužÃvateľ s touto e-mailovou adresou už jestvuje", |
211 | "signup.firstname.label" : "Krstné meno", | 224 | "signup.firstname.label" : "Krstné meno", |
212 | "signup.headline" : "Prihlásiť sa", | 225 | "signup.headline" : "Prihlásiť sa", |
213 | "signup.lastname.label" : "Priezvisko", | 226 | "signup.lastname.label" : "Priezvisko", |
214 | "signup.legal.info" : "VytvorenÃm úÄtu Franz akceptujete", | 227 | "signup.legal.info" : "VytvorenÃm úÄtu Franz súhlasÃte s", |
215 | "signup.legal.privacy" : "Vyhlásenie o ochrane súkromia", | 228 | "signup.legal.privacy" : "Vyhlásenie o ochrane súkromia", |
216 | "signup.legal.terms" : "Podmienky služby", | 229 | "signup.legal.terms" : "Podmienky služby", |
217 | "signup.link.login" : "Už máte úÄet, prihlásiÅ¥ sa?", | 230 | "signup.link.login" : "Už máte úÄet, chcete sa prihlásiÅ¥?", |
218 | "signup.password.label" : "Heslo", | 231 | "signup.password.label" : "Heslo", |
219 | "signup.submit.label" : "VytvoriÅ¥ úÄet", | 232 | "signup.submit.label" : "VytvoriÅ¥ úÄet", |
220 | "subscription.euTaxInfo" : "Pro obyvatelé EÚ: môžu byť aplikované miestne dane", | 233 | "subscription.euTaxInfo" : "Pre obyvateľov EÚ: môže byť aplikovaná miestna daň", |
221 | "subscription.features.ads" : "Žiadne reklamy, nikdy!", | 234 | "subscription.features.ads" : "Žiadne reklamy, nikdy!", |
222 | "subscription.features.comingSoon" : "už Äoskoro", | 235 | "subscription.features.comingSoon" : "už Äoskoro", |
223 | "subscription.features.customServices" : "Privátne ​​služby pre vás a váš tÃm", | ||
224 | "subscription.features.encryptedSync" : "Šifrovaná synchronizácia relácie", | 236 | "subscription.features.encryptedSync" : "Šifrovaná synchronizácia relácie", |
225 | "subscription.features.onpremise" : "Pridať vlastné\/hostované služby, ako je HipChat", | 237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", |
226 | "subscription.features.vpn" : "Proxy & VPN podpora", | 238 | "subscription.features.onpremise" : "Pridať lokálne hostované služby, ako napr. HipChat", |
239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", | ||
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Platený úÄet Premium Supporter Franz zahŕňa", | 242 | "subscription.includedFeatures" : "Platený úÄet Premium Supporter Franz zahŕňa", |
228 | "subscription.paymentSessionError" : "Nepodarilo sa inicializovať platbu od", | 243 | "subscription.paymentSessionError" : "Nepodarilo sa inicializovať platbu od", |
229 | "subscription.submit.label" : "Chcem podporiť vývoj programu Franz", | 244 | "subscription.submit.label" : "Chcem podporiť vývoj aplikácie Franz", |
230 | "subscription.type.free" : "Zdarma", | 245 | "subscription.type.free" : "zdarma", |
231 | "subscription.type.month" : "mesiac", | 246 | "subscription.type.month" : "mesiac", |
232 | "subscription.type.year" : "rok", | 247 | "subscription.type.year" : "rok", |
233 | "subscriptionPopup.buttonCancel" : "Zrušiť", | 248 | "subscriptionPopup.buttonCancel" : "Zrušiť", |
@@ -241,11 +256,11 @@ | |||
241 | "tabs.item.enableNotification" : "Povoliť oznámenia", | 256 | "tabs.item.enableNotification" : "Povoliť oznámenia", |
242 | "tabs.item.enableService" : "Povoliť službu", | 257 | "tabs.item.enableService" : "Povoliť službu", |
243 | "tabs.item.reload" : "Obnoviť", | 258 | "tabs.item.reload" : "Obnoviť", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} je neplatný", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field} by malo byť dlhé aspoň {length} znakov", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} je povinné", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} nie je platné URL", |
248 | "welcome.loginButton" : "Prihláste sa k vášmu úÄtu", | 263 | "welcome.loginButton" : "PrihlásiÅ¥ sa do vášho úÄtu", |
249 | "welcome.signupButton" : "VytvoriÅ¥ užÃvateľský úÄet zdarma", | 264 | "welcome.signupButton" : "VytvoriÅ¥ úÄet zdarma", |
250 | "welcome.slogan" : "Správy, ktoré pracujú pre vás" | 265 | "welcome.slogan" : "Správy, ktoré pracujú pre vás" |
251 | } | 266 | } |
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json index 1f31bc834..dd4c74277 100644 --- a/src/i18n/locales/sr.json +++ b/src/i18n/locales/sr.json | |||
@@ -1,9 +1,12 @@ | |||
1 | { | 1 | { |
2 | "global.api.unhealthy" : "Nije moguće pristupiti Francovim on-line servisima. ", | 2 | "feature.delayApp.action" : "Get a Franz Supporter License", |
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
5 | "global.api.unhealthy" : "Nije moguće pristupiti Franz-ovim on-line servisima. ", | ||
3 | "global.notConnectedToTheInternet" : "Niste povezani sa serverom.", | 6 | "global.notConnectedToTheInternet" : "Niste povezani sa serverom.", |
4 | "import.headline" : "Uvezite svoje Franc4 servise", | 7 | "import.headline" : "Uvezite svoje Franz 4 servise", |
5 | "import.notSupportedHeadline" : "Servis trenutno nije podržan u Franc5", | 8 | "import.notSupportedHeadline" : "Servis trenutno nije podržan u Franz 5", |
6 | "import.skip.label" : "I want to add services manually", | 9 | "import.skip.label" : "Желим да додам уÑлуге ручно", |
7 | "import.submit.label" : "Uvezi servise", | 10 | "import.submit.label" : "Uvezi servise", |
8 | "infobar.buttonChangelog" : "Å ta je novo? ", | 11 | "infobar.buttonChangelog" : "Å ta je novo? ", |
9 | "infobar.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje ", | 12 | "infobar.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje ", |
@@ -16,7 +19,7 @@ | |||
16 | "invite.name.label" : "Ime", | 19 | "invite.name.label" : "Ime", |
17 | "invite.skip.label" : "Želim da ovo uradim kasnije", | 20 | "invite.skip.label" : "Želim da ovo uradim kasnije", |
18 | "invite.submit.label" : "Pošalji pozivnice", | 21 | "invite.submit.label" : "Pošalji pozivnice", |
19 | "invite.successInfo" : "Invitations sent successfully", | 22 | "invite.successInfo" : "Poziv je uspešno poslat.", |
20 | "login.email.label" : "Vaša e-adresa:", | 23 | "login.email.label" : "Vaša e-adresa:", |
21 | "login.headline" : "Prijavite se", | 24 | "login.headline" : "Prijavite se", |
22 | "login.invalidCredentials" : "E-mail ili lozinka nisu toÄni", | 25 | "login.invalidCredentials" : "E-mail ili lozinka nisu toÄni", |
@@ -26,49 +29,49 @@ | |||
26 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", | 29 | "login.serverLogout" : "Vaša sesija je istekla, prijavite se ponovo.", |
27 | "login.submit.label" : "Prijavite se", | 30 | "login.submit.label" : "Prijavite se", |
28 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", | 31 | "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "O Francu", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Sakrij", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Sakrij ostale", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Izađi", |
33 | "menu.app.settings" : "Postavke", | 36 | "menu.app.settings" : "Postavke", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Otkrij", |
35 | "menu.edit" : "Uredi", | 38 | "menu.edit" : "Uredi", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "Kopiraj", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Iseci", |
38 | "menu.edit.delete" : "Delete", | 41 | "menu.edit.delete" : "Obriši", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Smajliji i simboli", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Nalepi", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Ðалепи не мењајући Ñтил", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Понови", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Изабери Ñве", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Говор", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Започни диктирање", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Започни изговор", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "ЗауÑтави изговор", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Поништи", |
49 | "menu.file" : "File", | 52 | "menu.file" : "Датотека", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Помоћ", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Дневник измена", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Сазнајте више", |
53 | "menu.help.privacy" : "Izjava o privatnosti", | 56 | "menu.help.privacy" : "Izjava o privatnosti", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Подршка", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "УÑлови коришћења уÑлуге", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Usluge", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Додај нову уÑлугу", |
58 | "menu.view" : "View", | 61 | "menu.view" : "Преглед", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Отвори у целом екрану", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "ÐапуÑти цео екран", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Поново учитај Франз", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Поново учирај уÑлугу", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Стварна величина", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Промени алатке за развој", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "Преко целог екрана", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "Увећај приказ", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Умањи приказ", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "У прозору", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Затвори", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Умањи", |
72 | "password.email.label" : "Vaša e-adresa", | 75 | "password.email.label" : "Vaša e-adresa", |
73 | "password.headline" : "Stvorite novu zaporku", | 76 | "password.headline" : "Stvorite novu zaporku", |
74 | "password.link.login" : "Prijavite se na VaÅ¡ raÄun", | 77 | "password.link.login" : "Prijavite se na VaÅ¡ raÄun", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Ne postoji ni jedan korisnik s tom e-mail adresom", | 79 | "password.noUser" : "Ne postoji ni jedan korisnik s tom e-mail adresom", |
77 | "password.submit.label" : "Pošalji", | 80 | "password.submit.label" : "Pošalji", |
78 | "password.successInfo" : "Molimo Vas da provjerite vašu e-mail adresu", | 81 | "password.successInfo" : "Molimo Vas da provjerite vašu e-mail adresu", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Podržite Franz", | 83 | "pricing.headline" : "Podržite Franz", |
80 | "pricing.link.skipPayment" : "Ne želim da podržim razvoj Franz-a.", | 84 | "pricing.link.skipPayment" : "Ne želim da podržim razvoj Franz-a.", |
81 | "pricing.submit.label" : "Želim da podržim razvoj Franz-a.", | 85 | "pricing.submit.label" : "Želim da podržim razvoj Franz-a.", |
@@ -92,12 +96,12 @@ | |||
92 | "settings.account.accountType.basic" : "Osnovni raÄun", | 96 | "settings.account.accountType.basic" : "Osnovni raÄun", |
93 | "settings.account.accountType.premium" : "Premium raÄun", | 97 | "settings.account.accountType.premium" : "Premium raÄun", |
94 | "settings.account.buttonSave" : "Ažuriraj profil", | 98 | "settings.account.buttonSave" : "Ažuriraj profil", |
95 | "settings.account.deleteAccount" : "Delete account", | 99 | "settings.account.deleteAccount" : "Обриши налог", |
96 | "settings.account.deleteEmailSent" : "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 100 | "settings.account.deleteEmailSent" : "Добили Ñте имејл Ñа линком путем којег потврђујете бриÑање Ñвог налога. Ваш налог и подаци не могу бити повраћени!", |
97 | "settings.account.deleteInfo" : "If you don't need your Franz account any longer, you can delete your account and all related data here.", | 101 | "settings.account.deleteInfo" : "Уколико Вам више није потребан Франз налог, овде можете обриÑати Ñвој налог и Ñве податке везане за иÑти.", |
98 | "settings.account.headline" : "KorisniÄki nalog", | 102 | "settings.account.headline" : "KorisniÄki nalog", |
99 | "settings.account.headlineAccount" : "Podaci o nalogu", | 103 | "settings.account.headlineAccount" : "Podaci o nalogu", |
100 | "settings.account.headlineDangerZone" : "Danger Zone", | 104 | "settings.account.headlineDangerZone" : "Зона опреза", |
101 | "settings.account.headlineInvoices" : "Fakture", | 105 | "settings.account.headlineInvoices" : "Fakture", |
102 | "settings.account.headlinePassword" : "Promijenite lozinku", | 106 | "settings.account.headlinePassword" : "Promijenite lozinku", |
103 | "settings.account.headlineProfile" : "Ažurirajte profil", | 107 | "settings.account.headlineProfile" : "Ažurirajte profil", |
@@ -108,40 +112,42 @@ | |||
108 | "settings.account.successInfo" : "Vaše promjene su spremljene", | 112 | "settings.account.successInfo" : "Vaše promjene su spremljene", |
109 | "settings.account.tryReloadUserInfoRequest" : "Pokušajte ponovno", | 113 | "settings.account.tryReloadUserInfoRequest" : "Pokušajte ponovno", |
110 | "settings.account.userInfoRequestFailed" : "Nije moguće uÄitati informacije o korisniku", | 114 | "settings.account.userInfoRequestFailed" : "Nije moguće uÄitati informacije o korisniku", |
111 | "settings.app.buttonClearAllCache" : "Clear cache", | 115 | "settings.app.buttonClearAllCache" : "ОчиÑти кеш", |
112 | "settings.app.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje", | 116 | "settings.app.buttonInstallUpdate" : "Ponovo pokreni i instaliraj ažuriranje", |
113 | "settings.app.buttonSearchForUpdate" : "Potraži ažuriranja", | 117 | "settings.app.buttonSearchForUpdate" : "Potraži ažuriranja", |
114 | "settings.app.cacheInfo" : "Franz cache is currently using {size} of disk space.", | 118 | "settings.app.cacheInfo" : "Франз кеш тренутно кориÑти {величина} проÑтора на диÑку.", |
115 | "settings.app.currentVersion" : "Trenutna verzija:", | 119 | "settings.app.currentVersion" : "Trenutna verzija:", |
116 | "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini", | 120 | "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini", |
117 | "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom", | 121 | "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom", |
118 | "settings.app.form.beta" : "Obuhvati i beta verzije", | 122 | "settings.app.form.beta" : "Obuhvati i beta verzije", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 124 | "settings.app.form.enableGPUAcceleration" : "Омогући убрзање графичке јединице", |
125 | "settings.app.form.enableMenuBar" : "Покажи Франз у менију", | ||
121 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", | 126 | "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", |
122 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", | 127 | "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "Сакриј Франз иконицу у доку", |
124 | "settings.app.form.language" : "Jezik", | 129 | "settings.app.form.language" : "Jezik", |
125 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", | 130 | "settings.app.form.minimizeToSystemTray" : "Smanji Franca u sustavsku traku", |
126 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", | 131 | "settings.app.form.runInBackground" : "Neka se Franc održava u pozadini i ako je prozor zatvoren", |
127 | "settings.app.form.showDisabledServices" : "Prikaži ploÄe s onemogućenim servisima", | 132 | "settings.app.form.showDisabledServices" : "Prikaži ploÄe s onemogućenim servisima", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Show unread message badge when notifications are disabled", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Покажи беџ за непрочитане поруке када Ñу обавештења онемогућена", |
129 | "settings.app.headline" : "Postavke", | 134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", |
135 | "settings.app.headline" : "Подешавања", | ||
130 | "settings.app.headlineAdvanced" : "Napredne alatke", | 136 | "settings.app.headlineAdvanced" : "Napredne alatke", |
131 | "settings.app.headlineAppearance" : "Izgled", | 137 | "settings.app.headlineAppearance" : "Izgled", |
132 | "settings.app.headlineGeneral" : "Općenito", | 138 | "settings.app.headlineGeneral" : "Općenito", |
133 | "settings.app.headlineLanguage" : "Jezik", | 139 | "settings.app.headlineLanguage" : "Jezik", |
134 | "settings.app.headlineUpdates" : "Nadogradnje", | 140 | "settings.app.headlineUpdates" : "Nadogradnje", |
135 | "settings.app.restartRequired" : "Promjene postavki zahtijevaju ponovni pogon", | 141 | "settings.app.restartRequired" : "Promjene postavki zahtijevaju ponovni pogon", |
136 | "settings.app.subheadlineCache" : "Cache", | 142 | "settings.app.subheadlineCache" : "Кеш", |
137 | "settings.app.translationHelp" : "Pomozite nam prevesti aplikaciju na Vaš jezik. ", | 143 | "settings.app.translationHelp" : "Pomozite nam prevesti aplikaciju na Vaš jezik. ", |
138 | "settings.app.updateStatusAvailable" : "Nadogradnja dostupna, preuzimanje...", | 144 | "settings.app.updateStatusAvailable" : "Nadogradnja dostupna, preuzimanje...", |
139 | "settings.app.updateStatusSearching" : "Traže se ažuriranja", | 145 | "settings.app.updateStatusSearching" : "Traže se ažuriranja", |
140 | "settings.app.updateStatusUpToDate" : "Koristite najnoviju verziju Franca.", | 146 | "settings.app.updateStatusUpToDate" : "Koristite najnoviju verziju Franca.", |
141 | "settings.invite.headline" : "Invite Friends", | 147 | "settings.invite.headline" : "Позови пријатеље", |
142 | "settings.navigation.account" : "RaÄun", | 148 | "settings.navigation.account" : "RaÄun", |
143 | "settings.navigation.availableServices" : "Dostupne usluge", | 149 | "settings.navigation.availableServices" : "Dostupne usluge", |
144 | "settings.navigation.inviteFriends" : "Invite Friends", | 150 | "settings.navigation.inviteFriends" : "Позови пријатеље", |
145 | "settings.navigation.logout" : "Odjava", | 151 | "settings.navigation.logout" : "Odjava", |
146 | "settings.navigation.settings" : "Postavke", | 152 | "settings.navigation.settings" : "Postavke", |
147 | "settings.navigation.yourServices" : "Vaše usluge", | 153 | "settings.navigation.yourServices" : "Vaše usluge", |
@@ -152,7 +158,7 @@ | |||
152 | "settings.recipes.mostPopular" : "Najpopularniji", | 158 | "settings.recipes.mostPopular" : "Najpopularniji", |
153 | "settings.recipes.nothingFound" : "Žao nam je, ali ne postoje usluge koje se poklapaju s onima koje tražite", | 159 | "settings.recipes.nothingFound" : "Žao nam je, ali ne postoje usluge koje se poklapaju s onima koje tražite", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Usluga uspješno dodana", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Usluga uspješno dodana", |
155 | "settings.searchService" : "Search service", | 161 | "settings.searchService" : "Претражи уÑлуге", |
156 | "settings.service.error.goBack" : "Nazad do servisa", | 162 | "settings.service.error.goBack" : "Nazad do servisa", |
157 | "settings.service.error.headline" : "Greška ", | 163 | "settings.service.error.headline" : "Greška ", |
158 | "settings.service.error.message" : "Nemoguće uÄitati sadržaj usluge", | 164 | "settings.service.error.message" : "Nemoguće uÄitati sadržaj usluge", |
@@ -165,24 +171,31 @@ | |||
165 | "settings.service.form.deleteButton" : "Izbriši uslugu", | 171 | "settings.service.form.deleteButton" : "Izbriši uslugu", |
166 | "settings.service.form.editServiceHeadline" : "Uredite {ime}", | 172 | "settings.service.form.editServiceHeadline" : "Uredite {ime}", |
167 | "settings.service.form.enableAudio" : "Omogućite zvuk", | 173 | "settings.service.form.enableAudio" : "Omogućite zvuk", |
168 | "settings.service.form.enableBadge" : "Show unread message badges", | 174 | "settings.service.form.enableBadge" : "Покажи беџеве за непрочитане поруке", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Omogućite obavijesti", | 176 | "settings.service.form.enableNotification" : "Omogućite obavijesti", |
170 | "settings.service.form.enableService" : "Omogućite usluge", | 177 | "settings.service.form.enableService" : "Omogućite usluge", |
171 | "settings.service.form.headlineBadges" : "Unread message badges", | 178 | "settings.service.form.headlineBadges" : "Беџеви за непрочитане поруке", |
172 | "settings.service.form.headlineGeneral" : "Općenito", | 179 | "settings.service.form.headlineGeneral" : "Опште", |
173 | "settings.service.form.headlineNotifications" : "Notifications", | 180 | "settings.service.form.headlineNotifications" : "Обавештења", |
174 | "settings.service.form.icon" : "Custom icon", | 181 | "settings.service.form.icon" : "ПоÑебна иконица", |
175 | "settings.service.form.iconDelete" : "Delete", | 182 | "settings.service.form.iconDelete" : "Обриши", |
176 | "settings.service.form.iconUpload" : "Drop your image, or click here", | 183 | "settings.service.form.iconUpload" : "Превуци Ñлику или кликни овде", |
177 | "settings.service.form.indirectMessageInfo" : "Vi ćete biti obavješteni o svim novim porukama na kanalu, ne samo o @imenima, kanalima, @ovdje, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Vi ćete biti obavješteni o svim novim porukama na kanalu, ne samo o @imenima, kanalima, @ovdje, ...", |
178 | "settings.service.form.indirectMessages" : "Prikaži znaÄku na svim novim porukuama", | 185 | "settings.service.form.indirectMessages" : "Prikaži znaÄku na svim novim porukuama", |
179 | "settings.service.form.isMutedInfo" : "Kada je onemogućeno, sve obavijesti, svi zvukovi i sva pozadinska podrÅ¡ka će biti neÄujna.", | 186 | "settings.service.form.isMutedInfo" : "Kada je onemogućeno, sve obavijesti, svi zvukovi i sva pozadinska podrÅ¡ka će biti neÄujna.", |
180 | "settings.service.form.name" : "Ime", | 187 | "settings.service.form.name" : "Ime", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "SaÄuvaj uslugu\/e", | 194 | "settings.service.form.saveButton" : "SaÄuvaj uslugu\/e", |
182 | "settings.service.form.tabHosted" : "Hostovano", | 195 | "settings.service.form.tabHosted" : "Hostovano", |
183 | "settings.service.form.tabOnPremise" : "Samo-hostovano âï¸", | 196 | "settings.service.form.tabOnPremise" : "Samo-hostovano âï¸", |
184 | "settings.service.form.team" : "Tim", | 197 | "settings.service.form.team" : "Tim", |
185 | "settings.service.form.useHostedService" : "Use the hosted {name} service.", | 198 | "settings.service.form.useHostedService" : "КориÑти хоÑтовану {име} уÑлугу.", |
186 | "settings.service.form.yourServices" : "Vaše usluge", | 199 | "settings.service.form.yourServices" : "Vaše usluge", |
187 | "settings.services.deletedInfo" : "Usluga je onemogućena", | 200 | "settings.services.deletedInfo" : "Usluga je onemogućena", |
188 | "settings.services.discoverServices" : "Pronađite usluge", | 201 | "settings.services.discoverServices" : "Pronađite usluge", |
@@ -202,9 +215,9 @@ | |||
202 | "settings.user.form.lastname" : "Prezime", | 215 | "settings.user.form.lastname" : "Prezime", |
203 | "settings.user.form.newPassword" : "Nova lozinka", | 216 | "settings.user.form.newPassword" : "Nova lozinka", |
204 | "sidebar.addNewService" : "Dodajte novu uslugu", | 217 | "sidebar.addNewService" : "Dodajte novu uslugu", |
205 | "sidebar.muteApp" : "Disable notifications & audio", | 218 | "sidebar.muteApp" : "Онемогући обавештења и звукове", |
206 | "sidebar.settings" : "Postavke", | 219 | "sidebar.settings" : "Postavke", |
207 | "sidebar.unmuteApp" : "Enable notifications & audio", | 220 | "sidebar.unmuteApp" : "ИÑкључи обавештења и звукове", |
208 | "signup.company.label" : "Tvrtka", | 221 | "signup.company.label" : "Tvrtka", |
209 | "signup.email.label" : "Vaša e-adresa", | 222 | "signup.email.label" : "Vaša e-adresa", |
210 | "signup.emailDuplicate" : "Već postoji korisnik s tom e-mail adresom", | 223 | "signup.emailDuplicate" : "Već postoji korisnik s tom e-mail adresom", |
@@ -212,7 +225,7 @@ | |||
212 | "signup.headline" : "Prijava", | 225 | "signup.headline" : "Prijava", |
213 | "signup.lastname.label" : "Prezime", | 226 | "signup.lastname.label" : "Prezime", |
214 | "signup.legal.info" : "Prilikom stvaranja Franz raÄuna, slažete se sa sljedećim stavkama", | 227 | "signup.legal.info" : "Prilikom stvaranja Franz raÄuna, slažete se sa sljedećim stavkama", |
215 | "signup.legal.privacy" : "Izjava o privatnosti", | 228 | "signup.legal.privacy" : "Изјава о приватноÑти", |
216 | "signup.legal.terms" : "Uvjeti korištenja", | 229 | "signup.legal.terms" : "Uvjeti korištenja", |
217 | "signup.link.login" : "Imate raÄun? Prijavite se.", | 230 | "signup.link.login" : "Imate raÄun? Prijavite se.", |
218 | "signup.password.label" : "Lozinka", | 231 | "signup.password.label" : "Lozinka", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "EU državljani, upozerenje: Moguće taksiranje", | 233 | "subscription.euTaxInfo" : "EU državljani, upozerenje: Moguće taksiranje", |
221 | "subscription.features.ads" : "Bez reklama, doživotno!", | 234 | "subscription.features.ads" : "Bez reklama, doživotno!", |
222 | "subscription.features.comingSoon" : "Dolazi uskoro", | 235 | "subscription.features.comingSoon" : "Dolazi uskoro", |
223 | "subscription.features.customServices" : "Privatni servisi za Vas i Vaš tim", | ||
224 | "subscription.features.encryptedSync" : "Kodirano usklađivanje sesija.", | 236 | "subscription.features.encryptedSync" : "Kodirano usklađivanje sesija.", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Dodajte pretpostavljeni\/hostirani servis kao Å¡to ima usluga HipChat", | 238 | "subscription.features.onpremise" : "Dodajte pretpostavljeni\/hostirani servis kao Å¡to ima usluga HipChat", |
226 | "subscription.features.vpn" : "Podrška za Proxy i VPM ( VPN )", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće:", | 242 | "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće:", |
228 | "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", | 243 | "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", |
229 | "subscription.submit.label" : "Želim da podržim razvoj Franca.", | 244 | "subscription.submit.label" : "Želim da podržim razvoj Franca.", |
@@ -236,15 +251,15 @@ | |||
236 | "tabs.item.disableAudio" : "Onemogući zvuk", | 251 | "tabs.item.disableAudio" : "Onemogući zvuk", |
237 | "tabs.item.disableNotifications" : "Onemogući obavijesti", | 252 | "tabs.item.disableNotifications" : "Onemogući obavijesti", |
238 | "tabs.item.disableService" : "Onemogući servis", | 253 | "tabs.item.disableService" : "Onemogući servis", |
239 | "tabs.item.edit" : "Uredi", | 254 | "tabs.item.edit" : "Уреди", |
240 | "tabs.item.enableAudio" : "UkljuÄi zvuk", | 255 | "tabs.item.enableAudio" : "UkljuÄi zvuk", |
241 | "tabs.item.enableNotification" : "Omogući obavijesti", | 256 | "tabs.item.enableNotification" : "Omogući obavijesti", |
242 | "tabs.item.enableService" : "Omogući usluge", | 257 | "tabs.item.enableService" : "Omogući usluge", |
243 | "tabs.item.reload" : "Ponovno uÄitavanje", | 258 | "tabs.item.reload" : "Ponovno uÄitavanje", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{поље} није валидно", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{поље} треба да буде најмање {дужина} карактера дугачко", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{поље} је неопходно", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} није валидан УРЛ", |
248 | "welcome.loginButton" : "Prijavite se na raÄun", | 263 | "welcome.loginButton" : "Prijavite se na raÄun", |
249 | "welcome.signupButton" : "Stvorite novi korisniÄki raÄun", | 264 | "welcome.signupButton" : "Stvorite novi korisniÄki raÄun", |
250 | "welcome.slogan" : "Poruke koje su stvorene za tebe" | 265 | "welcome.slogan" : "Poruke koje su stvorene za tebe" |
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json index d03077d8d..130b51ddf 100644 --- a/src/i18n/locales/tr.json +++ b/src/i18n/locales/tr.json | |||
@@ -1,8 +1,11 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Franz hizmetlerine ÅŸu anda eriÅŸilemiyor.", | 5 | "global.api.unhealthy" : "Franz hizmetlerine ÅŸu anda eriÅŸilemiyor.", |
3 | "global.notConnectedToTheInternet" : "İnternete bağlı değilsiniz.", | 6 | "global.notConnectedToTheInternet" : "İnternete bağlı değilsiniz.", |
4 | "import.headline" : "Franz 4 servislerinizi ekleyin.", | 7 | "import.headline" : "Franz 4 servislerinizi ekleyin.", |
5 | "import.notSupportedHeadline" : "Servisler henüz Franz 5'te desteklenmiyor.", | 8 | "import.notSupportedHeadline" : "Servisler henüz Franz 5'de desteklenmiyor.", |
6 | "import.skip.label" : "Servisleri kendim eklemek istiyorum", | 9 | "import.skip.label" : "Servisleri kendim eklemek istiyorum", |
7 | "import.submit.label" : "Servisleri içe aktar", | 10 | "import.submit.label" : "Servisleri içe aktar", |
8 | "infobar.buttonChangelog" : "Yeni ne var?", | 11 | "infobar.buttonChangelog" : "Yeni ne var?", |
@@ -21,7 +24,7 @@ | |||
21 | "login.headline" : "Oturum Aç", | 24 | "login.headline" : "Oturum Aç", |
22 | "login.invalidCredentials" : "Yanlış parola ya da e-posta adresi", | 25 | "login.invalidCredentials" : "Yanlış parola ya da e-posta adresi", |
23 | "login.link.password" : "Parola sıfırla", | 26 | "login.link.password" : "Parola sıfırla", |
24 | "login.link.signup" : "Kullanıcı hesabı oluştur", | 27 | "login.link.signup" : "Ücretsiz hesap oluştur", |
25 | "login.password.label" : "Parola", | 28 | "login.password.label" : "Parola", |
26 | "login.serverLogout" : "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.", | 29 | "login.serverLogout" : "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.", |
27 | "login.submit.label" : "Oturum Aç", | 30 | "login.submit.label" : "Oturum Aç", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Bu e-posta adresinde bir kullanıcı bulunamadı", | 79 | "password.noUser" : "Bu e-posta adresinde bir kullanıcı bulunamadı", |
77 | "password.submit.label" : "Gönder", | 80 | "password.submit.label" : "Gönder", |
78 | "password.successInfo" : "E-postanızı kontrol ediniz", | 81 | "password.successInfo" : "E-postanızı kontrol ediniz", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Franz'ı Destekle", | 83 | "pricing.headline" : "Franz'ı Destekle", |
80 | "pricing.link.skipPayment" : "Franz'ın gelişimini desteklemek istemiyorum.", | 84 | "pricing.link.skipPayment" : "Franz'ın gelişimini desteklemek istemiyorum.", |
81 | "pricing.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", | 85 | "pricing.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", |
@@ -84,7 +88,7 @@ | |||
84 | "service.crashHandler.autoReload" : "{name}'i {seconds} saniye içerisinde otomatik onarmayı deniyoruz", | 88 | "service.crashHandler.autoReload" : "{name}'i {seconds} saniye içerisinde otomatik onarmayı deniyoruz", |
85 | "service.crashHandler.headline" : "Aman Tanrım hayır!", | 89 | "service.crashHandler.headline" : "Aman Tanrım hayır!", |
86 | "service.crashHandler.text" : "{name} bir hataya neden oldu.", | 90 | "service.crashHandler.text" : "{name} bir hataya neden oldu.", |
87 | "service.disabledHandler.action" : "AktifleÅŸtir {name}", | 91 | "service.disabledHandler.action" : "{name} aktif", |
88 | "service.disabledHandler.headline" : "{name} devredışı", | 92 | "service.disabledHandler.headline" : "{name} devredışı", |
89 | "services.getStarted" : "Haydi başlayalım", | 93 | "services.getStarted" : "Haydi başlayalım", |
90 | "services.welcome" : "Franz'a HoÅŸgeldiniz", | 94 | "services.welcome" : "Franz'a HoÅŸgeldiniz", |
@@ -116,7 +120,8 @@ | |||
116 | "settings.app.form.autoLaunchInBackground" : "Arka planda aç", | 120 | "settings.app.form.autoLaunchInBackground" : "Arka planda aç", |
117 | "settings.app.form.autoLaunchOnStart" : "Franz'ı başlangıçta aç", | 121 | "settings.app.form.autoLaunchOnStart" : "Franz'ı başlangıçta aç", |
118 | "settings.app.form.beta" : "Beta versiyonları dahil et", | 122 | "settings.app.form.beta" : "Beta versiyonları dahil et", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Grafik İşlemci Ünitesi (GPU) Hızlandırıcısını Aktif et", | ||
120 | "settings.app.form.enableMenuBar" : "Menü çubuğunda Franz'ı göster", | 125 | "settings.app.form.enableMenuBar" : "Menü çubuğunda Franz'ı göster", |
121 | "settings.app.form.enableSpellchecking" : "Yazım denetimini etkinleştir", | 126 | "settings.app.form.enableSpellchecking" : "Yazım denetimini etkinleştir", |
122 | "settings.app.form.enableSystemTray" : "Franz'ı sistem tepsisinde göster", | 127 | "settings.app.form.enableSystemTray" : "Franz'ı sistem tepsisinde göster", |
@@ -126,6 +131,7 @@ | |||
126 | "settings.app.form.runInBackground" : "Pencereyi kapatırken Franz'ı arka planda tut", | 131 | "settings.app.form.runInBackground" : "Pencereyi kapatırken Franz'ı arka planda tut", |
127 | "settings.app.form.showDisabledServices" : "Devre dışı bırakılan servis sekmelerini göster", | 132 | "settings.app.form.showDisabledServices" : "Devre dışı bırakılan servis sekmelerini göster", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Bildirimler kapalı iken okunmamış mesaj sayısını göster", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Bildirimler kapalı iken okunmamış mesaj sayısını göster", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "Ayarlar", | 135 | "settings.app.headline" : "Ayarlar", |
130 | "settings.app.headlineAdvanced" : "GeliÅŸmiÅŸ", | 136 | "settings.app.headlineAdvanced" : "GeliÅŸmiÅŸ", |
131 | "settings.app.headlineAppearance" : "Görünüm", | 137 | "settings.app.headlineAppearance" : "Görünüm", |
@@ -166,6 +172,7 @@ | |||
166 | "settings.service.form.editServiceHeadline" : "{name} düzenle", | 172 | "settings.service.form.editServiceHeadline" : "{name} düzenle", |
167 | "settings.service.form.enableAudio" : "Sesi etkinleÅŸtirin", | 173 | "settings.service.form.enableAudio" : "Sesi etkinleÅŸtirin", |
168 | "settings.service.form.enableBadge" : "Okunmamış mesajları göster", | 174 | "settings.service.form.enableBadge" : "Okunmamış mesajları göster", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Bildirimleri etkinleÅŸtir", | 176 | "settings.service.form.enableNotification" : "Bildirimleri etkinleÅŸtir", |
170 | "settings.service.form.enableService" : "Servisi etkinleÅŸtir", | 177 | "settings.service.form.enableService" : "Servisi etkinleÅŸtir", |
171 | "settings.service.form.headlineBadges" : "Okunmamış mesajlar", | 178 | "settings.service.form.headlineBadges" : "Okunmamış mesajlar", |
@@ -178,6 +185,12 @@ | |||
178 | "settings.service.form.indirectMessages" : "Mesaj rozetini tüm yeni mesajlar için göster", | 185 | "settings.service.form.indirectMessages" : "Mesaj rozetini tüm yeni mesajlar için göster", |
179 | "settings.service.form.isMutedInfo" : "Devre dışı bırakıldığında, tüm bildirim sesleri sessize alınır", | 186 | "settings.service.form.isMutedInfo" : "Devre dışı bırakıldığında, tüm bildirim sesleri sessize alınır", |
180 | "settings.service.form.name" : "Ä°sim", | 187 | "settings.service.form.name" : "Ä°sim", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Servisi kaydet", | 194 | "settings.service.form.saveButton" : "Servisi kaydet", |
182 | "settings.service.form.tabHosted" : "Barındırılan", | 195 | "settings.service.form.tabHosted" : "Barındırılan", |
183 | "settings.service.form.tabOnPremise" : "Kendi barındırılan", | 196 | "settings.service.form.tabOnPremise" : "Kendi barındırılan", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "AB vatandaşları: yerel satış vergileri uygulanabilir", | 233 | "subscription.euTaxInfo" : "AB vatandaşları: yerel satış vergileri uygulanabilir", |
221 | "subscription.features.ads" : "Reklam yok, asla!", | 234 | "subscription.features.ads" : "Reklam yok, asla!", |
222 | "subscription.features.comingSoon" : "yakında geliyor", | 235 | "subscription.features.comingSoon" : "yakında geliyor", |
223 | "subscription.features.customServices" : "Sen ve takımın için gizli servis", | ||
224 | "subscription.features.encryptedSync" : "Åžifreli oturum senkronizasyonu", | 236 | "subscription.features.encryptedSync" : "Åžifreli oturum senkronizasyonu", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "HipChat gibi kurum içi\/barındırılan hizmetler ekle", | 238 | "subscription.features.onpremise" : "HipChat gibi kurum içi\/barındırılan hizmetler ekle", |
226 | "subscription.features.vpn" : "Proxy & VPN desteÄŸi", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Ücretli Franz Premium Destekçi Hesabına dahil", | 242 | "subscription.includedFeatures" : "Ücretli Franz Premium Destekçi Hesabına dahil", |
228 | "subscription.paymentSessionError" : "Ödeme formu başlatılamadı", | 243 | "subscription.paymentSessionError" : "Ödeme formu başlatılamadı", |
229 | "subscription.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", | 244 | "subscription.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", |
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 3f732b896..94c6f7e54 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "Ðе можна підключитиÑÑŒ до онлайн ÑервіÑів Franz", | 5 | "global.api.unhealthy" : "Ðе можна підключитиÑÑŒ до онлайн ÑервіÑів Franz", |
3 | "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.", | 6 | "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.", |
4 | "import.headline" : "Імпортувати ваші ÑервіÑи з Franz 4", | 7 | "import.headline" : "Імпортувати ваші ÑервіÑи з Franz 4", |
@@ -26,49 +29,49 @@ | |||
26 | "login.serverLogout" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, зайдіть знову.", | 29 | "login.serverLogout" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, зайдіть знову.", |
27 | "login.submit.label" : "Увійти", | 30 | "login.submit.label" : "Увійти", |
28 | "login.tokenExpired" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, зайдіть знову.", | 31 | "login.tokenExpired" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, зайдіть знову.", |
29 | "menu.app.about" : "About Franz", | 32 | "menu.app.about" : "Про Franz", |
30 | "menu.app.hide" : "Hide", | 33 | "menu.app.hide" : "Приховати", |
31 | "menu.app.hideOthers" : "Hide Others", | 34 | "menu.app.hideOthers" : "Приховати інші", |
32 | "menu.app.quit" : "Quit", | 35 | "menu.app.quit" : "Вийти", |
33 | "menu.app.settings" : "ÐалаштуваннÑ", | 36 | "menu.app.settings" : "ÐалаштуваннÑ", |
34 | "menu.app.unhide" : "Unhide", | 37 | "menu.app.unhide" : "Показати", |
35 | "menu.edit" : "Редагувати", | 38 | "menu.edit" : "Редагувати", |
36 | "menu.edit.copy" : "Copy", | 39 | "menu.edit.copy" : "Копіювати", |
37 | "menu.edit.cut" : "Cut", | 40 | "menu.edit.cut" : "Вирізати", |
38 | "menu.edit.delete" : "Видалити", | 41 | "menu.edit.delete" : "Видалити", |
39 | "menu.edit.emojiSymbols" : "Emoji & Symbols", | 42 | "menu.edit.emojiSymbols" : "Емодзі та Ñимволи", |
40 | "menu.edit.paste" : "Paste", | 43 | "menu.edit.paste" : "Ð’Ñтавити", |
41 | "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", | 44 | "menu.edit.pasteAndMatchStyle" : "Ð’Ñтавити з дотриманнÑм Ñтилю", |
42 | "menu.edit.redo" : "Redo", | 45 | "menu.edit.redo" : "Повернути", |
43 | "menu.edit.selectAll" : "Select All", | 46 | "menu.edit.selectAll" : "Виділити вÑе", |
44 | "menu.edit.speech" : "Speech", | 47 | "menu.edit.speech" : "Мова", |
45 | "menu.edit.startDictation" : "Start Dictation", | 48 | "menu.edit.startDictation" : "Почати диктувати", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "Почати говорити", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "Закінчити говорити", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "Відмінити", |
49 | "menu.file" : "File", | 52 | "menu.file" : "Файл", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "Довідка", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "Журнал змін", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "Докладніше", |
53 | "menu.help.privacy" : "ЗаÑва про конфіденційніÑÑ‚ÑŒ", | 56 | "menu.help.privacy" : "ЗаÑва про конфіденційніÑÑ‚ÑŒ", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "Підтримка", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "Умови викориÑтаннÑ", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "Служби", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "Додати ÑервіÑ", |
58 | "menu.view" : "View", | 61 | "menu.view" : "ВиглÑд", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "Вікно на повний екран", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "Вийти з повного екрану", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "Перезавантажити Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "Перезавантажити ÑервіÑ", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "Фактичний розмір", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "Переключити інÑтрумент розробника", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "ПереключитиÑÑ Ð½Ð° повний екран", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "Переключити інÑтрументи розробника ÑервіÑу", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "Збільшити маÑштаб", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "Зменьшити маÑштаб", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "Вікно", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "Закрити", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "Згорнути", |
72 | "password.email.label" : "Email адреÑа", | 75 | "password.email.label" : "Email адреÑа", |
73 | "password.headline" : "Скинути пароль", | 76 | "password.headline" : "Скинути пароль", |
74 | "password.link.login" : "Увійти до вашого акаунту", | 77 | "password.link.login" : "Увійти до вашого акаунту", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "Ðе знайдено жодного кориÑтувача з цією email адреÑою", | 79 | "password.noUser" : "Ðе знайдено жодного кориÑтувача з цією email адреÑою", |
77 | "password.submit.label" : "Подати", | 80 | "password.submit.label" : "Подати", |
78 | "password.successInfo" : "Будь лаÑка, перевірте ваш email", | 81 | "password.successInfo" : "Будь лаÑка, перевірте ваш email", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "Підтримайте Franz", | 83 | "pricing.headline" : "Підтримайте Franz", |
80 | "pricing.link.skipPayment" : "Я не хочу підтримувати розробку Franz.", | 84 | "pricing.link.skipPayment" : "Я не хочу підтримувати розробку Franz.", |
81 | "pricing.submit.label" : "Я хочу підтримати розробку Franz", | 85 | "pricing.submit.label" : "Я хочу підтримати розробку Franz", |
@@ -93,7 +97,7 @@ | |||
93 | "settings.account.accountType.premium" : "Преміум Ðкаунт Прихильника", | 97 | "settings.account.accountType.premium" : "Преміум Ðкаунт Прихильника", |
94 | "settings.account.buttonSave" : "Оновити профіль", | 98 | "settings.account.buttonSave" : "Оновити профіль", |
95 | "settings.account.deleteAccount" : "Видалити обліковий запиÑ", | 99 | "settings.account.deleteAccount" : "Видалити обліковий запиÑ", |
96 | "settings.account.deleteEmailSent" : "Ви отримали електронного лиÑта з лінком, щоб підтвердити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу. Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ– дані не можна буде відновити!", | 100 | "settings.account.deleteEmailSent" : "Ви отримали електронного лиÑта з поÑиланнÑм, щоб підтвердити Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу. Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ– дані не можна буде відновити!", |
97 | "settings.account.deleteInfo" : "Якщо Вам більше не потрібний обліковий Ð·Ð°Ð¿Ð¸Ñ Franz, Ви можете його видалити Ñ– вÑÑ– Ñуміжні дані.", | 101 | "settings.account.deleteInfo" : "Якщо Вам більше не потрібний обліковий Ð·Ð°Ð¿Ð¸Ñ Franz, Ви можете його видалити Ñ– вÑÑ– Ñуміжні дані.", |
98 | "settings.account.headline" : "Ðкаунт", | 102 | "settings.account.headline" : "Ðкаунт", |
99 | "settings.account.headlineAccount" : "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ акаунт", | 103 | "settings.account.headlineAccount" : "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ акаунт", |
@@ -111,23 +115,25 @@ | |||
111 | "settings.app.buttonClearAllCache" : "ОчиÑтити кеш", | 115 | "settings.app.buttonClearAllCache" : "ОчиÑтити кеш", |
112 | "settings.app.buttonInstallUpdate" : "Перезавантажити Ñ– вÑтановити оновленнÑ", | 116 | "settings.app.buttonInstallUpdate" : "Перезавантажити Ñ– вÑтановити оновленнÑ", |
113 | "settings.app.buttonSearchForUpdate" : "Перевірити наÑвніÑÑ‚ÑŒ оновлень", | 117 | "settings.app.buttonSearchForUpdate" : "Перевірити наÑвніÑÑ‚ÑŒ оновлень", |
114 | "settings.app.cacheInfo" : "Кеш, Ñкий викориÑтовує Franz, займає {розмір} диÑку.", | 118 | "settings.app.cacheInfo" : "Кеш, Ñкий викориÑтовує Franz, займає {size} диÑкового проÑтору.", |
115 | "settings.app.currentVersion" : "Поточна верÑÑ–Ñ:", | 119 | "settings.app.currentVersion" : "Поточна верÑÑ–Ñ:", |
116 | "settings.app.form.autoLaunchInBackground" : "Відкрити у фоновому режимі", | 120 | "settings.app.form.autoLaunchInBackground" : "Відкрити у фоновому режимі", |
117 | "settings.app.form.autoLaunchOnStart" : "ЗапуÑкати Franz на початку", | 121 | "settings.app.form.autoLaunchOnStart" : "ЗапуÑкати Franz на початку", |
118 | "settings.app.form.beta" : "Включити бета-верÑÑ–Ñ—", | 122 | "settings.app.form.beta" : "Включити бета-верÑÑ–Ñ—", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
124 | "settings.app.form.enableGPUAcceleration" : "Ввімкнути приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ GPU", | ||
120 | "settings.app.form.enableMenuBar" : "Відображати Franz в панелі головного меню", | 125 | "settings.app.form.enableMenuBar" : "Відображати Franz в панелі головного меню", |
121 | "settings.app.form.enableSpellchecking" : "Увімкнути перевірку орфографії", | 126 | "settings.app.form.enableSpellchecking" : "Увімкнути перевірку орфографії", |
122 | "settings.app.form.enableSystemTray" : "Показувати Franz у ÑиÑтемному лотку", | 127 | "settings.app.form.enableSystemTray" : "Показувати Franz у ÑиÑтемному лотку", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "Сховати значок Franz в Dock", |
124 | "settings.app.form.language" : "Мова", | 129 | "settings.app.form.language" : "Мова", |
125 | "settings.app.form.minimizeToSystemTray" : "Мінімізувати Franz до ÑиÑтемного лотка", | 130 | "settings.app.form.minimizeToSystemTray" : "Мінімізувати Franz до ÑиÑтемного лотка", |
126 | "settings.app.form.runInBackground" : "Тримати Franz в фоні при закритті вікна", | 131 | "settings.app.form.runInBackground" : "Тримати Franz в фоні при закритті вікна", |
127 | "settings.app.form.showDisabledServices" : "Показати вкладку вимкнених ÑервіÑів", | 132 | "settings.app.form.showDisabledServices" : "Показати вкладку вимкнених ÑервіÑів", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "Показувати значок непрочитаних повідомлень коли ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ñ–", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "Показувати значок непрочитаних повідомлень коли ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ñ–", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "ÐалаштуваннÑ", | 135 | "settings.app.headline" : "ÐалаштуваннÑ", |
130 | "settings.app.headlineAdvanced" : "Advanced", | 136 | "settings.app.headlineAdvanced" : "Додаткові налаштуваннÑ", |
131 | "settings.app.headlineAppearance" : "ВиглÑд", | 137 | "settings.app.headlineAppearance" : "ВиглÑд", |
132 | "settings.app.headlineGeneral" : "Загальні", | 138 | "settings.app.headlineGeneral" : "Загальні", |
133 | "settings.app.headlineLanguage" : "Мова", | 139 | "settings.app.headlineLanguage" : "Мова", |
@@ -152,7 +158,7 @@ | |||
152 | "settings.recipes.mostPopular" : "Ðайбільш популÑрні", | 158 | "settings.recipes.mostPopular" : "Ðайбільш популÑрні", |
153 | "settings.recipes.nothingFound" : "Вибачте, але жоден ÑÐµÑ€Ð²Ñ–Ñ Ð½Ðµ відповідає пошуковому терміну.", | 159 | "settings.recipes.nothingFound" : "Вибачте, але жоден ÑÐµÑ€Ð²Ñ–Ñ Ð½Ðµ відповідає пошуковому терміну.", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "Ð¡ÐµÑ€Ð²Ñ–Ñ ÑƒÑпішно додано", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "Ð¡ÐµÑ€Ð²Ñ–Ñ ÑƒÑпішно додано", |
155 | "settings.searchService" : "Search service", | 161 | "settings.searchService" : "Знайти ÑервіÑ", |
156 | "settings.service.error.goBack" : "ПовернутиÑÑŒ до ÑервіÑів", | 162 | "settings.service.error.goBack" : "ПовернутиÑÑŒ до ÑервіÑів", |
157 | "settings.service.error.headline" : "Помилка", | 163 | "settings.service.error.headline" : "Помилка", |
158 | "settings.service.error.message" : "Ðе вдалоÑÑŒ завантажити Ñерверний протокол.", | 164 | "settings.service.error.message" : "Ðе вдалоÑÑŒ завантажити Ñерверний протокол.", |
@@ -165,10 +171,11 @@ | |||
165 | "settings.service.form.deleteButton" : "Видалити ÑервіÑ", | 171 | "settings.service.form.deleteButton" : "Видалити ÑервіÑ", |
166 | "settings.service.form.editServiceHeadline" : "Редагувати {name}", | 172 | "settings.service.form.editServiceHeadline" : "Редагувати {name}", |
167 | "settings.service.form.enableAudio" : "Увімкнути звук", | 173 | "settings.service.form.enableAudio" : "Увімкнути звук", |
168 | "settings.service.form.enableBadge" : "Show unread message badges", | 174 | "settings.service.form.enableBadge" : "Показувати непрочитані повідомленнÑ", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "Увімкнути ÑповіщеннÑ", | 176 | "settings.service.form.enableNotification" : "Увімкнути ÑповіщеннÑ", |
170 | "settings.service.form.enableService" : "Увімкнути ÑервіÑ", | 177 | "settings.service.form.enableService" : "Увімкнути ÑервіÑ", |
171 | "settings.service.form.headlineBadges" : "Unread message badges", | 178 | "settings.service.form.headlineBadges" : "Значки непрочитаних повідомлень", |
172 | "settings.service.form.headlineGeneral" : "Загальні", | 179 | "settings.service.form.headlineGeneral" : "Загальні", |
173 | "settings.service.form.headlineNotifications" : "СповіщеннÑ", | 180 | "settings.service.form.headlineNotifications" : "СповіщеннÑ", |
174 | "settings.service.form.icon" : "Ð¡Ð²Ð¾Ñ Ñ–ÐºÐ¾Ð½ÐºÐ°", | 181 | "settings.service.form.icon" : "Ð¡Ð²Ð¾Ñ Ñ–ÐºÐ¾Ð½ÐºÐ°", |
@@ -176,13 +183,19 @@ | |||
176 | "settings.service.form.iconUpload" : "Скиньте Ñвоє Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ натиÑніть тут", | 183 | "settings.service.form.iconUpload" : "Скиньте Ñвоє Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ натиÑніть тут", |
177 | "settings.service.form.indirectMessageInfo" : "Ви отримаєте ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вÑÑ– нові Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð² каналі, а не лише про @username, @channel, @here, ...", | 184 | "settings.service.form.indirectMessageInfo" : "Ви отримаєте ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вÑÑ– нові Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð² каналі, а не лише про @username, @channel, @here, ...", |
178 | "settings.service.form.indirectMessages" : "Показувати значок Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ… нових повідомлень", | 185 | "settings.service.form.indirectMessages" : "Показувати значок Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ… нових повідомлень", |
179 | "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted", | 186 | "settings.service.form.isMutedInfo" : "Коли вимкнено, вÑÑ– ÑÐ¿Ð¾Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑŽÑ‚ÑŒÑÑ", |
180 | "settings.service.form.name" : "Ім'Ñ", | 187 | "settings.service.form.name" : "Ім'Ñ", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "Зберегти ÑервіÑ", | 194 | "settings.service.form.saveButton" : "Зберегти ÑервіÑ", |
182 | "settings.service.form.tabHosted" : "Розміщений", | 195 | "settings.service.form.tabHosted" : "Розміщений", |
183 | "settings.service.form.tabOnPremise" : "СамоÑтійно розміщений âï¸", | 196 | "settings.service.form.tabOnPremise" : "СамоÑтійно розміщений âï¸", |
184 | "settings.service.form.team" : "Команда", | 197 | "settings.service.form.team" : "Команда", |
185 | "settings.service.form.useHostedService" : "Use the hosted {name} service.", | 198 | "settings.service.form.useHostedService" : "Викоритати розміщений {name} ÑервіÑ.", |
186 | "settings.service.form.yourServices" : "Ваші ÑервіÑи", | 199 | "settings.service.form.yourServices" : "Ваші ÑервіÑи", |
187 | "settings.services.deletedInfo" : "Ð¡ÐµÑ€Ð²Ñ–Ñ Ð±ÑƒÐ»Ð¾ видалено", | 200 | "settings.services.deletedInfo" : "Ð¡ÐµÑ€Ð²Ñ–Ñ Ð±ÑƒÐ»Ð¾ видалено", |
188 | "settings.services.discoverServices" : "Відкрийте Ð´Ð»Ñ Ñебе ÑервіÑи", | 201 | "settings.services.discoverServices" : "Відкрийте Ð´Ð»Ñ Ñебе ÑервіÑи", |
@@ -212,7 +225,7 @@ | |||
212 | "signup.headline" : "Увійти", | 225 | "signup.headline" : "Увійти", |
213 | "signup.lastname.label" : "Прізвище", | 226 | "signup.lastname.label" : "Прізвище", |
214 | "signup.legal.info" : "СтвореннÑм акаунту Franz ви приймаєте", | 227 | "signup.legal.info" : "СтвореннÑм акаунту Franz ви приймаєте", |
215 | "signup.legal.privacy" : "ЗаÑва про конфіденційніÑÑ‚ÑŒ", | 228 | "signup.legal.privacy" : "Політика конфіденційноÑÑ‚Ñ–", |
216 | "signup.legal.terms" : "Умови викориÑтаннÑ", | 229 | "signup.legal.terms" : "Умови викориÑтаннÑ", |
217 | "signup.link.login" : "У Ð²Ð°Ñ Ð²Ð¶Ðµ Ñ” обліковий запиÑ, увійти?", | 230 | "signup.link.login" : "У Ð²Ð°Ñ Ð²Ð¶Ðµ Ñ” обліковий запиÑ, увійти?", |
218 | "signup.password.label" : "Пароль", | 231 | "signup.password.label" : "Пароль", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "Ð”Ð»Ñ Ð¶Ð¸Ñ‚ÐµÐ»Ñ–Ð² ЄС: можуть заÑтоÑовуватиÑÑ Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐ¸", | 233 | "subscription.euTaxInfo" : "Ð”Ð»Ñ Ð¶Ð¸Ñ‚ÐµÐ»Ñ–Ð² ЄС: можуть заÑтоÑовуватиÑÑ Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐ¸", |
221 | "subscription.features.ads" : "Жодної реклами!", | 234 | "subscription.features.ads" : "Жодної реклами!", |
222 | "subscription.features.comingSoon" : "очікуйте незабаром", | 235 | "subscription.features.comingSoon" : "очікуйте незабаром", |
223 | "subscription.features.customServices" : "Приватні ÑервіÑи Ð´Ð»Ñ Ð²Ð°Ñ Ñ– вашої команди", | ||
224 | "subscription.features.encryptedSync" : "Шифрована ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ ÑеанÑу", | 236 | "subscription.features.encryptedSync" : "Шифрована ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ ÑеанÑу", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "Додайте on-premise \/ hosted ÑервіÑи, такі Ñк Hipchat", | 238 | "subscription.features.onpremise" : "Додайте on-premise \/ hosted ÑервіÑи, такі Ñк Hipchat", |
226 | "subscription.features.vpn" : "Підтримка прокÑÑ– та VPN", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "Платний Преміальний Ðкаунт Прихильника Franz включає", | 242 | "subscription.includedFeatures" : "Платний Преміальний Ðкаунт Прихильника Franz включає", |
228 | "subscription.paymentSessionError" : "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ форму платежу", | 243 | "subscription.paymentSessionError" : "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ форму платежу", |
229 | "subscription.submit.label" : "Я хочу підтримати розробку Franz", | 244 | "subscription.submit.label" : "Я хочу підтримати розробку Franz", |
@@ -241,10 +256,10 @@ | |||
241 | "tabs.item.enableNotification" : "Увімкнути ÑповіщеннÑ", | 256 | "tabs.item.enableNotification" : "Увімкнути ÑповіщеннÑ", |
242 | "tabs.item.enableService" : "Увімкнути Ñлужбу", | 257 | "tabs.item.enableService" : "Увімкнути Ñлужбу", |
243 | "tabs.item.reload" : "Перезавантажити", | 258 | "tabs.item.reload" : "Перезавантажити", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field} не валідне", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "КількіÑÑ‚ÑŒ Ñимволів в {field} повина бути не меньше {length} ", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field} обов'Ñзвоке", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field} не валідний URL", |
248 | "welcome.loginButton" : "Увійдіть до Ñвого акаунту", | 263 | "welcome.loginButton" : "Увійдіть до Ñвого акаунту", |
249 | "welcome.signupButton" : "Створити безплатний акаунт", | 264 | "welcome.signupButton" : "Створити безплатний акаунт", |
250 | "welcome.slogan" : "Обмін повідомленнÑми, Ñкий працює Ð´Ð»Ñ Ð²Ð°Ñ" | 265 | "welcome.slogan" : "Обмін повідомленнÑми, Ñкий працює Ð´Ð»Ñ Ð²Ð°Ñ" |
diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 3bbcc8288..23bff247d 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json | |||
@@ -1,4 +1,7 @@ | |||
1 | { | 1 | { |
2 | "feature.delayApp.action" : "Get a Franz Supporter License", | ||
3 | "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", | ||
4 | "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", | ||
2 | "global.api.unhealthy" : "無法連線至Franz的伺æœå™¨ã€‚", | 5 | "global.api.unhealthy" : "無法連線至Franz的伺æœå™¨ã€‚", |
3 | "global.notConnectedToTheInternet" : "ä½ æ²’æœ‰é€£ä¸Šç¶²è·¯ã€‚", | 6 | "global.notConnectedToTheInternet" : "ä½ æ²’æœ‰é€£ä¸Šç¶²è·¯ã€‚", |
4 | "import.headline" : "匯入Franz 4çš„æœå‹™", | 7 | "import.headline" : "匯入Franz 4çš„æœå‹™", |
@@ -43,32 +46,32 @@ | |||
43 | "menu.edit.selectAll" : "é¸æ“‡æ‰€æœ‰", | 46 | "menu.edit.selectAll" : "é¸æ“‡æ‰€æœ‰", |
44 | "menu.edit.speech" : "朗讀", | 47 | "menu.edit.speech" : "朗讀", |
45 | "menu.edit.startDictation" : "開始è½å¯«", | 48 | "menu.edit.startDictation" : "開始è½å¯«", |
46 | "menu.edit.startSpeaking" : "Start Speaking", | 49 | "menu.edit.startSpeaking" : "開始語音", |
47 | "menu.edit.stopSpeaking" : "Stop Speaking", | 50 | "menu.edit.stopSpeaking" : "åœæ¢èªžéŸ³", |
48 | "menu.edit.undo" : "Undo", | 51 | "menu.edit.undo" : "復原", |
49 | "menu.file" : "File", | 52 | "menu.file" : "檔案", |
50 | "menu.help" : "Help", | 53 | "menu.help" : "求助", |
51 | "menu.help.changelog" : "Changelog", | 54 | "menu.help.changelog" : "變更紀錄", |
52 | "menu.help.learnMore" : "Learn More", | 55 | "menu.help.learnMore" : "深入çžè§£", |
53 | "menu.help.privacy" : "éš±ç§è²æ˜Ž", | 56 | "menu.help.privacy" : "éš±ç§è²æ˜Ž", |
54 | "menu.help.support" : "Support", | 57 | "menu.help.support" : "支æ´", |
55 | "menu.help.tos" : "Terms of Service", | 58 | "menu.help.tos" : "æœå‹™æ¢æ¬¾", |
56 | "menu.services" : "Services", | 59 | "menu.services" : "æœå‹™", |
57 | "menu.services.addNewService" : "Add New Service...", | 60 | "menu.services.addNewService" : "新增æœå‹™", |
58 | "menu.view" : "View", | 61 | "menu.view" : "檢視", |
59 | "menu.view.enterFullScreen" : "Enter Full Screen", | 62 | "menu.view.enterFullScreen" : "進入全螢幕模å¼", |
60 | "menu.view.exitFullScreen" : "Exit Full Screen", | 63 | "menu.view.exitFullScreen" : "離開全螢幕模å¼", |
61 | "menu.view.reloadFranz" : "Reload Franz", | 64 | "menu.view.reloadFranz" : "é‡æ–°è¼‰å…¥Franz", |
62 | "menu.view.reloadService" : "Reload Service", | 65 | "menu.view.reloadService" : "é‡æ–°è¼‰å…¥æœå‹™", |
63 | "menu.view.resetZoom" : "Actual Size", | 66 | "menu.view.resetZoom" : "實際大å°", |
64 | "menu.view.toggleDevTools" : "Toggle Developer Tools", | 67 | "menu.view.toggleDevTools" : "切æ›é–‹ç™¼è€…工具", |
65 | "menu.view.toggleFullScreen" : "Toggle Full Screen", | 68 | "menu.view.toggleFullScreen" : "切æ›å…¨èž¢å¹•", |
66 | "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", | 69 | "menu.view.toggleServiceDevTools" : "切æ›æœå‹™é–‹ç™¼è€…工具", |
67 | "menu.view.zoomIn" : "Zoom In", | 70 | "menu.view.zoomIn" : "放大", |
68 | "menu.view.zoomOut" : "Zoom Out", | 71 | "menu.view.zoomOut" : "縮å°", |
69 | "menu.window" : "Window", | 72 | "menu.window" : "視窗", |
70 | "menu.window.close" : "Close", | 73 | "menu.window.close" : "關閉", |
71 | "menu.window.minimize" : "Minimize", | 74 | "menu.window.minimize" : "最å°åŒ–", |
72 | "password.email.label" : "é›»å郵件地å€", | 75 | "password.email.label" : "é›»å郵件地å€", |
73 | "password.headline" : "é‡è¨å¯†ç¢¼", | 76 | "password.headline" : "é‡è¨å¯†ç¢¼", |
74 | "password.link.login" : "登入您的帳號", | 77 | "password.link.login" : "登入您的帳號", |
@@ -76,6 +79,7 @@ | |||
76 | "password.noUser" : "找ä¸åˆ°è©²é›»å郵件地å€çš„用戶", | 79 | "password.noUser" : "找ä¸åˆ°è©²é›»å郵件地å€çš„用戶", |
77 | "password.submit.label" : "é€å‡º", | 80 | "password.submit.label" : "é€å‡º", |
78 | "password.successInfo" : "請檢查您的電å郵件", | 81 | "password.successInfo" : "請檢查您的電å郵件", |
82 | "premiumFeature.button.upgradeAccount" : "Upgrade account", | ||
79 | "pricing.headline" : "支æŒFranz", | 83 | "pricing.headline" : "支æŒFranz", |
80 | "pricing.link.skipPayment" : "我ä¸æƒ³æ”¯æŒFranz的開發。", | 84 | "pricing.link.skipPayment" : "我ä¸æƒ³æ”¯æŒFranz的開發。", |
81 | "pricing.submit.label" : "我想支æŒFranz的開發。", | 85 | "pricing.submit.label" : "我想支æŒFranz的開發。", |
@@ -111,21 +115,23 @@ | |||
111 | "settings.app.buttonClearAllCache" : "清除快å–", | 115 | "settings.app.buttonClearAllCache" : "清除快å–", |
112 | "settings.app.buttonInstallUpdate" : "é‡æ–°å•Ÿå‹•ä¸¦å®‰è£æ›´æ–°", | 116 | "settings.app.buttonInstallUpdate" : "é‡æ–°å•Ÿå‹•ä¸¦å®‰è£æ›´æ–°", |
113 | "settings.app.buttonSearchForUpdate" : "檢查更新", | 117 | "settings.app.buttonSearchForUpdate" : "檢查更新", |
114 | "settings.app.cacheInfo" : "Franz cache is currently using {size} of disk space.", | 118 | "settings.app.cacheInfo" : "Franzå¿«å–ç›®å‰å 用ç£ç¢Ÿç©ºé–“{大å°}。", |
115 | "settings.app.currentVersion" : "ç›®å‰çš„版本", | 119 | "settings.app.currentVersion" : "ç›®å‰çš„版本", |
116 | "settings.app.form.autoLaunchInBackground" : "在背景開啟", | 120 | "settings.app.form.autoLaunchInBackground" : "在背景開啟", |
117 | "settings.app.form.autoLaunchOnStart" : "開機時啟動Franz", | 121 | "settings.app.form.autoLaunchOnStart" : "開機時啟動Franz", |
118 | "settings.app.form.beta" : "包å«æ¸¬è©¦ç‰ˆ", | 122 | "settings.app.form.beta" : "包å«æ¸¬è©¦ç‰ˆ", |
119 | "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration", | 123 | "settings.app.form.darkMode" : "Join the Dark Side", |
120 | "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", | 124 | "settings.app.form.enableGPUAcceleration" : "啟用GPUåŠ é€Ÿ", |
125 | "settings.app.form.enableMenuBar" : "顯示Franz在é¸å–®åˆ—", | ||
121 | "settings.app.form.enableSpellchecking" : "啟用拼å—檢查", | 126 | "settings.app.form.enableSpellchecking" : "啟用拼å—檢查", |
122 | "settings.app.form.enableSystemTray" : "顯示Franz在系統列", | 127 | "settings.app.form.enableSystemTray" : "顯示Franz在系統列", |
123 | "settings.app.form.hideDockIcon" : "Hide Franz icon in Dock", | 128 | "settings.app.form.hideDockIcon" : "在工作列ä¸éš±è—Franz圖示", |
124 | "settings.app.form.language" : "語言", | 129 | "settings.app.form.language" : "語言", |
125 | "settings.app.form.minimizeToSystemTray" : "最å°åŒ–Franz到系統列", | 130 | "settings.app.form.minimizeToSystemTray" : "最å°åŒ–Franz到系統列", |
126 | "settings.app.form.runInBackground" : "當關閉視窗時ä¿æŒFranz在背景é‹ä½œ", | 131 | "settings.app.form.runInBackground" : "當關閉視窗時ä¿æŒFranz在背景é‹ä½œ", |
127 | "settings.app.form.showDisabledServices" : "顯示åœç”¨çš„æœå‹™æ¨™ç±¤", | 132 | "settings.app.form.showDisabledServices" : "顯示åœç”¨çš„æœå‹™æ¨™ç±¤", |
128 | "settings.app.form.showMessagesBadgesWhenMuted" : "當通知關閉時,標記未讀的訊æ¯", | 133 | "settings.app.form.showMessagesBadgesWhenMuted" : "當通知關閉時,標記未讀的訊æ¯", |
134 | "settings.app.form.spellcheckerLanguage" : "Spell checking language", | ||
129 | "settings.app.headline" : "è¨å®š", | 135 | "settings.app.headline" : "è¨å®š", |
130 | "settings.app.headlineAdvanced" : "進階", | 136 | "settings.app.headlineAdvanced" : "進階", |
131 | "settings.app.headlineAppearance" : "外觀", | 137 | "settings.app.headlineAppearance" : "外觀", |
@@ -133,15 +139,15 @@ | |||
133 | "settings.app.headlineLanguage" : "語言", | 139 | "settings.app.headlineLanguage" : "語言", |
134 | "settings.app.headlineUpdates" : "æ›´æ–°", | 140 | "settings.app.headlineUpdates" : "æ›´æ–°", |
135 | "settings.app.restartRequired" : "需è¦é‡å•Ÿä»¥æ›´è®Š", | 141 | "settings.app.restartRequired" : "需è¦é‡å•Ÿä»¥æ›´è®Š", |
136 | "settings.app.subheadlineCache" : "Cache", | 142 | "settings.app.subheadlineCache" : "å¿«å–", |
137 | "settings.app.translationHelp" : "幫助我們將Franzç¿»è¯æˆæ‚¨çš„語言。", | 143 | "settings.app.translationHelp" : "幫助我們將Franzç¿»è¯æˆæ‚¨çš„語言。", |
138 | "settings.app.updateStatusAvailable" : "有å¯ç”¨æ›´æ–°ï¼Œä¸‹è¼‰ä¸...", | 144 | "settings.app.updateStatusAvailable" : "有å¯ç”¨æ›´æ–°ï¼Œä¸‹è¼‰ä¸...", |
139 | "settings.app.updateStatusSearching" : "æ£åœ¨æœå°‹æ›´æ–°", | 145 | "settings.app.updateStatusSearching" : "æ£åœ¨æœå°‹æ›´æ–°", |
140 | "settings.app.updateStatusUpToDate" : "您æ£åœ¨ä½¿ç”¨æœ€æ–°ç‰ˆæœ¬çš„Franz", | 146 | "settings.app.updateStatusUpToDate" : "您æ£åœ¨ä½¿ç”¨æœ€æ–°ç‰ˆæœ¬çš„Franz", |
141 | "settings.invite.headline" : "Invite Friends", | 147 | "settings.invite.headline" : "邀請朋å‹", |
142 | "settings.navigation.account" : "帳號", | 148 | "settings.navigation.account" : "帳號", |
143 | "settings.navigation.availableServices" : "å¯ä½¿ç”¨çš„æœå‹™", | 149 | "settings.navigation.availableServices" : "å¯ä½¿ç”¨çš„æœå‹™", |
144 | "settings.navigation.inviteFriends" : "Invite Friends", | 150 | "settings.navigation.inviteFriends" : "邀請朋å‹", |
145 | "settings.navigation.logout" : "登出", | 151 | "settings.navigation.logout" : "登出", |
146 | "settings.navigation.settings" : "è¨å®š", | 152 | "settings.navigation.settings" : "è¨å®š", |
147 | "settings.navigation.yourServices" : "您的æœå‹™", | 153 | "settings.navigation.yourServices" : "您的æœå‹™", |
@@ -152,7 +158,7 @@ | |||
152 | "settings.recipes.mostPopular" : "最熱門", | 158 | "settings.recipes.mostPopular" : "最熱門", |
153 | "settings.recipes.nothingFound" : "很抱æ‰ï¼Œæ²’有與您的æœå°‹å—詞符åˆçš„æœå‹™", | 159 | "settings.recipes.nothingFound" : "很抱æ‰ï¼Œæ²’有與您的æœå°‹å—詞符åˆçš„æœå‹™", |
154 | "settings.recipes.servicesSuccessfulAddedInfo" : "æœå‹™å·²æˆåŠŸæ–°å¢žã€‚", | 160 | "settings.recipes.servicesSuccessfulAddedInfo" : "æœå‹™å·²æˆåŠŸæ–°å¢žã€‚", |
155 | "settings.searchService" : "Search service", | 161 | "settings.searchService" : "尋找æœå‹™", |
156 | "settings.service.error.goBack" : "返回æœå‹™", | 162 | "settings.service.error.goBack" : "返回æœå‹™", |
157 | "settings.service.error.headline" : "錯誤", | 163 | "settings.service.error.headline" : "錯誤", |
158 | "settings.service.error.message" : "無法載入æœå‹™å‘½ä»¤ã€‚", | 164 | "settings.service.error.message" : "無法載入æœå‹™å‘½ä»¤ã€‚", |
@@ -165,24 +171,31 @@ | |||
165 | "settings.service.form.deleteButton" : "刪除æœå‹™", | 171 | "settings.service.form.deleteButton" : "刪除æœå‹™", |
166 | "settings.service.form.editServiceHeadline" : "編輯{å稱}", | 172 | "settings.service.form.editServiceHeadline" : "編輯{å稱}", |
167 | "settings.service.form.enableAudio" : "啟用音訊", | 173 | "settings.service.form.enableAudio" : "啟用音訊", |
168 | "settings.service.form.enableBadge" : "Show unread message badges", | 174 | "settings.service.form.enableBadge" : "顯示未讀訊æ¯åœ–示", |
175 | "settings.service.form.enableDarkMode" : "Enable Dark Mode", | ||
169 | "settings.service.form.enableNotification" : "啟用通知", | 176 | "settings.service.form.enableNotification" : "啟用通知", |
170 | "settings.service.form.enableService" : "啟用æœå‹™", | 177 | "settings.service.form.enableService" : "啟用æœå‹™", |
171 | "settings.service.form.headlineBadges" : "Unread message badges", | 178 | "settings.service.form.headlineBadges" : "未讀訊æ¯åœ–示", |
172 | "settings.service.form.headlineGeneral" : "一般", | 179 | "settings.service.form.headlineGeneral" : "一般", |
173 | "settings.service.form.headlineNotifications" : "Notifications", | 180 | "settings.service.form.headlineNotifications" : "通知", |
174 | "settings.service.form.icon" : "Custom icon", | 181 | "settings.service.form.icon" : "自訂圖示", |
175 | "settings.service.form.iconDelete" : "刪除", | 182 | "settings.service.form.iconDelete" : "刪除", |
176 | "settings.service.form.iconUpload" : "Drop your image, or click here", | 183 | "settings.service.form.iconUpload" : "æ‹–æ›³ä½ çš„åœ–ç‰‡ï¼Œæˆ–æŒ‰æ¤ä¸Šå‚³", |
177 | "settings.service.form.indirectMessageInfo" : "æ‚¨å°‡æ”¶åˆ°æœ‰é—œé »é“ä¸æ‰€æœ‰æ–°æ¶ˆæ¯çš„通知,而ä¸åƒ…僅是@username,@channel,@here,...", | 184 | "settings.service.form.indirectMessageInfo" : "æ‚¨å°‡æ”¶åˆ°æœ‰é—œé »é“ä¸æ‰€æœ‰æ–°æ¶ˆæ¯çš„通知,而ä¸åƒ…僅是@username,@channel,@here,...", |
178 | "settings.service.form.indirectMessages" : "顯示所有新消æ¯çš„消æ¯æ¨™èªŒ", | 185 | "settings.service.form.indirectMessages" : "顯示所有新消æ¯çš„消æ¯æ¨™èªŒ", |
179 | "settings.service.form.isMutedInfo" : "åœç”¨æ™‚,所有通知è²å’Œè²éŸ³æ’放都將éœéŸ³", | 186 | "settings.service.form.isMutedInfo" : "åœç”¨æ™‚,所有通知è²å’Œè²éŸ³æ’放都將éœéŸ³", |
180 | "settings.service.form.name" : "å稱", | 187 | "settings.service.form.name" : "å稱", |
188 | "settings.service.form.proxy.headline" : "Proxy Settings", | ||
189 | "settings.service.form.proxy.host" : "Proxy Host\/IP", | ||
190 | "settings.service.form.proxy.info" : "Proxy settings will not synced with the Franz servers.", | ||
191 | "settings.service.form.proxy.isEnabled" : "Use Proxy", | ||
192 | "settings.service.form.proxy.password" : "Password (optional)", | ||
193 | "settings.service.form.proxy.user" : "User (optional)", | ||
181 | "settings.service.form.saveButton" : "ä¿å˜æœå‹™", | 194 | "settings.service.form.saveButton" : "ä¿å˜æœå‹™", |
182 | "settings.service.form.tabHosted" : "託管", | 195 | "settings.service.form.tabHosted" : "託管", |
183 | "settings.service.form.tabOnPremise" : "自我託管âï¸", | 196 | "settings.service.form.tabOnPremise" : "自我託管âï¸", |
184 | "settings.service.form.team" : "團隊", | 197 | "settings.service.form.team" : "團隊", |
185 | "settings.service.form.useHostedService" : "Use the hosted {name} service.", | 198 | "settings.service.form.useHostedService" : "使用託管{name}æœå‹™", |
186 | "settings.service.form.yourServices" : "您的æœå‹™", | 199 | "settings.service.form.yourServices" : "您的æœå‹™", |
187 | "settings.services.deletedInfo" : "已刪除æœå‹™", | 200 | "settings.services.deletedInfo" : "已刪除æœå‹™", |
188 | "settings.services.discoverServices" : "發ç¾æœå‹™", | 201 | "settings.services.discoverServices" : "發ç¾æœå‹™", |
@@ -220,10 +233,12 @@ | |||
220 | "subscription.euTaxInfo" : "æ盟居民:å¯èƒ½æŽ¡ç”¨ç•¶åœ°éŠ·å”®ç¨…", | 233 | "subscription.euTaxInfo" : "æ盟居民:å¯èƒ½æŽ¡ç”¨ç•¶åœ°éŠ·å”®ç¨…", |
221 | "subscription.features.ads" : "無廣告,永é !", | 234 | "subscription.features.ads" : "無廣告,永é !", |
222 | "subscription.features.comingSoon" : "å³å°‡æŽ¨å‡º", | 235 | "subscription.features.comingSoon" : "å³å°‡æŽ¨å‡º", |
223 | "subscription.features.customServices" : "為您和您的團隊æä¾›ç§äººæœå‹™", | ||
224 | "subscription.features.encryptedSync" : "åŠ å¯†çš„æœƒè©±åŒæ¥", | 236 | "subscription.features.encryptedSync" : "åŠ å¯†çš„æœƒè©±åŒæ¥", |
237 | "subscription.features.noInterruptions" : "No app delays & nagging to upgrade license", | ||
225 | "subscription.features.onpremise" : "æ·»åŠ æœ¬åœ°\/託管æœå‹™å¦‚HipChat", | 238 | "subscription.features.onpremise" : "æ·»åŠ æœ¬åœ°\/託管æœå‹™å¦‚HipChat", |
226 | "subscription.features.vpn" : "代ç†å’ŒVPN支æŒ", | 239 | "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", |
240 | "subscription.features.proxy" : "Proxy support for services", | ||
241 | "subscription.features.spellchecker" : "Support for spellchecker", | ||
227 | "subscription.includedFeatures" : "包å«é«˜ç´šFranz付費帳戶", | 242 | "subscription.includedFeatures" : "包å«é«˜ç´šFranz付費帳戶", |
228 | "subscription.paymentSessionError" : "無法åˆå§‹åŒ–付款表單", | 243 | "subscription.paymentSessionError" : "無法åˆå§‹åŒ–付款表單", |
229 | "subscription.submit.label" : "我想支æŒFranz的開發", | 244 | "subscription.submit.label" : "我想支æŒFranz的開發", |
@@ -241,10 +256,10 @@ | |||
241 | "tabs.item.enableNotification" : "啟用通知", | 256 | "tabs.item.enableNotification" : "啟用通知", |
242 | "tabs.item.enableService" : "啟用æœå‹™", | 257 | "tabs.item.enableService" : "啟用æœå‹™", |
243 | "tabs.item.reload" : "é‡æ–°è¼‰å…¥", | 258 | "tabs.item.reload" : "é‡æ–°è¼‰å…¥", |
244 | "validation.email" : "{field} is not valid", | 259 | "validation.email" : "{field}無效", |
245 | "validation.minLength" : "{field} should be at least {length} characters long", | 260 | "validation.minLength" : "{field}長度至少應為{length}個å—", |
246 | "validation.required" : "{field} is required", | 261 | "validation.required" : "{field}為必填", |
247 | "validation.url" : "{field} is not a valid URL", | 262 | "validation.url" : "{field}ä¸æ˜¯å€‹æœ‰æ•ˆçš„網å€", |
248 | "welcome.loginButton" : "登入您的帳戶", | 263 | "welcome.loginButton" : "登入您的帳戶", |
249 | "welcome.signupButton" : "建立å…費帳號", | 264 | "welcome.signupButton" : "建立å…費帳號", |
250 | "welcome.slogan" : "ç‚ºä½ é€šä¿¡" | 265 | "welcome.slogan" : "ç‚ºä½ é€šä¿¡" |
diff --git a/src/index.js b/src/index.js index 5ba901b89..663f81cc9 100644 --- a/src/index.js +++ b/src/index.js | |||
@@ -1,10 +1,16 @@ | |||
1 | import { app, BrowserWindow, shell } from 'electron'; | 1 | import { app, BrowserWindow, shell, ipcMain } from 'electron'; |
2 | |||
2 | import fs from 'fs-extra'; | 3 | import fs from 'fs-extra'; |
3 | import path from 'path'; | 4 | import path from 'path'; |
4 | |||
5 | import windowStateKeeper from 'electron-window-state'; | 5 | import windowStateKeeper from 'electron-window-state'; |
6 | 6 | ||
7 | import { isDevMode, isMac, isWindows, isLinux } from './environment'; | 7 | import { isDevMode, isMac, isWindows, isLinux } from './environment'; |
8 | |||
9 | // DEV MODE: Save user data into FranzDev | ||
10 | if (isDevMode) { | ||
11 | app.setPath('userData', path.join(app.getPath('appData'), 'FranzDev')); | ||
12 | } | ||
13 | /* eslint-disable import/first */ | ||
8 | import ipcApi from './electron/ipc-api'; | 14 | import ipcApi from './electron/ipc-api'; |
9 | import Tray from './lib/Tray'; | 15 | import Tray from './lib/Tray'; |
10 | import Settings from './electron/Settings'; | 16 | import Settings from './electron/Settings'; |
@@ -12,7 +18,10 @@ import handleDeepLink from './electron/deepLinking'; | |||
12 | import { appId } from './package.json'; // eslint-disable-line import/no-unresolved | 18 | import { appId } from './package.json'; // eslint-disable-line import/no-unresolved |
13 | import './electron/exception'; | 19 | import './electron/exception'; |
14 | 20 | ||
15 | const debug = require('debug')('App'); | 21 | import { DEFAULT_APP_SETTINGS } from './config'; |
22 | /* eslint-enable import/first */ | ||
23 | |||
24 | const debug = require('debug')('Franz:App'); | ||
16 | 25 | ||
17 | // Keep a global reference of the window object, if you don't, the window will | 26 | // Keep a global reference of the window object, if you don't, the window will |
18 | // be closed automatically when the JavaScript object is garbage collected. | 27 | // be closed automatically when the JavaScript object is garbage collected. |
@@ -57,7 +66,8 @@ if (isLinux && ['Pantheon', 'Unity:Unity7'].indexOf(process.env.XDG_CURRENT_DESK | |||
57 | } | 66 | } |
58 | 67 | ||
59 | // Initialize Settings | 68 | // Initialize Settings |
60 | const settings = new Settings(); | 69 | const settings = new Settings('app', DEFAULT_APP_SETTINGS); |
70 | const proxySettings = new Settings('proxy'); | ||
61 | 71 | ||
62 | // Disable GPU acceleration | 72 | // Disable GPU acceleration |
63 | if (!settings.get('enableGPUAcceleration')) { | 73 | if (!settings.get('enableGPUAcceleration')) { |
@@ -82,14 +92,21 @@ const createWindow = () => { | |||
82 | minHeight: 500, | 92 | minHeight: 500, |
83 | titleBarStyle: isMac ? 'hidden' : '', | 93 | titleBarStyle: isMac ? 'hidden' : '', |
84 | frame: isLinux, | 94 | frame: isLinux, |
85 | backgroundColor: '#3498db', | 95 | backgroundColor: !settings.get('darkMode') ? '#3498db' : '#1E1E1E', |
86 | }); | 96 | }); |
87 | 97 | ||
88 | // Initialize System Tray | 98 | // Initialize System Tray |
89 | const trayIcon = new Tray(); | 99 | const trayIcon = new Tray(); |
90 | 100 | ||
91 | // Initialize ipcApi | 101 | // Initialize ipcApi |
92 | ipcApi({ mainWindow, settings, trayIcon }); | 102 | ipcApi({ |
103 | mainWindow, | ||
104 | settings: { | ||
105 | app: settings, | ||
106 | proxy: proxySettings, | ||
107 | }, | ||
108 | trayIcon, | ||
109 | }); | ||
93 | 110 | ||
94 | // Manage Window State | 111 | // Manage Window State |
95 | mainWindowState.manage(mainWindow); | 112 | mainWindowState.manage(mainWindow); |
@@ -115,7 +132,7 @@ const createWindow = () => { | |||
115 | mainWindow.hide(); | 132 | mainWindow.hide(); |
116 | } | 133 | } |
117 | 134 | ||
118 | if (isWindows && settings.get('minimizeToSystemTray')) { | 135 | if (isWindows) { |
119 | mainWindow.setSkipTaskbar(true); | 136 | mainWindow.setSkipTaskbar(true); |
120 | } | 137 | } |
121 | } else { | 138 | } else { |
@@ -172,6 +189,24 @@ const createWindow = () => { | |||
172 | // Some APIs can only be used after this event occurs. | 189 | // Some APIs can only be used after this event occurs. |
173 | app.on('ready', createWindow); | 190 | app.on('ready', createWindow); |
174 | 191 | ||
192 | // This is the worst possible implementation as the webview.webContents based callback doesn't work 🖕 | ||
193 | app.on('login', (event, webContents, request, authInfo, callback) => { | ||
194 | event.preventDefault(); | ||
195 | debug('browser login event', authInfo); | ||
196 | if (authInfo.isProxy && authInfo.scheme === 'basic') { | ||
197 | webContents.send('get-service-id'); | ||
198 | |||
199 | ipcMain.on('service-id', (e, id) => { | ||
200 | debug('Received service id', id); | ||
201 | |||
202 | const ps = proxySettings.get(id); | ||
203 | callback(ps.user, ps.password); | ||
204 | }); | ||
205 | } else { | ||
206 | // TODO: implement basic auth | ||
207 | } | ||
208 | }); | ||
209 | |||
175 | // Quit when all windows are closed. | 210 | // Quit when all windows are closed. |
176 | app.on('window-all-closed', () => { | 211 | app.on('window-all-closed', () => { |
177 | // On OS X it is common for applications and their menu bar | 212 | // On OS X it is common for applications and their menu bar |
diff --git a/src/lib/Menu.js b/src/lib/Menu.js index e3f8a04fa..32ec1b207 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js | |||
@@ -285,7 +285,7 @@ const _templateFactory = intl => [ | |||
285 | submenu: [ | 285 | submenu: [ |
286 | { | 286 | { |
287 | label: intl.formatMessage(menuItems.learnMore), | 287 | label: intl.formatMessage(menuItems.learnMore), |
288 | click() { shell.openExternal('http://meetfranz.com'); }, | 288 | click() { shell.openExternal('https://meetfranz.com'); }, |
289 | }, | 289 | }, |
290 | { | 290 | { |
291 | label: intl.formatMessage(menuItems.changelog), | 291 | label: intl.formatMessage(menuItems.changelog), |
@@ -296,7 +296,7 @@ const _templateFactory = intl => [ | |||
296 | }, | 296 | }, |
297 | { | 297 | { |
298 | label: intl.formatMessage(menuItems.support), | 298 | label: intl.formatMessage(menuItems.support), |
299 | click() { shell.openExternal('http://meetfranz.com/support'); }, | 299 | click() { shell.openExternal('https://meetfranz.com/support'); }, |
300 | }, | 300 | }, |
301 | { | 301 | { |
302 | type: 'separator', | 302 | type: 'separator', |
@@ -485,7 +485,9 @@ export default class FranzMenu { | |||
485 | this.stores = stores; | 485 | this.stores = stores; |
486 | this.actions = actions; | 486 | this.actions = actions; |
487 | 487 | ||
488 | autorun(this._build.bind(this)); | 488 | setTimeout(() => { |
489 | autorun(this._build.bind(this)); | ||
490 | }, 10); | ||
489 | } | 491 | } |
490 | 492 | ||
491 | rebuild() { | 493 | rebuild() { |
@@ -497,7 +499,6 @@ export default class FranzMenu { | |||
497 | } | 499 | } |
498 | 500 | ||
499 | _build() { | 501 | _build() { |
500 | // console.log(window.franz); | ||
501 | const serviceTpl = Object.assign([], this.serviceTpl); // need to clone object so we don't modify computed (cached) object | 502 | const serviceTpl = Object.assign([], this.serviceTpl); // need to clone object so we don't modify computed (cached) object |
502 | 503 | ||
503 | if (window.franz === undefined) { | 504 | if (window.franz === undefined) { |
@@ -521,6 +522,7 @@ export default class FranzMenu { | |||
521 | click: () => { | 522 | click: () => { |
522 | this.actions.service.openDevToolsForActiveService(); | 523 | this.actions.service.openDevToolsForActiveService(); |
523 | }, | 524 | }, |
525 | enabled: this.stores.user.isLoggedIn && this.stores.services.enabled.length > 0, | ||
524 | }); | 526 | }); |
525 | 527 | ||
526 | tpl[1].submenu.unshift({ | 528 | tpl[1].submenu.unshift({ |
@@ -559,6 +561,7 @@ export default class FranzMenu { | |||
559 | click: () => { | 561 | click: () => { |
560 | this.actions.ui.openSettings({ path: 'app' }); | 562 | this.actions.ui.openSettings({ path: 'app' }); |
561 | }, | 563 | }, |
564 | enabled: this.stores.user.isLoggedIn, | ||
562 | }, | 565 | }, |
563 | { | 566 | { |
564 | type: 'separator', | 567 | type: 'separator', |
@@ -640,6 +643,7 @@ export default class FranzMenu { | |||
640 | click: () => { | 643 | click: () => { |
641 | this.actions.ui.openSettings({ path: 'app' }); | 644 | this.actions.ui.openSettings({ path: 'app' }); |
642 | }, | 645 | }, |
646 | enabled: this.stores.user.isLoggedIn, | ||
643 | }, | 647 | }, |
644 | { | 648 | { |
645 | type: 'separator', | 649 | type: 'separator', |
@@ -661,6 +665,7 @@ export default class FranzMenu { | |||
661 | click: () => { | 665 | click: () => { |
662 | this.actions.ui.openSettings({ path: 'recipes' }); | 666 | this.actions.ui.openSettings({ path: 'recipes' }); |
663 | }, | 667 | }, |
668 | enabled: this.stores.user.isLoggedIn, | ||
664 | }, { | 669 | }, { |
665 | type: 'separator', | 670 | type: 'separator', |
666 | }); | 671 | }); |
@@ -680,7 +685,7 @@ export default class FranzMenu { | |||
680 | if (this.stores.user.isLoggedIn) { | 685 | if (this.stores.user.isLoggedIn) { |
681 | return services.map((service, i) => ({ | 686 | return services.map((service, i) => ({ |
682 | label: this._getServiceName(service), | 687 | label: this._getServiceName(service), |
683 | accelerator: i <= 9 ? `${cmdKey}+${i + 1}` : null, | 688 | accelerator: i < 9 ? `${cmdKey}+${i + 1}` : null, |
684 | type: 'radio', | 689 | type: 'radio', |
685 | checked: service.isActive, | 690 | checked: service.isActive, |
686 | click: () => { | 691 | click: () => { |
diff --git a/src/lib/analytics.js b/src/lib/analytics.js index 585cbcdba..8b9a44579 100644 --- a/src/lib/analytics.js +++ b/src/lib/analytics.js | |||
@@ -2,7 +2,7 @@ import { remote } from 'electron'; | |||
2 | import { GA_ID } from '../config'; | 2 | import { GA_ID } from '../config'; |
3 | // import { isDevMode } from '../environment'; | 3 | // import { isDevMode } from '../environment'; |
4 | 4 | ||
5 | const debug = require('debug')('Analytics'); | 5 | const debug = require('debug')('Franz:Analytics'); |
6 | 6 | ||
7 | const { app } = remote; | 7 | const { app } = remote; |
8 | 8 | ||
diff --git a/src/models/News.js b/src/models/News.js index a96e6550f..caf1d70e5 100644 --- a/src/models/News.js +++ b/src/models/News.js | |||
@@ -1,10 +1,10 @@ | |||
1 | // @flow | 1 | // @flow |
2 | 2 | ||
3 | export default class News { | 3 | export default class News { |
4 | id: string = ''; | 4 | id = ''; |
5 | message: string = ''; | 5 | message = ''; |
6 | type: string = 'primary'; | 6 | type = 'primary'; |
7 | sticky: bool = false; | 7 | sticky = false; |
8 | 8 | ||
9 | constructor(data) { | 9 | constructor(data) { |
10 | if (!data.id) { | 10 | if (!data.id) { |
diff --git a/src/models/Plan.js b/src/models/Plan.js index e77353824..c7b4a0962 100644 --- a/src/models/Plan.js +++ b/src/models/Plan.js | |||
@@ -1,11 +1,11 @@ | |||
1 | // @flow | 1 | // @flow |
2 | 2 | ||
3 | export default class Plan { | 3 | export default class Plan { |
4 | month: { | 4 | month = { |
5 | id: '', | 5 | id: '', |
6 | price: 0, | 6 | price: 0, |
7 | } | 7 | } |
8 | year: { | 8 | year = { |
9 | id: '', | 9 | id: '', |
10 | price: 0, | 10 | price: 0, |
11 | } | 11 | } |
diff --git a/src/models/Recipe.js b/src/models/Recipe.js index 032a9aa19..43c44514c 100644 --- a/src/models/Recipe.js +++ b/src/models/Recipe.js | |||
@@ -1,5 +1,7 @@ | |||
1 | import emailParser from 'address-rfc2822'; | 1 | import emailParser from 'address-rfc2822'; |
2 | import semver from 'semver'; | 2 | import semver from 'semver'; |
3 | import fs from 'fs-extra'; | ||
4 | import path from 'path'; | ||
3 | 5 | ||
4 | export default class Recipe { | 6 | export default class Recipe { |
5 | id = ''; | 7 | id = ''; |
@@ -73,4 +75,8 @@ export default class Recipe { | |||
73 | 75 | ||
74 | return []; | 76 | return []; |
75 | } | 77 | } |
78 | |||
79 | get hasDarkMode() { | ||
80 | return fs.pathExistsSync(path.join(this.path, 'darkmode.css')); | ||
81 | } | ||
76 | } | 82 | } |
diff --git a/src/models/RecipePreview.js b/src/models/RecipePreview.js index 525a5c4b5..7470d757a 100644 --- a/src/models/RecipePreview.js +++ b/src/models/RecipePreview.js | |||
@@ -1,10 +1,10 @@ | |||
1 | // @flow | 1 | // @flow |
2 | 2 | ||
3 | export default class RecipePreview { | 3 | export default class RecipePreview { |
4 | id: string = ''; | 4 | id = ''; |
5 | name: string = ''; | 5 | name = ''; |
6 | icon: string = ''; // TODO: check if this isn't replaced by `icons` | 6 | icon = ''; // TODO: check if this isn't replaced by `icons` |
7 | featured: bool = false; | 7 | featured = false; |
8 | 8 | ||
9 | constructor(data) { | 9 | constructor(data) { |
10 | if (!data.id) { | 10 | if (!data.id) { |
diff --git a/src/models/Service.js b/src/models/Service.js index bafb3f564..41180dd76 100644 --- a/src/models/Service.js +++ b/src/models/Service.js | |||
@@ -7,7 +7,7 @@ export default class Service { | |||
7 | recipe = ''; | 7 | recipe = ''; |
8 | webview = null; | 8 | webview = null; |
9 | timer = null; | 9 | timer = null; |
10 | events: {}; | 10 | events = {}; |
11 | 11 | ||
12 | isAttached = false; | 12 | isAttached = false; |
13 | 13 | ||
@@ -28,6 +28,7 @@ export default class Service { | |||
28 | @observable iconUrl = ''; | 28 | @observable iconUrl = ''; |
29 | @observable hasCustomUploadedIcon = false; | 29 | @observable hasCustomUploadedIcon = false; |
30 | @observable hasCrashed = false; | 30 | @observable hasCrashed = false; |
31 | @observable isDarkModeEnabled = false; | ||
31 | 32 | ||
32 | constructor(data, recipe) { | 33 | constructor(data, recipe) { |
33 | if (!data) { | 34 | if (!data) { |
@@ -64,8 +65,12 @@ export default class Service { | |||
64 | 65 | ||
65 | this.isMuted = data.isMuted !== undefined ? data.isMuted : this.isMuted; | 66 | this.isMuted = data.isMuted !== undefined ? data.isMuted : this.isMuted; |
66 | 67 | ||
68 | this.isDarkModeEnabled = data.isDarkModeEnabled !== undefined ? data.isDarkModeEnabled : this.isDarkModeEnabled; | ||
69 | |||
67 | this.hasCustomUploadedIcon = data.hasCustomIcon !== undefined ? data.hasCustomIcon : this.hasCustomUploadedIcon; | 70 | this.hasCustomUploadedIcon = data.hasCustomIcon !== undefined ? data.hasCustomIcon : this.hasCustomUploadedIcon; |
68 | 71 | ||
72 | this.proxy = data.proxy !== undefined ? data.proxy : this.proxy; | ||
73 | |||
69 | this.recipe = recipe; | 74 | this.recipe = recipe; |
70 | 75 | ||
71 | autorun(() => { | 76 | autorun(() => { |
diff --git a/src/models/Settings.js b/src/models/Settings.js deleted file mode 100644 index 0e4c59057..000000000 --- a/src/models/Settings.js +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | import { observable, extendObservable } from 'mobx'; | ||
2 | import { DEFAULT_APP_SETTINGS } from '../config'; | ||
3 | |||
4 | export default class Settings { | ||
5 | @observable app = DEFAULT_APP_SETTINGS | ||
6 | |||
7 | @observable service = { | ||
8 | activeService: '', | ||
9 | } | ||
10 | |||
11 | @observable group = { | ||
12 | collapsed: [], | ||
13 | disabled: [], | ||
14 | } | ||
15 | |||
16 | @observable stats = { | ||
17 | appStarts: 0, | ||
18 | } | ||
19 | |||
20 | @observable migration = {} | ||
21 | |||
22 | constructor({ app, service, group, stats, migration }) { | ||
23 | Object.assign(this.app, app); | ||
24 | Object.assign(this.service, service); | ||
25 | Object.assign(this.group, group); | ||
26 | Object.assign(this.stats, stats); | ||
27 | Object.assign(this.migration, migration); | ||
28 | } | ||
29 | |||
30 | update(data) { | ||
31 | extendObservable(this, data); | ||
32 | } | ||
33 | } | ||
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index 38edff1b4..6f156a96d 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js | |||
@@ -12,12 +12,14 @@ import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config'; | |||
12 | import { isMac, isLinux, isWindows } from '../environment'; | 12 | import { isMac, isLinux, isWindows } from '../environment'; |
13 | import locales from '../i18n/translations'; | 13 | import locales from '../i18n/translations'; |
14 | import { gaEvent } from '../lib/analytics'; | 14 | import { gaEvent } from '../lib/analytics'; |
15 | import { onVisibilityChange } from '../helpers/visibility-helper'; | ||
16 | import { getLocale } from '../helpers/i18n-helpers'; | ||
15 | 17 | ||
16 | import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js'; | 18 | import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js'; |
17 | 19 | ||
18 | const debug = require('debug')('AppStore'); | 20 | const debug = require('debug')('Franz:AppStore'); |
19 | 21 | ||
20 | const { app } = remote; | 22 | const { app, systemPreferences } = remote; |
21 | 23 | ||
22 | const mainWindow = remote.getCurrentWindow(); | 24 | const mainWindow = remote.getCurrentWindow(); |
23 | 25 | ||
@@ -50,10 +52,16 @@ export default class AppStore extends Store { | |||
50 | 52 | ||
51 | @observable isSystemMuteOverridden = false; | 53 | @observable isSystemMuteOverridden = false; |
52 | 54 | ||
55 | @observable isSystemDarkModeEnabled = false; | ||
56 | |||
53 | @observable isClearingAllCache = false; | 57 | @observable isClearingAllCache = false; |
54 | 58 | ||
55 | @observable isFullScreen = mainWindow.isFullScreen(); | 59 | @observable isFullScreen = mainWindow.isFullScreen(); |
56 | 60 | ||
61 | @observable isFocused = true; | ||
62 | |||
63 | dictionaries = []; | ||
64 | |||
57 | constructor(...args) { | 65 | constructor(...args) { |
58 | super(...args); | 66 | super(...args); |
59 | 67 | ||
@@ -77,7 +85,7 @@ export default class AppStore extends Store { | |||
77 | ]); | 85 | ]); |
78 | } | 86 | } |
79 | 87 | ||
80 | setup() { | 88 | async setup() { |
81 | this._appStartsCounter(); | 89 | this._appStartsCounter(); |
82 | // Focus the active service | 90 | // Focus the active service |
83 | window.addEventListener('focus', this.actions.service.focusActiveService); | 91 | window.addEventListener('focus', this.actions.service.focusActiveService); |
@@ -159,6 +167,14 @@ export default class AppStore extends Store { | |||
159 | this.locale = this._getDefaultLocale(); | 167 | this.locale = this._getDefaultLocale(); |
160 | 168 | ||
161 | this._healthCheck(); | 169 | this._healthCheck(); |
170 | |||
171 | this.isSystemDarkModeEnabled = systemPreferences.isDarkMode(); | ||
172 | |||
173 | onVisibilityChange((isVisible) => { | ||
174 | this.isFocused = isVisible; | ||
175 | |||
176 | debug('Window is visible/focused', isVisible); | ||
177 | }); | ||
162 | } | 178 | } |
163 | 179 | ||
164 | @computed get cacheSize() { | 180 | @computed get cacheSize() { |
@@ -304,31 +320,12 @@ export default class AppStore extends Store { | |||
304 | } | 320 | } |
305 | 321 | ||
306 | _getDefaultLocale() { | 322 | _getDefaultLocale() { |
307 | let locale = app.getLocale(); | 323 | return getLocale({ |
308 | if (locales[locale] === undefined) { | 324 | locale: app.getLocale(), |
309 | let localeFuzzy; | 325 | locales, |
310 | Object.keys(locales).forEach((localStr) => { | 326 | defaultLocale, |
311 | if (locales && Object.hasOwnProperty.call(locales, localStr)) { | 327 | fallbackLocale: DEFAULT_APP_SETTINGS.fallbackLocale, |
312 | if (locale.substring(0, 2) === localStr.substring(0, 2)) { | 328 | }); |
313 | localeFuzzy = localStr; | ||
314 | } | ||
315 | } | ||
316 | }); | ||
317 | |||
318 | if (localeFuzzy !== undefined) { | ||
319 | locale = localeFuzzy; | ||
320 | } | ||
321 | } | ||
322 | |||
323 | if (locales[locale] === undefined) { | ||
324 | locale = defaultLocale; | ||
325 | } | ||
326 | |||
327 | if (!locale) { | ||
328 | locale = DEFAULT_APP_SETTINGS.fallbackLocale; | ||
329 | } | ||
330 | |||
331 | return locale; | ||
332 | } | 329 | } |
333 | 330 | ||
334 | _muteAppHandler() { | 331 | _muteAppHandler() { |
diff --git a/src/stores/DictionaryStore.js b/src/stores/DictionaryStore.js new file mode 100644 index 000000000..b9c5f2abf --- /dev/null +++ b/src/stores/DictionaryStore.js | |||
@@ -0,0 +1,45 @@ | |||
1 | import { observable } from 'mobx'; | ||
2 | import { createDownloader } from 'hunspell-dict-downloader'; | ||
3 | |||
4 | import Store from './lib/Store'; | ||
5 | |||
6 | import { DICTIONARY_PATH } from '../config'; | ||
7 | |||
8 | const debug = require('debug')('Franz:DictionaryStore'); | ||
9 | |||
10 | export default class DictionaryStore extends Store { | ||
11 | @observable available = [] | ||
12 | @observable installed = [] | ||
13 | |||
14 | _dictDownloader = null | ||
15 | |||
16 | constructor(...args) { | ||
17 | super(...args); | ||
18 | |||
19 | this.registerReactions([ | ||
20 | this._downloadDictForUserLocale.bind(this), | ||
21 | ]); | ||
22 | } | ||
23 | |||
24 | async setup() { | ||
25 | this._dictDownloader = await createDownloader(DICTIONARY_PATH); | ||
26 | debug('dicts', this._dictDownloader); | ||
27 | |||
28 | this.available = this._dictDownloader.availableDictionaries; | ||
29 | this.installed = this._dictDownloader.installedDictionaries; | ||
30 | |||
31 | if (!this.installed.includes('en-us')) { | ||
32 | this._dictDownloader.installDictionary('en-us'); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | _downloadDictForUserLocale() { | ||
37 | const spellcheckerLanguage = this.stores.settings.app.spellcheckerLanguage; | ||
38 | |||
39 | debug('trying to Downloading dict for', spellcheckerLanguage); | ||
40 | if (!this.installed.includes(spellcheckerLanguage) && this.available.includes(spellcheckerLanguage) && spellcheckerLanguage !== 'en-us') { | ||
41 | debug('Downloading dict for', spellcheckerLanguage); | ||
42 | this._dictDownloader.installDictionary(spellcheckerLanguage); | ||
43 | } | ||
44 | } | ||
45 | } | ||
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js new file mode 100644 index 000000000..10c893d3f --- /dev/null +++ b/src/stores/FeaturesStore.js | |||
@@ -0,0 +1,50 @@ | |||
1 | import { computed, observable } from 'mobx'; | ||
2 | |||
3 | import Store from './lib/Store'; | ||
4 | import CachedRequest from './lib/CachedRequest'; | ||
5 | |||
6 | import delayApp from '../features/delayApp'; | ||
7 | import spellchecker from '../features/spellchecker'; | ||
8 | import serviceProxy from '../features/serviceProxy'; | ||
9 | |||
10 | import { DEFAULT_FEATURES_CONFIG } from '../config'; | ||
11 | |||
12 | export default class FeaturesStore extends Store { | ||
13 | @observable defaultFeaturesRequest = new CachedRequest(this.api.features, 'default'); | ||
14 | @observable featuresRequest = new CachedRequest(this.api.features, 'features'); | ||
15 | |||
16 | async setup() { | ||
17 | this.registerReactions([ | ||
18 | this._monitorLoginStatus.bind(this), | ||
19 | ]); | ||
20 | |||
21 | await this.featuresRequest._promise; | ||
22 | setTimeout(this._enableFeatures.bind(this), 1); | ||
23 | } | ||
24 | |||
25 | @computed get anonymousFeatures() { | ||
26 | return this.defaultFeaturesRequest.execute().result || DEFAULT_FEATURES_CONFIG; | ||
27 | } | ||
28 | |||
29 | @computed get features() { | ||
30 | if (this.stores.user.isLoggedIn) { | ||
31 | return this.featuresRequest.execute().result || DEFAULT_FEATURES_CONFIG; | ||
32 | } | ||
33 | |||
34 | return DEFAULT_FEATURES_CONFIG; | ||
35 | } | ||
36 | |||
37 | _monitorLoginStatus() { | ||
38 | if (this.stores.user.isLoggedIn) { | ||
39 | this.featuresRequest.invalidate({ immediately: true }); | ||
40 | } else { | ||
41 | this.defaultFeaturesRequest.invalidate({ immediately: true }); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | _enableFeatures() { | ||
46 | delayApp(this.stores, this.actions); | ||
47 | spellchecker(this.stores, this.actions); | ||
48 | serviceProxy(this.stores, this.actions); | ||
49 | } | ||
50 | } | ||
diff --git a/src/stores/RecipesStore.js b/src/stores/RecipesStore.js index a24308f6a..f2480bc8e 100644 --- a/src/stores/RecipesStore.js +++ b/src/stores/RecipesStore.js | |||
@@ -5,7 +5,7 @@ import CachedRequest from './lib/CachedRequest'; | |||
5 | import Request from './lib/Request'; | 5 | import Request from './lib/Request'; |
6 | import { matchRoute } from '../helpers/routing-helpers'; | 6 | import { matchRoute } from '../helpers/routing-helpers'; |
7 | 7 | ||
8 | const debug = require('debug')('RecipeStore'); | 8 | const debug = require('debug')('Franz:RecipeStore'); |
9 | 9 | ||
10 | export default class RecipesStore extends Store { | 10 | export default class RecipesStore extends Store { |
11 | @observable allRecipesRequest = new CachedRequest(this.api.recipes, 'all'); | 11 | @observable allRecipesRequest = new CachedRequest(this.api.recipes, 'all'); |
diff --git a/src/stores/RequestStore.js b/src/stores/RequestStore.js index 595852583..bbfe6f6df 100644 --- a/src/stores/RequestStore.js +++ b/src/stores/RequestStore.js | |||
@@ -2,7 +2,7 @@ import { action, computed, observable } from 'mobx'; | |||
2 | 2 | ||
3 | import Store from './lib/Store'; | 3 | import Store from './lib/Store'; |
4 | 4 | ||
5 | const debug = require('debug')('RequestsStore'); | 5 | const debug = require('debug')('Franz:RequestsStore'); |
6 | 6 | ||
7 | export default class RequestStore extends Store { | 7 | export default class RequestStore extends Store { |
8 | @observable userInfoRequest; | 8 | @observable userInfoRequest; |
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index ccb85421a..99b091589 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js | |||
@@ -7,7 +7,7 @@ import CachedRequest from './lib/CachedRequest'; | |||
7 | import { matchRoute } from '../helpers/routing-helpers'; | 7 | import { matchRoute } from '../helpers/routing-helpers'; |
8 | import { gaEvent } from '../lib/analytics'; | 8 | import { gaEvent } from '../lib/analytics'; |
9 | 9 | ||
10 | const debug = require('debug')('ServiceStore'); | 10 | const debug = require('debug')('Franz:ServiceStore'); |
11 | 11 | ||
12 | export default class ServicesStore extends Store { | 12 | export default class ServicesStore extends Store { |
13 | @observable allServicesRequest = new CachedRequest(this.api.services, 'all'); | 13 | @observable allServicesRequest = new CachedRequest(this.api.services, 'all'); |
@@ -67,9 +67,14 @@ export default class ServicesStore extends Store { | |||
67 | } | 67 | } |
68 | 68 | ||
69 | setup() { | 69 | setup() { |
70 | // Single key reactions | 70 | // Single key reactions for the sake of your CPU |
71 | reaction( | 71 | reaction( |
72 | () => this.stores.settings.all.app.enableSpellchecking, | 72 | () => this.stores.settings.app.enableSpellchecking, |
73 | () => this._shareSettingsWithServiceProcess(), | ||
74 | ); | ||
75 | |||
76 | reaction( | ||
77 | () => this.stores.settings.app.spellcheckerLanguage, | ||
73 | () => this._shareSettingsWithServiceProcess(), | 78 | () => this._shareSettingsWithServiceProcess(), |
74 | ); | 79 | ); |
75 | } | 80 | } |
@@ -93,7 +98,7 @@ export default class ServicesStore extends Store { | |||
93 | return this.stores.settings.all.app.showDisabledServices ? this.all : this.enabled; | 98 | return this.stores.settings.all.app.showDisabledServices ? this.all : this.enabled; |
94 | } | 99 | } |
95 | 100 | ||
96 | // This is just used to avoid unnecessary rerendering of resource-heavy webviews | 101 | // This is just used to avoid unnecessary rerendering of resource-heavy webviews |
97 | @computed get allDisplayedUnordered() { | 102 | @computed get allDisplayedUnordered() { |
98 | const services = this.allServicesRequest.execute().result || []; | 103 | const services = this.allServicesRequest.execute().result || []; |
99 | return this.stores.settings.all.app.showDisabledServices ? services : services.filter(service => service.isEnabled); | 104 | return this.stores.settings.all.app.showDisabledServices ? services : services.filter(service => service.isEnabled); |
@@ -143,6 +148,7 @@ export default class ServicesStore extends Store { | |||
143 | // Actions | 148 | // Actions |
144 | @action async _createService({ recipeId, serviceData, redirect = true }) { | 149 | @action async _createService({ recipeId, serviceData, redirect = true }) { |
145 | const data = this._cleanUpTeamIdAndCustomUrl(recipeId, serviceData); | 150 | const data = this._cleanUpTeamIdAndCustomUrl(recipeId, serviceData); |
151 | |||
146 | const response = await this.createServiceRequest.execute(recipeId, data)._promise; | 152 | const response = await this.createServiceRequest.execute(recipeId, data)._promise; |
147 | 153 | ||
148 | this.allServicesRequest.patch((result) => { | 154 | this.allServicesRequest.patch((result) => { |
@@ -150,6 +156,13 @@ export default class ServicesStore extends Store { | |||
150 | result.push(response.data); | 156 | result.push(response.data); |
151 | }); | 157 | }); |
152 | 158 | ||
159 | this.actions.settings.update({ | ||
160 | type: 'proxy', | ||
161 | data: { | ||
162 | [`${response.data.id}`]: data.proxy, | ||
163 | }, | ||
164 | }); | ||
165 | |||
153 | this.actionStatus = response.status || []; | 166 | this.actionStatus = response.status || []; |
154 | 167 | ||
155 | if (redirect) { | 168 | if (redirect) { |
@@ -214,6 +227,21 @@ export default class ServicesStore extends Store { | |||
214 | await request._promise; | 227 | await request._promise; |
215 | this.actionStatus = request.result.status; | 228 | this.actionStatus = request.result.status; |
216 | 229 | ||
230 | if (service.isEnabled) { | ||
231 | this._sendIPCMessage({ | ||
232 | serviceId, | ||
233 | channel: 'service-settings-update', | ||
234 | args: newData, | ||
235 | }); | ||
236 | } | ||
237 | |||
238 | this.actions.settings.update({ | ||
239 | type: 'proxy', | ||
240 | data: { | ||
241 | [`${serviceId}`]: data.proxy, | ||
242 | }, | ||
243 | }); | ||
244 | |||
217 | if (redirect) { | 245 | if (redirect) { |
218 | this.stores.router.push('/settings/services'); | 246 | this.stores.router.push('/settings/services'); |
219 | gaEvent('Service', 'update', service.recipe.id); | 247 | gaEvent('Service', 'update', service.recipe.id); |
@@ -411,6 +439,8 @@ export default class ServicesStore extends Store { | |||
411 | 439 | ||
412 | @action _reload({ serviceId }) { | 440 | @action _reload({ serviceId }) { |
413 | const service = this.one(serviceId); | 441 | const service = this.one(serviceId); |
442 | if (!service.isEnabled) return; | ||
443 | |||
414 | service.resetMessageCount(); | 444 | service.resetMessageCount(); |
415 | 445 | ||
416 | service.webview.loadURL(service.url); | 446 | service.webview.loadURL(service.url); |
@@ -567,9 +597,10 @@ export default class ServicesStore extends Store { | |||
567 | } | 597 | } |
568 | 598 | ||
569 | _shareSettingsWithServiceProcess() { | 599 | _shareSettingsWithServiceProcess() { |
600 | const settings = this.stores.settings.app; | ||
570 | this.actions.service.sendIPCMessageToAllServices({ | 601 | this.actions.service.sendIPCMessageToAllServices({ |
571 | channel: 'settings-update', | 602 | channel: 'settings-update', |
572 | args: this.stores.settings.all.app, | 603 | args: settings, |
573 | }); | 604 | }); |
574 | } | 605 | } |
575 | 606 | ||
diff --git a/src/stores/SettingsStore.js b/src/stores/SettingsStore.js index d8519c609..9ea14a911 100644 --- a/src/stores/SettingsStore.js +++ b/src/stores/SettingsStore.js | |||
@@ -1,54 +1,105 @@ | |||
1 | import { remote, ipcRenderer } from 'electron'; | ||
1 | import { action, computed, observable } from 'mobx'; | 2 | import { action, computed, observable } from 'mobx'; |
2 | import localStorage from 'mobx-localstorage'; | 3 | import localStorage from 'mobx-localstorage'; |
3 | 4 | ||
4 | import Store from './lib/Store'; | 5 | import Store from './lib/Store'; |
5 | import SettingsModel from '../models/Settings'; | ||
6 | import Request from './lib/Request'; | 6 | import Request from './lib/Request'; |
7 | import CachedRequest from './lib/CachedRequest'; | 7 | import CachedRequest from './lib/CachedRequest'; |
8 | import { getLocale } from '../helpers/i18n-helpers'; | ||
8 | 9 | ||
9 | const debug = require('debug')('SettingsStore'); | 10 | import { DEFAULT_APP_SETTINGS, FILE_SYSTEM_SETTINGS_TYPES } from '../config'; |
11 | import { SPELLCHECKER_LOCALES } from '../i18n/languages'; | ||
12 | |||
13 | const { systemPreferences } = remote; | ||
14 | const debug = require('debug')('Franz:SettingsStore'); | ||
10 | 15 | ||
11 | export default class SettingsStore extends Store { | 16 | export default class SettingsStore extends Store { |
12 | @observable appSettingsRequest = new CachedRequest(this.api.local, 'getAppSettings'); | 17 | @observable appSettingsRequest = new CachedRequest(this.api.local, 'getAppSettings'); |
13 | @observable updateAppSettingsRequest = new Request(this.api.local, 'updateAppSettings'); | 18 | @observable updateAppSettingsRequest = new Request(this.api.local, 'updateAppSettings'); |
14 | 19 | ||
20 | @observable fileSystemSettingsRequests = []; | ||
21 | |||
22 | fileSystemSettingsTypes = FILE_SYSTEM_SETTINGS_TYPES; | ||
23 | @observable _fileSystemSettingsCache = { | ||
24 | app: DEFAULT_APP_SETTINGS, | ||
25 | proxy: {}, | ||
26 | }; | ||
27 | |||
15 | constructor(...args) { | 28 | constructor(...args) { |
16 | super(...args); | 29 | super(...args); |
17 | 30 | ||
18 | // Register action handlers | 31 | // Register action handlers |
19 | this.actions.settings.update.listen(this._update.bind(this)); | 32 | this.actions.settings.update.listen(this._update.bind(this)); |
20 | this.actions.settings.remove.listen(this._remove.bind(this)); | 33 | this.actions.settings.remove.listen(this._remove.bind(this)); |
34 | |||
35 | this.fileSystemSettingsTypes.forEach((type) => { | ||
36 | this.fileSystemSettingsRequests[type] = new CachedRequest(this.api.local, 'getAppSettings'); | ||
37 | }); | ||
38 | |||
39 | ipcRenderer.on('appSettings', (event, resp) => { | ||
40 | debug('Get appSettings resolves', resp, resp.type, resp.data); | ||
41 | |||
42 | this._fileSystemSettingsCache[resp.type] = resp.data; | ||
43 | }); | ||
44 | |||
45 | this.fileSystemSettingsTypes.forEach((type) => { | ||
46 | ipcRenderer.send('getAppSettings', type); | ||
47 | }); | ||
21 | } | 48 | } |
22 | 49 | ||
23 | async setup() { | 50 | async setup() { |
24 | // We need to wait until `appSettingsRequest` has been executed once, otherwise we can't patch the result. If we don't wait we'd run into an issue with mobx not reacting to changes of previously not existing keys | 51 | // We need to wait until `appSettingsRequest` has been executed once, otherwise we can't patch the result. If we don't wait we'd run into an issue with mobx not reacting to changes of previously not existing keys |
25 | await this.appSettingsRequest._promise; | 52 | await this.appSettingsRequest._promise; |
26 | this._migrate(); | 53 | await this._migrate(); |
54 | } | ||
55 | |||
56 | @computed get app() { | ||
57 | return this._fileSystemSettingsCache.app || DEFAULT_APP_SETTINGS; | ||
58 | } | ||
59 | |||
60 | @computed get proxy() { | ||
61 | return this._fileSystemSettingsCache.proxy || {}; | ||
62 | } | ||
63 | |||
64 | @computed get service() { | ||
65 | return localStorage.getItem('service') || { | ||
66 | activeService: '', | ||
67 | }; | ||
68 | } | ||
69 | |||
70 | @computed get stats() { | ||
71 | return localStorage.getItem('stats') || { | ||
72 | activeService: '', | ||
73 | }; | ||
74 | } | ||
75 | |||
76 | @computed get migration() { | ||
77 | return localStorage.getItem('migration') || {}; | ||
27 | } | 78 | } |
28 | 79 | ||
29 | @computed get all() { | 80 | @computed get all() { |
30 | return new SettingsModel({ | 81 | return { |
31 | app: this.appSettingsRequest.execute().result || {}, | 82 | app: this.app, |
32 | service: localStorage.getItem('service') || {}, | 83 | proxy: this.proxy, |
33 | group: localStorage.getItem('group') || {}, | 84 | service: this.service, |
34 | stats: localStorage.getItem('stats') || {}, | 85 | stats: this.stats, |
35 | migration: localStorage.getItem('migration') || {}, | 86 | migration: this.migration, |
36 | }); | 87 | }; |
37 | } | 88 | } |
38 | 89 | ||
39 | @action async _update({ type, data }) { | 90 | @action async _update({ type, data }) { |
40 | const appSettings = this.all; | 91 | const appSettings = this.all; |
41 | if (type !== 'app') { | 92 | if (!this.fileSystemSettingsTypes.includes(type)) { |
42 | debug('Update settings', type, data, this.all); | 93 | debug('Update settings', type, data, this.all); |
43 | localStorage.setItem(type, Object.assign(appSettings[type], data)); | 94 | localStorage.setItem(type, Object.assign(appSettings[type], data)); |
44 | } else { | 95 | } else { |
45 | debug('Update settings on file system', type, data); | 96 | debug('Update settings on file system', type, data); |
46 | this.updateAppSettingsRequest.execute(data); | 97 | ipcRenderer.send('updateAppSettings', { |
47 | 98 | type, | |
48 | this.appSettingsRequest.patch((result) => { | 99 | data, |
49 | if (!result) return; | ||
50 | Object.assign(result, data); | ||
51 | }); | 100 | }); |
101 | |||
102 | Object.assign(this._fileSystemSettingsCache[type], data); | ||
52 | } | 103 | } |
53 | } | 104 | } |
54 | 105 | ||
@@ -67,8 +118,8 @@ export default class SettingsStore extends Store { | |||
67 | } | 118 | } |
68 | 119 | ||
69 | // Helper | 120 | // Helper |
70 | _migrate() { | 121 | async _migrate() { |
71 | const legacySettings = localStorage.getItem('app'); | 122 | const legacySettings = localStorage.getItem('app') || {}; |
72 | 123 | ||
73 | if (!this.all.migration['5.0.0-beta.17-settings']) { | 124 | if (!this.all.migration['5.0.0-beta.17-settings']) { |
74 | this.actions.settings.update({ | 125 | this.actions.settings.update({ |
@@ -104,5 +155,34 @@ export default class SettingsStore extends Store { | |||
104 | 155 | ||
105 | debug('Migrated settings to split stores'); | 156 | debug('Migrated settings to split stores'); |
106 | } | 157 | } |
158 | |||
159 | // Enable dark mode once | ||
160 | if (!this.all.migration['5.0.0-beta.19-settings']) { | ||
161 | const spellcheckerLanguage = getLocale({ | ||
162 | locale: this.stores.settings.app.locale, | ||
163 | locales: SPELLCHECKER_LOCALES, | ||
164 | defaultLocale: DEFAULT_APP_SETTINGS.spellcheckerLanguage, | ||
165 | fallbackLocale: DEFAULT_APP_SETTINGS.spellcheckerLanguage, | ||
166 | }); | ||
167 | |||
168 | this.actions.settings.update({ | ||
169 | type: 'app', | ||
170 | data: { | ||
171 | darkMode: systemPreferences.isDarkMode(), | ||
172 | spellcheckerLanguage, | ||
173 | }, | ||
174 | }); | ||
175 | |||
176 | this.actions.settings.update({ | ||
177 | type: 'migration', | ||
178 | data: { | ||
179 | '5.0.0-beta.19-settings': true, | ||
180 | }, | ||
181 | }); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | _getFileBasedSettings(type) { | ||
186 | ipcRenderer.send('getAppSettings', type); | ||
107 | } | 187 | } |
108 | } | 188 | } |
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js index b391bdcae..d37ebe4c7 100644 --- a/src/stores/UIStore.js +++ b/src/stores/UIStore.js | |||
@@ -1,6 +1,8 @@ | |||
1 | import { action, observable, computed } from 'mobx'; | 1 | import { action, observable, computed } from 'mobx'; |
2 | 2 | ||
3 | import Store from './lib/Store'; | 3 | import Store from './lib/Store'; |
4 | import * as themeDefault from '../theme/default'; | ||
5 | import * as themeDark from '../theme/dark'; | ||
4 | 6 | ||
5 | export default class UIStore extends Store { | 7 | export default class UIStore extends Store { |
6 | @observable showServicesUpdatedInfoBar = false; | 8 | @observable showServicesUpdatedInfoBar = false; |
@@ -20,13 +22,21 @@ export default class UIStore extends Store { | |||
20 | return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.isAppMuted; | 22 | return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.isAppMuted; |
21 | } | 23 | } |
22 | 24 | ||
25 | @computed get theme() { | ||
26 | if (this.stores.settings.all.app.darkMode) { | ||
27 | return Object.assign({}, themeDefault, themeDark); | ||
28 | } | ||
29 | |||
30 | return themeDefault; | ||
31 | } | ||
32 | |||
23 | // Actions | 33 | // Actions |
24 | @action _openSettings({ path = '/settings' }) { | 34 | @action _openSettings({ path = '/settings' }) { |
25 | const settingsPath = path !== '/settings' ? `/settings/${path}` : path; | 35 | const settingsPath = path !== '/settings' ? `/settings/${path}` : path; |
26 | this.stores.router.push(settingsPath); | 36 | this.stores.router.push(settingsPath); |
27 | } | 37 | } |
28 | 38 | ||
29 | @action _closeSettings(): void { | 39 | @action _closeSettings() { |
30 | this.stores.router.push('/'); | 40 | this.stores.router.push('/'); |
31 | } | 41 | } |
32 | 42 | ||
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js index 574616925..26ac2c60e 100644 --- a/src/stores/UserStore.js +++ b/src/stores/UserStore.js | |||
@@ -9,7 +9,7 @@ import Request from './lib/Request'; | |||
9 | import CachedRequest from './lib/CachedRequest'; | 9 | import CachedRequest from './lib/CachedRequest'; |
10 | import { gaEvent } from '../lib/analytics'; | 10 | import { gaEvent } from '../lib/analytics'; |
11 | 11 | ||
12 | const debug = require('debug')('UserStore'); | 12 | const debug = require('debug')('Franz:UserStore'); |
13 | 13 | ||
14 | // TODO: split stores into UserStore and AuthStore | 14 | // TODO: split stores into UserStore and AuthStore |
15 | export default class UserStore extends Store { | 15 | export default class UserStore extends Store { |
@@ -122,13 +122,13 @@ export default class UserStore extends Store { | |||
122 | } | 122 | } |
123 | 123 | ||
124 | @computed get data() { | 124 | @computed get data() { |
125 | this.getUserInfoRequest.execute(); | 125 | if (!this.isLoggedIn) return {}; |
126 | return this.getUserInfoRequest.result || {}; | 126 | |
127 | return this.getUserInfoRequest.execute().result || {}; | ||
127 | } | 128 | } |
128 | 129 | ||
129 | @computed get legacyServices() { | 130 | @computed get legacyServices() { |
130 | this.getLegacyServicesRequest.execute(); | 131 | return this.getLegacyServicesRequest.execute() || {}; |
131 | return this.getLegacyServicesRequest.result || []; | ||
132 | } | 132 | } |
133 | 133 | ||
134 | // Actions | 134 | // Actions |
diff --git a/src/stores/index.js b/src/stores/index.js index 2d99e3952..f547d0a7a 100644 --- a/src/stores/index.js +++ b/src/stores/index.js | |||
@@ -1,5 +1,6 @@ | |||
1 | import AppStore from './AppStore'; | 1 | import AppStore from './AppStore'; |
2 | import UserStore from './UserStore'; | 2 | import UserStore from './UserStore'; |
3 | import FeaturesStore from './FeaturesStore'; | ||
3 | import SettingsStore from './SettingsStore'; | 4 | import SettingsStore from './SettingsStore'; |
4 | import ServicesStore from './ServicesStore'; | 5 | import ServicesStore from './ServicesStore'; |
5 | import RecipesStore from './RecipesStore'; | 6 | import RecipesStore from './RecipesStore'; |
@@ -8,6 +9,7 @@ import UIStore from './UIStore'; | |||
8 | import PaymentStore from './PaymentStore'; | 9 | import PaymentStore from './PaymentStore'; |
9 | import NewsStore from './NewsStore'; | 10 | import NewsStore from './NewsStore'; |
10 | import RequestStore from './RequestStore'; | 11 | import RequestStore from './RequestStore'; |
12 | import DictionaryStore from './DictionaryStore'; | ||
11 | import GlobalErrorStore from './GlobalErrorStore'; | 13 | import GlobalErrorStore from './GlobalErrorStore'; |
12 | 14 | ||
13 | export default (api, actions, router) => { | 15 | export default (api, actions, router) => { |
@@ -16,6 +18,7 @@ export default (api, actions, router) => { | |||
16 | router, | 18 | router, |
17 | app: new AppStore(stores, api, actions), | 19 | app: new AppStore(stores, api, actions), |
18 | user: new UserStore(stores, api, actions), | 20 | user: new UserStore(stores, api, actions), |
21 | features: new FeaturesStore(stores, api, actions), | ||
19 | settings: new SettingsStore(stores, api, actions), | 22 | settings: new SettingsStore(stores, api, actions), |
20 | services: new ServicesStore(stores, api, actions), | 23 | services: new ServicesStore(stores, api, actions), |
21 | recipes: new RecipesStore(stores, api, actions), | 24 | recipes: new RecipesStore(stores, api, actions), |
@@ -24,6 +27,7 @@ export default (api, actions, router) => { | |||
24 | payment: new PaymentStore(stores, api, actions), | 27 | payment: new PaymentStore(stores, api, actions), |
25 | news: new NewsStore(stores, api, actions), | 28 | news: new NewsStore(stores, api, actions), |
26 | requests: new RequestStore(stores, api, actions), | 29 | requests: new RequestStore(stores, api, actions), |
30 | dictionary: new DictionaryStore(stores, api, actions), | ||
27 | globalError: new GlobalErrorStore(stores, api, actions), | 31 | globalError: new GlobalErrorStore(stores, api, actions), |
28 | }); | 32 | }); |
29 | // Initialize all stores | 33 | // Initialize all stores |
diff --git a/src/styles/animations.scss b/src/styles/animations.scss index 1e49af207..b121af7d2 100644 --- a/src/styles/animations.scss +++ b/src/styles/animations.scss | |||
@@ -1,49 +1,41 @@ | |||
1 | // FadeIn | 1 | // FadeIn |
2 | .fadeIn-appear { | 2 | .fadeIn-appear { opacity: .01; } |
3 | opacity: 0.01; | ||
4 | } | ||
5 | 3 | ||
6 | .fadeIn-appear.fadeIn-appear-active { | 4 | .fadeIn-appear.fadeIn-appear-active { |
7 | opacity: 1; | 5 | opacity: 1; |
8 | transition: opacity 0.5s ease-out; | 6 | transition: opacity .5s ease-out; |
9 | } | 7 | } |
10 | 8 | ||
11 | .fadeIn-enter { | 9 | .fadeIn-enter { |
12 | opacity: 0.01; | 10 | opacity: .01; |
13 | transition: opacity 0.5s ease-out; | 11 | transition: opacity .5s ease-out; |
14 | } | 12 | } |
15 | 13 | ||
16 | .fadeIn-leave { | 14 | .fadeIn-leave { opacity: 1; } |
17 | opacity: 1; | ||
18 | } | ||
19 | 15 | ||
20 | .fadeIn-leave.fadeIn-leave-active { | 16 | .fadeIn-leave.fadeIn-leave-active { |
21 | opacity: 0.01; | 17 | opacity: .01; |
22 | transition: opacity 300ms ease-in; | 18 | transition: opacity 300ms ease-in; |
23 | } | 19 | } |
24 | 20 | ||
25 | // FadeIn Fast | 21 | // FadeIn Fast |
26 | .fadeIn-fast-appear { | 22 | .fadeIn-fast-appear { opacity: .01; } |
27 | opacity: 0.01; | ||
28 | } | ||
29 | 23 | ||
30 | .fadeIn-fast-appear.fadeIn-fast-appear-active { | 24 | .fadeIn-fast-appear.fadeIn-fast-appear-active { |
31 | opacity: 1; | 25 | opacity: 1; |
32 | transition: opacity 0.25s ease-out; | 26 | transition: opacity .25s ease-out; |
33 | } | 27 | } |
34 | 28 | ||
35 | .fadeIn-fast-enter { | 29 | .fadeIn-fast-enter { |
36 | opacity: 0.01; | 30 | opacity: .01; |
37 | transition: opacity 0.25s ease-out; | 31 | transition: opacity .25s ease-out; |
38 | } | 32 | } |
39 | 33 | ||
40 | .fadeIn-fast-leave { | 34 | .fadeIn-fast-leave { opacity: 1; } |
41 | opacity: 1; | ||
42 | } | ||
43 | 35 | ||
44 | .fadeIn-fast-leave.fadeIn-fast-leave-active { | 36 | .fadeIn-fast-leave.fadeIn-fast-leave-active { |
45 | opacity: 0.01; | 37 | opacity: .01; |
46 | transition: opacity 0.25s ease-in; | 38 | transition: opacity .25s ease-in; |
47 | } | 39 | } |
48 | 40 | ||
49 | // Slide down | 41 | // Slide down |
@@ -54,37 +46,35 @@ | |||
54 | 46 | ||
55 | .slideDown-appear.slideDown-appear-active { | 47 | .slideDown-appear.slideDown-appear-active { |
56 | max-height: 500px; | 48 | max-height: 500px; |
57 | transition: max-height 0.5s ease-out; | 49 | transition: max-height .5s ease-out; |
58 | } | 50 | } |
59 | 51 | ||
60 | .slideDown-enter { | 52 | .slideDown-enter { |
61 | max-height: 0; | 53 | max-height: 0; |
62 | transition: max-height 0.5s ease-out; | 54 | transition: max-height .5s ease-out; |
63 | } | 55 | } |
64 | 56 | ||
65 | // Slide up | 57 | // Slide up |
66 | .slideUp-appear { | 58 | .slideUp-appear { |
67 | transform: translateY(20px); | ||
68 | opacity: 0; | 59 | opacity: 0; |
60 | transform: translateY(20px); | ||
69 | } | 61 | } |
70 | 62 | ||
71 | .slideUp-appear.slideUp-appear-active { | 63 | .slideUp-appear.slideUp-appear-active { |
72 | transform: translateY(0px); | ||
73 | opacity: 1; | 64 | opacity: 1; |
74 | transition: all 0.3s ease-out; | 65 | transform: translateY(0px); |
66 | transition: all .3s ease-out; | ||
75 | } | 67 | } |
76 | 68 | ||
77 | .slideUp-enter { | 69 | .slideUp-enter { |
78 | transform: translateY(20px); | ||
79 | opacity: 0; | 70 | opacity: 0; |
80 | transition: all 0.3s ease-out; | 71 | transform: translateY(20px); |
72 | transition: all .3s ease-out; | ||
81 | } | 73 | } |
82 | 74 | ||
83 | .slideUp-leave { | 75 | .slideUp-leave { opacity: 1; } |
84 | opacity: 1; | ||
85 | } | ||
86 | 76 | ||
87 | .slideUp-leave.slideUp-leave-active { | 77 | .slideUp-leave.slideUp-leave-active { |
88 | opacity: 0.01; | 78 | opacity: .01; |
89 | transition: opacity 300ms ease-in; | 79 | transition: opacity 300ms ease-in; |
90 | } | 80 | } |
diff --git a/src/styles/auth.scss b/src/styles/auth.scss index 9ad71867c..54e264dc6 100644 --- a/src/styles/auth.scss +++ b/src/styles/auth.scss | |||
@@ -1,144 +1,135 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .auth { | ||
4 | background: $dark-theme-gray-darkest; | ||
5 | |||
6 | .auth__container { | ||
7 | background: $dark-theme-gray-darker; | ||
8 | box-shadow: 0 0 50px rgba($dark-theme-black, .2); | ||
9 | } | ||
10 | |||
11 | .auth__logo.auth__logo--sm { | ||
12 | border: 4px solid $dark-theme-black; | ||
13 | box-shadow: 0 0 6px rgba($dark-theme-black, .5); | ||
14 | } | ||
15 | |||
16 | .auth__links { | ||
17 | background: $dark-theme-gray-dark; | ||
18 | |||
19 | a { color: $dark-theme-text-color; } | ||
20 | } | ||
21 | |||
22 | .legal { | ||
23 | color: $dark-theme-text-color; | ||
24 | |||
25 | a { color: $dark-theme-gray-lightest; } | ||
26 | } | ||
27 | } | ||
28 | |||
3 | .auth { | 29 | .auth { |
30 | background: $theme-brand-primary; | ||
4 | display: flex; | 31 | display: flex; |
5 | justify-content: center; | 32 | justify-content: center; |
6 | background: $theme-brand-primary; | ||
7 | 33 | ||
8 | .auth__layout { | 34 | .auth__layout { |
9 | width: 100%; | 35 | width: 100%; |
10 | &>div>span { | ||
11 | width: 100%; | ||
12 | } | ||
13 | // display: flex; | ||
14 | // align-items: center; | ||
15 | // justify-content: center; | ||
16 | // flex-direction: column; | ||
17 | |||
18 | // @media only screen and (max-height : 700px) { | ||
19 | // margin: 100px 0; | ||
20 | // } | ||
21 | 36 | ||
22 | &>div { | 37 | & > div { |
38 | align-items: center; | ||
23 | display: flex; | 39 | display: flex; |
24 | justify-content: center; | 40 | justify-content: center; |
25 | align-items: center; | ||
26 | 41 | ||
27 | &>span { | 42 | & > span { |
28 | position: absolute; | 43 | position: absolute; |
44 | width: 100%; | ||
29 | } | 45 | } |
30 | } | 46 | } |
31 | } | 47 | } |
32 | 48 | ||
33 | .auth__container { | 49 | .auth__container { |
34 | position: relative; | ||
35 | width: 350px; | ||
36 | height: auto; | ||
37 | margin: 40px auto 0 auto; | ||
38 | background: #FFF; | 50 | background: #FFF; |
39 | // padding: 20px; | ||
40 | border-radius: $theme-border-radius; | 51 | border-radius: $theme-border-radius; |
41 | box-shadow: 0 0 50px rgba(black, 0.2); | 52 | box-shadow: 0 0 50px rgba(black, .2); |
53 | height: auto; | ||
54 | margin: 40px auto 0; | ||
55 | position: relative; | ||
56 | width: 350px; | ||
42 | 57 | ||
43 | &.auth__container--signup { | 58 | &.auth__container--signup { width: 450px; } |
44 | width: 450px; | ||
45 | // margin-left: auto; | ||
46 | // margin-right: auto; | ||
47 | } | ||
48 | } | 59 | } |
49 | 60 | ||
50 | .auth__logo { | 61 | .auth__logo { |
62 | border-radius: $theme-border-radius; | ||
51 | display: block; | 63 | display: block; |
52 | width: 150px; | ||
53 | height: auto; | 64 | height: auto; |
54 | margin: -105px auto 20px auto; | 65 | margin: -105px auto 20px auto; |
55 | border-radius: $theme-border-radius; | 66 | width: 150px; |
56 | 67 | ||
57 | &.auth__logo--sm { | 68 | &.auth__logo--sm { |
58 | border: 4px solid #FFF; | 69 | border: 4px solid #FFF; |
59 | box-shadow: 0 0 6px rgba(black, 0.5); | ||
60 | border-radius: 100%; | 70 | border-radius: 100%; |
71 | box-shadow: 0 0 6px rgba(black, .5); | ||
61 | } | 72 | } |
62 | } | 73 | } |
63 | 74 | ||
64 | .auth__form { | 75 | .auth__form { |
65 | padding: 20px; | 76 | padding: 20px; |
66 | 77 | ||
67 | h1 { | 78 | h1 { text-align: center; } |
68 | text-align: center; | ||
69 | } | ||
70 | } | 79 | } |
71 | 80 | ||
72 | .auth__button { | 81 | .auth__button { |
73 | width: 100%; | 82 | width: 100%; |
74 | 83 | ||
75 | &.auth__button--skip { | 84 | &.auth__button--skip { margin: 10px auto 0; } |
76 | margin: 10px auto 0; | ||
77 | } | ||
78 | } | 85 | } |
79 | 86 | ||
80 | .auth__links { | 87 | .auth__links { |
81 | padding: 20px; | ||
82 | background: $theme-gray-lighter; | 88 | background: $theme-gray-lighter; |
83 | border-bottom-left-radius: $theme-border-radius; | 89 | border-bottom-left-radius: $theme-border-radius; |
84 | border-bottom-right-radius: $theme-border-radius; | 90 | border-bottom-right-radius: $theme-border-radius; |
91 | padding: 20px; | ||
85 | 92 | ||
86 | a { | 93 | a { |
87 | display: block; | 94 | display: block; |
88 | text-align: center; | ||
89 | color: $theme-gray; | 95 | color: $theme-gray; |
90 | margin-bottom: 8px; | 96 | margin-bottom: 8px; |
97 | text-align: center; | ||
91 | 98 | ||
92 | &:last-of-type { | 99 | &:last-of-type { margin-bottom: 0; } |
93 | margin-bottom: 0; | ||
94 | } | ||
95 | } | 100 | } |
96 | } | 101 | } |
97 | 102 | ||
98 | .auth__adlk { | 103 | .auth__adlk { |
104 | bottom: 15px; | ||
99 | position: absolute; | 105 | position: absolute; |
100 | right: 25px; | 106 | right: 25px; |
101 | bottom: 15px; | ||
102 | 107 | ||
103 | img { | 108 | img { width: 65px; } |
104 | width: 65px; | ||
105 | } | ||
106 | } | 109 | } |
107 | 110 | ||
108 | .auth__letter { | 111 | .auth__letter { margin-bottom: 30px; } |
109 | margin-bottom: 30px; | 112 | .scroll-container { z-index: 10; } |
110 | } | 113 | .info-bar { position: absolute; } |
111 | |||
112 | .scroll-container { | ||
113 | z-index: 10; | ||
114 | } | ||
115 | |||
116 | .info-bar { | ||
117 | position: absolute; | ||
118 | } | ||
119 | 114 | ||
120 | &__scroll-container { | 115 | &__scroll-container { |
121 | overflow: scroll; | ||
122 | width: 100%; | ||
123 | max-height: 100vh; | 116 | max-height: 100vh; |
124 | padding: 80px 0; | 117 | padding: 80px 0; |
118 | overflow: scroll; | ||
119 | width: 100%; | ||
125 | } | 120 | } |
126 | 121 | ||
127 | .available-services { | 122 | .available-services { margin-bottom: 15px; } |
128 | margin-bottom: 15px; | ||
129 | } | ||
130 | 123 | ||
131 | .unavailable-services { | 124 | .unavailable-services { |
132 | margin: 15px 0; | 125 | margin: 15px 0; |
133 | 126 | ||
134 | p { | 127 | p { text-transform: capitalize; } |
135 | text-transform: capitalize; | ||
136 | } | ||
137 | } | 128 | } |
138 | 129 | ||
139 | .legal { | 130 | .legal { |
140 | text-align: center; | ||
141 | margin-top: 20px; | ||
142 | color: $theme-gray-light; | 131 | color: $theme-gray-light; |
132 | margin-top: 20px; | ||
133 | text-align: center; | ||
143 | } | 134 | } |
144 | } | 135 | } |
diff --git a/src/styles/badge.scss b/src/styles/badge.scss index d7dfaf783..f9fac039a 100644 --- a/src/styles/badge.scss +++ b/src/styles/badge.scss | |||
@@ -1,15 +1,34 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .badge { | ||
4 | background: $dark-theme-gray; | ||
5 | border-radius: $theme-border-radius-small; | ||
6 | color: $dark-theme-gray-lightest; | ||
7 | |||
8 | &.badge--primary, | ||
9 | &.badge--premium { | ||
10 | background: $theme-brand-primary; | ||
11 | color: $dark-theme-gray-smoke; | ||
12 | } | ||
13 | } | ||
14 | |||
15 | |||
3 | .badge { | 16 | .badge { |
4 | font-size: 14px; | 17 | background: $theme-gray-lighter; |
18 | border-radius: $theme-border-radius; | ||
5 | display: inline-block; | 19 | display: inline-block; |
20 | font-size: 14px; | ||
6 | padding: 5px 10px; | 21 | padding: 5px 10px; |
7 | border-radius: $theme-border-radius; | ||
8 | background: $theme-gray-lighter; | ||
9 | 22 | ||
10 | &.badge--primary, | 23 | &.badge--primary, |
11 | &.badge--premium { | 24 | &.badge--premium { |
12 | background: $theme-brand-primary; | 25 | background: $theme-brand-primary; |
13 | color: #FFF; | 26 | color: #FFF; |
14 | } | 27 | } |
28 | |||
29 | &.badge--success { | ||
30 | background: $theme-brand-success; | ||
31 | color: #FFF; | ||
32 | } | ||
33 | |||
15 | } | 34 | } |
diff --git a/src/styles/button.scss b/src/styles/button.scss index 8d2adbbcc..a66345114 100644 --- a/src/styles/button.scss +++ b/src/styles/button.scss | |||
@@ -1,71 +1,94 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .franz-form__button { | ||
4 | background: $theme-brand-primary; | ||
5 | color: $dark-theme-text-color; | ||
6 | |||
7 | &:hover { background: darken($theme-brand-primary, 5%); } | ||
8 | &:active { background: lighten($theme-brand-primary, 5%); } | ||
9 | |||
10 | &.franz-form__button--secondary { | ||
11 | background: $dark-theme-gray-lighter; | ||
12 | color: $dark-theme-text-color; | ||
13 | |||
14 | &:hover { background: lighten($dark-theme-gray-lighter, 10%); } | ||
15 | &:active { background: lighten($dark-theme-gray-lighter, 20%); } | ||
16 | } | ||
17 | |||
18 | &.franz-form__button--danger { | ||
19 | background: $theme-brand-danger; | ||
20 | |||
21 | &:hover { background: darken($theme-brand-danger, 5%); } | ||
22 | &:active { background: lighten($theme-brand-danger, 5%); } | ||
23 | } | ||
24 | |||
25 | &.franz-form__button--warning { | ||
26 | background: $theme-brand-warning; | ||
27 | |||
28 | &:hover { background: darken($theme-brand-warning, 5%); } | ||
29 | &:active { background: lighten($theme-brand-warning, 5%); } | ||
30 | } | ||
31 | |||
32 | &.franz-form__button--inverted { | ||
33 | border: 2px solid $theme-brand-primary; | ||
34 | color: $theme-brand-primary; | ||
35 | |||
36 | &:hover { | ||
37 | background: darken($theme-brand-primary, 5%); | ||
38 | color: $dark-theme-text-color; | ||
39 | } | ||
40 | } | ||
41 | |||
42 | &:disabled { opacity: .5; } | ||
43 | } | ||
44 | |||
3 | .franz-form__button { | 45 | .franz-form__button { |
4 | position: relative; | ||
5 | background: $theme-brand-primary; | 46 | background: $theme-brand-primary; |
47 | border-radius: 3px; | ||
6 | display: block; | 48 | display: block; |
7 | padding: 10px 20px; | ||
8 | color: #FFF; | 49 | color: #FFF; |
9 | border-radius: 3px; | 50 | padding: 10px 20px; |
10 | transition: background 0.5s; | 51 | position: relative; |
52 | transition: background .5s; | ||
11 | text-align: center; | 53 | text-align: center; |
12 | 54 | ||
13 | &:hover { | 55 | &:hover { background: darken($theme-brand-primary, 5%) } |
14 | background: darken($theme-brand-primary, 5%); | ||
15 | } | ||
16 | 56 | ||
17 | &:active { | 57 | &:active { |
18 | transition: none; | ||
19 | background: lighten($theme-brand-primary, 5%); | 58 | background: lighten($theme-brand-primary, 5%); |
59 | transition: none; | ||
20 | } | 60 | } |
21 | 61 | ||
22 | &:disabled { | 62 | &:disabled { opacity: .2; } |
23 | opacity: 0.2; | ||
24 | } | ||
25 | 63 | ||
26 | &.franz-form__button--secondary { | 64 | &.franz-form__button--secondary { |
27 | background: $theme-gray-lighter; | 65 | background: $theme-gray-lighter; |
28 | color: $theme-gray; | 66 | color: $theme-gray; |
29 | 67 | ||
30 | &:hover { | 68 | &:hover { background: darken($theme-gray-lighter, 5%); } |
31 | background: darken($theme-gray-lighter, 5%); | 69 | &:active { background: lighten($theme-gray-lighter, 5%); } |
32 | } | ||
33 | |||
34 | &:active { | ||
35 | background: lighten($theme-gray-lighter, 5%); | ||
36 | } | ||
37 | } | 70 | } |
38 | 71 | ||
39 | &.franz-form__button--danger { | 72 | &.franz-form__button--danger { |
40 | background: $theme-brand-danger; | 73 | background: $theme-brand-danger; |
41 | 74 | ||
42 | &:hover { | 75 | &:hover { background: darken($theme-brand-danger, 5%); } |
43 | background: darken($theme-brand-danger, 5%); | 76 | &:active { background: lighten($theme-brand-danger, 5%); } |
44 | } | ||
45 | |||
46 | &:active { | ||
47 | background: lighten($theme-brand-danger, 5%); | ||
48 | } | ||
49 | } | 77 | } |
50 | 78 | ||
51 | &.franz-form__button--warning { | 79 | &.franz-form__button--warning { |
52 | background: $theme-brand-warning; | 80 | background: $theme-brand-warning; |
53 | 81 | ||
54 | &:hover { | 82 | &:hover { background: darken($theme-brand-warning, 5%); } |
55 | background: darken($theme-brand-warning, 5%); | 83 | &:active { background: lighten($theme-brand-warning, 5%); } |
56 | } | ||
57 | |||
58 | &:active { | ||
59 | background: lighten($theme-brand-warning, 5%); | ||
60 | } | ||
61 | } | 84 | } |
62 | 85 | ||
63 | &.franz-form__button--inverted { | 86 | &.franz-form__button--inverted { |
64 | background: none; | 87 | background: none; |
65 | padding: 10px 20px; | ||
66 | border: 2px solid $theme-brand-primary; | 88 | border: 2px solid $theme-brand-primary; |
67 | color: $theme-brand-primary; | 89 | color: $theme-brand-primary; |
68 | transition: background 0.5s, color 0.5s; | 90 | padding: 10px 20px; |
91 | transition: background .5s, color .5s; | ||
69 | 92 | ||
70 | &:hover { | 93 | &:hover { |
71 | background: darken($theme-brand-primary, 5%); | 94 | background: darken($theme-brand-primary, 5%); |
@@ -74,11 +97,11 @@ | |||
74 | } | 97 | } |
75 | 98 | ||
76 | .loader { | 99 | .loader { |
100 | display: inline-block; | ||
101 | height: 12px; | ||
102 | margin-right: 5px; | ||
77 | position: relative; | 103 | position: relative; |
78 | width: 20px; | 104 | width: 20px; |
79 | height: 12px; | ||
80 | z-index: 9999; | 105 | z-index: 9999; |
81 | display: inline-block; | ||
82 | margin-right: 5px; | ||
83 | } | 106 | } |
84 | } | 107 | } |
diff --git a/src/styles/colors.scss b/src/styles/colors.scss index 5d8302c28..80c2fb633 100644 --- a/src/styles/colors.scss +++ b/src/styles/colors.scss | |||
@@ -1,22 +1,40 @@ | |||
1 | $theme-brand-primary: #3498db; | 1 | @import "./type-helper"; |
2 | $theme-brand-success: #5cb85c; | ||
3 | $theme-brand-info: #5bc0de; | ||
4 | $theme-brand-warning: #FF9F00; | ||
5 | $theme-brand-danger: #d9534f; | ||
6 | 2 | ||
7 | $theme-gray-dark: #373a3c; | 3 | $theme-brand-primary: convert-rgb-string-to-color($raw-theme-brand-primary); |
8 | $theme-gray: #55595c; | 4 | $theme-brand-success: convert-rgb-string-to-color($raw-theme-brand-success); |
9 | $theme-gray-light: #818a91; | 5 | $theme-brand-info: convert-rgb-string-to-color($raw-theme-brand-info); |
10 | $theme-gray-lighter: #eceeef; | 6 | $theme-brand-warning: convert-rgb-string-to-color($raw-theme-brand-warning); |
11 | $theme-gray-lightest: #f7f7f9; | 7 | $theme-brand-danger: convert-rgb-string-to-color($raw-theme-brand-danger); |
12 | 8 | ||
13 | $theme-border-radius: 6px; | 9 | $theme-gray-dark: convert-rgb-string-to-color($raw-theme-gray-dark); |
14 | $theme-border-radius-small: 3px; | 10 | $theme-gray: convert-rgb-string-to-color($raw-theme-gray); |
11 | $theme-gray-light: convert-rgb-string-to-color($raw-theme-gray-light); | ||
12 | $theme-gray-lighter: convert-rgb-string-to-color($raw-theme-gray-lighter); | ||
13 | $theme-gray-lightest: convert-rgb-string-to-color($raw-theme-gray-lightest); | ||
15 | 14 | ||
16 | $theme-sidebar-width: 68px; | 15 | $theme-border-radius: to-number($raw-theme-border-radius); |
16 | $theme-border-radius-small: to-number($raw-theme-border-radius-small); | ||
17 | 17 | ||
18 | $theme-text-color: $theme-gray-dark; | 18 | $theme-sidebar-width: to-number($raw-theme-sidebar-width); |
19 | 19 | ||
20 | $theme-transition-time: 0.5s; | 20 | $theme-text-color: convert-rgb-string-to-color($raw-theme-gray-dark); |
21 | 21 | ||
22 | $theme-inset-shadow: inset 0 2px 5px rgba(0,0,0,0.03); | 22 | $theme-transition-time: .5s; |
23 | |||
24 | $theme-inset-shadow: inset 0 2px 5px rgba(0, 0, 0, .03); | ||
25 | |||
26 | // Dark Theme | ||
27 | $dark-theme-black: convert-rgb-string-to-color($raw-dark-theme-black); | ||
28 | |||
29 | $dark-theme-gray-darkest: convert-rgb-string-to-color($raw-dark-theme-gray-darkest); | ||
30 | $dark-theme-gray-darker: convert-rgb-string-to-color($raw-dark-theme-gray-darker); | ||
31 | $dark-theme-gray-dark: convert-rgb-string-to-color($raw-dark-theme-gray-dark); | ||
32 | |||
33 | $dark-theme-gray: convert-rgb-string-to-color($raw-dark-theme-gray); | ||
34 | |||
35 | $dark-theme-gray-light: convert-rgb-string-to-color($raw-dark-theme-gray-light); | ||
36 | $dark-theme-gray-lighter: convert-rgb-string-to-color($raw-dark-theme-gray-lighter); | ||
37 | $dark-theme-gray-lightest: convert-rgb-string-to-color($raw-dark-theme-gray-lightest); | ||
38 | |||
39 | $dark-theme-gray-smoke: convert-rgb-string-to-color($raw-dark-theme-gray-smoke); | ||
40 | $dark-theme-text-color: convert-rgb-string-to-color($raw-dark-theme-text-color); | ||
diff --git a/src/styles/content-tabs.scss b/src/styles/content-tabs.scss index 47dfea2c4..ca3820fb4 100644 --- a/src/styles/content-tabs.scss +++ b/src/styles/content-tabs.scss | |||
@@ -2,53 +2,43 @@ | |||
2 | 2 | ||
3 | .content-tabs { | 3 | .content-tabs { |
4 | .content-tabs__tabs { | 4 | .content-tabs__tabs { |
5 | display: flex; | ||
6 | border-top-left-radius: $theme-border-radius-small; | 5 | border-top-left-radius: $theme-border-radius-small; |
7 | border-top-right-radius: $theme-border-radius-small; | 6 | border-top-right-radius: $theme-border-radius-small; |
7 | display: flex; | ||
8 | overflow: hidden; | 8 | overflow: hidden; |
9 | 9 | ||
10 | .content-tabs__item { | 10 | .content-tabs__item { |
11 | padding: 10px; | ||
12 | flex: 1; | ||
13 | // border: 1px solid $theme-gray-lightest; | ||
14 | color: $theme-gray-dark; | ||
15 | background: linear-gradient($theme-gray-lightest 80%, darken($theme-gray-lightest, 3%)); | 11 | background: linear-gradient($theme-gray-lightest 80%, darken($theme-gray-lightest, 3%)); |
16 | border-right: 1px solid $theme-gray-lighter; | 12 | border-right: 1px solid $theme-gray-lighter; |
13 | color: $theme-gray-dark; | ||
14 | flex: 1; | ||
15 | padding: 10px; | ||
17 | transition: background $theme-transition-time; | 16 | transition: background $theme-transition-time; |
18 | 17 | ||
19 | &:last-of-type { | 18 | &:last-of-type { border-right: 0; } |
20 | border-right: 0; | ||
21 | } | ||
22 | 19 | ||
23 | &.is-active { | 20 | &.is-active { |
24 | background: $theme-brand-primary; | 21 | background: $theme-brand-primary; |
25 | color: #FFF; | ||
26 | box-shadow: none; | 22 | box-shadow: none; |
23 | color: #FFF; | ||
27 | } | 24 | } |
28 | } | 25 | } |
29 | } | 26 | } |
30 | 27 | ||
31 | .content-tabs__content { | 28 | .content-tabs__content { |
32 | padding: 20px 20px; | 29 | background: $theme-gray-lightest; |
33 | border-bottom-left-radius: $theme-border-radius-small; | 30 | border-bottom-left-radius: $theme-border-radius-small; |
34 | border-bottom-right-radius: $theme-border-radius-small; | 31 | border-bottom-right-radius: $theme-border-radius-small; |
35 | background: $theme-gray-lightest; | 32 | padding: 20px 20px; |
36 | 33 | ||
37 | .content-tabs__item { | 34 | .content-tabs__item { |
38 | top: 0; | ||
39 | display: none; | 35 | display: none; |
36 | top: 0; | ||
40 | 37 | ||
41 | &.is-active { | 38 | &.is-active { display: block; } |
42 | display: block; | ||
43 | } | ||
44 | } | ||
45 | |||
46 | .franz-form__input-wrapper { | ||
47 | background: #FFF; | ||
48 | } | 39 | } |
49 | 40 | ||
50 | .franz-form__field:last-of-type { | 41 | .franz-form__input-wrapper { background: #FFF; } |
51 | margin-bottom: 0; | 42 | .franz-form__field:last-of-type { margin-bottom: 0; } |
52 | } | ||
53 | } | 43 | } |
54 | } | 44 | } |
diff --git a/src/styles/image-upload.scss b/src/styles/image-upload.scss index 06176a7af..31300c227 100644 --- a/src/styles/image-upload.scss +++ b/src/styles/image-upload.scss | |||
@@ -1,74 +1,89 @@ | |||
1 | .theme__dark { | ||
2 | .image-upload { | ||
3 | background: $dark-theme-gray-darker; | ||
4 | border: 1px solid $dark-theme-gray-light; | ||
5 | color: $dark-theme-gray-lighter; | ||
6 | |||
7 | &__action { | ||
8 | &-background { background: rgba($dark-theme-black, .7); } | ||
9 | |||
10 | button { | ||
11 | color: $dark-theme-gray-lightest; | ||
12 | |||
13 | .mdi { color: $dark-theme-gray-lightest; } | ||
14 | } | ||
15 | } | ||
16 | } | ||
17 | |||
18 | .image-upload-wrapper .mdi { color: $dark-theme-gray-light; } | ||
19 | } | ||
20 | |||
1 | .image-upload { | 21 | .image-upload { |
2 | position: absolute; | 22 | background: $theme-gray-lightest; |
3 | width: 140px; | ||
4 | height: 140px; | ||
5 | border: 1px solid $theme-gray-lighter; | 23 | border: 1px solid $theme-gray-lighter; |
6 | border-radius: $theme-border-radius-small; | 24 | border-radius: $theme-border-radius-small; |
7 | background: $theme-gray-lightest; | 25 | height: 140px; |
8 | overflow: hidden; | ||
9 | margin-top: 5px; | 26 | margin-top: 5px; |
27 | overflow: hidden; | ||
28 | position: relative; | ||
29 | width: 140px; | ||
10 | 30 | ||
11 | &__preview, | 31 | &__preview, |
12 | &__action { | 32 | &__action { |
13 | position: absolute; | ||
14 | top: 0; | ||
15 | left: 0; | 33 | left: 0; |
34 | position: absolute; | ||
16 | right: 0; | 35 | right: 0; |
36 | top: 0; | ||
17 | } | 37 | } |
18 | 38 | ||
19 | &__preview { | 39 | &__preview { |
20 | z-index: 1; | ||
21 | background-size: cover; | ||
22 | background-size: 100%; | ||
23 | background-repeat: no-repeat; | ||
24 | background-position: center center; | 40 | background-position: center center; |
41 | background-repeat: no-repeat; | ||
42 | background-size: cover; | ||
25 | border-radius: 3px; | 43 | border-radius: 3px; |
44 | z-index: 1; | ||
26 | } | 45 | } |
27 | 46 | ||
28 | &__action { | 47 | &__action { |
29 | position: relative; | ||
30 | z-index: 10; | ||
31 | opacity: 0; | ||
32 | transition: opacity 0.5s; | ||
33 | display: flex; | 48 | display: flex; |
34 | justify-content: center; | 49 | justify-content: center; |
50 | opacity: 0; | ||
51 | position: relative; | ||
52 | transition: opacity .5s; | ||
53 | z-index: 10; | ||
35 | 54 | ||
36 | &-background { | 55 | &-background { |
37 | position: absolute; | 56 | background: rgba($theme-gray, .7); |
38 | top: 0; | 57 | bottom: 0; |
39 | left: 0; | 58 | left: 0; |
59 | position: absolute; | ||
40 | right: 0; | 60 | right: 0; |
41 | bottom: 0; | 61 | top: 0; |
42 | background: rgba($theme-gray, 0.7); | ||
43 | z-index: 10; | 62 | z-index: 10; |
44 | } | 63 | } |
45 | 64 | ||
46 | button { | 65 | button { |
66 | color: #FFF; | ||
47 | position: relative; | 67 | position: relative; |
48 | z-index: 100; | 68 | z-index: 100; |
49 | color: #FFF; | ||
50 | 69 | ||
51 | .mdi { | 70 | .mdi { color: #FFF; } |
52 | color: #FFF; | ||
53 | } | ||
54 | } | 71 | } |
55 | } | 72 | } |
56 | 73 | ||
57 | &__dropzone { | 74 | &__dropzone { |
58 | text-align: center; | 75 | align-items: center; |
59 | border-radius: 5px; | 76 | border-radius: 5px; |
60 | padding: 10px; | ||
61 | display: flex; | 77 | display: flex; |
62 | align-items: center; | ||
63 | justify-content: center; | ||
64 | flex-direction: column; | 78 | flex-direction: column; |
79 | justify-content: center; | ||
80 | padding: 10px; | ||
81 | text-align: center; | ||
65 | } | 82 | } |
66 | 83 | ||
67 | &__dropzone, | 84 | &__dropzone, |
68 | button { | 85 | button { |
69 | .mdi { | 86 | .mdi { margin-bottom: 5px; } |
70 | margin-bottom: 5px; | ||
71 | } | ||
72 | 87 | ||
73 | p { | 88 | p { |
74 | font-size: 10px; | 89 | font-size: 10px; |
@@ -76,16 +91,10 @@ | |||
76 | } | 91 | } |
77 | } | 92 | } |
78 | 93 | ||
79 | &:hover { | 94 | &:hover .image-upload__action { opacity: 1; } |
80 | .image-upload__action { | ||
81 | opacity: 1; | ||
82 | } | ||
83 | } | ||
84 | } | 95 | } |
85 | 96 | ||
86 | .image-upload-wrapper { | 97 | .image-upload-wrapper .mdi { |
87 | .mdi { | 98 | color: $theme-gray-light; |
88 | font-size: 40px; | 99 | font-size: 40px; |
89 | color: $theme-gray-light; | 100 | } |
90 | } | ||
91 | } \ No newline at end of file | ||
diff --git a/src/styles/info-bar.scss b/src/styles/info-bar.scss index b6d1e84e2..fb4917358 100644 --- a/src/styles/info-bar.scss +++ b/src/styles/info-bar.scss | |||
@@ -1,83 +1,68 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .info-bar { | 3 | .info-bar { |
4 | width: 100%; | 4 | align-items: center; |
5 | height: 50px; | ||
6 | background: $theme-brand-primary; | 5 | background: $theme-brand-primary; |
6 | box-shadow: 0 0 8px rgba(black, .2); | ||
7 | display: flex; | 7 | display: flex; |
8 | align-items: center; | 8 | height: 50px; |
9 | justify-content: center; | 9 | justify-content: center; |
10 | padding: 0 20px; | 10 | padding: 0 20px; |
11 | position: relative; | 11 | position: relative; |
12 | // bottom: 0; | 12 | width: 100%; |
13 | z-index: 100; | 13 | z-index: 100; |
14 | box-shadow: 0 0 8px rgba(black, 0.2); | ||
15 | 14 | ||
16 | .info-bar__content { | 15 | .info-bar__content { |
17 | height: auto; | 16 | height: auto; |
18 | 17 | ||
19 | .mdi { | 18 | .mdi { margin-right: 5px; } |
20 | margin-right: 5px; | ||
21 | } | ||
22 | } | 19 | } |
23 | 20 | ||
24 | .info-bar__close { | 21 | .info-bar__close { |
22 | color: #FFF; | ||
25 | position: absolute; | 23 | position: absolute; |
26 | right: 10px; | 24 | right: 10px; |
27 | color: #FFF; | ||
28 | } | 25 | } |
29 | 26 | ||
30 | .info-bar__cta { | 27 | .info-bar__cta { |
31 | color: #FFF; | ||
32 | padding: 3px 8px; | ||
33 | border-radius: $theme-border-radius-small; | ||
34 | border-color: #FFF; | 28 | border-color: #FFF; |
35 | border-width: 2px; | 29 | border-radius: $theme-border-radius-small; |
36 | border-style: solid; | 30 | border-style: solid; |
31 | border-width: 2px; | ||
32 | color: #FFF; | ||
37 | margin-left: 15px; | 33 | margin-left: 15px; |
34 | padding: 3px 8px; | ||
38 | 35 | ||
39 | .loader { | 36 | .loader { |
37 | display: inline-block; | ||
38 | height: 12px; | ||
39 | margin-right: 5px; | ||
40 | position: relative; | 40 | position: relative; |
41 | width: 20px; | 41 | width: 20px; |
42 | height: 12px; | ||
43 | z-index: 9999; | 42 | z-index: 9999; |
44 | display: inline-block; | ||
45 | margin-right: 5px; | ||
46 | } | 43 | } |
47 | } | 44 | } |
48 | 45 | ||
49 | a { | 46 | &.info-bar--bottom { order: 10; } |
50 | // text-decoration: underline; | ||
51 | } | ||
52 | |||
53 | &.info-bar--bottom { | ||
54 | order: 10; | ||
55 | } | ||
56 | 47 | ||
57 | &.info-bar--primary { | 48 | &.info-bar--primary { |
58 | background: $theme-brand-primary; | 49 | background: $theme-brand-primary; |
59 | color: #FFF; | 50 | color: #FFF; |
60 | 51 | ||
61 | a { | 52 | a { color: #FFF; } |
62 | color: #FFF; | ||
63 | } | ||
64 | } | 53 | } |
65 | 54 | ||
66 | &.info-bar--warning { | 55 | &.info-bar--warning { |
67 | background: $theme-brand-warning; | 56 | background: $theme-brand-warning; |
68 | color: #FFF; | 57 | color: #FFF; |
69 | 58 | ||
70 | a { | 59 | a { color: #FFF; } |
71 | color: #FFF; | ||
72 | } | ||
73 | } | 60 | } |
74 | 61 | ||
75 | &.info-bar--danger { | 62 | &.info-bar--danger { |
76 | background: $theme-brand-danger; | 63 | background: $theme-brand-danger; |
77 | color: #FFF; | 64 | color: #FFF; |
78 | 65 | ||
79 | a { | 66 | a { color: #FFF; } |
80 | color: #FFF; | ||
81 | } | ||
82 | } | 67 | } |
83 | } | 68 | } |
diff --git a/src/styles/infobox.scss b/src/styles/infobox.scss index 7ab094058..e287e5be7 100644 --- a/src/styles/infobox.scss +++ b/src/styles/infobox.scss | |||
@@ -1,20 +1,16 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .infobox { | 3 | .infobox { |
4 | height: auto; | 4 | align-items: center; |
5 | padding: 15px 20px; | ||
6 | margin-bottom: 30px; | ||
7 | border-radius: $theme-border-radius-small; | 5 | border-radius: $theme-border-radius-small; |
8 | display: flex; | 6 | display: flex; |
9 | align-items: center; | 7 | height: auto; |
8 | margin-bottom: 30px; | ||
9 | padding: 15px 20px; | ||
10 | 10 | ||
11 | a { | 11 | a { color: #FFF; } |
12 | color: #FFF; | ||
13 | } | ||
14 | 12 | ||
15 | .infobox__content { | 13 | .infobox__content { flex: 1; } |
16 | flex: 1; | ||
17 | } | ||
18 | 14 | ||
19 | &.infobox--success { | 15 | &.infobox--success { |
20 | background: $theme-brand-success; | 16 | background: $theme-brand-success; |
@@ -36,26 +32,24 @@ | |||
36 | color: #FFF; | 32 | color: #FFF; |
37 | } | 33 | } |
38 | 34 | ||
39 | .mdi { | 35 | .mdi { margin-right: 10px; } |
40 | margin-right: 10px; | ||
41 | } | ||
42 | 36 | ||
43 | .infobox__cta { | 37 | .infobox__cta { |
44 | color: #FFF; | ||
45 | padding: 3px 8px; | ||
46 | border-radius: $theme-border-radius-small; | ||
47 | border-color: #FFF; | 38 | border-color: #FFF; |
48 | border-width: 2px; | 39 | border-radius: $theme-border-radius-small; |
49 | border-style: solid; | 40 | border-style: solid; |
41 | border-width: 2px; | ||
42 | color: #FFF; | ||
50 | margin-left: 15px; | 43 | margin-left: 15px; |
44 | padding: 3px 8px; | ||
51 | 45 | ||
52 | .loader { | 46 | .loader { |
47 | display: inline-block; | ||
48 | height: 12px; | ||
49 | margin-right: 5px; | ||
53 | position: relative; | 50 | position: relative; |
54 | width: 20px; | 51 | width: 20px; |
55 | height: 12px; | ||
56 | z-index: 9999; | 52 | z-index: 9999; |
57 | display: inline-block; | ||
58 | margin-right: 5px; | ||
59 | } | 53 | } |
60 | } | 54 | } |
61 | 55 | ||
diff --git a/src/styles/input.scss b/src/styles/input.scss index 7042f56e8..687bcac64 100644 --- a/src/styles/input.scss +++ b/src/styles/input.scss | |||
@@ -1,6 +1,34 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | @import './mixins.scss'; | 2 | @import './mixins.scss'; |
3 | 3 | ||
4 | .theme__dark .franz-form { | ||
5 | .franz-form__label { color: $dark-theme-text-color; } | ||
6 | |||
7 | .franz-form__input-wrapper { | ||
8 | background: $dark-theme-gray-dark; | ||
9 | border: 1px solid $dark-theme-gray-light; | ||
10 | } | ||
11 | |||
12 | .franz-form__input { | ||
13 | color: $dark-theme-gray-lightest; | ||
14 | |||
15 | &::placeholder { color: $dark-theme-gray-lighter; } | ||
16 | } | ||
17 | |||
18 | .franz-form__input-prefix, | ||
19 | .franz-form__input-suffix { | ||
20 | background: $dark-theme-gray; | ||
21 | color: $dark-theme-gray-lighter; | ||
22 | } | ||
23 | |||
24 | .franz-form__input-modifier { | ||
25 | border-left: 1px solid $dark-theme-gray-light; | ||
26 | color: $dark-theme-gray-lighter; | ||
27 | } | ||
28 | |||
29 | .franz-form__password-score { background: $dark-theme-gray-dark; } | ||
30 | } | ||
31 | |||
4 | .franz-form { | 32 | .franz-form { |
5 | .franz-form__field { | 33 | .franz-form__field { |
6 | display: flex; | 34 | display: flex; |
@@ -9,19 +37,12 @@ | |||
9 | margin-bottom: 20px; | 37 | margin-bottom: 20px; |
10 | 38 | ||
11 | &.has-error { | 39 | &.has-error { |
12 | .franz-form__input-wrapper { | 40 | .franz-form__input-wrapper, |
13 | border-color: $theme-brand-danger; | 41 | .franz-form__input-modifier { border-color: $theme-brand-danger; } |
14 | } | ||
15 | |||
16 | .franz-form__input-modifier { | ||
17 | border-color: $theme-brand-danger; | ||
18 | } | ||
19 | } | 42 | } |
20 | } | 43 | } |
21 | 44 | ||
22 | .franz-form__label { | 45 | .franz-form__label { @include formLabel(); } |
23 | @include formLabel(); | ||
24 | } | ||
25 | 46 | ||
26 | .franz-form__error { | 47 | .franz-form__error { |
27 | color: $theme-brand-danger; | 48 | color: $theme-brand-danger; |
@@ -30,74 +51,60 @@ | |||
30 | } | 51 | } |
31 | 52 | ||
32 | .franz-form__input-wrapper { | 53 | .franz-form__input-wrapper { |
33 | display: flex; | ||
34 | width: 100%; | ||
35 | order: 1; | ||
36 | border-radius: $theme-border-radius-small; | ||
37 | background: $theme-gray-lightest; | 54 | background: $theme-gray-lightest; |
38 | border: 1px solid $theme-gray-lighter; | 55 | border: 1px solid $theme-gray-lighter; |
56 | border-radius: $theme-border-radius-small; | ||
57 | display: flex; | ||
39 | flex-wrap: wrap; | 58 | flex-wrap: wrap; |
59 | order: 1; | ||
60 | width: 100%; | ||
40 | } | 61 | } |
41 | 62 | ||
42 | .franz-form__input { | 63 | .franz-form__input { |
43 | flex: 1; | ||
44 | border: 0; | ||
45 | background: none; | 64 | background: none; |
46 | width: 100%; | 65 | border: 0; |
47 | padding: 8px; | ||
48 | // font-size: 18px; | ||
49 | color: $theme-gray; | 66 | color: $theme-gray; |
67 | flex: 1; | ||
68 | padding: 8px; | ||
69 | width: 100%; | ||
50 | 70 | ||
51 | &::placeholder { | 71 | &::placeholder { color: lighten($theme-gray-light, 10%); } |
52 | color: lighten($theme-gray-light, 10%); | ||
53 | } | ||
54 | } | 72 | } |
55 | 73 | ||
56 | .franz-form__input-prefix, | 74 | .franz-form__input-prefix, |
57 | .franz-form__input-suffix { | 75 | .franz-form__input-suffix { |
58 | padding: 0 10px; | ||
59 | background: $theme-gray-lighter; | 76 | background: $theme-gray-lighter; |
60 | color: $theme-gray-light; | 77 | color: $theme-gray-light; |
61 | line-height: 35px; | 78 | line-height: 35px; |
79 | padding: 0 10px; | ||
62 | } | 80 | } |
63 | 81 | ||
64 | .franz-form__input-modifier { | 82 | .franz-form__input-modifier { |
65 | padding: 0 20px; | ||
66 | border-left: 1px solid $theme-gray-lighter; | 83 | border-left: 1px solid $theme-gray-lighter; |
67 | color: $theme-gray-light; | 84 | color: $theme-gray-light; |
68 | font-size: 20px; | 85 | font-size: 20px; |
86 | padding: 0 20px; | ||
69 | } | 87 | } |
70 | 88 | ||
71 | .franz-form__password-score { | 89 | .franz-form__password-score { |
72 | background: $theme-gray-lighter; | 90 | background: $theme-gray-lighter; |
73 | height: 5px; | ||
74 | flex-basis: 100%; | ||
75 | border-bottom-left-radius: 3px; | 91 | border-bottom-left-radius: 3px; |
76 | border-bottom-right-radius: 3px; | 92 | border-bottom-right-radius: 3px; |
93 | flex-basis: 100%; | ||
94 | height: 5px; | ||
77 | 95 | ||
78 | meter { | 96 | meter { |
79 | width: 100%; | ||
80 | height: 100%; | ||
81 | display: block; | ||
82 | border-bottom-left-radius: 3px; | 97 | border-bottom-left-radius: 3px; |
83 | border-bottom-right-radius: 3px; | 98 | border-bottom-right-radius: 3px; |
99 | display: block; | ||
100 | height: 100%; | ||
84 | overflow: hidden; | 101 | overflow: hidden; |
102 | width: 100%; | ||
85 | 103 | ||
86 | &::-webkit-meter-bar { | 104 | &::-webkit-meter-bar { background: none; } |
87 | background: none; | 105 | &::-webkit-meter-even-less-good-value { background: $theme-brand-danger; } |
88 | } | 106 | &::-webkit-meter-suboptimum-value { background: $theme-brand-warning; } |
89 | 107 | &::-webkit-meter-optimum-value { background: $theme-brand-success; } | |
90 | &::-webkit-meter-even-less-good-value { | ||
91 | background: $theme-brand-danger; | ||
92 | } | ||
93 | |||
94 | &::-webkit-meter-suboptimum-value { | ||
95 | background: $theme-brand-warning; | ||
96 | } | ||
97 | |||
98 | &::-webkit-meter-optimum-value { | ||
99 | background: $theme-brand-success; | ||
100 | } | ||
101 | } | 108 | } |
102 | } | 109 | } |
103 | } | 110 | } |
diff --git a/src/styles/invite.scss b/src/styles/invite.scss index bfb1a4b6b..594224f62 100644 --- a/src/styles/invite.scss +++ b/src/styles/invite.scss | |||
@@ -1,15 +1,8 @@ | |||
1 | .invite__form { | 1 | .invite__form { |
2 | /* play with values to see different layouts */ | ||
3 | // display: flex; | ||
4 | align-items: center; | 2 | align-items: center; |
5 | align-self: center; | 3 | align-self: center; |
6 | justify-content: center; | 4 | justify-content: center; |
7 | } | 5 | } |
8 | 6 | ||
9 | .invite__embed { | 7 | .invite__embed { text-align: center; } |
10 | text-align: center; | 8 | .invite__embed--button { width: 100%; } |
11 | } | ||
12 | |||
13 | .invite__embed--button { | ||
14 | width: 100%; | ||
15 | } \ No newline at end of file | ||
diff --git a/src/styles/layout.scss b/src/styles/layout.scss index 964a9fcea..ebf468cf0 100644 --- a/src/styles/layout.scss +++ b/src/styles/layout.scss | |||
@@ -1,16 +1,36 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | html { | 3 | html { overflow: hidden; } |
4 | overflow: hidden; | 4 | |
5 | .theme__dark .app { | ||
6 | .sidebar { | ||
7 | background: $dark-theme-gray-darker; | ||
8 | box-shadow: 0 0 5px 0 $dark-theme-black; | ||
9 | color: $theme-text-color; | ||
10 | |||
11 | .sidebar__add-service { | ||
12 | color: $dark-theme-gray-lighter; | ||
13 | background: $dark-theme-gray; | ||
14 | } | ||
15 | |||
16 | .sidebar__button { | ||
17 | color: $dark-theme-gray-lighter; | ||
18 | font-size: 22px; | ||
19 | |||
20 | &:hover, | ||
21 | &:active { color: $dark-theme-gray-smoke; } | ||
22 | &.is-muted { color: $dark-theme-gray; } | ||
23 | } | ||
24 | } | ||
25 | |||
26 | .app-loader .app-loader__title { color: $dark-theme-gray-lightest; } | ||
5 | } | 27 | } |
6 | 28 | ||
7 | .app { | 29 | .app { |
8 | display: flex; | 30 | display: flex; |
9 | flex-direction: column; | 31 | flex-direction: column; |
10 | 32 | ||
11 | .app__content { | 33 | .app__content { display: flex; } |
12 | display: flex; | ||
13 | } | ||
14 | 34 | ||
15 | .app__service { | 35 | .app__service { |
16 | display: flex; | 36 | display: flex; |
@@ -19,134 +39,100 @@ html { | |||
19 | } | 39 | } |
20 | } | 40 | } |
21 | 41 | ||
22 | .electron-app-title-bar { | 42 | .electron-app-title-bar { z-index: 99999999; } |
23 | z-index: 99999999; | ||
24 | } | ||
25 | 43 | ||
26 | .window-draggable { | 44 | .window-draggable { |
27 | position: absolute; | ||
28 | width: 100%; | ||
29 | top: 0px; | ||
30 | left: 0px; | ||
31 | height: 35px; | 45 | height: 35px; |
46 | left: 0; | ||
32 | pointer-events: none; | 47 | pointer-events: none; |
33 | -webkit-app-region: drag; | 48 | position: absolute; |
49 | top: 0; | ||
50 | width: 100%; | ||
34 | z-index: 9999; | 51 | z-index: 9999; |
52 | -webkit-app-region: drag; | ||
35 | } | 53 | } |
36 | 54 | ||
37 | .darwin { | 55 | .darwin .sidebar { padding-top: 23px; } |
38 | .sidebar { | ||
39 | padding-top: 23px; | ||
40 | } | ||
41 | } | ||
42 | 56 | ||
43 | .sidebar { | 57 | .sidebar { |
44 | display: flex; | ||
45 | flex-direction: column; | ||
46 | align-items: center; | 58 | align-items: center; |
47 | width: $theme-sidebar-width; | ||
48 | background: $theme-gray-lightest; | 59 | background: $theme-gray-lightest; |
49 | box-shadow: 1px 0 10px rgba(0,0,0,0.08); | 60 | box-shadow: 1px 0 10px rgba(0, 0, 0, .08); |
50 | z-index: 200; | ||
51 | text-align: center; | ||
52 | color: $theme-text-color; | 61 | color: $theme-text-color; |
62 | display: flex; | ||
63 | flex-direction: column; | ||
53 | padding-bottom: 10px; | 64 | padding-bottom: 10px; |
65 | text-align: center; | ||
66 | width: $theme-sidebar-width; | ||
67 | z-index: 200; | ||
54 | 68 | ||
55 | .sidebar__add-service { | 69 | .sidebar__add-service { |
56 | width: 32px; | 70 | color: $theme-gray-light; |
57 | height: 32px; | ||
58 | background: $theme-gray-lighter; | 71 | background: $theme-gray-lighter; |
59 | border-radius: $theme-border-radius-small; | 72 | border-radius: $theme-border-radius-small; |
73 | height: 32px; | ||
60 | margin: 10px auto; | 74 | margin: 10px auto; |
61 | color: $theme-gray-light; | 75 | width: 32px; |
62 | } | 76 | } |
63 | 77 | ||
64 | .sidebar__button { | 78 | .sidebar__button { |
65 | width: $theme-sidebar-width; | 79 | color: $theme-gray-light; |
66 | padding: 7px 0; | ||
67 | font-size: 24px; | 80 | font-size: 24px; |
81 | padding: 7px 0; | ||
68 | position: relative; | 82 | position: relative; |
69 | color: $theme-gray-light; | 83 | width: $theme-sidebar-width; |
70 | |||
71 | &:hover { | ||
72 | color: darken($theme-gray-light, 10%); | ||
73 | } | ||
74 | |||
75 | &:active { | ||
76 | color: lighten($theme-gray-light, 10%); | ||
77 | } | ||
78 | |||
79 | &.is-muted { | ||
80 | color: $theme-brand-primary; | ||
81 | } | ||
82 | 84 | ||
83 | &--new-service { | 85 | &:hover, |
84 | padding-bottom: 6px; | 86 | &:active { color: lighten($theme-gray-light, 10%); } |
85 | } | 87 | &.is-muted { color: $theme-brand-primary; } |
88 | &--new-service { padding-bottom: 6px; } | ||
86 | } | 89 | } |
87 | 90 | ||
88 | & > div { | 91 | & > div { |
89 | display: flex; | 92 | display: flex; |
90 | overflow-y: scroll; | 93 | overflow-y: scroll; |
91 | 94 | ||
92 | &::-webkit-scrollbar { | 95 | &::-webkit-scrollbar { display: none; } |
93 | display: none; | ||
94 | } | ||
95 | } | 96 | } |
96 | } | 97 | } |
97 | 98 | ||
98 | .grid { | 99 | .grid .grid__row { |
99 | .grid__row { | 100 | display: flex; |
100 | display: flex; | 101 | flex-direction: row; |
101 | flex-direction: row; | ||
102 | |||
103 | &>* { | ||
104 | margin-right: 20px; | ||
105 | } | ||
106 | 102 | ||
107 | & :last-child { | 103 | & > * { margin-right: 20px; } |
108 | margin-right: 0; | 104 | & :last-child { margin-right: 0; } |
109 | } | ||
110 | } | ||
111 | } | 105 | } |
112 | 106 | ||
113 | .app-loader { | 107 | .app-loader { |
108 | align-items: center; | ||
114 | display: flex; | 109 | display: flex; |
115 | justify-content: center; | 110 | justify-content: center; |
116 | align-items: center; | ||
117 | 111 | ||
118 | .app-loader__title { | 112 | .app-loader__title { |
119 | color: #FFF; | 113 | color: #FFF; |
120 | font-size: 40px; | 114 | font-size: 40px; |
121 | } | 115 | } |
122 | 116 | ||
123 | &>span { | 117 | & > span { height: auto; } |
124 | height: auto; | ||
125 | } | ||
126 | } | ||
127 | |||
128 | .dev-warning { | ||
129 | display: none; | ||
130 | } | 118 | } |
131 | 119 | ||
132 | .isDevMode { | 120 | .dev-warning { display: none; } |
133 | .dev-warning { | 121 | |
134 | display: block; | 122 | .isDevMode .dev-warning { |
135 | position: fixed; | 123 | border-radius: 3px; |
136 | background: $theme-brand-warning; | 124 | background: $theme-brand-warning; |
137 | width: auto; | 125 | color: #FFF; |
138 | height: auto; | 126 | display: block; |
139 | top: 5px; | 127 | font-size: 10px; |
140 | right: 5px; | 128 | height: auto; |
141 | padding: 4px; | 129 | padding: 4px; |
142 | font-size: 10px; | 130 | position: fixed; |
143 | color: #FFF; | 131 | right: 5px; |
144 | z-index: 999999999; | 132 | top: 5px; |
145 | border-radius: 3px; | 133 | transition: opacity .5s ease; |
146 | transition: opacity 0.5s ease; | 134 | width: auto; |
147 | 135 | z-index: 999999999; | |
148 | &:hover { | 136 | |
149 | opacity: 0; | 137 | &:hover { opacity: 0; } |
150 | } | ||
151 | } | ||
152 | } | 138 | } |
diff --git a/src/styles/mixins.scss b/src/styles/mixins.scss index c9b1bc988..06efb475a 100644 --- a/src/styles/mixins.scss +++ b/src/styles/mixins.scss | |||
@@ -1,9 +1,9 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | @mixin formLabel { | 3 | @mixin formLabel { |
4 | width: 100%; | ||
5 | color: $theme-gray-light; | 4 | color: $theme-gray-light; |
6 | display: block; | 5 | display: block; |
7 | margin-bottom: 5px; | 6 | margin-bottom: 5px; |
8 | order: 0; | 7 | order: 0; |
8 | width: 100%; | ||
9 | } | 9 | } |
diff --git a/src/styles/radio.scss b/src/styles/radio.scss index 644478cd6..87d401215 100644 --- a/src/styles/radio.scss +++ b/src/styles/radio.scss | |||
@@ -1,34 +1,39 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .franz-form { | 3 | .theme__dark .franz-form .franz-form__radio { |
4 | .franz-form__radio-wrapper { | 4 | border: 1px solid $dark-theme-gray-lighter; |
5 | display: flex; | 5 | color: $dark-theme-gray-lightest; |
6 | |||
7 | &.is-selected { | ||
8 | background: $dark-theme-gray-lighter; | ||
9 | border: 1px solid $dark-theme-gray-lighter; | ||
10 | color: $dark-theme-gray-smoke; | ||
6 | } | 11 | } |
12 | } | ||
13 | |||
14 | |||
15 | .franz-form { | ||
16 | .franz-form__radio-wrapper { display: flex; } | ||
7 | 17 | ||
8 | .franz-form__radio { | 18 | .franz-form__radio { |
9 | // background: $theme-gray-lightest; | ||
10 | border: 2px solid $theme-gray-lighter; | 19 | border: 2px solid $theme-gray-lighter; |
20 | border-radius: $theme-border-radius-small; | ||
21 | box-shadow: $theme-inset-shadow; | ||
11 | color: $theme-gray; | 22 | color: $theme-gray; |
12 | padding: 11px; | 23 | flex: 1; |
13 | margin-right: 20px; | 24 | margin-right: 20px; |
25 | padding: 11px; | ||
14 | text-align: center; | 26 | text-align: center; |
15 | border-radius: $theme-border-radius-small; | ||
16 | flex: 1; | ||
17 | box-shadow: $theme-inset-shadow; | ||
18 | transition: background $theme-transition-time; | 27 | transition: background $theme-transition-time; |
19 | 28 | ||
20 | &:last-of-type { | 29 | &:last-of-type { margin-right: 0; } |
21 | margin-right: 0; | ||
22 | } | ||
23 | 30 | ||
24 | &.is-selected { | 31 | &.is-selected { |
25 | border: 2px solid $theme-brand-primary; | ||
26 | background: #FFF; | 32 | background: #FFF; |
33 | border: 2px solid $theme-brand-primary; | ||
27 | color: $theme-brand-primary; | 34 | color: $theme-brand-primary; |
28 | } | 35 | } |
29 | 36 | ||
30 | input { | 37 | input { display: none; } |
31 | display: none; | ||
32 | } | ||
33 | } | 38 | } |
34 | } | 39 | } |
diff --git a/src/styles/recipes.scss b/src/styles/recipes.scss index 1b519a5e5..84222e1fe 100644 --- a/src/styles/recipes.scss +++ b/src/styles/recipes.scss | |||
@@ -1,16 +1,22 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .recipe-teaser { | ||
4 | background-color: $dark-theme-gray-dark; | ||
5 | |||
6 | &:hover { background-color: $dark-theme-gray; } | ||
7 | } | ||
8 | |||
3 | .recipes { | 9 | .recipes { |
4 | .recipes__list { | 10 | .recipes__list { |
11 | align-content: flex-start; | ||
5 | display: flex; | 12 | display: flex; |
6 | flex-flow: row wrap; | 13 | flex-flow: row wrap; |
7 | align-content: flex-start; | ||
8 | min-height: 70%; | ||
9 | height: auto; | 14 | height: auto; |
15 | min-height: 70%; | ||
10 | 16 | ||
11 | &.recipes__list--disabled { | 17 | &.recipes__list--disabled { |
12 | opacity: 0.3; | ||
13 | filter: grayscale(100%); | 18 | filter: grayscale(100%); |
19 | opacity: .3; | ||
14 | pointer-events: none; | 20 | pointer-events: none; |
15 | } | 21 | } |
16 | } | 22 | } |
@@ -19,58 +25,48 @@ | |||
19 | height: auto; | 25 | height: auto; |
20 | margin-bottom: 35px; | 26 | margin-bottom: 35px; |
21 | 27 | ||
22 | .badge { | 28 | .badge { margin-right: 10px; } |
23 | margin-right: 10px; | ||
24 | } | ||
25 | 29 | ||
26 | &.recipes__navigation--disabled { | 30 | &.recipes__navigation--disabled { |
27 | opacity: 0.3; | ||
28 | filter: grayscale(100%); | 31 | filter: grayscale(100%); |
32 | opacity: .3; | ||
29 | pointer-events: none; | 33 | pointer-events: none; |
30 | } | 34 | } |
31 | } | 35 | } |
32 | 36 | ||
33 | &__service-request { | 37 | &__service-request { float: right; } |
34 | float: right; | ||
35 | } | ||
36 | } | 38 | } |
37 | 39 | ||
38 | .recipe-teaser { | 40 | .recipe-teaser { |
39 | position: relative; | 41 | background-color: $theme-gray-lightest; |
40 | width: calc(25% - 20px); | 42 | border-radius: $theme-border-radius; |
41 | height: 120px; | 43 | height: 120px; |
42 | margin: 0 20px 20px 0; | 44 | margin: 0 20px 20px 0; |
43 | border-radius: $theme-border-radius; | ||
44 | background-color: $theme-gray-lightest; | ||
45 | transition: background $theme-transition-time; | ||
46 | overflow: hidden; | 45 | overflow: hidden; |
46 | position: relative; | ||
47 | transition: background $theme-transition-time; | ||
48 | width: calc(25% - 20px); | ||
47 | 49 | ||
48 | &:hover { | 50 | &:hover { background-color: $theme-gray-lighter; } |
49 | background-color: $theme-gray-lighter; | ||
50 | } | ||
51 | 51 | ||
52 | .recipe-teaser__icon { | 52 | .recipe-teaser__icon { |
53 | width: 50px; | ||
54 | margin-bottom: 10px; | 53 | margin-bottom: 10px; |
54 | width: 50px; | ||
55 | } | 55 | } |
56 | 56 | ||
57 | .recipe-teaser__label { | 57 | .recipe-teaser__label { display: block; } |
58 | display: block; | ||
59 | } | ||
60 | 58 | ||
61 | h2 { | 59 | h2 { z-index: 10; } |
62 | z-index: 10; | ||
63 | } | ||
64 | 60 | ||
65 | &__dev-badge { | 61 | &__dev-badge { |
66 | position: absolute; | ||
67 | top: 5px; | ||
68 | right: -13px; | ||
69 | width: 50px; | ||
70 | background: $theme-brand-warning; | 62 | background: $theme-brand-warning; |
63 | box-shadow: 0 0 4px rgba(black, .2); | ||
71 | color: #FFF; | 64 | color: #FFF; |
72 | font-size: 10px; | 65 | font-size: 10px; |
66 | position: absolute; | ||
67 | right: -13px; | ||
68 | top: 5px; | ||
73 | transform: rotateZ(45deg); | 69 | transform: rotateZ(45deg); |
74 | box-shadow: 0 0 4px rgba(black, 0.2); | 70 | width: 50px; |
75 | } | 71 | } |
76 | } | 72 | } |
diff --git a/src/styles/reset.scss b/src/styles/reset.scss index 21763f44f..80328dcef 100644 --- a/src/styles/reset.scss +++ b/src/styles/reset.scss | |||
@@ -16,63 +16,62 @@ article, aside, canvas, details, embed, | |||
16 | figure, figcaption, footer, header, hgroup, | 16 | figure, figcaption, footer, header, hgroup, |
17 | menu, nav, output, ruby, section, summary, | 17 | menu, nav, output, ruby, section, summary, |
18 | time, mark, audio, video { | 18 | time, mark, audio, video { |
19 | margin: 0; | ||
20 | padding: 0; | ||
21 | border: 0; | 19 | border: 0; |
22 | font-size: 100%; | ||
23 | font: inherit; | 20 | font: inherit; |
21 | font-size: 100%; | ||
22 | margin: 0; | ||
23 | padding: 0; | ||
24 | } | 24 | } |
25 | /* HTML5 display-role reset for older browsers */ | 25 | |
26 | article, aside, details, figcaption, figure, | 26 | article, aside, details, figcaption, figure, |
27 | footer, header, hgroup, menu, nav, section { | 27 | footer, header, hgroup, menu, nav, section { display: block; } |
28 | display: block; | 28 | |
29 | } | 29 | ol, |
30 | body { | 30 | ul { list-style: none; } |
31 | line-height: 1; | 31 | |
32 | } | 32 | blockquote, |
33 | ol, ul { | 33 | q { |
34 | list-style: none; | ||
35 | } | ||
36 | blockquote, q { | ||
37 | quotes: none; | 34 | quotes: none; |
35 | |||
36 | &::before, | ||
37 | &::after { | ||
38 | content: ''; | ||
39 | content: none; | ||
40 | } | ||
38 | } | 41 | } |
39 | blockquote:before, blockquote:after, q:before, q:after { | 42 | |
40 | content: ''; | ||
41 | content: none; | ||
42 | } | ||
43 | table { | 43 | table { |
44 | border-collapse: collapse; | 44 | border-collapse: collapse; |
45 | border-spacing: 0; | 45 | border-spacing: 0; |
46 | } | 46 | } |
47 | 47 | ||
48 | /* Buttons should not have any special style applied by default */ | ||
49 | button { | 48 | button { |
50 | background: none; | 49 | background: none; |
51 | border: none; | 50 | border: none; |
52 | padding: 0; | 51 | padding: 0; |
53 | } | ||
54 | 52 | ||
55 | button:focus { | 53 | &:focus { outline: 0; } |
56 | outline: 0; | 54 | .theme__dark & { color: $dark-theme-gray-smoke; } |
57 | } | 55 | } |
58 | 56 | ||
59 | html { | 57 | html { |
60 | /* base for rem / 1rem = 10px */ | ||
61 | font-size: 62.5%; | 58 | font-size: 62.5%; |
62 | font-family: 'Open Sans'; | 59 | font-family: 'Open Sans'; |
63 | } | 60 | } |
64 | 61 | ||
65 | body { | 62 | body { |
66 | /* default font size = 14px */ | ||
67 | font-size: 1.4rem; | ||
68 | color: $theme-gray-dark; | 63 | color: $theme-gray-dark; |
64 | font-size: 1.4rem; | ||
65 | line-height: 1; | ||
66 | |||
67 | .theme__dark { color: $dark-theme-gray-smoke; } | ||
69 | } | 68 | } |
70 | 69 | ||
71 | * { | 70 | * { |
72 | -webkit-font-smoothing: antialiased; | ||
73 | box-sizing: border-box; | 71 | box-sizing: border-box; |
74 | font-size: 1.4rem; | ||
75 | font-family: 'Open Sans'; | 72 | font-family: 'Open Sans'; |
73 | font-size: 1.4rem; | ||
74 | -webkit-font-smoothing: antialiased; | ||
76 | -webkit-user-select: none; | 75 | -webkit-user-select: none; |
77 | } | 76 | } |
78 | 77 | ||
@@ -82,14 +81,6 @@ html, body, div { | |||
82 | box-sizing: border-box; | 81 | box-sizing: border-box; |
83 | } | 82 | } |
84 | 83 | ||
85 | *:focus { | 84 | *:focus { outline: none; } |
86 | outline: none; | 85 | img { pointer-events: none; } |
87 | } | 86 | a { cursor: default; } |
88 | |||
89 | img { | ||
90 | pointer-events: none; | ||
91 | } | ||
92 | |||
93 | a { | ||
94 | cursor: default; | ||
95 | } | ||
diff --git a/src/styles/searchInput.scss b/src/styles/searchInput.scss index 633a31e09..32b9da065 100644 --- a/src/styles/searchInput.scss +++ b/src/styles/searchInput.scss | |||
@@ -1,20 +1,32 @@ | |||
1 | @import './config.scss'; | ||
2 | @import './mixins.scss'; | ||
3 | |||
4 | .theme__dark .search-input { | ||
5 | @extend %headline__dark; | ||
6 | background: $dark-theme-gray-dark; | ||
7 | border: 1px solid $dark-theme-gray-light; | ||
8 | border-radius: $theme-border-radius; | ||
9 | color: $dark-theme-gray-lightest; | ||
10 | |||
11 | input { color: $dark-theme-gray-lightest; } | ||
12 | } | ||
13 | |||
1 | .search-input { | 14 | .search-input { |
2 | width: 100%; | 15 | @extend %headline; |
3 | height: auto; | ||
4 | display: flex; | ||
5 | align-items: center; | 16 | align-items: center; |
6 | padding: 0 10px; | ||
7 | border-radius: 30px; | ||
8 | background: $theme-gray-lightest; | 17 | background: $theme-gray-lightest; |
9 | padding: 5px 10px; | 18 | border-radius: 30px; |
10 | @extend %headline; | ||
11 | color: $theme-gray-light; | 19 | color: $theme-gray-light; |
20 | display: flex; | ||
21 | height: auto; | ||
22 | padding: 5px 10px; | ||
23 | width: 100%; | ||
12 | 24 | ||
13 | input { | 25 | input { |
14 | padding-left: 10px; | ||
15 | background: none; | 26 | background: none; |
16 | border: 0; | 27 | border: 0; |
17 | flex: 1; | ||
18 | color: $theme-gray-light; | 28 | color: $theme-gray-light; |
29 | flex: 1; | ||
30 | padding-left: 10px; | ||
19 | } | 31 | } |
20 | } | 32 | } |
diff --git a/src/styles/select.scss b/src/styles/select.scss index 965b4321a..ed0fc0fc2 100644 --- a/src/styles/select.scss +++ b/src/styles/select.scss | |||
@@ -3,17 +3,21 @@ | |||
3 | 3 | ||
4 | $toggle: "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgdmlld0JveD0iMCAwIDM1Ljk3MDk4MyAyMy4wOTE1MTgiCiAgIGhlaWdodD0iNi41MTY5Mzk2bW0iCiAgIHdpZHRoPSIxMC4xNTE4MTFtbSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAyLjAxNDUxLC00MDcuMTIyMjUpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0MzMzNiIKICAgICAgIHk9IjYyOS41MDUwNyIKICAgICAgIHg9IjI5MS40Mjg1NiIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjQwcHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIj48dHNwYW4KICAgICAgICAgeT0iNjI5LjUwNTA3IgogICAgICAgICB4PSIyOTEuNDI4NTYiCiAgICAgICAgIGlkPSJ0c3BhbjMzMzgiPjwvdHNwYW4+PC90ZXh0PgogICAgPGcKICAgICAgIGlkPSJ0ZXh0MzM0MCIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo0MHB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWU7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpGb250QXdlc29tZTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgzMzQ1IgogICAgICAgICBzdHlsZT0iZmlsbDojMzMzMzMzO2ZpbGwtb3BhY2l0eToxIgogICAgICAgICBkPSJtIDIzNy41NjY5Niw0MTMuMjU1MDcgYyAwLjU1ODA0LC0wLjU1ODA0IDAuNTU4MDQsLTEuNDczMjIgMCwtMi4wMzEyNSBsIC0zLjcwNTM1LC0zLjY4MzA0IGMgLTAuNTU4MDQsLTAuNTU4MDQgLTEuNDUwOSwtMC41NTgwNCAtMi4wMDg5MywwIEwgMjIwLDQxOS4zOTM0NiAyMDguMTQ3MzIsNDA3LjU0MDc4IGMgLTAuNTU4MDMsLTAuNTU4MDQgLTEuNDUwODksLTAuNTU4MDQgLTIuMDA4OTMsMCBsIC0zLjcwNTM1LDMuNjgzMDQgYyAtMC41NTgwNCwwLjU1ODAzIC0wLjU1ODA0LDEuNDczMjEgMCwyLjAzMTI1IGwgMTYuNTYyNSwxNi41NDAxNyBjIDAuNTU4MDMsMC41NTgwNCAxLjQ1MDg5LDAuNTU4MDQgMi4wMDg5MiwwIGwgMTYuNTYyNSwtMTYuNTQwMTcgeiIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="; | 4 | $toggle: "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgdmlld0JveD0iMCAwIDM1Ljk3MDk4MyAyMy4wOTE1MTgiCiAgIGhlaWdodD0iNi41MTY5Mzk2bW0iCiAgIHdpZHRoPSIxMC4xNTE4MTFtbSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAyLjAxNDUxLC00MDcuMTIyMjUpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHRleHQKICAgICAgIGlkPSJ0ZXh0MzMzNiIKICAgICAgIHk9IjYyOS41MDUwNyIKICAgICAgIHg9IjI5MS40Mjg1NiIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjQwcHg7bGluZS1oZWlnaHQ6MTI1JTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIj48dHNwYW4KICAgICAgICAgeT0iNjI5LjUwNTA3IgogICAgICAgICB4PSIyOTEuNDI4NTYiCiAgICAgICAgIGlkPSJ0c3BhbjMzMzgiPjwvdHNwYW4+PC90ZXh0PgogICAgPGcKICAgICAgIGlkPSJ0ZXh0MzM0MCIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo0MHB4O2xpbmUtaGVpZ2h0OjEyNSU7Zm9udC1mYW1pbHk6Rm9udEF3ZXNvbWU7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpGb250QXdlc29tZTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIj4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgzMzQ1IgogICAgICAgICBzdHlsZT0iZmlsbDojMzMzMzMzO2ZpbGwtb3BhY2l0eToxIgogICAgICAgICBkPSJtIDIzNy41NjY5Niw0MTMuMjU1MDcgYyAwLjU1ODA0LC0wLjU1ODA0IDAuNTU4MDQsLTEuNDczMjIgMCwtMi4wMzEyNSBsIC0zLjcwNTM1LC0zLjY4MzA0IGMgLTAuNTU4MDQsLTAuNTU4MDQgLTEuNDUwOSwtMC41NTgwNCAtMi4wMDg5MywwIEwgMjIwLDQxOS4zOTM0NiAyMDguMTQ3MzIsNDA3LjU0MDc4IGMgLTAuNTU4MDMsLTAuNTU4MDQgLTEuNDUwODksLTAuNTU4MDQgLTIuMDA4OTMsMCBsIC0zLjcwNTM1LDMuNjgzMDQgYyAtMC41NTgwNCwwLjU1ODAzIC0wLjU1ODA0LDEuNDczMjEgMCwyLjAzMTI1IGwgMTYuNTYyNSwxNi41NDAxNyBjIDAuNTU4MDMsMC41NTgwNCAxLjQ1MDg5LDAuNTU4MDQgMi4wMDg5MiwwIGwgMTYuNTYyNSwtMTYuNTQwMTcgeiIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="; |
5 | 5 | ||
6 | .franz-form { | 6 | .theme__dark .franz-form .franz-form__select { |
7 | .franz-form__select { | 7 | background-color: $dark-theme-gray-dark; |
8 | -webkit-appearance: none; | 8 | border: 1px solid $dark-theme-gray-light; |
9 | min-width: 200px; | 9 | color: $dark-theme-gray-lightest; |
10 | padding: 10px; | 10 | } |
11 | background-color: $theme-gray-lightest; | 11 | |
12 | background-position: right center; | 12 | .franz-form .franz-form__select { |
13 | background-repeat: no-repeat; | 13 | background-color: $theme-gray-lightest; |
14 | background-size: 1ex; | 14 | background-image: url(data:image/svg+xml;base64,#{$toggle}); |
15 | background-origin: content-box; | 15 | background-origin: content-box; |
16 | background-image: url(data:image/svg+xml;base64,#{$toggle}); | 16 | background-position: right center; |
17 | border: 1px solid $theme-gray-lighter; | 17 | background-repeat: no-repeat; |
18 | } | 18 | background-size: 1ex; |
19 | border: 1px solid $theme-gray-lighter; | ||
20 | min-width: 200px; | ||
21 | padding: 10px; | ||
22 | -webkit-appearance: none; | ||
19 | } | 23 | } |
diff --git a/src/styles/service-table.scss b/src/styles/service-table.scss index 66d5ac941..f2090685b 100644 --- a/src/styles/service-table.scss +++ b/src/styles/service-table.scss | |||
@@ -1,62 +1,63 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .service-table { | ||
4 | .service-table__icon.has-custom-icon { border: 1px solid $dark-theme-gray-dark; } | ||
5 | .service-table__column-info .mdi { color: $dark-theme-gray-lightest; } | ||
6 | |||
7 | .service-table__row { | ||
8 | border-bottom: 1px solid $dark-theme-gray-darker; | ||
9 | |||
10 | &:hover { background: $dark-theme-gray-darker; } | ||
11 | &.service-table__row--disabled { color: $dark-theme-gray; } | ||
12 | } | ||
13 | } | ||
14 | |||
3 | .service-table { | 15 | .service-table { |
4 | width: 100%; | 16 | width: 100%; |
5 | 17 | ||
6 | .service-table__toggle { | 18 | .service-table__toggle { |
7 | width: 60px; | 19 | width: 60px; |
8 | 20 | ||
9 | .franz-form__field { | 21 | .franz-form__field { margin-bottom: 0; } |
10 | margin-bottom: 0; | ||
11 | } | ||
12 | } | 22 | } |
13 | 23 | ||
14 | .service-table__icon { | 24 | .service-table__icon { |
15 | width: 35px; | 25 | width: 35px; |
16 | 26 | ||
17 | &.has-custom-icon { | 27 | &.has-custom-icon { |
18 | border-radius: $theme-border-radius; | ||
19 | border: 1px solid $theme-gray-lighter; | 28 | border: 1px solid $theme-gray-lighter; |
29 | border-radius: $theme-border-radius; | ||
20 | width: 37px; | 30 | width: 37px; |
21 | } | 31 | } |
22 | } | 32 | } |
23 | 33 | ||
24 | .service-table__column-icon { | 34 | .service-table__column-icon, |
25 | width: 40px; | 35 | .service-table__column-action { width: 40px } |
26 | } | ||
27 | |||
28 | .service-table__column-action { | ||
29 | width: 40px | ||
30 | } | ||
31 | 36 | ||
32 | .service-table__column-info { | 37 | .service-table__column-info { |
33 | width: 40px; | 38 | width: 40px; |
34 | 39 | ||
35 | .mdi { | 40 | .mdi { |
41 | color: $theme-gray-light; | ||
36 | display: block; | 42 | display: block; |
37 | font-size: 18px; | 43 | font-size: 18px; |
38 | color: $theme-gray-light; | ||
39 | } | 44 | } |
40 | } | 45 | } |
41 | 46 | ||
42 | .service-table__row { | 47 | .service-table__row { |
43 | border-bottom: 1px solid $theme-gray-lightest; | 48 | border-bottom: 1px solid $theme-gray-lightest; |
44 | 49 | ||
45 | &:hover { | 50 | &:hover { background: $theme-gray-lightest; } |
46 | background: $theme-gray-lightest; | ||
47 | } | ||
48 | 51 | ||
49 | &.service-table__row--disabled { | 52 | &.service-table__row--disabled { |
50 | color: $theme-gray-light; | 53 | color: $theme-gray-light; |
51 | 54 | ||
52 | .service-table__column-icon { | 55 | .service-table__column-icon { |
53 | filter: grayscale(100%); | 56 | filter: grayscale(100%); |
54 | opacity: 0.5; | 57 | opacity: .5; |
55 | } | 58 | } |
56 | } | 59 | } |
57 | } | 60 | } |
58 | 61 | ||
59 | td { | 62 | td { padding: 10px; } |
60 | padding: 10px; | ||
61 | } | ||
62 | } | 63 | } |
diff --git a/src/styles/services.scss b/src/styles/services.scss index 9f6cfc772..0e559501c 100644 --- a/src/styles/services.scss +++ b/src/styles/services.scss | |||
@@ -1,30 +1,46 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .services { | ||
4 | background: $dark-theme-gray-darkest; | ||
5 | |||
6 | .services__webview-wrapper { background: $dark-theme-gray-darkest; } | ||
7 | |||
8 | .services__webview, | ||
9 | .services__info-layer { | ||
10 | webview { background: $dark-theme-gray-darkest; } | ||
11 | } | ||
12 | |||
13 | .services__no-service, | ||
14 | .services__info-layer { | ||
15 | background: $dark-theme-gray-darkest; | ||
16 | |||
17 | h1 { color: $dark-theme-gray-lightest; } | ||
18 | } | ||
19 | } | ||
20 | |||
3 | .services { | 21 | .services { |
22 | background: #FFF; | ||
4 | flex: 1; | 23 | flex: 1; |
5 | height: 100%; | 24 | height: 100%; |
6 | position: relative; | ||
7 | overflow: hidden; | ||
8 | background: #FFF; | ||
9 | order: 5; | 25 | order: 5; |
26 | overflow: hidden; | ||
27 | position: relative; | ||
10 | 28 | ||
11 | .services__webview-wrapper { | 29 | .services__webview-wrapper { background: $theme-gray-lighter; } |
12 | background: $theme-gray-lighter; | ||
13 | } | ||
14 | 30 | ||
15 | .services__webview, | 31 | .services__webview, |
16 | .services__info-layer { | 32 | .services__info-layer { |
33 | left: 0; | ||
17 | position: absolute; | 34 | position: absolute; |
18 | width: 100%; | ||
19 | top: 0; | 35 | top: 0; |
20 | left: 0; | 36 | width: 100%; |
21 | z-index: 0; | 37 | z-index: 0; |
22 | 38 | ||
23 | webview { | 39 | webview { |
24 | display: inline-flex; | ||
25 | width: 0px; | ||
26 | height: 0px; | ||
27 | background: $theme-gray-lighter; | 40 | background: $theme-gray-lighter; |
41 | display: inline-flex; | ||
42 | height: 0; | ||
43 | width: 0; | ||
28 | } | 44 | } |
29 | 45 | ||
30 | &.is-active { | 46 | &.is-active { |
@@ -32,36 +48,30 @@ | |||
32 | 48 | ||
33 | webview { | 49 | webview { |
34 | flex: 0 1; | 50 | flex: 0 1; |
35 | width: 100%; | ||
36 | height: 100%; | 51 | height: 100%; |
52 | width: 100%; | ||
37 | } | 53 | } |
38 | } | 54 | } |
39 | 55 | ||
40 | &--force-repaint { | 56 | &--force-repaint webview { z-index: 5; } |
41 | webview { | ||
42 | z-index: 5; | ||
43 | } | ||
44 | } | ||
45 | } | 57 | } |
46 | 58 | ||
47 | .services__no-service, | 59 | .services__no-service, |
48 | .services__info-layer { | 60 | .services__info-layer { |
61 | align-items: center; | ||
62 | background: $theme-gray-lighter; | ||
49 | display: flex; | 63 | display: flex; |
50 | flex-direction: column; | 64 | flex-direction: column; |
51 | justify-content: center; | 65 | justify-content: center; |
52 | align-items: center; | ||
53 | text-align: center; | 66 | text-align: center; |
54 | background: $theme-gray-lighter; | ||
55 | 67 | ||
56 | h1 { | 68 | h1 { |
57 | margin: 25px 0 40px; | ||
58 | color: $theme-gray-dark; | 69 | color: $theme-gray-dark; |
70 | margin: 25px 0 40px; | ||
59 | } | 71 | } |
60 | 72 | ||
61 | a.button, | 73 | a.button, |
62 | button { | 74 | button { margin: 40px 0 20px; } |
63 | margin: 40px 0 20px; | ||
64 | } | ||
65 | } | 75 | } |
66 | 76 | ||
67 | .services__info-layer { | 77 | .services__info-layer { |
diff --git a/src/styles/settings.scss b/src/styles/settings.scss index 2182c9b5f..f94ca114d 100644 --- a/src/styles/settings.scss +++ b/src/styles/settings.scss | |||
@@ -1,130 +1,215 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | %headline { | 3 | %headline { |
4 | color: $theme-gray-light; | ||
4 | font-size: 20px; | 5 | font-size: 20px; |
5 | font-weight: 400; | 6 | font-weight: 400; |
6 | letter-spacing: -1px; | 7 | letter-spacing: -1px; |
7 | color: $theme-gray-light; | ||
8 | 8 | ||
9 | a { | 9 | a { color: $theme-gray-light; } |
10 | color: $theme-gray-light; | 10 | } |
11 | |||
12 | %headline__dark { | ||
13 | color: $dark-theme-gray-lightest; | ||
14 | |||
15 | a { color: $dark-theme-gray-lightest; } | ||
16 | } | ||
17 | |||
18 | .theme__dark { | ||
19 | .settings-wrapper { background: rgba($dark-theme-black, .8); } | ||
20 | |||
21 | .settings { | ||
22 | background: $dark-theme-gray-darkest; | ||
23 | box-shadow: 0 20px 50px rgba($dark-theme-black, .5); | ||
24 | |||
25 | .settings__header { | ||
26 | background: $dark-theme-gray-darker; | ||
27 | |||
28 | h1, | ||
29 | .settings__header-item { @extend %headline__dark; } | ||
30 | |||
31 | .separator { border-right: 1px solid $dark-theme-gray-dark; } | ||
32 | .mdi { color: $dark-theme-gray-lightest; } | ||
33 | } | ||
34 | |||
35 | .settings__body::-webkit-scrollbar-thumb { background: $dark-theme-gray; } | ||
36 | |||
37 | .settings__close { | ||
38 | background: $dark-theme-gray-darker; | ||
39 | border-left: none; | ||
40 | color: $dark-theme-gray-lightest; | ||
41 | |||
42 | &:hover { background: darken($dark-theme-gray-darker, 5%); } | ||
43 | } | ||
44 | |||
45 | &__settings-group h3 { color: $dark-theme-gray-lightest; } | ||
46 | |||
47 | .settings__message { | ||
48 | border-top: 1px solid $theme-gray-lighter; | ||
49 | color: $dark-theme-gray-lightest; | ||
50 | |||
51 | .mdi { color: $dark-theme-gray-lightest; } | ||
52 | } | ||
53 | |||
54 | .settings__help { color: $dark-theme-gray-lightest; } | ||
55 | |||
56 | .settings__controls { | ||
57 | background: $dark-theme-gray-darker; | ||
58 | |||
59 | .franz-form__button.franz-form__button--secondary { background: $theme-gray-light; } | ||
60 | } | ||
61 | |||
62 | .account { | ||
63 | .account__box { background: $dark-theme-gray-darker; } | ||
64 | |||
65 | .invoices { | ||
66 | td { border-bottom: 1px solid $dark-theme-gray-darker; } | ||
67 | .invoices__action button { color: $theme-brand-primary; } | ||
68 | } | ||
69 | } | ||
70 | |||
71 | .premium-info { | ||
72 | background: $dark-theme-gray-darker; | ||
73 | border: 2px solid $theme-brand-primary; | ||
74 | } | ||
75 | .legal { color: $theme-gray-light; } | ||
76 | } | ||
77 | |||
78 | .settings-navigation { | ||
79 | background: $dark-theme-gray-darker; | ||
80 | border-right: 1px solid $dark-theme-gray-dark; | ||
81 | |||
82 | .settings-navigation__link { | ||
83 | color: $dark-theme-gray-lightest; | ||
84 | |||
85 | .badge { | ||
86 | background: $dark-theme-gray-lighter; | ||
87 | color: $dark-theme-gray-smoke; | ||
88 | } | ||
89 | |||
90 | &:hover { | ||
91 | background: darken($dark-theme-gray-darker, 5%); | ||
92 | |||
93 | .badge { | ||
94 | background: $dark-theme-gray-lighter; | ||
95 | color: $dark-theme-gray-smoke; | ||
96 | } | ||
97 | } | ||
98 | |||
99 | &.is-active { | ||
100 | background: $dark-theme-gray; | ||
101 | color: $dark-theme-gray-smoke; | ||
102 | |||
103 | .badge { | ||
104 | background: $dark-theme-gray-lighter; | ||
105 | color: $dark-theme-gray-smoke; | ||
106 | } | ||
107 | } | ||
108 | } | ||
109 | |||
110 | .settings-navigation__action-badge { background: $theme-brand-danger; } | ||
11 | } | 111 | } |
12 | } | 112 | } |
13 | 113 | ||
14 | .settings-wrapper { | 114 | .settings-wrapper { |
15 | background: rgba(black, 0.5); | 115 | align-items: center; |
16 | position: absolute; | 116 | background: rgba(black, .5); |
17 | width: 100%; | 117 | display: flex; |
18 | height: 100%; | 118 | height: 100%; |
19 | top: 0; | ||
20 | left: 0; | 119 | left: 0; |
21 | z-index: 9998; | ||
22 | display: flex; | ||
23 | justify-content: center; | 120 | justify-content: center; |
24 | align-items: center; | ||
25 | padding: 25px; | 121 | padding: 25px; |
122 | position: absolute; | ||
123 | top: 0; | ||
124 | width: 100%; | ||
125 | z-index: 9998; | ||
26 | 126 | ||
27 | .settings-wrapper__action { | 127 | .settings-wrapper__action { |
28 | position: absolute; | ||
29 | width: 100%; | ||
30 | height: 100%; | 128 | height: 100%; |
31 | top: 0; | ||
32 | left: 0; | 129 | left: 0; |
130 | position: absolute; | ||
131 | top: 0; | ||
132 | width: 100%; | ||
33 | } | 133 | } |
34 | } | 134 | } |
35 | 135 | ||
36 | .settings { | 136 | .settings { |
37 | position: relative; | 137 | background: #FFF; |
138 | border-radius: $theme-border-radius; | ||
139 | box-shadow: 0 20px 50px rgba(black, .5); | ||
38 | display: flex; | 140 | display: flex; |
39 | height: 100%; | 141 | height: 100%; |
40 | width: 100%; | 142 | max-height: 720px; |
41 | max-width: 900px; | 143 | max-width: 900px; |
42 | min-height: 400px; | 144 | min-height: 400px; |
43 | max-height: 720px; | ||
44 | z-index: 9999; | ||
45 | background: #FFF; | ||
46 | border-radius: $theme-border-radius; | ||
47 | box-shadow: 0 20px 50px rgba(black, 0.5); | ||
48 | overflow: hidden; | 145 | overflow: hidden; |
49 | // margin-top: -10%; | 146 | position: relative; |
147 | width: 100%; | ||
148 | z-index: 9999; | ||
50 | 149 | ||
51 | .settings__main { | 150 | .settings__main { |
52 | flex: 1; | ||
53 | display: flex; | 151 | display: flex; |
152 | flex: 1; | ||
54 | flex-direction: column; | 153 | flex-direction: column; |
55 | height: auto; | 154 | height: auto; |
56 | } | 155 | } |
57 | 156 | ||
58 | .settings__header { | 157 | .settings__header { |
59 | display: flex; | ||
60 | align-items: center; | 158 | align-items: center; |
61 | width: calc(100% - 60px); | 159 | background: $theme-gray-lighter; |
160 | display: flex; | ||
62 | height: 50px; | 161 | height: 50px; |
63 | padding: 0 40px; | 162 | padding: 0 40px; |
64 | background: $theme-gray-lighter; | 163 | width: calc(100% - 60px); |
65 | 164 | ||
66 | h1 { | 165 | h1 { |
67 | @extend %headline; | 166 | @extend %headline; |
68 | margin: 0; | 167 | margin: 0; |
69 | } | 168 | } |
70 | 169 | ||
71 | .settings__header-item { | 170 | .settings__header-item { @extend %headline; } |
72 | @extend %headline; | ||
73 | } | ||
74 | 171 | ||
75 | .separator { | 172 | .separator { |
173 | border-right: 1px solid darken($theme-gray-lighter, 10%); | ||
76 | height: 100%; | 174 | height: 100%; |
77 | margin: 0 15px; | 175 | margin: 0 15px; |
78 | border-right: 1px solid darken($theme-gray-lighter, 10%); | ||
79 | transform: skew(15deg) rotate(2deg); | 176 | transform: skew(15deg) rotate(2deg); |
80 | } | 177 | } |
81 | 178 | ||
82 | .mdi { | 179 | .mdi { color: $theme-gray-light; } |
83 | color: $theme-gray-light; | ||
84 | } | ||
85 | } | 180 | } |
86 | 181 | ||
87 | .settings__body { | 182 | .settings__body { |
88 | flex: 1; | 183 | flex: 1; |
89 | padding: 25px 15px 15px 25px; | ||
90 | margin: 15px; | 184 | margin: 15px; |
91 | overflow-y: scroll; | 185 | overflow-y: scroll; |
186 | padding: 25px 15px 15px 25px; | ||
92 | 187 | ||
93 | &::-webkit-scrollbar { | 188 | &::-webkit-scrollbar { width: 8px; } |
94 | width: 8px; | ||
95 | } | ||
96 | 189 | ||
97 | /* Track */ | 190 | /* Track */ |
98 | &::-webkit-scrollbar-track { | 191 | &::-webkit-scrollbar-track { |
99 | -webkit-border-radius: 10px; | ||
100 | border-radius: 10px; | ||
101 | background: none; | 192 | background: none; |
193 | border-radius: 10px; | ||
194 | -webkit-border-radius: 10px; | ||
102 | } | 195 | } |
103 | 196 | ||
104 | /* Handle */ | 197 | /* Handle */ |
105 | &::-webkit-scrollbar-thumb { | 198 | &::-webkit-scrollbar-thumb { |
106 | -webkit-border-radius: 10px; | ||
107 | border-radius: 10px; | ||
108 | background: $theme-gray-lighter; | 199 | background: $theme-gray-lighter; |
200 | border-radius: 10px; | ||
201 | -webkit-border-radius: 10px; | ||
109 | } | 202 | } |
110 | 203 | ||
111 | &::-webkit-scrollbar-thumb:window-inactive { | 204 | &::-webkit-scrollbar-thumb:window-inactive { background: none; } |
112 | background: none; | 205 | .service-flex-grid { display: flex; } |
113 | } | 206 | .service-name { flex: 1px; } |
114 | |||
115 | .service-flex-grid { | ||
116 | display: flex; | ||
117 | } | ||
118 | |||
119 | .service-name { | ||
120 | flex: 1px; | ||
121 | } | ||
122 | 207 | ||
123 | .service-icon { | 208 | .service-icon { |
124 | width: 140px; | ||
125 | float: right; | 209 | float: right; |
126 | margin-top: 30px; | ||
127 | margin-left: 40px; | 210 | margin-left: 40px; |
211 | margin-top: 30px; | ||
212 | width: 140px; | ||
128 | 213 | ||
129 | label { | 214 | label { |
130 | font-weight: bold; | 215 | font-weight: bold; |
@@ -134,51 +219,50 @@ | |||
134 | } | 219 | } |
135 | 220 | ||
136 | .settings__close { | 221 | .settings__close { |
137 | position: absolute; | ||
138 | right: 0; | ||
139 | background: $theme-gray-lighter; | 222 | background: $theme-gray-lighter; |
140 | height: 50px; | ||
141 | padding: 0 20px; | ||
142 | font-size: 20px; | ||
143 | border-left: 1px solid darken($theme-gray-lighter, 5%); | 223 | border-left: 1px solid darken($theme-gray-lighter, 5%); |
144 | color: $theme-gray-light; | 224 | color: $theme-gray-light; |
225 | font-size: 20px; | ||
226 | height: 50px; | ||
227 | padding: 0 20px; | ||
228 | position: absolute; | ||
229 | right: 0; | ||
145 | transition: background $theme-transition-time; | 230 | transition: background $theme-transition-time; |
146 | 231 | ||
147 | &:hover { | 232 | &:hover { background: darken($theme-gray-lighter, 5%); } |
148 | background: darken($theme-gray-lighter, 5%); | ||
149 | } | ||
150 | } | 233 | } |
151 | 234 | ||
152 | .search-input { | 235 | .search-input { margin-bottom: 30px; } |
153 | margin-bottom: 30px; | ||
154 | } | ||
155 | 236 | ||
156 | &__options { | 237 | &__options { |
157 | margin-top: 20px; | ||
158 | flex: 1; | 238 | flex: 1; |
239 | margin-top: 20px; | ||
159 | } | 240 | } |
160 | 241 | ||
161 | &__settings-group { | 242 | &__settings-group { |
162 | margin-top: 10px; | 243 | margin-top: 10px; |
163 | 244 | ||
164 | h3 { | 245 | h3 { |
246 | color: $theme-gray-light; | ||
165 | font-weight: bold; | 247 | font-weight: bold; |
248 | letter-spacing: -.1px; | ||
166 | margin: 25px 0 15px; | 249 | margin: 25px 0 15px; |
167 | color: $theme-gray-light; | ||
168 | letter-spacing: -0.1px; | ||
169 | 250 | ||
170 | &:first-of-type { | 251 | &:first-of-type { margin-top: 0; } |
171 | margin-top: 0; | 252 | |
253 | .badge { | ||
254 | font-weight: normal; | ||
255 | margin-left: 10px; | ||
172 | } | 256 | } |
173 | } | 257 | } |
174 | } | 258 | } |
175 | 259 | ||
176 | .settings__message { | 260 | .settings__message { |
261 | border-top: 1px solid $theme-gray-lighter; | ||
262 | color: $theme-gray-light; | ||
177 | display: flex; | 263 | display: flex; |
178 | margin-top: 40px; | 264 | margin-top: 40px; |
179 | padding-top: 15px; | 265 | padding-top: 15px; |
180 | border-top: 1px solid $theme-gray-lighter; | ||
181 | color: $theme-gray-light; | ||
182 | 266 | ||
183 | .mdi { | 267 | .mdi { |
184 | color: $theme-gray-light; | 268 | color: $theme-gray-light; |
@@ -188,69 +272,53 @@ | |||
188 | } | 272 | } |
189 | 273 | ||
190 | .settings__help { | 274 | .settings__help { |
191 | margin: -10px 0 20px 55px;; | ||
192 | font-size: 12px; | ||
193 | color: $theme-gray-light; | 275 | color: $theme-gray-light; |
276 | font-size: 12px; | ||
277 | margin: -10px 0 20px 55px;; | ||
194 | } | 278 | } |
195 | 279 | ||
196 | .settings__controls { | 280 | .settings__controls { |
281 | background: $theme-gray-lighter; | ||
197 | display: flex; | 282 | display: flex; |
283 | height: auto; | ||
198 | justify-content: space-between; | 284 | justify-content: space-between; |
199 | padding: 10px 20px; | 285 | padding: 10px 20px; |
200 | height: auto; | ||
201 | background: $theme-gray-lighter; | ||
202 | 286 | ||
203 | .franz-form__button { | 287 | .franz-form__button { |
204 | &[type='submit'] { | 288 | &[type='submit'] { margin-left: auto; } |
205 | margin-left: auto; | 289 | &.franz-form__button--secondary { background: $theme-gray-light; } |
206 | } | ||
207 | |||
208 | &.franz-form__button--secondary { | ||
209 | background: $theme-gray-light; | ||
210 | } | ||
211 | } | 290 | } |
212 | } | 291 | } |
213 | 292 | ||
214 | .settings__delete-button { | 293 | .settings__delete-button { right: 0; } |
215 | right: 0; | ||
216 | } | ||
217 | 294 | ||
218 | .settings__empty-state { | 295 | .settings__empty-state { |
219 | width: 100%; | 296 | align-items: center; |
297 | align-self: center; | ||
220 | height: auto; | 298 | height: auto; |
221 | min-height: 70%; | 299 | min-height: 70%; |
222 | text-align: center; | 300 | text-align: center; |
223 | align-self: center; | 301 | width: 100%; |
224 | // margin-top: -20px; | ||
225 | align-items: center; | ||
226 | 302 | ||
227 | a.button { | 303 | a.button { margin-top: 40px; } |
228 | margin-top: 40px; | ||
229 | } | ||
230 | } | 304 | } |
231 | 305 | ||
232 | .account { | 306 | .account { |
233 | height: auto; | 307 | height: auto; |
234 | // padding: 20px; | ||
235 | 308 | ||
236 | .account__box { | 309 | .account__box { |
310 | align-items: center; | ||
237 | background: $theme-gray-lightest; | 311 | background: $theme-gray-lightest; |
238 | border-radius: $theme-border-radius; | 312 | border-radius: $theme-border-radius; |
239 | padding: 20px; | ||
240 | margin-bottom: 40px; | 313 | margin-bottom: 40px; |
241 | align-items: center; | 314 | padding: 20px; |
242 | |||
243 | &.account__box--flex { | ||
244 | display: flex; | ||
245 | } | ||
246 | 315 | ||
247 | &.account__box--last { | 316 | &.account__box--flex { display: flex; } |
248 | margin-bottom: 0; | 317 | &.account__box--last { margin-bottom: 0; } |
249 | } | ||
250 | 318 | ||
251 | .auth__button { | 319 | .auth__button { |
252 | width: 100%; | ||
253 | margin-top: 10px; | 320 | margin-top: 10px; |
321 | width: 100%; | ||
254 | } | 322 | } |
255 | } | 323 | } |
256 | 324 | ||
@@ -258,57 +326,40 @@ | |||
258 | margin-right: 20px; | 326 | margin-right: 20px; |
259 | position: relative; | 327 | position: relative; |
260 | 328 | ||
261 | .emoji img { | 329 | .emoji img { width: 30px; } |
262 | width: 30px; | ||
263 | } | ||
264 | } | 330 | } |
265 | 331 | ||
266 | .account__avatar-premium { | 332 | .account__avatar-premium { |
333 | font-size: 26px; | ||
267 | position: absolute; | 334 | position: absolute; |
268 | top: 2px; | ||
269 | right: 2px; | 335 | right: 2px; |
270 | font-size: 26px; | 336 | top: 2px; |
271 | } | 337 | } |
272 | 338 | ||
273 | .account__info { | 339 | .account__info { |
274 | flex: 1; | 340 | flex: 1; |
275 | 341 | ||
276 | h2 { | 342 | h2 { margin-bottom: 5px; } |
277 | margin-bottom: 5px; | 343 | .badge { margin-top: 5px; } |
278 | } | ||
279 | |||
280 | .badge { | ||
281 | margin-top: 5px; | ||
282 | } | ||
283 | } | 344 | } |
284 | 345 | ||
285 | .account__subscription { | 346 | .account__subscription { |
286 | display: flex; | ||
287 | align-items: center; | 347 | align-items: center; |
348 | display: flex; | ||
288 | 349 | ||
289 | .badge { | 350 | .badge { margin-left: 10px; } |
290 | margin-left: 10px; | ||
291 | } | ||
292 | } | ||
293 | |||
294 | .account__subscription-button { | ||
295 | margin-left: auto; | ||
296 | } | ||
297 | |||
298 | .franz-form__button { | ||
299 | white-space: nowrap; | ||
300 | } | 351 | } |
301 | 352 | ||
302 | div { | 353 | .account__subscription-button { margin-left: auto; } |
303 | height: auto; | 354 | .franz-form__button { white-space: nowrap; } |
304 | } | 355 | div { height: auto; } |
305 | 356 | ||
306 | .invoices { | 357 | .invoices { |
307 | width: 100%; | 358 | width: 100%; |
308 | 359 | ||
309 | td { | 360 | td { |
310 | padding: 15px 0; | ||
311 | border-bottom: 1px solid $theme-gray-lighter; | 361 | border-bottom: 1px solid $theme-gray-lighter; |
362 | padding: 15px 0; | ||
312 | } | 363 | } |
313 | 364 | ||
314 | tr:last-of-type td { | 365 | tr:last-of-type td { |
@@ -319,9 +370,7 @@ | |||
319 | .invoices__action { | 370 | .invoices__action { |
320 | text-align: right; | 371 | text-align: right; |
321 | 372 | ||
322 | button { | 373 | button { color: $theme-brand-primary; } |
323 | color: $theme-brand-primary; | ||
324 | } | ||
325 | } | 374 | } |
326 | } | 375 | } |
327 | } | 376 | } |
@@ -331,15 +380,13 @@ | |||
331 | font-size: 40px; | 380 | font-size: 40px; |
332 | margin-bottom: 20px; | 381 | margin-bottom: 20px; |
333 | 382 | ||
334 | img { | 383 | img { width: 40px; } |
335 | width: 40px; | ||
336 | } | ||
337 | } | 384 | } |
338 | 385 | ||
339 | .premium-info { | 386 | .premium-info { |
340 | background: lighten($theme-brand-primary, 40%); | 387 | background: lighten($theme-brand-primary, 40%); |
341 | padding: 20px; | ||
342 | border-radius: $theme-border-radius; | 388 | border-radius: $theme-border-radius; |
389 | padding: 20px; | ||
343 | } | 390 | } |
344 | 391 | ||
345 | .content-tabs .premium-info { | 392 | .content-tabs .premium-info { |
@@ -348,35 +395,33 @@ | |||
348 | } | 395 | } |
349 | 396 | ||
350 | .legal { | 397 | .legal { |
351 | text-align: center; | ||
352 | margin-top: 20px; | ||
353 | color: $theme-gray-light; | 398 | color: $theme-gray-light; |
399 | margin-top: 20px; | ||
400 | text-align: center; | ||
354 | } | 401 | } |
355 | } | 402 | } |
356 | 403 | ||
357 | .settings-navigation { | 404 | .settings-navigation { |
358 | width: 200px; | ||
359 | height: auto; | ||
360 | background: $theme-gray-lightest; | ||
361 | display: flex; | 405 | display: flex; |
406 | background: $theme-gray-lightest; | ||
362 | flex-direction: column; | 407 | flex-direction: column; |
408 | height: auto; | ||
409 | width: 200px; | ||
363 | 410 | ||
364 | .settings-navigation__link { | 411 | .settings-navigation__link { |
365 | display: flex; | ||
366 | align-items: center; | 412 | align-items: center; |
367 | height: 50px; | ||
368 | flex-shrink: 0; | ||
369 | text-decoration: none; | ||
370 | color: $theme-text-color; | 413 | color: $theme-text-color; |
414 | display: flex; | ||
415 | flex-shrink: 0; | ||
416 | height: 50px; | ||
371 | padding: 0 20px; | 417 | padding: 0 20px; |
418 | text-decoration: none; | ||
372 | transition: background $theme-transition-time, color $theme-transition-time; | 419 | transition: background $theme-transition-time, color $theme-transition-time; |
373 | 420 | ||
374 | &:hover { | 421 | &:hover { |
375 | background: darken($theme-gray-lightest, 5%); | 422 | background: darken($theme-gray-lightest, 5%); |
376 | 423 | ||
377 | .badge { | 424 | .badge { background: #FFF; } |
378 | background: #FFF; | ||
379 | } | ||
380 | } | 425 | } |
381 | 426 | ||
382 | &.is-active { | 427 | &.is-active { |
@@ -390,22 +435,20 @@ | |||
390 | } | 435 | } |
391 | } | 436 | } |
392 | 437 | ||
393 | .settings-navigation__expander { | 438 | .settings-navigation__expander { flex: 1; } |
394 | flex: 1; | ||
395 | } | ||
396 | 439 | ||
397 | .badge { | 440 | .badge { |
398 | transition: background $theme-transition-time, color $theme-transition-time; | ||
399 | display: initial; | 441 | display: initial; |
400 | margin-left: 5px; | 442 | margin-left: 5px; |
443 | transition: background $theme-transition-time, color $theme-transition-time; | ||
401 | } | 444 | } |
402 | 445 | ||
403 | .settings-navigation__action-badge { | 446 | .settings-navigation__action-badge { |
404 | display: inline-block; | ||
405 | width: 7px; | ||
406 | height: 7px; | ||
407 | background: $theme-brand-danger; | 447 | background: $theme-brand-danger; |
408 | border-radius: 100%; | 448 | border-radius: 100%; |
449 | display: inline-block; | ||
450 | height: 7px; | ||
409 | margin-left: 5px; | 451 | margin-left: 5px; |
452 | width: 7px; | ||
410 | } | 453 | } |
411 | } | 454 | } |
diff --git a/src/styles/status-bar-target-url.scss b/src/styles/status-bar-target-url.scss index bc7438be9..36f69df28 100644 --- a/src/styles/status-bar-target-url.scss +++ b/src/styles/status-bar-target-url.scss | |||
@@ -1,14 +1,14 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .status-bar-target-url { | 3 | .status-bar-target-url { |
4 | height: auto; | ||
5 | background: $theme-gray-lighter; | 4 | background: $theme-gray-lighter; |
6 | padding: 4px; | 5 | border-top-left-radius: 5px; |
7 | position: absolute; | ||
8 | box-shadow: 0 0 8px rgba(black, 0.2); | ||
9 | font-size: 12px; | ||
10 | color: $theme-gray-dark; | ||
11 | bottom: 0; | 6 | bottom: 0; |
7 | box-shadow: 0 0 8px rgba(black, .2); | ||
8 | color: $theme-gray-dark; | ||
9 | font-size: 12px; | ||
10 | height: auto; | ||
12 | right: 0; | 11 | right: 0; |
13 | border-top-left-radius: 5px; | 12 | padding: 4px; |
13 | position: absolute; | ||
14 | } | 14 | } |
diff --git a/src/styles/subscription-popup.scss b/src/styles/subscription-popup.scss index b6f232fcb..fb4795d6c 100644 --- a/src/styles/subscription-popup.scss +++ b/src/styles/subscription-popup.scss | |||
@@ -1,20 +1,15 @@ | |||
1 | .subscription-popup { | 1 | .subscription-popup { |
2 | height: 100%; | 2 | height: 100%; |
3 | 3 | ||
4 | &__content { | 4 | &__content { height: calc(100% - 60px); } |
5 | height: calc(100% - 60px); | 5 | &__webview { height: 100%; } |
6 | } | ||
7 | |||
8 | &__webview { | ||
9 | height: 100%; | ||
10 | } | ||
11 | 6 | ||
12 | &__toolbar { | 7 | &__toolbar { |
13 | height: 60px; | ||
14 | background: $theme-gray-lightest; | 8 | background: $theme-gray-lightest; |
9 | border-top: 1px solid $theme-gray-lighter; | ||
15 | display: flex; | 10 | display: flex; |
11 | height: 60px; | ||
16 | justify-content: space-between; | 12 | justify-content: space-between; |
17 | padding: 10px; | 13 | padding: 10px; |
18 | border-top: 1px solid $theme-gray-lighter; | ||
19 | } | 14 | } |
20 | } | 15 | } |
diff --git a/src/styles/subscription.scss b/src/styles/subscription.scss index 8bfb68d23..70fb41cde 100644 --- a/src/styles/subscription.scss +++ b/src/styles/subscription.scss | |||
@@ -3,63 +3,47 @@ | |||
3 | margin: 10px 0; | 3 | margin: 10px 0; |
4 | 4 | ||
5 | li { | 5 | li { |
6 | height: 30px; | ||
7 | align-items: center; | 6 | align-items: center; |
8 | display: flex; | 7 | display: flex; |
8 | height: 30px; | ||
9 | 9 | ||
10 | &:before { | 10 | &:before { |
11 | content: "ðŸ‘"; | 11 | content: "ðŸ‘"; |
12 | margin-right: 10px; | 12 | margin-right: 10px; |
13 | } | 13 | } |
14 | 14 | ||
15 | .badge { | 15 | .badge { margin-left: 10px; } |
16 | margin-left: 10px; | ||
17 | } | ||
18 | } | 16 | } |
19 | } | 17 | } |
20 | 18 | ||
21 | .subscription__premium-info { | 19 | .subscription__premium-info { margin: 15px 0 25px; } |
22 | margin: 15px 0 25px; | ||
23 | } | ||
24 | } | 20 | } |
25 | 21 | ||
26 | .paymentTiers { | 22 | .paymentTiers .franz-form__radio-wrapper { |
27 | .franz-form__radio-wrapper { | 23 | flex-flow: wrap; |
28 | flex-flow: wrap; | ||
29 | 24 | ||
30 | .franz-form__radio { | 25 | .franz-form__radio { |
31 | width: 32%; | 26 | flex: initial; |
32 | flex: initial; | 27 | margin-right: 2%; |
33 | margin-right: 2%; | 28 | width: 32%; |
34 | 29 | ||
35 | &:nth-child(3) { | 30 | &:nth-child(3) { margin-right: 0; } |
36 | margin-right: 0; | ||
37 | } | ||
38 | 31 | ||
39 | &:nth-child(4) { | 32 | &:nth-child(4) { |
40 | margin-right: 0; | 33 | margin-right: 0; |
41 | margin-top: 2%; | 34 | margin-top: 2%; |
42 | width: 100%; | 35 | width: 100%; |
43 | } | ||
44 | } | 36 | } |
45 | } | 37 | } |
46 | } | 38 | } |
47 | 39 | ||
48 | .settings { | 40 | .settings .paymentTiers .franz-form__radio-wrapper .franz-form__radio { |
49 | .paymentTiers { | 41 | width: 49%; |
50 | .franz-form__radio-wrapper { | ||
51 | .franz-form__radio { | ||
52 | width: 49%; | ||
53 | 42 | ||
54 | &:nth-child(2) { | 43 | &:nth-child(2) { margin-right: 0; } |
55 | margin-right: 0; | ||
56 | } | ||
57 | 44 | ||
58 | &:nth-child(3) { | 45 | &:nth-child(3) { |
59 | margin-top: 2%; | 46 | margin-top: 2%; |
60 | width: 100%; | 47 | width: 100%; |
61 | } | ||
62 | } | ||
63 | } | ||
64 | } | 48 | } |
65 | } | 49 | } |
diff --git a/src/styles/tabs.scss b/src/styles/tabs.scss index ac48aabd6..cbd833f04 100644 --- a/src/styles/tabs.scss +++ b/src/styles/tabs.scss | |||
@@ -1,104 +1,88 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | 2 | ||
3 | .theme__dark .tab-item { | ||
4 | &.is-active { | ||
5 | background: $dark-theme-gray; | ||
6 | |||
7 | .tab-item__icon { margin-left: -4px; } | ||
8 | } | ||
9 | |||
10 | &.is-disabled .tab-item__icon { filter: grayscale(100%) opacity(.2); } | ||
11 | .tab-item__icon { width: 34px; } | ||
12 | } | ||
13 | |||
3 | .tabs { | 14 | .tabs { |
4 | display: flex; | 15 | display: flex; |
5 | // flex: 1; | ||
6 | flex-direction: column; | 16 | flex-direction: column; |
7 | flex-shrink: 1; | 17 | flex-shrink: 1; |
8 | // align-items: center; | ||
9 | // height: auto; | ||
10 | 18 | ||
11 | .placeholder { | 19 | .placeholder { |
12 | width: 100%; | ||
13 | height: 40px; | 20 | height: 40px; |
21 | width: 100%; | ||
14 | } | 22 | } |
15 | } | 23 | } |
16 | 24 | ||
17 | .tab-item { | 25 | .tab-item { |
18 | display: flex; | ||
19 | justify-content: center; | ||
20 | align-items: center; | 26 | align-items: center; |
21 | position: relative; | 27 | display: flex; |
22 | width: $theme-sidebar-width; | ||
23 | height: 65px; | 28 | height: 65px; |
29 | justify-content: center; | ||
24 | min-height: 50px; | 30 | min-height: 50px; |
31 | position: relative; | ||
25 | transition: background $theme-transition-time; | 32 | transition: background $theme-transition-time; |
33 | width: $theme-sidebar-width; | ||
26 | 34 | ||
27 | &.is-active { | 35 | &.is-active { |
28 | border-left: 4px solid $theme-brand-primary; | ||
29 | background: lighten($theme-brand-primary, 35%); | 36 | background: lighten($theme-brand-primary, 35%); |
37 | border-left: 4px solid $theme-brand-primary; | ||
30 | 38 | ||
31 | .tab-item__icon { | 39 | .tab-item__icon { margin-left: -4px; } |
32 | margin-left: -4px; | ||
33 | } | ||
34 | } | ||
35 | |||
36 | &.is-disabled { | ||
37 | .tab-item__icon { | ||
38 | filter: grayscale(100%) opacity(0.2); | ||
39 | } | ||
40 | } | ||
41 | |||
42 | &.has-custom-icon { | ||
43 | .tab-item__icon { | ||
44 | border-radius: $theme-border-radius; | ||
45 | // border: 1px solid $theme-gray-lighter; | ||
46 | // width: 32px; | ||
47 | } | ||
48 | } | 40 | } |
49 | 41 | ||
50 | &:active { | 42 | &.is-disabled .tab-item__icon { filter: grayscale(100%) opacity(0.2); } |
51 | .tab-item__icon { | 43 | &.has-custom-icon .tab-item__icon { border-radius: $theme-border-radius; } |
52 | opacity: 0.7; | 44 | &:active .tab-item__icon { opacity: .7; } |
53 | } | ||
54 | } | ||
55 | 45 | ||
56 | .tab-item__icon { | 46 | .tab-item__icon { |
57 | width: 30px; | ||
58 | height: auto; | 47 | height: auto; |
48 | width: 30px; | ||
59 | } | 49 | } |
60 | 50 | ||
61 | .tab-item__message-count { | 51 | .tab-item__message-count { |
62 | min-width: 17px; | 52 | align-items: center; |
63 | min-height: 17px; | ||
64 | background: $theme-brand-danger; | 53 | background: $theme-brand-danger; |
65 | color: #FFF; | ||
66 | border-radius: 20px; | 54 | border-radius: 20px; |
67 | padding: 0px 5px; | ||
68 | font-size: 11px; | ||
69 | position: absolute; | ||
70 | right: 8px; | ||
71 | bottom: 8px; | 55 | bottom: 8px; |
56 | color: #FFF; | ||
72 | display: flex; | 57 | display: flex; |
58 | font-size: 11px; | ||
73 | justify-content: center; | 59 | justify-content: center; |
74 | align-items: center; | 60 | min-height: 17px; |
61 | min-width: 17px; | ||
62 | padding: 0px 5px; | ||
63 | position: absolute; | ||
64 | right: 8px; | ||
75 | 65 | ||
76 | &.is-indirect { | 66 | &.is-indirect { padding-top: 0; } |
77 | padding-top: 0px; | ||
78 | } | ||
79 | } | 67 | } |
80 | 68 | ||
81 | .tab-item__info-badge { | 69 | .tab-item__info-badge { |
82 | width: 17px; | 70 | align-items: center; |
83 | height: 17px; | ||
84 | background: $theme-gray-light; | 71 | background: $theme-gray-light; |
85 | color: $theme-gray-lighter; | 72 | bottom: 8px; |
86 | border-radius: 20px; | 73 | border-radius: 20px; |
87 | padding: 0px 5px; | 74 | color: $theme-gray-lighter; |
75 | display: flex; | ||
88 | font-size: 11px; | 76 | font-size: 11px; |
77 | height: 17px; | ||
78 | justify-content: center; | ||
79 | padding: 0px 5px; | ||
89 | position: absolute; | 80 | position: absolute; |
90 | right: 8px; | 81 | right: 8px; |
91 | bottom: 8px; | 82 | width: 17px; |
92 | display: flex; | ||
93 | justify-content: center; | ||
94 | align-items: center; | ||
95 | 83 | ||
96 | &.is-indirect { | 84 | &.is-indirect { padding-top: 0; } |
97 | padding-top: 0px; | ||
98 | } | ||
99 | } | 85 | } |
100 | 86 | ||
101 | &.is-reordering { | 87 | &.is-reordering { z-index: 99999; } |
102 | z-index: 99999; | ||
103 | } | ||
104 | } | 88 | } |
diff --git a/src/styles/title-bar.scss b/src/styles/title-bar.scss index 5316f35b3..885eb94c4 100644 --- a/src/styles/title-bar.scss +++ b/src/styles/title-bar.scss | |||
@@ -1,49 +1,80 @@ | |||
1 | #electron-app-title-bar { | 1 | @import './config.scss'; |
2 | background: $theme-gray-lightest; | ||
3 | border-bottom: 0; | ||
4 | box-shadow: 0px 0 8px rgba(#000, 0.1); | ||
5 | |||
6 | span { | ||
7 | line-height: normal; | ||
8 | } | ||
9 | 2 | ||
10 | div { | 3 | .theme__dark #electron-app-title-bar { |
11 | height: auto; | 4 | background: $dark-theme-gray-darker; |
12 | } | ||
13 | 5 | ||
14 | .toolbar-dropdown { | 6 | .toolbar-dropdown { |
15 | &.open { | 7 | &.open > .toolbar-button > button { |
16 | box-shadow: 0px 0 8px rgba(#000, 0.1); | 8 | background: $dark-theme-gray-light; |
9 | color: $dark-theme-gray-lightest; | ||
17 | } | 10 | } |
18 | 11 | ||
19 | &:not(.open) { | 12 | &:not(.open) { |
20 | .menu-item .menu-label { | 13 | .menu-item .menu-label { opacity: 1; } |
21 | opacity: 1; | 14 | > .toolbar-button > button:hover { |
15 | background: $dark-theme-gray-darkest; | ||
22 | } | 16 | } |
17 | } | ||
18 | } | ||
23 | 19 | ||
24 | &>.toolbar-button > button:hover { | 20 | #app-menu-bar #foldout-container .foldout { |
25 | background: $theme-brand-primary; | 21 | color: $dark-theme-gray-lightest; |
22 | |||
23 | .menu-pane { | ||
24 | background: $dark-theme-gray-light; | ||
25 | |||
26 | .menu-item { | ||
27 | .accelerator { | ||
28 | color: lighten($dark-theme-gray-light, 20%); | ||
29 | } | ||
30 | } | ||
31 | |||
32 | hr { | ||
33 | border-color: $dark-theme-gray-lighter; | ||
26 | } | 34 | } |
27 | } | 35 | } |
28 | } | 36 | } |
29 | 37 | ||
38 | .list .ReactVirtualized__Grid { | ||
39 | background: $dark-theme-gray-light; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | #electron-app-title-bar { | ||
44 | background: $theme-gray-lightest; | ||
45 | border-bottom: 0; | ||
46 | box-shadow: 0 0 8px rgba(black, .1); | ||
47 | |||
48 | span { line-height: normal; } | ||
49 | |||
50 | div { height: auto; } | ||
51 | |||
52 | .toolbar-dropdown { | ||
53 | &.open { box-shadow: 0 0 8px rgba(black, 0.1); } | ||
54 | |||
55 | &:not(.open) { | ||
56 | .menu-item .menu-label { opacity: 1; } | ||
57 | > .toolbar-button > button:hover { background: $theme-brand-primary; } | ||
58 | } | ||
59 | } | ||
60 | |||
30 | .list-item { | 61 | .list-item { |
31 | .menu-item { | 62 | .menu-item { |
32 | margin: 4px; | ||
33 | border-radius: $theme-border-radius-small; | 63 | border-radius: $theme-border-radius-small; |
64 | margin: 4px; | ||
34 | } | 65 | } |
35 | &.selected, &.selected:focus { | 66 | |
67 | &.selected, | ||
68 | &.selected:focus { | ||
36 | background: none; | 69 | background: none; |
37 | 70 | ||
38 | .menu-item { | 71 | .menu-item { background: $theme-brand-primary; } |
39 | background: $theme-brand-primary; | ||
40 | } | ||
41 | } | 72 | } |
42 | } | 73 | } |
43 | 74 | ||
44 | .menu-pane { | 75 | .menu-pane { |
45 | box-shadow: 0px 0 10px rgba(#000, 0.5); | ||
46 | border-bottom-left-radius: $theme-border-radius-small; | 76 | border-bottom-left-radius: $theme-border-radius-small; |
47 | border-bottom-right-radius: $theme-border-radius-small; | 77 | border-bottom-right-radius: $theme-border-radius-small; |
78 | box-shadow: 0 0 10px rgba(black, .5); | ||
48 | } | 79 | } |
49 | } | 80 | } |
diff --git a/src/styles/toggle.scss b/src/styles/toggle.scss index 5b47e6495..0ce0c3379 100644 --- a/src/styles/toggle.scss +++ b/src/styles/toggle.scss | |||
@@ -4,44 +4,46 @@ $toggle-size: 14px; | |||
4 | $toggle-width: 40px; | 4 | $toggle-width: 40px; |
5 | $toggle-button-size: 22px; | 5 | $toggle-button-size: 22px; |
6 | 6 | ||
7 | .franz-form { | 7 | .theme__dark .franz-form .franz-form__toggle-wrapper .franz-form__toggle { |
8 | .franz-form__toggle-wrapper { | 8 | background: $dark-theme-gray; |
9 | display: flex; | 9 | border-radius: $toggle-size / 2; |
10 | flex-direction: row; | ||
11 | 10 | ||
12 | .franz-form__label { | 11 | .franz-form__toggle-button { |
13 | margin-left: 20px; | 12 | background: $dark-theme-gray-lighter; |
13 | box-shadow: 0 1px 4px rgba($dark-theme-black, .3); | ||
14 | } | ||
15 | } | ||
16 | |||
17 | .franz-form .franz-form__toggle-wrapper { | ||
18 | display: flex; | ||
19 | flex-direction: row; | ||
20 | |||
21 | .franz-form__label { margin-left: 20px; } | ||
22 | |||
23 | .franz-form__toggle { | ||
24 | background: $theme-gray-lighter; | ||
25 | border-radius: $theme-border-radius; | ||
26 | height: $toggle-size; | ||
27 | position: relative; | ||
28 | width: $toggle-width; | ||
29 | |||
30 | .franz-form__toggle-button { | ||
31 | background: $theme-gray-light; | ||
32 | border-radius: 100%; | ||
33 | box-shadow: 0 1px 4px rgba(0, 0, 0, .3); | ||
34 | height: $toggle-size - 2; | ||
35 | left: 1px; | ||
36 | top: 1px; | ||
37 | position: absolute; | ||
38 | transition: all .5s; | ||
39 | width: $toggle-size - 2; | ||
14 | } | 40 | } |
15 | 41 | ||
16 | .franz-form__toggle { | 42 | &.is-active .franz-form__toggle-button { |
17 | width: $toggle-width; | 43 | background: $theme-brand-primary; |
18 | height: $toggle-size; | 44 | left: $toggle-width - $toggle-size - 3;; |
19 | position: relative; | ||
20 | background: $theme-gray-lighter; | ||
21 | border-radius: $theme-border-radius; | ||
22 | |||
23 | .franz-form__toggle-button { | ||
24 | position: absolute; | ||
25 | left: 0; | ||
26 | top: -($toggle-button-size - $toggle-size) / 2; | ||
27 | width: $toggle-button-size; | ||
28 | height: $toggle-button-size; | ||
29 | background: $theme-gray-light; | ||
30 | border-radius: 100%; | ||
31 | transition: all 0.5s; | ||
32 | box-shadow: 0 1px 4px rgba(0,0,0,0.3); | ||
33 | } | ||
34 | |||
35 | &.is-active { | ||
36 | .franz-form__toggle-button { | ||
37 | left: $toggle-width - $toggle-button-size; | ||
38 | background: $theme-brand-primary; | ||
39 | } | ||
40 | } | ||
41 | |||
42 | input { | ||
43 | display: none; | ||
44 | } | ||
45 | } | 45 | } |
46 | |||
47 | input { display: none; } | ||
46 | } | 48 | } |
47 | } | 49 | } |
diff --git a/src/styles/tooltip.scss b/src/styles/tooltip.scss index 1194e7fbb..5700e994c 100644 --- a/src/styles/tooltip.scss +++ b/src/styles/tooltip.scss | |||
@@ -1,4 +1,4 @@ | |||
1 | .__react_component_tooltip { | 1 | .__react_component_tooltip { |
2 | padding: 10px !important; | ||
3 | height: auto; | 2 | height: auto; |
3 | padding: 10px !important; | ||
4 | } | 4 | } |
diff --git a/src/styles/type-helper.scss b/src/styles/type-helper.scss new file mode 100644 index 000000000..b1da394b5 --- /dev/null +++ b/src/styles/type-helper.scss | |||
@@ -0,0 +1,100 @@ | |||
1 | @function str-split($string, $separator) { | ||
2 | // empty array/list | ||
3 | $split-arr: (); | ||
4 | // first index of separator in string | ||
5 | $index : str-index($string, $separator); | ||
6 | // loop through string | ||
7 | @while $index != null { | ||
8 | // get the substring from the first character to the separator | ||
9 | $item: str-slice($string, 1, $index - 1); | ||
10 | // push item to array | ||
11 | $split-arr: append($split-arr, $item); | ||
12 | // remove item and separator from string | ||
13 | $string: str-slice($string, $index + 1); | ||
14 | // find new index of separator | ||
15 | $index : str-index($string, $separator); | ||
16 | } | ||
17 | // add the remaining string to list (the last item) | ||
18 | $split-arr: append($split-arr, $string); | ||
19 | |||
20 | @return $split-arr; | ||
21 | } | ||
22 | |||
23 | // ---- | ||
24 | // Sass (v3.4.13) | ||
25 | // Compass (v1.0.3) | ||
26 | // ---- | ||
27 | |||
28 | /// String to number converter | ||
29 | /// @author Hugo Giraudel | ||
30 | /// @access private | ||
31 | |||
32 | |||
33 | /// Casts a string into a number | ||
34 | /// | ||
35 | /// @param {String | Number} $value - Value to be parsed | ||
36 | /// | ||
37 | /// @return {Number} | ||
38 | |||
39 | @function to-number($value) { | ||
40 | @if type-of($value) == 'number' { | ||
41 | @return $value; | ||
42 | } @else if type-of($value) != 'string' { | ||
43 | $_: log('Value for `to-number` should be a number or a string.'); | ||
44 | } | ||
45 | |||
46 | $result: 0; | ||
47 | $digits: 0; | ||
48 | $minus: str-slice($value, 1, 1) == '-'; | ||
49 | $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9); | ||
50 | |||
51 | @for $i from if($minus, 2, 1) through str-length($value) { | ||
52 | $character: str-slice($value, $i, $i); | ||
53 | |||
54 | @if not (index(map-keys($numbers), $character) or $character == '.') { | ||
55 | @return to-length(if($minus, -$result, $result), str-slice($value, $i)) | ||
56 | } | ||
57 | |||
58 | @if $character == '.' { | ||
59 | $digits: 1; | ||
60 | } @else if $digits == 0 { | ||
61 | $result: $result * 10 + map-get($numbers, $character); | ||
62 | } @else { | ||
63 | $digits: $digits * 10; | ||
64 | $result: $result + map-get($numbers, $character) / $digits; | ||
65 | } | ||
66 | } | ||
67 | |||
68 | @return if($minus, -$result, $result);; | ||
69 | } | ||
70 | |||
71 | |||
72 | /// Add `$unit` to `$value` | ||
73 | /// | ||
74 | /// @param {Number} $value - Value to add unit to | ||
75 | /// @param {String} $unit - String representation of the unit | ||
76 | /// | ||
77 | /// @return {Number} - `$value` expressed in `$unit` | ||
78 | @function to-length($value, $unit) { | ||
79 | $units: ('px': 1px, 'cm': 1cm, 'mm': 1mm, '%': 1%, 'ch': 1ch, 'pc': 1pc, 'in': 1in, 'em': 1em, 'rem': 1rem, 'pt': 1pt, 'ex': 1ex, 'vw': 1vw, 'vh': 1vh, 'vmin': 1vmin, 'vmax': 1vmax); | ||
80 | |||
81 | @if not index(map-keys($units), $unit) { | ||
82 | $_: log('Invalid unit `#{$unit}`.'); | ||
83 | } | ||
84 | |||
85 | @return $value * map-get($units, $unit); | ||
86 | } | ||
87 | |||
88 | |||
89 | |||
90 | /// converts injectes rgb strings to sass colors | ||
91 | @function convert-rgb-string-to-color($string) { | ||
92 | $values: str-split($string, ','); | ||
93 | $colorList: (); | ||
94 | @each $value in $values { | ||
95 | $colorList: append($colorList, to-number($value)); | ||
96 | } | ||
97 | |||
98 | $rgbaColor: rgb(nth($colorList, 1), nth($colorList, 2), nth($colorList, 3)); | ||
99 | @return $rgbaColor; | ||
100 | } \ No newline at end of file | ||
diff --git a/src/styles/type.scss b/src/styles/type.scss index cacbec482..135d32da0 100644 --- a/src/styles/type.scss +++ b/src/styles/type.scss | |||
@@ -1,6 +1,12 @@ | |||
1 | @import './config.scss'; | 1 | @import './config.scss'; |
2 | @import './mixins.scss'; | 2 | @import './mixins.scss'; |
3 | 3 | ||
4 | .theme__dark { | ||
5 | a { color: $dark-theme-gray-smoke; } | ||
6 | .label { color: $dark-theme-gray-lightest; } | ||
7 | .footnote { color: $dark-theme-gray-lightest; } | ||
8 | } | ||
9 | |||
4 | h1 { | 10 | h1 { |
5 | font-size: 30px; | 11 | font-size: 30px; |
6 | font-weight: 300; | 12 | font-weight: 300; |
@@ -15,38 +21,32 @@ h2 { | |||
15 | margin-bottom: 25px; | 21 | margin-bottom: 25px; |
16 | margin-top: 55px; | 22 | margin-top: 55px; |
17 | 23 | ||
18 | &:first-of-type { | 24 | &:first-of-type { margin-top: 0; } |
19 | margin-top: 0; | ||
20 | } | ||
21 | } | 25 | } |
22 | 26 | ||
23 | p { | 27 | p { |
24 | margin-bottom: 10px; | 28 | margin-bottom: 10px; |
25 | line-height: 1.7rem; | 29 | line-height: 1.7rem; |
26 | 30 | ||
27 | &:last-of-type { | 31 | &:last-of-type { margin-bottom: 0; } |
28 | margin-bottom: 0; | ||
29 | } | ||
30 | } | 32 | } |
31 | 33 | ||
32 | strong { | 34 | strong { font-weight: bold; } |
33 | font-weight: bold; | ||
34 | } | ||
35 | 35 | ||
36 | a { | 36 | a { |
37 | text-decoration: none; | ||
38 | color: $theme-text-color; | 37 | color: $theme-text-color; |
38 | text-decoration: none; | ||
39 | 39 | ||
40 | &.button { | 40 | &.button { |
41 | position: relative; | ||
42 | background: none; | 41 | background: none; |
43 | display: inline-block; | ||
44 | padding: 10px 20px; | ||
45 | border: 2px solid $theme-brand-primary; | 42 | border: 2px solid $theme-brand-primary; |
46 | color: $theme-brand-primary; | ||
47 | border-radius: 3px; | 43 | border-radius: 3px; |
48 | transition: background 0.5s, color 0.5s; | 44 | color: $theme-brand-primary; |
45 | display: inline-block; | ||
46 | padding: 10px 20px; | ||
47 | position: relative; | ||
49 | text-align: center; | 48 | text-align: center; |
49 | transition: background .5s, color .5s; | ||
50 | 50 | ||
51 | &:hover { | 51 | &:hover { |
52 | background: darken($theme-brand-primary, 5%); | 52 | background: darken($theme-brand-primary, 5%); |
@@ -54,25 +54,19 @@ a { | |||
54 | } | 54 | } |
55 | } | 55 | } |
56 | 56 | ||
57 | &.link { | 57 | &.link { color: $theme-brand-primary; } |
58 | color: $theme-brand-primary; | ||
59 | } | ||
60 | } | 58 | } |
61 | 59 | ||
62 | .error-message, .error-message:last-of-type { | 60 | .error-message, .error-message:last-of-type { |
63 | margin: 10px 0; | ||
64 | color: $theme-brand-danger; | 61 | color: $theme-brand-danger; |
62 | margin: 10px 0; | ||
65 | } | 63 | } |
66 | 64 | ||
67 | .center { | 65 | .center { text-align: center; } |
68 | text-align: center; | ||
69 | } | ||
70 | 66 | ||
71 | .label { | 67 | .label { @include formLabel(); } |
72 | @include formLabel(); | ||
73 | } | ||
74 | 68 | ||
75 | .footnote { | 69 | .footnote { |
76 | font-size: 12px; | ||
77 | color: $theme-gray-light; | 70 | color: $theme-gray-light; |
78 | } \ No newline at end of file | 71 | font-size: 12px; |
72 | } | ||
diff --git a/src/styles/util.scss b/src/styles/util.scss index 3faad8db3..cc93f79ab 100644 --- a/src/styles/util.scss +++ b/src/styles/util.scss | |||
@@ -1,16 +1,16 @@ | |||
1 | .scroll-container { | 1 | .scroll-container { |
2 | height: 100%; | ||
3 | flex: 1; | 2 | flex: 1; |
4 | overflow-y: scroll; | 3 | height: 100%; |
5 | overflow-x: hidden; | 4 | overflow-x: hidden; |
5 | overflow-y: scroll; | ||
6 | } | 6 | } |
7 | 7 | ||
8 | .loader { | 8 | .loader { |
9 | position: relative; | ||
10 | z-index: 9999; | ||
11 | display: block; | 9 | display: block; |
12 | width: 100%; | ||
13 | height: 40px; | 10 | height: 40px; |
11 | position: relative; | ||
12 | width: 100%; | ||
13 | z-index: 9999; | ||
14 | } | 14 | } |
15 | 15 | ||
16 | .align-middle { | 16 | .align-middle { |
diff --git a/src/styles/welcome.scss b/src/styles/welcome.scss index a12069ba4..b3d6515b1 100644 --- a/src/styles/welcome.scss +++ b/src/styles/welcome.scss | |||
@@ -1,92 +1,84 @@ | |||
1 | .auth { | 1 | .auth .welcome { |
2 | .welcome { | 2 | &__content { |
3 | 3 | align-items: center; | |
4 | &__content { | 4 | color: #FFF; |
5 | display: flex; | 5 | display: flex; |
6 | align-items: center; | 6 | justify-content: center; |
7 | justify-content: center; | 7 | } |
8 | color: #FFF; | ||
9 | } | ||
10 | |||
11 | &__logo { | ||
12 | width: 100px; | ||
13 | } | ||
14 | 8 | ||
15 | &__text { | 9 | &__logo { width: 100px; } |
16 | margin-left: 40px; | ||
17 | padding-left: 40px; | ||
18 | border-left: 1px solid #FFF; | ||
19 | 10 | ||
20 | h1 { | 11 | &__text { |
21 | font-size: 60px; | 12 | border-left: 1px solid #FFF; |
22 | letter-spacing: -0.4rem; | 13 | margin-left: 40px; |
23 | margin-bottom: 5px; | 14 | padding-left: 40px; |
24 | } | ||
25 | 15 | ||
26 | h2 { | 16 | h1 { |
27 | margin-left: 2px; | 17 | font-size: 60px; |
28 | margin-bottom: 0; | 18 | letter-spacing: -.4rem; |
29 | } | 19 | margin-bottom: 5px; |
30 | } | 20 | } |
31 | 21 | ||
32 | &__services { | 22 | h2 { |
33 | width: 100%; | 23 | margin-bottom: 0; |
34 | max-width: 800px; | 24 | margin-left: 2px; |
35 | height: 100%; | ||
36 | max-height: 600px; | ||
37 | margin-left: -450px; | ||
38 | } | 25 | } |
26 | } | ||
39 | 27 | ||
40 | &__buttons { | 28 | &__services { |
41 | display: block; | 29 | height: 100%; |
42 | margin-top: 100px; | 30 | margin-left: -450px; |
43 | text-align: center; | 31 | max-height: 600px; |
32 | max-width: 800px; | ||
33 | width: 100%; | ||
34 | } | ||
44 | 35 | ||
45 | .button:first-of-type { | 36 | &__buttons { |
46 | margin-right: 25px; | 37 | display: block; |
47 | } | 38 | margin-top: 100px; |
48 | } | 39 | text-align: center; |
49 | 40 | ||
50 | .button { | 41 | .button:first-of-type { margin-right: 25px; } |
51 | border-color: #FFF; | 42 | } |
52 | color: #FFF; | ||
53 | 43 | ||
54 | &:hover { | 44 | .button { |
55 | background: #FFF; | 45 | border-color: #FFF; |
56 | color: $theme-brand-primary; | 46 | color: #FFF; |
57 | } | ||
58 | 47 | ||
59 | &__inverted { | 48 | &:hover { |
60 | background: #FFF; | 49 | background: #FFF; |
61 | color: $theme-brand-primary; | 50 | color: $theme-brand-primary; |
62 | } | ||
63 | &__inverted:hover { | ||
64 | background: none; | ||
65 | color: #FFF; | ||
66 | } | ||
67 | } | 51 | } |
68 | 52 | ||
69 | &__featured-services { | 53 | &__inverted { |
70 | text-align: center; | ||
71 | width: 480px; | ||
72 | margin: 80px auto 0 auto; | ||
73 | display: flex; | ||
74 | align-items: center; | ||
75 | flex-wrap: wrap; | ||
76 | background: #FFF; | 54 | background: #FFF; |
77 | border-radius: 6px; | 55 | color: $theme-brand-primary; |
78 | padding: 20px 20px 5px; | ||
79 | } | 56 | } |
80 | 57 | ||
81 | &__featured-service { | 58 | &__inverted:hover { |
82 | width: 35px; | 59 | background: none; |
83 | height: 35px; | 60 | color: #FFF; |
84 | margin: 0 10px 15px; | ||
85 | transition: 0.5s filter, 0.5s opacity; | ||
86 | |||
87 | img { | ||
88 | width: 35px; | ||
89 | } | ||
90 | } | 61 | } |
91 | } | 62 | } |
63 | |||
64 | &__featured-services { | ||
65 | align-items: center; | ||
66 | background: #FFF; | ||
67 | border-radius: 6px; | ||
68 | display: flex; | ||
69 | flex-wrap: wrap; | ||
70 | margin: 80px auto 0 auto; | ||
71 | padding: 20px 20px 5px; | ||
72 | text-align: center; | ||
73 | width: 480px; | ||
74 | } | ||
75 | |||
76 | &__featured-service { | ||
77 | margin: 0 10px 15px; | ||
78 | height: 35px; | ||
79 | transition: .5s filter, .5s opacity; | ||
80 | width: 35px; | ||
81 | |||
82 | img { width: 35px; } | ||
83 | } | ||
92 | } | 84 | } |
diff --git a/src/theme/dark/index.js b/src/theme/dark/index.js new file mode 100644 index 000000000..496a51119 --- /dev/null +++ b/src/theme/dark/index.js | |||
@@ -0,0 +1,6 @@ | |||
1 | import * as legacyStyles from '../default/legacy'; | ||
2 | |||
3 | export const colorBackground = legacyStyles.darkThemeGrayDarkest; | ||
4 | export const colorBackgroundSubscriptionContainer = legacyStyles.themeBrandInfo; | ||
5 | |||
6 | export const colorHeadline = legacyStyles.darkThemeTextColor; | ||
diff --git a/src/theme/default/index.js b/src/theme/default/index.js new file mode 100644 index 000000000..8766fb609 --- /dev/null +++ b/src/theme/default/index.js | |||
@@ -0,0 +1,21 @@ | |||
1 | import * as legacyStyles from './legacy'; | ||
2 | |||
3 | export const brandPrimary = '#3498db'; | ||
4 | export const brandSuccess = '#5cb85c'; | ||
5 | export const brandInfo = '#5bc0de'; | ||
6 | export const brandWarning = '#FF9F00'; | ||
7 | export const brandDanger = '#d9534f'; | ||
8 | |||
9 | export const borderRadius = legacyStyles.themeBorderRadius; | ||
10 | export const borderRadiusSmall = legacyStyles.themeBorderRadiusSmall; | ||
11 | |||
12 | export const colorBackground = legacyStyles.themeGrayLighter; | ||
13 | export const colorHeadline = legacyStyles.themeGrayDark; | ||
14 | |||
15 | // Subscription Container Component | ||
16 | export const colorSubscriptionContainerBackground = 'none'; | ||
17 | export const colorSubscriptionContainerBorder = [1, 'solid', brandPrimary]; | ||
18 | export const colorSubscriptionContainerTitle = brandPrimary; | ||
19 | export const colorSubscriptionContainerActionButtonBackground = brandPrimary; | ||
20 | export const colorSubscriptionContainerActionButtonColor = '#FFF'; | ||
21 | |||
diff --git a/src/theme/default/legacy.js b/src/theme/default/legacy.js new file mode 100644 index 000000000..b676dc1d9 --- /dev/null +++ b/src/theme/default/legacy.js | |||
@@ -0,0 +1,39 @@ | |||
1 | /* legacy config, injected into sass */ | ||
2 | export const themeBrandPrimary = '#3498db'; | ||
3 | export const themeBrandSuccess = '#5cb85c'; | ||
4 | export const themeBrandInfo = '#5bc0de'; | ||
5 | export const themeBrandWarning = '#FF9F00'; | ||
6 | export const themeBrandDanger = '#d9534f'; | ||
7 | |||
8 | export const themeGrayDark = '#373a3c'; | ||
9 | export const themeGray = '#55595c'; | ||
10 | export const themeGrayLight = '#818a91'; | ||
11 | export const themeGrayLighter = '#eceeef'; | ||
12 | export const themeGrayLightest = '#f7f7f9'; | ||
13 | |||
14 | export const themeBorderRadius = '6px'; | ||
15 | export const themeBorderRadiusSmall = '3px'; | ||
16 | |||
17 | export const themeSidebarWidth = '68px'; | ||
18 | |||
19 | export const themeTextColor = themeGrayDark; | ||
20 | |||
21 | export const themeTransitionTime = '.5s'; | ||
22 | |||
23 | export const themeInsetShadow = 'inset 0 2px 5px rgba(0, 0, 0, .03)'; | ||
24 | |||
25 | |||
26 | export const darkThemeBlack = '#1A1A1A'; | ||
27 | |||
28 | export const darkThemeGrayDarkest = '#1E1E1E'; | ||
29 | export const darkThemeGrayDarker = '#2D2F31'; | ||
30 | export const darkThemeGrayDark = '#383A3B'; | ||
31 | |||
32 | export const darkThemeGray = '#47494B'; | ||
33 | |||
34 | export const darkThemeGrayLight = '#515355'; | ||
35 | export const darkThemeGrayLighter = '#8a8b8b'; | ||
36 | export const darkThemeGrayLightest = '#FFFFFF'; | ||
37 | |||
38 | export const darkThemeGraySmoke = '#CED0D1'; | ||
39 | export const darkThemeTextColor = '#FFFFFF'; | ||
diff --git a/src/webview/contextMenu.js b/src/webview/contextMenu.js new file mode 100644 index 000000000..195306fda --- /dev/null +++ b/src/webview/contextMenu.js | |||
@@ -0,0 +1,178 @@ | |||
1 | // This is heavily based on https://github.com/sindresorhus/electron-context-menu | ||
2 | // ⤠@sindresorhus | ||
3 | |||
4 | import { clipboard, remote, ipcRenderer, shell } from 'electron'; | ||
5 | |||
6 | import { isDevMode } from '../environment'; | ||
7 | |||
8 | const debug = require('debug')('Franz:contextMenu'); | ||
9 | |||
10 | const { Menu } = remote; | ||
11 | |||
12 | // const win = remote.getCurrentWindow(); | ||
13 | const webContents = remote.getCurrentWebContents(); | ||
14 | |||
15 | function delUnusedElements(menuTpl) { | ||
16 | let notDeletedPrevEl; | ||
17 | return menuTpl.filter(el => el.visible !== false).filter((el, i, array) => { | ||
18 | const toDelete = el.type === 'separator' && (!notDeletedPrevEl || i === array.length - 1 || array[i + 1].type === 'separator'); | ||
19 | notDeletedPrevEl = toDelete ? notDeletedPrevEl : el; | ||
20 | return !toDelete; | ||
21 | }); | ||
22 | } | ||
23 | |||
24 | const buildMenuTpl = (props, suggestions) => { | ||
25 | const { editFlags } = props; | ||
26 | const hasText = props.selectionText.trim().length > 0; | ||
27 | const can = type => editFlags[`can${type}`] && hasText; | ||
28 | |||
29 | console.log(props); | ||
30 | |||
31 | let menuTpl = [ | ||
32 | { | ||
33 | type: 'separator', | ||
34 | }, { | ||
35 | id: 'cut', | ||
36 | role: can('Cut') ? 'cut' : '', | ||
37 | enabled: can('Cut'), | ||
38 | visible: !!props.selectionText.trim(), | ||
39 | }, { | ||
40 | id: 'copy', | ||
41 | label: 'Copy', | ||
42 | role: can('Copy') ? 'copy' : '', | ||
43 | enabled: can('Copy'), | ||
44 | visible: props.isEditable || hasText, | ||
45 | }, { | ||
46 | id: 'paste', | ||
47 | label: 'Paste', | ||
48 | role: editFlags.canPaste ? 'paste' : '', | ||
49 | enabled: editFlags.canPaste, | ||
50 | visible: props.isEditable, | ||
51 | }, { | ||
52 | type: 'separator', | ||
53 | }, | ||
54 | ]; | ||
55 | |||
56 | if (props.linkURL && props.mediaType === 'none') { | ||
57 | menuTpl = [{ | ||
58 | type: 'separator', | ||
59 | }, { | ||
60 | id: 'openLink', | ||
61 | label: 'Open Link in Browser', | ||
62 | click() { | ||
63 | shell.openExternal(props.linkURL); | ||
64 | }, | ||
65 | }, { | ||
66 | id: 'copyLink', | ||
67 | label: 'Copy Link', | ||
68 | click() { | ||
69 | clipboard.write({ | ||
70 | bookmark: props.linkText, | ||
71 | text: props.linkURL, | ||
72 | }); | ||
73 | }, | ||
74 | }, { | ||
75 | type: 'separator', | ||
76 | }]; | ||
77 | } | ||
78 | |||
79 | if (props.mediaType === 'image') { | ||
80 | menuTpl.push({ | ||
81 | type: 'separator', | ||
82 | }, { | ||
83 | id: 'openImage', | ||
84 | label: 'Open Image in Browser', | ||
85 | click() { | ||
86 | shell.openExternal(props.srcURL); | ||
87 | }, | ||
88 | }, { | ||
89 | id: 'copyImageAddress', | ||
90 | label: 'Copy Image Address', | ||
91 | click() { | ||
92 | clipboard.write({ | ||
93 | bookmark: props.srcURL, | ||
94 | text: props.srcURL, | ||
95 | }); | ||
96 | }, | ||
97 | }, { | ||
98 | type: 'separator', | ||
99 | }); | ||
100 | } | ||
101 | |||
102 | if (props.mediaType === 'image') { | ||
103 | menuTpl.push({ | ||
104 | id: 'saveImageAs', | ||
105 | label: 'Save Image As…', | ||
106 | async click() { | ||
107 | if (props.srcURL.startsWith('blob:')) { | ||
108 | const url = new window.URL(props.srcURL.substr(5)); | ||
109 | const fileName = url.pathname.substr(1); | ||
110 | const resp = await window.fetch(props.srcURL); | ||
111 | const blob = await resp.blob(); | ||
112 | const reader = new window.FileReader(); | ||
113 | reader.readAsDataURL(blob); | ||
114 | reader.onloadend = () => { | ||
115 | const base64data = reader.result; | ||
116 | |||
117 | ipcRenderer.send('download-file', { | ||
118 | content: base64data, | ||
119 | fileOptions: { | ||
120 | name: fileName, | ||
121 | mime: blob.type, | ||
122 | }, | ||
123 | }); | ||
124 | }; | ||
125 | debug('binary string', blob); | ||
126 | } else { | ||
127 | ipcRenderer.send('download-file', { url: props.srcURL }); | ||
128 | } | ||
129 | }, | ||
130 | }, { | ||
131 | type: 'separator', | ||
132 | }); | ||
133 | } | ||
134 | |||
135 | console.log('suggestions', suggestions.length, suggestions); | ||
136 | if (suggestions.length > 0) { | ||
137 | suggestions.reverse().map(suggestion => menuTpl.unshift({ | ||
138 | id: `suggestion-${suggestion}`, | ||
139 | label: suggestion, | ||
140 | click() { | ||
141 | webContents.replaceMisspelling(suggestion); | ||
142 | }, | ||
143 | })); | ||
144 | } | ||
145 | |||
146 | if (isDevMode) { | ||
147 | menuTpl.push({ | ||
148 | type: 'separator', | ||
149 | }, { | ||
150 | id: 'inspect', | ||
151 | label: 'Inspect Element', | ||
152 | click() { | ||
153 | webContents.inspectElement(props.x, props.y); | ||
154 | }, | ||
155 | }, { | ||
156 | type: 'separator', | ||
157 | }); | ||
158 | } | ||
159 | |||
160 | return delUnusedElements(menuTpl); | ||
161 | }; | ||
162 | |||
163 | export default function contextMenu(spellcheckProvider) { | ||
164 | webContents.on('context-menu', (e, props) => { | ||
165 | e.preventDefault(); | ||
166 | |||
167 | let suggestions = []; | ||
168 | if (spellcheckProvider && props.misspelledWord) { | ||
169 | suggestions = spellcheckProvider.getSuggestion(props.misspelledWord); | ||
170 | |||
171 | debug('Suggestions', suggestions); | ||
172 | } | ||
173 | |||
174 | const menu = Menu.buildFromTemplate(buildMenuTpl(props, suggestions.slice(0, 5))); | ||
175 | |||
176 | menu.popup(remote.getCurrentWindow()); | ||
177 | }); | ||
178 | } | ||
diff --git a/src/webview/darkmode.js b/src/webview/darkmode.js new file mode 100644 index 000000000..9830ef33c --- /dev/null +++ b/src/webview/darkmode.js | |||
@@ -0,0 +1,28 @@ | |||
1 | import path from 'path'; | ||
2 | import fs from 'fs-extra'; | ||
3 | |||
4 | const ID = 'franz-theme-dark-mode'; | ||
5 | |||
6 | export function injectDarkModeStyle(recipePath) { | ||
7 | const darkModeStyle = path.join(recipePath, 'darkmode.css'); | ||
8 | if (fs.pathExistsSync(darkModeStyle)) { | ||
9 | const data = fs.readFileSync(darkModeStyle); | ||
10 | const styles = document.createElement('style'); | ||
11 | styles.id = ID; | ||
12 | styles.innerHTML = data.toString(); | ||
13 | |||
14 | document.querySelector('head').appendChild(styles); | ||
15 | } | ||
16 | } | ||
17 | |||
18 | export function removeDarkModeStyle() { | ||
19 | const style = document.querySelector(`#${ID}`); | ||
20 | |||
21 | if (style) { | ||
22 | style.remove(); | ||
23 | } | ||
24 | } | ||
25 | |||
26 | export function isDarkModeStyleInjected() { | ||
27 | return !!document.querySelector(`#${ID}`); | ||
28 | } | ||
diff --git a/src/webview/plugin.js b/src/webview/plugin.js index c6530fef6..72530733d 100644 --- a/src/webview/plugin.js +++ b/src/webview/plugin.js | |||
@@ -1,14 +1,17 @@ | |||
1 | import { ipcRenderer } from 'electron'; | 1 | import { ipcRenderer } from 'electron'; |
2 | import { ContextMenuListener, ContextMenuBuilder } from 'electron-spellchecker'; | ||
3 | import path from 'path'; | 2 | import path from 'path'; |
4 | 3 | ||
5 | import { isDevMode } from '../environment'; | ||
6 | import RecipeWebview from './lib/RecipeWebview'; | 4 | import RecipeWebview from './lib/RecipeWebview'; |
7 | 5 | ||
8 | import Spellchecker from './spellchecker'; | 6 | import spellchecker, { switchDict, disable as disableSpellchecker } from './spellchecker'; |
7 | import { injectDarkModeStyle, isDarkModeStyleInjected, removeDarkModeStyle } from './darkmode'; | ||
8 | import contextMenu from './contextMenu'; | ||
9 | import './notifications'; | 9 | import './notifications'; |
10 | 10 | ||
11 | const debug = require('debug')('Plugin'); | 11 | const debug = require('debug')('Franz:Plugin'); |
12 | |||
13 | window.franzSettings = {}; | ||
14 | let serviceData; | ||
12 | 15 | ||
13 | ipcRenderer.on('initializeRecipe', (e, data) => { | 16 | ipcRenderer.on('initializeRecipe', (e, data) => { |
14 | const modulePath = path.join(data.recipe.path, 'webview.js'); | 17 | const modulePath = path.join(data.recipe.path, 'webview.js'); |
@@ -17,27 +20,58 @@ ipcRenderer.on('initializeRecipe', (e, data) => { | |||
17 | try { | 20 | try { |
18 | // eslint-disable-next-line | 21 | // eslint-disable-next-line |
19 | require(modulePath)(new RecipeWebview(), data); | 22 | require(modulePath)(new RecipeWebview(), data); |
20 | debug('Initialize Recipe'); | 23 | debug('Initialize Recipe', data); |
24 | |||
25 | serviceData = data; | ||
26 | |||
27 | if (data.isDarkModeEnabled) { | ||
28 | injectDarkModeStyle(data.recipe.path); | ||
29 | debug('Add dark theme styles'); | ||
30 | } | ||
21 | } catch (err) { | 31 | } catch (err) { |
22 | debug('Recipe initialization failed', err); | 32 | debug('Recipe initialization failed', err); |
23 | } | 33 | } |
24 | }); | 34 | }); |
25 | 35 | ||
26 | const spellchecker = new Spellchecker(); | 36 | // Needs to run asap to intialize dictionaries |
27 | spellchecker.initialize(); | 37 | (async () => { |
38 | const spellcheckingProvider = await spellchecker(); | ||
39 | contextMenu(spellcheckingProvider); | ||
40 | })(); | ||
28 | 41 | ||
29 | const contextMenuBuilder = new ContextMenuBuilder(spellchecker.handler, null, isDevMode); | 42 | ipcRenderer.on('settings-update', async (e, data) => { |
43 | debug('Settings update received', data); | ||
30 | 44 | ||
31 | new ContextMenuListener((info) => { // eslint-disable-line | 45 | if (data.enableSpellchecking) { |
32 | contextMenuBuilder.showPopupMenu(info); | 46 | switchDict(data.spellcheckerLanguage); |
47 | } else { | ||
48 | disableSpellchecker(); | ||
49 | } | ||
50 | |||
51 | window.franzSettings = data; | ||
33 | }); | 52 | }); |
34 | 53 | ||
35 | ipcRenderer.on('settings-update', (e, data) => { | 54 | ipcRenderer.on('service-settings-update', (e, data) => { |
36 | spellchecker.toggleSpellchecker(data.enableSpellchecking); | 55 | debug('Service settings update received', data); |
37 | debug('Settings update received', data); | 56 | |
57 | if (data.isDarkModeEnabled && !isDarkModeStyleInjected()) { | ||
58 | injectDarkModeStyle(serviceData.recipe.path); | ||
59 | |||
60 | debug('Enable service dark mode'); | ||
61 | } else if (!data.isDarkModeEnabled && isDarkModeStyleInjected()) { | ||
62 | removeDarkModeStyle(); | ||
63 | |||
64 | debug('Disable service dark mode'); | ||
65 | } | ||
66 | }); | ||
67 | |||
68 | // Needed for current implementation of electrons 'login' event 🤦†| ||
69 | ipcRenderer.on('get-service-id', (event) => { | ||
70 | debug('Asking for service id', event); | ||
71 | |||
72 | event.sender.send('service-id', serviceData.id); | ||
38 | }); | 73 | }); |
39 | 74 | ||
40 | // initSpellche | ||
41 | 75 | ||
42 | document.addEventListener('DOMContentLoaded', () => { | 76 | document.addEventListener('DOMContentLoaded', () => { |
43 | ipcRenderer.sendToHost('hello'); | 77 | ipcRenderer.sendToHost('hello'); |
@@ -47,7 +81,7 @@ document.addEventListener('DOMContentLoaded', () => { | |||
47 | const originalWindowOpen = window.open; | 81 | const originalWindowOpen = window.open; |
48 | 82 | ||
49 | window.open = (url, frameName, features) => { | 83 | window.open = (url, frameName, features) => { |
50 | // We need to differentiate if the link should be opened in a popup or in the systems default browser | 84 | // We need to differentiate if the link should be opened in a popup or in the systems default browser |
51 | if (!frameName && !features) { | 85 | if (!frameName && !features) { |
52 | return ipcRenderer.sendToHost('new-window', url); | 86 | return ipcRenderer.sendToHost('new-window', url); |
53 | } | 87 | } |
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js index a504a4039..b0192b7ef 100644 --- a/src/webview/spellchecker.js +++ b/src/webview/spellchecker.js | |||
@@ -1,63 +1,92 @@ | |||
1 | import { SpellCheckHandler } from 'electron-spellchecker'; | 1 | import { webFrame } from 'electron'; |
2 | import fs from 'fs'; | ||
3 | import path from 'path'; | ||
4 | import { SpellCheckerProvider } from 'electron-hunspell'; | ||
2 | 5 | ||
3 | import { isMac } from '../environment'; | 6 | import { DICTIONARY_PATH } from '../config'; |
4 | 7 | ||
5 | export default class Spellchecker { | 8 | const debug = require('debug')('Franz:spellchecker'); |
6 | isInitialized = false; | ||
7 | handler = null; | ||
8 | initRetries = 0; | ||
9 | DOMCheckInterval = null; | ||
10 | 9 | ||
11 | get inputs() { | 10 | let provider; |
12 | return document.querySelectorAll('input[type="text"], [contenteditable="true"], textarea'); | 11 | let currentDict; |
13 | } | 12 | let _isEnabled = false; |
14 | 13 | ||
15 | initialize() { | 14 | async function loadDictionaries() { |
16 | this.handler = new SpellCheckHandler(); | 15 | const rawList = fs.readdirSync(DICTIONARY_PATH); |
17 | 16 | ||
18 | if (!isMac) { | 17 | const dicts = rawList.filter(item => !item.startsWith('.') && fs.lstatSync(path.join(DICTIONARY_PATH, item)).isDirectory()); |
19 | this.attach(); | 18 | |
20 | } else { | 19 | debug('Found dictionaries', dicts); |
21 | this.isInitialized = true; | 20 | |
22 | } | 21 | for (let i = 0; i < dicts.length; i += 1) { |
22 | const fileLocation = `${DICTIONARY_PATH}/${dicts[i]}/${dicts[i]}`; | ||
23 | debug('Trying to load', fileLocation); | ||
24 | // eslint-disable-next-line | ||
25 | await provider.loadDictionary(dicts[i], `${fileLocation}.dic`, `${fileLocation}.aff`); | ||
23 | } | 26 | } |
27 | } | ||
28 | |||
29 | export async function switchDict(locale) { | ||
30 | try { | ||
31 | debug('Trying to load dictionary', locale); | ||
24 | 32 | ||
25 | attach() { | 33 | if (!provider.availableDictionaries.includes(locale)) { |
26 | let initFailed = false; | 34 | console.warn('Dict not available', locale); |
27 | 35 | ||
28 | if (this.initRetries > 3) { | ||
29 | console.error('Could not initialize spellchecker'); | ||
30 | return; | 36 | return; |
31 | } | 37 | } |
32 | 38 | ||
33 | try { | 39 | if (!provider) { |
34 | this.handler.attachToInput(); | 40 | console.warn('SpellcheckProvider not initialized'); |
35 | this.handler.switchLanguage(navigator.language); | 41 | |
36 | } catch (err) { | 42 | return; |
37 | initFailed = true; | ||
38 | this.initRetries = +1; | ||
39 | setTimeout(() => { this.attach(); console.warn('Spellchecker init failed, trying again in 5s'); }, 5000); | ||
40 | } | 43 | } |
41 | 44 | ||
42 | if (!initFailed) { | 45 | if (locale === currentDict) { |
43 | this.isInitialized = true; | 46 | console.warn('Dictionary is already used', currentDict); |
47 | |||
48 | return; | ||
44 | } | 49 | } |
45 | } | ||
46 | 50 | ||
47 | toggleSpellchecker(enable = false) { | 51 | provider.switchDictionary(locale); |
48 | this.inputs.forEach((input) => { | ||
49 | input.setAttribute('spellcheck', enable); | ||
50 | }); | ||
51 | 52 | ||
52 | this.intervalHandler(enable); | 53 | debug('Switched dictionary to', locale); |
54 | |||
55 | currentDict = locale; | ||
56 | _isEnabled = true; | ||
57 | } catch (err) { | ||
58 | console.error(err); | ||
53 | } | 59 | } |
60 | } | ||
54 | 61 | ||
55 | intervalHandler(enable) { | 62 | export default async function initialize(languageCode = 'en-us') { |
56 | clearInterval(this.DOMCheckInterval); | 63 | try { |
64 | provider = new SpellCheckerProvider(); | ||
65 | const locale = languageCode.toLowerCase(); | ||
57 | 66 | ||
58 | if (enable) { | 67 | debug('Init spellchecker'); |
59 | this.DOMCheckInterval = setInterval(() => this.toggleSpellchecker(enable), 30000); | 68 | await provider.initialize(); |
60 | } | 69 | await loadDictionaries(); |
70 | |||
71 | debug('Available spellchecker dictionaries', provider.availableDictionaries); | ||
72 | |||
73 | switchDict(locale); | ||
74 | |||
75 | return provider; | ||
76 | } catch (err) { | ||
77 | console.error(err); | ||
78 | return false; | ||
61 | } | 79 | } |
62 | } | 80 | } |
63 | 81 | ||
82 | export function isEnabled() { | ||
83 | return _isEnabled; | ||
84 | } | ||
85 | |||
86 | export function disable() { | ||
87 | if (isEnabled()) { | ||
88 | webFrame.setSpellCheckProvider(currentDict, true, { spellCheck: () => true }); | ||
89 | _isEnabled = false; | ||
90 | currentDict = null; | ||
91 | } | ||
92 | } | ||