aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md20
-rw-r--r--package-lock.json72
-rw-r--r--package.json6
-rw-r--r--src/components/auth/AuthLayout.js6
-rw-r--r--src/components/layout/AppLayout.js126
-rw-r--r--src/containers/auth/AuthLayoutContainer.js10
-rw-r--r--src/containers/layout/AppLayoutContainer.js1
-rw-r--r--src/containers/settings/SettingsWindow.js35
-rw-r--r--src/features/announcements/components/AnnouncementScreen.js2
-rw-r--r--src/features/delayApp/index.js5
-rw-r--r--src/features/delayApp/styles.js1
-rw-r--r--src/i18n/locales/fr.json18
-rw-r--r--src/i18n/locales/hu.json24
-rw-r--r--src/i18n/locales/nl-BE.json102
-rw-r--r--src/i18n/locales/nl.json54
-rw-r--r--src/i18n/locales/pl.json18
-rw-r--r--src/i18n/locales/pt-BR.json22
-rw-r--r--src/index.html1
-rw-r--r--src/stores/UIStore.js30
-rw-r--r--src/styles/layout.scss2
-rw-r--r--src/styles/reset.scss2
-rw-r--r--src/webview/contextMenu.js5
-rw-r--r--src/webview/spellchecker.js17
23 files changed, 303 insertions, 276 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1fe2ab45..a0969c2fc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,23 @@
1# [5.2.0-beta.4](https://github.com/meetfranz/franz/compare/v5.2.0-beta.3...v5.2.0-beta.4) (2019-07-01)
2
3
4### Bug Fixes
5
6* **Notifications:** Don't show notification badges when app is muted ([e844a64](https://github.com/meetfranz/franz/commit/e844a64))
7* **Settings:** Fix position of settings window
8
9### General
10
11* **Translations:** Improved translations. **[A million thanks to the amazing community. 🎉](http://i18n.meetfranz.com/)**
12
13
14# [5.2.0-beta.3](https://github.com/meetfranz/franz/compare/v5.2.0-beta.2...v5.2.0-beta.3) (2019-06-24)
15
16### General
17
18* **App:** Downgraded electron to 4.2.4 ([404c87a](https://github.com/meetfranz/franz/commit/404c87a))
19
20
1# [5.2.0-beta.2](https://github.com/meetfranz/franz/compare/v5.2.0-beta.1...v5.2.0-beta.2) (2019-06-12) 21# [5.2.0-beta.2](https://github.com/meetfranz/franz/compare/v5.2.0-beta.1...v5.2.0-beta.2) (2019-06-12)
2 22
3 23
diff --git a/package-lock.json b/package-lock.json
index 77575ad56..b4d86c5e1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
1{ 1{
2 "name": "franz", 2 "name": "franz",
3 "version": "5.2.0-beta.1", 3 "version": "5.2.0-beta.3",
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
@@ -2173,13 +2173,13 @@
2173 "requires": { 2173 "requires": {
2174 "@mdi/js": "^3.3.92", 2174 "@mdi/js": "^3.3.92",
2175 "@mdi/react": "^1.1.0", 2175 "@mdi/react": "^1.1.0",
2176 "@meetfranz/theme": "^1.0.13", 2176 "@meetfranz/theme": "^1.0.14",
2177 "react-html-attributes": "^1.4.3", 2177 "react-html-attributes": "^1.4.3",
2178 "react-loader": "^2.4.5" 2178 "react-loader": "^2.4.5"
2179 }, 2179 },
2180 "dependencies": { 2180 "dependencies": {
2181 "@meetfranz/theme": { 2181 "@meetfranz/theme": {
2182 "version": "1.0.13", 2182 "version": "1.0.14",
2183 "bundled": true, 2183 "bundled": true,
2184 "requires": { 2184 "requires": {
2185 "color": "^3.1.0" 2185 "color": "^3.1.0"
@@ -2198,12 +2198,12 @@
2198 "requires": { 2198 "requires": {
2199 "@mdi/js": "^3.3.92", 2199 "@mdi/js": "^3.3.92",
2200 "@mdi/react": "^1.1.0", 2200 "@mdi/react": "^1.1.0",
2201 "@meetfranz/theme": "^1.0.13", 2201 "@meetfranz/theme": "^1.0.14",
2202 "react-loader": "^2.4.5" 2202 "react-loader": "^2.4.5"
2203 }, 2203 },
2204 "dependencies": { 2204 "dependencies": {
2205 "@meetfranz/theme": { 2205 "@meetfranz/theme": {
2206 "version": "1.0.13", 2206 "version": "1.0.14",
2207 "bundled": true, 2207 "bundled": true,
2208 "requires": { 2208 "requires": {
2209 "color": "^3.1.0" 2209 "color": "^3.1.0"
@@ -6803,9 +6803,9 @@
6803 "dev": true 6803 "dev": true
6804 }, 6804 },
6805 "electron": { 6805 "electron": {
6806 "version": "5.0.2", 6806 "version": "4.2.4",
6807 "resolved": "https://registry.npmjs.org/electron/-/electron-5.0.2.tgz", 6807 "resolved": "https://registry.npmjs.org/electron/-/electron-4.2.4.tgz",
6808 "integrity": "sha512-bUHKQhyuOen/q8iHTkrnzqB9CAwBDI+vHbeu21kpq2bqAD+t25yfrmUEcYHaPL4fZOAhk6nnRqskF6/Xd+aZxg==", 6808 "integrity": "sha512-d4wEwJluMsRyRgbukLmFVTb6l1J+mc3RLB1ctbpMlSWDFvs+zknPWa+cHBzTWwrdgwINLddr69qsAW1ku6FqYw==",
6809 "dev": true, 6809 "dev": true,
6810 "requires": { 6810 "requires": {
6811 "@types/node": "^10.12.18", 6811 "@types/node": "^10.12.18",
@@ -6814,9 +6814,9 @@
6814 }, 6814 },
6815 "dependencies": { 6815 "dependencies": {
6816 "@types/node": { 6816 "@types/node": {
6817 "version": "10.14.4", 6817 "version": "10.14.9",
6818 "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", 6818 "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.9.tgz",
6819 "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==", 6819 "integrity": "sha512-NelG/dSahlXYtSoVPErrp06tYFrvzj8XLWmKA+X8x0W//4MqbUyZu++giUG/v0bjAT6/Qxa8IjodrfdACyb0Fg==",
6820 "dev": true 6820 "dev": true
6821 } 6821 }
6822 } 6822 }
@@ -7043,12 +7043,14 @@
7043 } 7043 }
7044 }, 7044 },
7045 "electron-hunspell": { 7045 "electron-hunspell": {
7046 "version": "1.0.0-beta.7", 7046 "version": "0.1.1",
7047 "resolved": "https://registry.npmjs.org/electron-hunspell/-/electron-hunspell-1.0.0-beta.7.tgz", 7047 "resolved": "https://registry.npmjs.org/electron-hunspell/-/electron-hunspell-0.1.1.tgz",
7048 "integrity": "sha512-BByCXqU8sZbuzyoxKcBYjycp8ORiqjeYZd2OT8RNjVW+XGPmZkHewXUu4tUa1IXW6ij6IqojV5kr+xhYKLN1DA==", 7048 "integrity": "sha512-B3nOQqHexIX+8bz72FZkNk+iFBrdqS9DpV2SaH+t7T9SLbONBVBRLJ2Jj2ytXFUzvw81q7vz2dfxPCddh/E3ww==",
7049 "requires": { 7049 "requires": {
7050 "hunspell-asm": "^2.0.0", 7050 "hunspell-asm": "1.0.2",
7051 "tslib": "1.9.3" 7051 "lodash": "^4.17.11",
7052 "tslib": "1.9.3",
7053 "unixify": "1.0.0"
7052 } 7054 }
7053 }, 7055 },
7054 "electron-is-dev": { 7056 "electron-is-dev": {
@@ -11379,34 +11381,14 @@
11379 } 11381 }
11380 }, 11382 },
11381 "hunspell-asm": { 11383 "hunspell-asm": {
11382 "version": "2.0.0", 11384 "version": "1.0.2",
11383 "resolved": "https://registry.npmjs.org/hunspell-asm/-/hunspell-asm-2.0.0.tgz", 11385 "resolved": "https://registry.npmjs.org/hunspell-asm/-/hunspell-asm-1.0.2.tgz",
11384 "integrity": "sha512-FMIUBpy+bRREFAvC63RcYEK9U6+FdlEojGSVsvMTpuZ2CekYyUBwEfG4+ExIQOQyEN0U6f1MoVgrFqvgPNSA2g==", 11386 "integrity": "sha512-UTLBvc0yZiIcHl9qrgxnFTZbX3zF4CprzEY+u+N0iXlUKZnUJRIgvgppTdgiQTsucm5b0aN/rHsgXz2q/0kBRA==",
11385 "requires": { 11387 "requires": {
11386 "emscripten-wasm-loader": "^2.2.3", 11388 "emscripten-wasm-loader": "^1.0.0",
11387 "nanoid": "^2.0.1", 11389 "nanoid": "^1.0.2",
11388 "tslib": "^1.9.3", 11390 "tslib": "^1.9.0",
11389 "unixify": "^1.0.0" 11391 "unixify": "^1.0.0"
11390 },
11391 "dependencies": {
11392 "emscripten-wasm-loader": {
11393 "version": "2.2.3",
11394 "resolved": "https://registry.npmjs.org/emscripten-wasm-loader/-/emscripten-wasm-loader-2.2.3.tgz",
11395 "integrity": "sha512-//gI0afvtVnY7smttrPOW/BM+pTJLmdIcXAQV3fgRdQ0o6wm2vdSI0kjLYVOeo/rbtRsGgVuMLu6fT+O//EfaA==",
11396 "requires": {
11397 "getroot": "^1.0.0",
11398 "nanoid": "^1.3.4",
11399 "tslib": "^1.9.3",
11400 "unixify": "^1.0.0"
11401 },
11402 "dependencies": {
11403 "nanoid": {
11404 "version": "1.3.4",
11405 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-1.3.4.tgz",
11406 "integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ=="
11407 }
11408 }
11409 }
11410 } 11392 }
11411 }, 11393 },
11412 "husky": { 11394 "husky": {
@@ -14385,9 +14367,9 @@
14385 "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" 14367 "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="
14386 }, 14368 },
14387 "nanoid": { 14369 "nanoid": {
14388 "version": "2.0.3", 14370 "version": "1.3.4",
14389 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.3.tgz", 14371 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-1.3.4.tgz",
14390 "integrity": "sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw==" 14372 "integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ=="
14391 }, 14373 },
14392 "nanomatch": { 14374 "nanomatch": {
14393 "version": "1.2.13", 14375 "version": "1.2.13",
diff --git a/package.json b/package.json
index 9060c32db..7bf1f8a4a 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
2 "name": "franz", 2 "name": "franz",
3 "productName": "Franz", 3 "productName": "Franz",
4 "appId": "com.meetfranz.franz", 4 "appId": "com.meetfranz.franz",
5 "version": "5.2.0-beta.2", 5 "version": "5.2.0-beta.4",
6 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", 6 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.",
7 "copyright": "adlk x franz - Stefan Malzner", 7 "copyright": "adlk x franz - Stefan Malzner",
8 "main": "index.js", 8 "main": "index.js",
@@ -47,7 +47,7 @@
47 "du": "^0.1.0", 47 "du": "^0.1.0",
48 "electron-dl": "1.12.0", 48 "electron-dl": "1.12.0",
49 "electron-fetch": "1.3.0", 49 "electron-fetch": "1.3.0",
50 "electron-hunspell": "1.0.0-beta.7", 50 "electron-hunspell": "0.1.1",
51 "electron-is-dev": "1.0.1", 51 "electron-is-dev": "1.0.1",
52 "electron-react-titlebar": "0.8.1", 52 "electron-react-titlebar": "0.8.1",
53 "electron-updater": "4.0.6", 53 "electron-updater": "4.0.6",
@@ -118,7 +118,7 @@
118 "cross-env": "^5.0.5", 118 "cross-env": "^5.0.5",
119 "cz-conventional-changelog": "2.1.0", 119 "cz-conventional-changelog": "2.1.0",
120 "dotenv": "^4.0.0", 120 "dotenv": "^4.0.0",
121 "electron": "5.0.2", 121 "electron": "4.2.4",
122 "electron-builder": "20.40.2", 122 "electron-builder": "20.40.2",
123 "electron-rebuild": "1.8.4", 123 "electron-rebuild": "1.8.4",
124 "eslint": "5.10.0", 124 "eslint": "5.10.0",
diff --git a/src/components/auth/AuthLayout.js b/src/components/auth/AuthLayout.js
index 3d43d4e5c..75a8cfc61 100644
--- a/src/components/auth/AuthLayout.js
+++ b/src/components/auth/AuthLayout.js
@@ -22,7 +22,6 @@ export default @observer class AuthLayout extends Component {
22 retryHealthCheck: PropTypes.func.isRequired, 22 retryHealthCheck: PropTypes.func.isRequired,
23 isHealthCheckLoading: PropTypes.bool.isRequired, 23 isHealthCheckLoading: PropTypes.bool.isRequired,
24 isFullScreen: PropTypes.bool.isRequired, 24 isFullScreen: PropTypes.bool.isRequired,
25 darkMode: PropTypes.bool.isRequired,
26 nextAppReleaseVersion: PropTypes.string, 25 nextAppReleaseVersion: PropTypes.string,
27 installAppUpdate: PropTypes.func.isRequired, 26 installAppUpdate: PropTypes.func.isRequired,
28 appUpdateIsDownloaded: PropTypes.bool.isRequired, 27 appUpdateIsDownloaded: PropTypes.bool.isRequired,
@@ -45,7 +44,6 @@ export default @observer class AuthLayout extends Component {
45 retryHealthCheck, 44 retryHealthCheck,
46 isHealthCheckLoading, 45 isHealthCheckLoading,
47 isFullScreen, 46 isFullScreen,
48 darkMode,
49 nextAppReleaseVersion, 47 nextAppReleaseVersion,
50 installAppUpdate, 48 installAppUpdate,
51 appUpdateIsDownloaded, 49 appUpdateIsDownloaded,
@@ -53,7 +51,7 @@ export default @observer class AuthLayout extends Component {
53 const { intl } = this.context; 51 const { intl } = this.context;
54 52
55 return ( 53 return (
56 <div className={darkMode ? 'theme__dark' : ''}> 54 <>
57 {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon="assets/images/logo.svg" />} 55 {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon="assets/images/logo.svg" />}
58 <div className="auth"> 56 <div className="auth">
59 {!isOnline && ( 57 {!isOnline && (
@@ -93,7 +91,7 @@ export default @observer class AuthLayout extends Component {
93 <img src="./assets/images/adlk.svg" alt="" /> 91 <img src="./assets/images/adlk.svg" alt="" />
94 </Link> 92 </Link>
95 </div> 93 </div>
96 </div> 94 </>
97 ); 95 );
98 } 96 }
99} 97}
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index 499bc097a..ebb9849ea 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -68,7 +68,6 @@ class AppLayout extends Component {
68 areRequiredRequestsSuccessful: PropTypes.bool.isRequired, 68 areRequiredRequestsSuccessful: PropTypes.bool.isRequired,
69 retryRequiredRequests: PropTypes.func.isRequired, 69 retryRequiredRequests: PropTypes.func.isRequired,
70 areRequiredRequestsLoading: PropTypes.bool.isRequired, 70 areRequiredRequestsLoading: PropTypes.bool.isRequired,
71 darkMode: PropTypes.bool.isRequired,
72 isDelayAppScreenVisible: PropTypes.bool.isRequired, 71 isDelayAppScreenVisible: PropTypes.bool.isRequired,
73 }; 72 };
74 73
@@ -101,7 +100,6 @@ class AppLayout extends Component {
101 areRequiredRequestsSuccessful, 100 areRequiredRequestsSuccessful,
102 retryRequiredRequests, 101 retryRequiredRequests,
103 areRequiredRequestsLoading, 102 areRequiredRequestsLoading,
104 darkMode,
105 isDelayAppScreenVisible, 103 isDelayAppScreenVisible,
106 } = this.props; 104 } = this.props;
107 105
@@ -109,69 +107,67 @@ class AppLayout extends Component {
109 107
110 return ( 108 return (
111 <ErrorBoundary> 109 <ErrorBoundary>
112 <div className={(darkMode ? 'theme__dark' : '')}> 110 <div className="app">
113 <div className="app"> 111 {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon="assets/images/logo.svg" />}
114 {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon="assets/images/logo.svg" />} 112 <div className={`app__content ${classes.appContent}`}>
115 <div className={`app__content ${classes.appContent}`}> 113 {workspacesDrawer}
116 {workspacesDrawer} 114 {sidebar}
117 {sidebar} 115 <div className="app__service">
118 <div className="app__service"> 116 <WorkspaceSwitchingIndicator />
119 <WorkspaceSwitchingIndicator /> 117 {news.length > 0 && news.map(item => (
120 {news.length > 0 && news.map(item => ( 118 <InfoBar
121 <InfoBar 119 key={item.id}
122 key={item.id} 120 position="top"
123 position="top" 121 type={item.type}
124 type={item.type} 122 sticky={item.sticky}
125 sticky={item.sticky} 123 onHide={() => removeNewsItem({ newsId: item.id })}
126 onHide={() => removeNewsItem({ newsId: item.id })} 124 >
127 > 125 <span dangerouslySetInnerHTML={createMarkup(item.message)} />
128 <span dangerouslySetInnerHTML={createMarkup(item.message)} /> 126 </InfoBar>
129 </InfoBar> 127 ))}
130 ))} 128 {/* {!isOnline && (
131 {/* {!isOnline && ( 129 <InfoBar
132 <InfoBar 130 type="danger"
133 type="danger" 131 sticky
134 sticky 132 >
135 > 133 <span className="mdi mdi-flash" />
136 <span className="mdi mdi-flash" /> 134 {intl.formatMessage(globalMessages.notConnectedToTheInternet)}
137 {intl.formatMessage(globalMessages.notConnectedToTheInternet)} 135 </InfoBar>
138 </InfoBar> 136 )} */}
139 )} */} 137 {!areRequiredRequestsSuccessful && showRequiredRequestsError && (
140 {!areRequiredRequestsSuccessful && showRequiredRequestsError && ( 138 <InfoBar
141 <InfoBar 139 type="danger"
142 type="danger" 140 ctaLabel="Try again"
143 ctaLabel="Try again" 141 ctaLoading={areRequiredRequestsLoading}
144 ctaLoading={areRequiredRequestsLoading} 142 sticky
145 sticky 143 onClick={retryRequiredRequests}
146 onClick={retryRequiredRequests} 144 >
147 > 145 <span className="mdi mdi-flash" />
148 <span className="mdi mdi-flash" /> 146 {intl.formatMessage(messages.requiredRequestsFailed)}
149 {intl.formatMessage(messages.requiredRequestsFailed)} 147 </InfoBar>
150 </InfoBar> 148 )}
151 )} 149 {showServicesUpdatedInfoBar && (
152 {showServicesUpdatedInfoBar && ( 150 <InfoBar
153 <InfoBar 151 type="primary"
154 type="primary" 152 ctaLabel={intl.formatMessage(messages.buttonReloadServices)}
155 ctaLabel={intl.formatMessage(messages.buttonReloadServices)} 153 onClick={reloadServicesAfterUpdate}
156 onClick={reloadServicesAfterUpdate} 154 sticky
157 sticky 155 >
158 > 156 <span className="mdi mdi-power-plug" />
159 <span className="mdi mdi-power-plug" /> 157 {intl.formatMessage(messages.servicesUpdated)}
160 {intl.formatMessage(messages.servicesUpdated)} 158 </InfoBar>
161 </InfoBar> 159 )}
162 )} 160 {appUpdateIsDownloaded && (
163 {appUpdateIsDownloaded && ( 161 <AppUpdateInfoBar
164 <AppUpdateInfoBar 162 nextAppReleaseVersion={nextAppReleaseVersion}
165 nextAppReleaseVersion={nextAppReleaseVersion} 163 onInstallUpdate={installAppUpdate}
166 onInstallUpdate={installAppUpdate} 164 />
167 /> 165 )}
168 )} 166 {isDelayAppScreenVisible && (<DelayApp />)}
169 {isDelayAppScreenVisible && (<DelayApp />)} 167 <BasicAuth />
170 <BasicAuth /> 168 <ShareFranz />
171 <ShareFranz /> 169 {services}
172 {services} 170 {children}
173 {children}
174 </div>
175 </div> 171 </div>
176 </div> 172 </div>
177 </div> 173 </div>
diff --git a/src/containers/auth/AuthLayoutContainer.js b/src/containers/auth/AuthLayoutContainer.js
index 1f9c1ea61..427054d3d 100644
--- a/src/containers/auth/AuthLayoutContainer.js
+++ b/src/containers/auth/AuthLayoutContainer.js
@@ -2,7 +2,6 @@ import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { inject, observer } from 'mobx-react'; 3import { inject, observer } from 'mobx-react';
4import { ThemeProvider } from 'react-jss'; 4import { ThemeProvider } from 'react-jss';
5import { theme } from '@meetfranz/theme';
6 5
7import AuthLayout from '../../components/auth/AuthLayout'; 6import AuthLayout from '../../components/auth/AuthLayout';
8import AppStore from '../../stores/AppStore'; 7import AppStore from '../../stores/AppStore';
@@ -24,24 +23,22 @@ export default @inject('stores', 'actions') @observer class AuthLayoutContainer
24 stores, actions, children, location, 23 stores, actions, children, location,
25 } = this.props; 24 } = this.props;
26 const { 25 const {
27 app, features, globalError, settings, 26 app, features, globalError,
28 } = stores; 27 } = stores;
29 28
30 const isLoadingBaseFeatures = features.defaultFeaturesRequest.isExecuting 29 const isLoadingBaseFeatures = features.defaultFeaturesRequest.isExecuting
31 && !features.defaultFeaturesRequest.wasExecuted; 30 && !features.defaultFeaturesRequest.wasExecuted;
32 31
33 const themeType = theme(settings.app.darkMode ? 'dark' : 'default');
34
35 if (isLoadingBaseFeatures) { 32 if (isLoadingBaseFeatures) {
36 return ( 33 return (
37 <ThemeProvider theme={theme(themeType)}> 34 <ThemeProvider theme={stores.ui.theme}>
38 <AppLoader /> 35 <AppLoader />
39 </ThemeProvider> 36 </ThemeProvider>
40 ); 37 );
41 } 38 }
42 39
43 return ( 40 return (
44 <ThemeProvider theme={theme(themeType)}> 41 <ThemeProvider theme={stores.ui.theme}>
45 <AuthLayout 42 <AuthLayout
46 error={globalError.response} 43 error={globalError.response}
47 pathname={location.pathname} 44 pathname={location.pathname}
@@ -50,7 +47,6 @@ export default @inject('stores', 'actions') @observer class AuthLayoutContainer
50 retryHealthCheck={actions.app.healthCheck} 47 retryHealthCheck={actions.app.healthCheck}
51 isHealthCheckLoading={app.healthCheckRequest.isExecuting} 48 isHealthCheckLoading={app.healthCheckRequest.isExecuting}
52 isFullScreen={app.isFullScreen} 49 isFullScreen={app.isFullScreen}
53 darkMode={app.isSystemDarkModeEnabled}
54 installAppUpdate={actions.app.installUpdate} 50 installAppUpdate={actions.app.installUpdate}
55 nextAppReleaseVersion={app.nextAppReleaseVersion} 51 nextAppReleaseVersion={app.nextAppReleaseVersion}
56 appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED} 52 appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED}
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js
index d290a6094..cf3da71e8 100644
--- a/src/containers/layout/AppLayoutContainer.js
+++ b/src/containers/layout/AppLayoutContainer.js
@@ -148,7 +148,6 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e
148 areRequiredRequestsSuccessful={requests.areRequiredRequestsSuccessful} 148 areRequiredRequestsSuccessful={requests.areRequiredRequestsSuccessful}
149 retryRequiredRequests={retryRequiredRequests} 149 retryRequiredRequests={retryRequiredRequests}
150 areRequiredRequestsLoading={requests.areRequiredRequestsLoading} 150 areRequiredRequestsLoading={requests.areRequiredRequestsLoading}
151 darkMode={settings.all.app.darkMode}
152 isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible} 151 isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible}
153 > 152 >
154 {React.Children.count(children) > 0 ? children : null} 153 {React.Children.count(children) > 0 ? children : null}
diff --git a/src/containers/settings/SettingsWindow.js b/src/containers/settings/SettingsWindow.js
index 663b9e2e4..440d32a46 100644
--- a/src/containers/settings/SettingsWindow.js
+++ b/src/containers/settings/SettingsWindow.js
@@ -1,4 +1,5 @@
1import React, { Component } from 'react'; 1import React, { Component } from 'react';
2import ReactDOM from 'react-dom';
2import PropTypes from 'prop-types'; 3import PropTypes from 'prop-types';
3import { observer, inject } from 'mobx-react'; 4import { observer, inject } from 'mobx-react';
4 5
@@ -10,10 +11,23 @@ import ErrorBoundary from '../../components/util/ErrorBoundary';
10import { workspaceStore } from '../../features/workspaces'; 11import { workspaceStore } from '../../features/workspaces';
11 12
12export default @inject('stores', 'actions') @observer class SettingsContainer extends Component { 13export default @inject('stores', 'actions') @observer class SettingsContainer extends Component {
14 portalRoot = document.querySelector('#portalContainer');
15
16 el = document.createElement('div');
17
18 componentDidMount() {
19 this.portalRoot.appendChild(this.el);
20 }
21
22 componentWillUnmount() {
23 this.portalRoot.removeChild(this.el);
24 }
25
13 render() { 26 render() {
14 const { children, stores } = this.props; 27 const { children, stores } = this.props;
15 const { closeSettings } = this.props.actions.ui; 28 const { closeSettings } = this.props.actions.ui;
16 29
30
17 const navigation = ( 31 const navigation = (
18 <Navigation 32 <Navigation
19 serviceCount={stores.services.all.length} 33 serviceCount={stores.services.all.length}
@@ -21,15 +35,18 @@ export default @inject('stores', 'actions') @observer class SettingsContainer ex
21 /> 35 />
22 ); 36 );
23 37
24 return ( 38 return ReactDOM.createPortal(
25 <ErrorBoundary> 39 (
26 <Layout 40 <ErrorBoundary>
27 navigation={navigation} 41 <Layout
28 closeSettings={closeSettings} 42 navigation={navigation}
29 > 43 closeSettings={closeSettings}
30 {children} 44 >
31 </Layout> 45 {children}
32 </ErrorBoundary> 46 </Layout>
47 </ErrorBoundary>
48 ),
49 this.el,
33 ); 50 );
34 } 51 }
35} 52}
diff --git a/src/features/announcements/components/AnnouncementScreen.js b/src/features/announcements/components/AnnouncementScreen.js
index e7c5fe395..03bd5ba41 100644
--- a/src/features/announcements/components/AnnouncementScreen.js
+++ b/src/features/announcements/components/AnnouncementScreen.js
@@ -28,7 +28,7 @@ const smallScreen = '1000px';
28const styles = theme => ({ 28const styles = theme => ({
29 container: { 29 container: {
30 background: theme.colorBackground, 30 background: theme.colorBackground,
31 position: 'absolute', 31 position: 'relative',
32 top: 0, 32 top: 0,
33 zIndex: 140, 33 zIndex: 140,
34 width: '100%', 34 width: '100%',
diff --git a/src/features/delayApp/index.js b/src/features/delayApp/index.js
index 67f0fc5e6..39fae3b20 100644
--- a/src/features/delayApp/index.js
+++ b/src/features/delayApp/index.js
@@ -33,7 +33,7 @@ export default function init(stores) {
33 }; 33 };
34 34
35 reaction( 35 reaction(
36 () => stores.user.isLoggedIn && stores.features.features.needToWaitToProceed && !stores.user.data.isPremium, 36 () => stores.user.isLoggedIn && stores.services.allServicesRequest.wasExecuted && stores.features.features.needToWaitToProceed && !stores.user.data.isPremium,
37 (isEnabled) => { 37 (isEnabled) => {
38 if (isEnabled) { 38 if (isEnabled) {
39 debug('Enabling `delayApp` feature'); 39 debug('Enabling `delayApp` feature');
@@ -45,6 +45,7 @@ export default function init(stores) {
45 45
46 autorun(() => { 46 autorun(() => {
47 if (stores.services.all.length === 0) { 47 if (stores.services.all.length === 0) {
48 debug('seas', stores.services.all.length);
48 shownAfterLaunch = true; 49 shownAfterLaunch = true;
49 return; 50 return;
50 } 51 }
@@ -64,7 +65,7 @@ export default function init(stores) {
64 debug('Resetting app delay'); 65 debug('Resetting app delay');
65 66
66 setVisibility(false); 67 setVisibility(false);
67 }, DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait + 1000); // timer needs to be able to hit 0 68 }, config.delayDuration + 1000); // timer needs to be able to hit 0
68 } 69 }
69 }); 70 });
70 } else { 71 } else {
diff --git a/src/features/delayApp/styles.js b/src/features/delayApp/styles.js
index 5c214cfdf..69c3c7a27 100644
--- a/src/features/delayApp/styles.js
+++ b/src/features/delayApp/styles.js
@@ -1,7 +1,6 @@
1export default theme => ({ 1export default theme => ({
2 container: { 2 container: {
3 background: theme.colorBackground, 3 background: theme.colorBackground,
4 position: 'absolute',
5 top: 0, 4 top: 0,
6 width: '100%', 5 width: '100%',
7 display: 'flex', 6 display: 'flex',
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 90072f2b7..9227ff28f 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -3,7 +3,7 @@
3 "app.errorHandler.headline" : "Une erreur s'est produite", 3 "app.errorHandler.headline" : "Une erreur s'est produite",
4 "feature.announcements.changelog.headline" : "Changements dans Franz {version}", 4 "feature.announcements.changelog.headline" : "Changements dans Franz {version}",
5 "feature.delayApp.action" : "Obtenez une licence de Supporter Franz", 5 "feature.delayApp.action" : "Obtenez une licence de Supporter Franz",
6 "feature.delayApp.headline" : "Veuillez acheter une licence de Supporter Franz pour sauter le temps d'attente", 6 "feature.delayApp.headline" : "Achetez une licence de Supporter Franz pour ne plus avoir de temps d'attente",
7 "feature.delayApp.text" : "Franz reprendra dans {seconds} secondes.", 7 "feature.delayApp.text" : "Franz reprendra dans {seconds} secondes.",
8 "feature.shareFranz.action.email" : "Envoyer par mail", 8 "feature.shareFranz.action.email" : "Envoyer par mail",
9 "feature.shareFranz.action.facebook" : "Partager sur Facebook", 9 "feature.shareFranz.action.facebook" : "Partager sur Facebook",
@@ -11,7 +11,7 @@
11 "feature.shareFranz.headline" : "Franz est meilleur quand on est tous ensemble !", 11 "feature.shareFranz.headline" : "Franz est meilleur quand on est tous ensemble !",
12 "feature.shareFranz.shareText.email" : "J'ai ajouté {count} services à Franz ! Télécharger l'appli gratuite pour WhatsApp, Messenger, Skype et cie sur www.meetfranz.com", 12 "feature.shareFranz.shareText.email" : "J'ai ajouté {count} services à Franz ! Télécharger l'appli gratuite pour WhatsApp, Messenger, Skype et cie sur www.meetfranz.com",
13 "feature.shareFranz.shareText.twitter" : "J'ai ajouté {count} services à Franz! Télécharge l'application gratuite pour WhatsApp, Messenger, Slack, Skype et compagnie sur www.meetfranz.com \/cc @FranzMessenger", 13 "feature.shareFranz.shareText.twitter" : "J'ai ajouté {count} services à Franz! Télécharge l'application gratuite pour WhatsApp, Messenger, Slack, Skype et compagnie sur www.meetfranz.com \/cc @FranzMessenger",
14 "feature.shareFranz.text" : "Dites à vos amis et collègues combien Franz est super et aidez nous à faire passer le mot.", 14 "feature.shareFranz.text" : "Dites à vos amis et collègues a quel point Franz est super et aidez nous à faire passer le mot.",
15 "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz", 15 "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz",
16 "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.", 16 "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.",
17 "global.spellchecker.useDefault" : "Par défaut ({default})", 17 "global.spellchecker.useDefault" : "Par défaut ({default})",
@@ -19,7 +19,7 @@
19 "global.spellchecking.autodetect.short" : "Automatiquement", 19 "global.spellchecking.autodetect.short" : "Automatiquement",
20 "global.spellchecking.language" : "Langue de la vérification orthographique", 20 "global.spellchecking.language" : "Langue de la vérification orthographique",
21 "import.headline" : "Importez vos services depuis la version 4 de Franz.", 21 "import.headline" : "Importez vos services depuis la version 4 de Franz.",
22 "import.notSupportedHeadline" : "Ces services ne sont pas encore supportés par Franz 5", 22 "import.notSupportedHeadline" : "Ces services ne sont pas encore supportés par la version 5 de Franz",
23 "import.skip.label" : "Je veux ajouter des services manuellement", 23 "import.skip.label" : "Je veux ajouter des services manuellement",
24 "import.submit.label" : "Importer des services", 24 "import.submit.label" : "Importer des services",
25 "infobar.buttonChangelog" : "Nouveautés", 25 "infobar.buttonChangelog" : "Nouveautés",
@@ -27,7 +27,7 @@
27 "infobar.buttonReloadServices" : "Recharger les services", 27 "infobar.buttonReloadServices" : "Recharger les services",
28 "infobar.requiredRequestsFailed" : "Impossible d'accéder aux services et informations de l'utilisateur", 28 "infobar.requiredRequestsFailed" : "Impossible d'accéder aux services et informations de l'utilisateur",
29 "infobar.servicesUpdated" : "Vos services ont été mis à jour.", 29 "infobar.servicesUpdated" : "Vos services ont été mis à jour.",
30 "infobar.updateAvailable" : "Une nouvelle mise à jour pour Franz est disponible.", 30 "infobar.updateAvailable" : "Une nouvelle mise à jour de Franz est disponible.",
31 "invite.email.label" : "Adresse Email", 31 "invite.email.label" : "Adresse Email",
32 "invite.headline.friends" : "Invitez 3 amis ou collègues", 32 "invite.headline.friends" : "Invitez 3 amis ou collègues",
33 "invite.name.label" : "Nom", 33 "invite.name.label" : "Nom",
@@ -44,7 +44,7 @@
44 "login.submit.label" : "Se connecter", 44 "login.submit.label" : "Se connecter",
45 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", 45 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.",
46 "menu.app.about" : "À propos de Franz", 46 "menu.app.about" : "À propos de Franz",
47 "menu.app.announcement" : "Quoi de neuf? ", 47 "menu.app.announcement" : "Quoi de neuf ? ",
48 "menu.app.checkForUpdates" : "Vérifier les mises à jour", 48 "menu.app.checkForUpdates" : "Vérifier les mises à jour",
49 "menu.app.hide" : "Masquer", 49 "menu.app.hide" : "Masquer",
50 "menu.app.hideOthers" : "Masquer les autres", 50 "menu.app.hideOthers" : "Masquer les autres",
@@ -70,7 +70,7 @@
70 "menu.help.changelog" : "Liste des modifications", 70 "menu.help.changelog" : "Liste des modifications",
71 "menu.help.learnMore" : "En savoir plus", 71 "menu.help.learnMore" : "En savoir plus",
72 "menu.help.privacy" : "Déclaration de confidentialité", 72 "menu.help.privacy" : "Déclaration de confidentialité",
73 "menu.help.support" : "Support", 73 "menu.help.support" : "Assistance",
74 "menu.help.tos" : "Conditions d'utilisation", 74 "menu.help.tos" : "Conditions d'utilisation",
75 "menu.services" : "Services", 75 "menu.services" : "Services",
76 "menu.services.activatePreviousService" : "Activer le service précédent", 76 "menu.services.activatePreviousService" : "Activer le service précédent",
@@ -79,9 +79,9 @@
79 "menu.view" : "Aperçu", 79 "menu.view" : "Aperçu",
80 "menu.view.enterFullScreen" : "Entrer en mode plein écran", 80 "menu.view.enterFullScreen" : "Entrer en mode plein écran",
81 "menu.view.exitFullScreen" : "Sortir du mode plein écran", 81 "menu.view.exitFullScreen" : "Sortir du mode plein écran",
82 "menu.view.reloadFranz" : "Actualiser Franz", 82 "menu.view.reloadFranz" : "Recharger Franz",
83 "menu.view.reloadService" : "Redémarrer le service", 83 "menu.view.reloadService" : "Redémarrer le service",
84 "menu.view.resetZoom" : "Taille réelle", 84 "menu.view.resetZoom" : "Taille actuelle",
85 "menu.view.toggleDevTools" : "Activer les outils développeur", 85 "menu.view.toggleDevTools" : "Activer les outils développeur",
86 "menu.view.toggleFullScreen" : "Activer \/ désactiver le mode plein écran", 86 "menu.view.toggleFullScreen" : "Activer \/ désactiver le mode plein écran",
87 "menu.view.toggleServiceDevTools" : "Activer les outils de développement WebKit", 87 "menu.view.toggleServiceDevTools" : "Activer les outils de développement WebKit",
@@ -102,7 +102,7 @@
102 "password.noUser" : "Aucun utilisateur n'a été trouvé avec cette adresse email", 102 "password.noUser" : "Aucun utilisateur n'a été trouvé avec cette adresse email",
103 "password.submit.label" : "Soumettre", 103 "password.submit.label" : "Soumettre",
104 "password.successInfo" : "Merci de consulter vos emails", 104 "password.successInfo" : "Merci de consulter vos emails",
105 "premiumFeature.button.upgradeAccount" : "Mettre à niveau mon compte", 105 "premiumFeature.button.upgradeAccount" : "Augmenter le niveau de mon compte",
106 "pricing.headline" : "Soutenez Franz", 106 "pricing.headline" : "Soutenez Franz",
107 "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.", 107 "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.",
108 "pricing.submit.label" : "Je veux soutenir le développement de Franz", 108 "pricing.submit.label" : "Je veux soutenir le développement de Franz",
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
index 701568b1c..43e0da91a 100644
--- a/src/i18n/locales/hu.json
+++ b/src/i18n/locales/hu.json
@@ -8,7 +8,7 @@
8 "feature.shareFranz.action.email" : "Küldés email-ben", 8 "feature.shareFranz.action.email" : "Küldés email-ben",
9 "feature.shareFranz.action.facebook" : "Megosztás Facebook-on", 9 "feature.shareFranz.action.facebook" : "Megosztás Facebook-on",
10 "feature.shareFranz.action.twitter" : "Megosztás Twitter-en", 10 "feature.shareFranz.action.twitter" : "Megosztás Twitter-en",
11 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "A Franz barátokkal együtt mégjobb!",
12 "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", 12 "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com",
13 "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", 13 "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger",
14 "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.",
@@ -44,7 +44,7 @@
44 "login.submit.label" : "Bejelentkezés", 44 "login.submit.label" : "Bejelentkezés",
45 "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.", 45 "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.",
46 "menu.app.about" : "Névjegy", 46 "menu.app.about" : "Névjegy",
47 "menu.app.announcement" : "What's new?", 47 "menu.app.announcement" : "Mi újság?",
48 "menu.app.checkForUpdates" : "Frissítések keresése", 48 "menu.app.checkForUpdates" : "Frissítések keresése",
49 "menu.app.hide" : "Elrejt", 49 "menu.app.hide" : "Elrejt",
50 "menu.app.hideOthers" : "Többi elrejtése", 50 "menu.app.hideOthers" : "Többi elrejtése",
@@ -233,17 +233,17 @@
233 "settings.services.discoverServices" : "Szolgáltatások felfedezése", 233 "settings.services.discoverServices" : "Szolgáltatások felfedezése",
234 "settings.services.headline" : "Szolgáltatásaid", 234 "settings.services.headline" : "Szolgáltatásaid",
235 "settings.services.noServicesAdded" : "Még nem adtál hozzá egyetlen szolgáltatást sem eddig.", 235 "settings.services.noServicesAdded" : "Még nem adtál hozzá egyetlen szolgáltatást sem eddig.",
236 "settings.services.servicesRequestFailed" : "Could not load your services", 236 "settings.services.servicesRequestFailed" : "Szolgáltatásaid betöltése sikertelen",
237 "settings.services.tooltip.isDisabled" : "A szolgáltatás le van tiltva", 237 "settings.services.tooltip.isDisabled" : "A szolgáltatás le van tiltva",
238 "settings.services.tooltip.isMuted" : "Minden hang lenémítva", 238 "settings.services.tooltip.isMuted" : "Minden hang lenémítva",
239 "settings.services.tooltip.notificationsDisabled" : "Értesítések letiltva", 239 "settings.services.tooltip.notificationsDisabled" : "Értesítések letiltva",
240 "settings.services.updatedInfo" : "A módosításokat elmentettük", 240 "settings.services.updatedInfo" : "A módosításokat elmentettük",
241 "settings.team.contentHeadline" : "Franz for Teams", 241 "settings.team.contentHeadline" : "Franz for Teams",
242 "settings.team.copy" : "Franz for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", 242 "settings.team.copy" : "A Franz for Teams lehetőséget teremt arra, hogy meghívd munkatársaidat a csapatodba email-en keresztül, és kezelhesd a Franz előfizetéseiket és fiókbeállításaikat. Ne fecséreld az idődet minden egyes csapattag regisztrációjára, felejtsd el a sok-sok egyéni számlát és különböző lejárati időt - egy mindenek felett!",
243 "settings.team.headline" : "Csapat", 243 "settings.team.headline" : "Csapat",
244 "settings.team.intro" : "You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", 244 "settings.team.intro" : "Te és a csapatod Franz-ot használtok? Egy fiókból kezelheted kollégáid, barátaid vagy családtagjaid Prémium előfizetéseit.",
245 "settings.team.manageAction" : "Manage your Team on meetfranz.com", 245 "settings.team.manageAction" : "Csapat kezelése a meetfranz.com-on",
246 "settings.team.upgradeAction" : "Upgrade your Account", 246 "settings.team.upgradeAction" : "Előfizetés",
247 "settings.user.form.accountType.company" : "Cég", 247 "settings.user.form.accountType.company" : "Cég",
248 "settings.user.form.accountType.individual" : "Egyén", 248 "settings.user.form.accountType.individual" : "Egyén",
249 "settings.user.form.accountType.label" : "Fiók típusa", 249 "settings.user.form.accountType.label" : "Fiók típusa",
@@ -293,7 +293,7 @@
293 "subscription.features.onpremise.mattermost" : "Saját kiszolgálós szolgáltatások hozzáadása, pl.: Mattermost", 293 "subscription.features.onpremise.mattermost" : "Saját kiszolgálós szolgáltatások hozzáadása, pl.: Mattermost",
294 "subscription.features.proxy" : "Proxy támogatás a szolgáltatásokhoz", 294 "subscription.features.proxy" : "Proxy támogatás a szolgáltatásokhoz",
295 "subscription.features.spellchecker" : "Támogatás a Helyesírás-ellenőrzőhöz", 295 "subscription.features.spellchecker" : "Támogatás a Helyesírás-ellenőrzőhöz",
296 "subscription.features.workspaces" : "Organize your services in workspaces", 296 "subscription.features.workspaces" : "Rendezd szolgáltatásaidat Munkaterületekbe",
297 "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza", 297 "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza",
298 "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni", 298 "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni",
299 "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését", 299 "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését",
@@ -313,12 +313,12 @@
313 "tabs.item.reload" : "Újratöltés", 313 "tabs.item.reload" : "Újratöltés",
314 "validation.email" : "{field} nem érvényes", 314 "validation.email" : "{field} nem érvényes",
315 "validation.minLength" : "{field} mezőnek legalább {length} karakter hosszúnak kell lennie", 315 "validation.minLength" : "{field} mezőnek legalább {length} karakter hosszúnak kell lennie",
316 "validation.oneRequired" : "At least one is required", 316 "validation.oneRequired" : "Legalább egy kitöltése szükséges",
317 "validation.required" : "{field} kitöltése kötelező", 317 "validation.required" : "{field} kitöltése kötelező",
318 "validation.url" : "{field} nem érvényes URL", 318 "validation.url" : "{field} nem érvényes URL",
319 "welcome.loginButton" : "Jelentkezz be a fiókodba", 319 "welcome.loginButton" : "Jelentkezz be a fiókodba",
320 "welcome.signupButton" : "Új fiók létrehozása", 320 "welcome.signupButton" : "Új fiók létrehozása",
321 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace", 321 "workspaceDrawer.addNewWorkspaceLabel" : "Munkaterület hozzáadása",
322 "workspaceDrawer.allServices" : "Összes szolgáltatás", 322 "workspaceDrawer.allServices" : "Összes szolgáltatás",
323 "workspaceDrawer.headline" : "Munkaterületek", 323 "workspaceDrawer.headline" : "Munkaterületek",
324 "workspaceDrawer.item.contextMenuEdit" : "szerkeszt", 324 "workspaceDrawer.item.contextMenuEdit" : "szerkeszt",
@@ -326,7 +326,7 @@
326 "workspaceDrawer.premiumCtaButtonLabel" : "Készítsd el az első munkaterületedet", 326 "workspaceDrawer.premiumCtaButtonLabel" : "Készítsd el az első munkaterületedet",
327 "workspaceDrawer.proFeatureBadge" : "Prémium funkció", 327 "workspaceDrawer.proFeatureBadge" : "Prémium funkció",
328 "workspaceDrawer.reactivatePremiumAccountLabel" : "Prémium fiók reaktiválása", 328 "workspaceDrawer.reactivatePremiumAccountLabel" : "Prémium fiók reaktiválása",
329 "workspaceDrawer.workspaceFeatureInfo" : "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.<\/p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.<\/p>", 329 "workspaceDrawer.workspaceFeatureInfo" : "<p>A Franz Munkaterületek lehetÅ‘vé teszik, hogy összpontosíts a jelenleg fontos dolgokra. Ãllítsd be a különbözÅ‘ szolgáltatáskészleteket és könnyedén válthatsz közöttük bármikor.<\/p><p>Te döntöd el, hogy mely szolgáltatásokra van szükséged, mikor és hol, így segíthetünk abban, hogy a teljesítményed csúcsán maradhass, vagy ha csak akarod, egyszerűen kikapcsold a munkával kapcsolatos dolgokat.<\/p>",
330 "workspaceDrawer.workspacesSettingsTooltip" : "Munkaterület beállítások szerkesztése", 330 "workspaceDrawer.workspacesSettingsTooltip" : "Munkaterület beállítások szerkesztése",
331 "workspaces.switchingIndicator.switchingTo" : "Switching to" 331 "workspaces.switchingIndicator.switchingTo" : "Váltás"
332} 332}
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index 1eda8856f..83e207542 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -1,22 +1,22 @@
1{ 1{
2 "app.errorHandler.action" : "Herladen", 2 "app.errorHandler.action" : "Herladen",
3 "app.errorHandler.headline" : "Er ging iets mis", 3 "app.errorHandler.headline" : "Er ging iets mis",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}", 4 "feature.announcements.changelog.headline" : "Wijzigingen in Franz {versie}",
5 "feature.delayApp.action" : "Neem een Franz Supporter Licentie ", 5 "feature.delayApp.action" : "Neem een Franz Supporter Licentie ",
6 "feature.delayApp.headline" : "Neem een Franz Supporter Licentie om niet meer te hoeven wachten", 6 "feature.delayApp.headline" : "Neem een Franz Supporter Licentie om niet meer te hoeven wachten",
7 "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.", 7 "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.",
8 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Verstuur als e-mail",
9 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Deel op Facebook",
10 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Deel op Twitter",
11 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is beter samen!",
12 "feature.shareFranz.shareText.email" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", 12 "feature.shareFranz.shareText.email" : "Ik heb {telling} diensten toegevoegd aan Franz! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.meetfranz.com",
13 "feature.shareFranz.shareText.twitter" : "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com \/cc @FranzMessenger", 13 "feature.shareFranz.shareText.twitter" : "Ik heb {tel} diensten toegevoegd aan Franz! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.meetfranz.com \/cc @FranzMessenger",
14 "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "Vertel je vrienden en collega's hoe geweldig Franz is en help ons het woord te verspreiden.",
15 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services", 15 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services",
16 "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.", 16 "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.",
17 "global.spellchecker.useDefault" : "Gebruik Systeemstandaard ({default})", 17 "global.spellchecker.useDefault" : "Gebruik Systeemstandaard ({default})",
18 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "Taal automatisch herkennen",
19 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "Automatisch",
20 "global.spellchecking.language" : "Taal spellingscontrole", 20 "global.spellchecking.language" : "Taal spellingscontrole",
21 "import.headline" : "Importeer je Franz 4 services", 21 "import.headline" : "Importeer je Franz 4 services",
22 "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5", 22 "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5",
@@ -44,7 +44,7 @@
44 "login.submit.label" : "Inloggen", 44 "login.submit.label" : "Inloggen",
45 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", 45 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
46 "menu.app.about" : "Over Franz", 46 "menu.app.about" : "Over Franz",
47 "menu.app.announcement" : "What's new?", 47 "menu.app.announcement" : "Wat is er nieuw?",
48 "menu.app.checkForUpdates" : "Controleer op updates", 48 "menu.app.checkForUpdates" : "Controleer op updates",
49 "menu.app.hide" : "Verbergen", 49 "menu.app.hide" : "Verbergen",
50 "menu.app.hideOthers" : "Andere Verbergen", 50 "menu.app.hideOthers" : "Andere Verbergen",
@@ -73,9 +73,9 @@
73 "menu.help.support" : "Ondersteuning", 73 "menu.help.support" : "Ondersteuning",
74 "menu.help.tos" : "Servicevoorwaarden", 74 "menu.help.tos" : "Servicevoorwaarden",
75 "menu.services" : "Services", 75 "menu.services" : "Services",
76 "menu.services.activatePreviousService" : "Activate previous service", 76 "menu.services.activatePreviousService" : "Vorige dienst activeren",
77 "menu.services.addNewService" : "Nieuwe service toevoegen...", 77 "menu.services.addNewService" : "Nieuwe service toevoegen...",
78 "menu.services.setNextServiceActive" : "Activate next service", 78 "menu.services.setNextServiceActive" : "Volgende dienst activeren",
79 "menu.view" : "Weergave", 79 "menu.view" : "Weergave",
80 "menu.view.enterFullScreen" : "Volledig scherm openen", 80 "menu.view.enterFullScreen" : "Volledig scherm openen",
81 "menu.view.exitFullScreen" : "Volledig scherm verlaten", 81 "menu.view.exitFullScreen" : "Volledig scherm verlaten",
@@ -90,11 +90,11 @@
90 "menu.window" : "Venster", 90 "menu.window" : "Venster",
91 "menu.window.close" : "Sluiten", 91 "menu.window.close" : "Sluiten",
92 "menu.window.minimize" : "Minimaliseren", 92 "menu.window.minimize" : "Minimaliseren",
93 "menu.workspaces" : "Workspaces", 93 "menu.workspaces" : "Werkruimten",
94 "menu.workspaces.addNewWorkspace" : "Add New Workspace...", 94 "menu.workspaces.addNewWorkspace" : "Voeg nieuwe werkruimte toe...",
95 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer", 95 "menu.workspaces.closeWorkspaceDrawer" : "Werkruimtepagina sluiten",
96 "menu.workspaces.defaultWorkspace" : "Alle services", 96 "menu.workspaces.defaultWorkspace" : "Alle services",
97 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer", 97 "menu.workspaces.openWorkspaceDrawer" : "Werkruimtepagina openen",
98 "password.email.label" : "E-mailadres", 98 "password.email.label" : "E-mailadres",
99 "password.headline" : "Wachtwoord resetten", 99 "password.headline" : "Wachtwoord resetten",
100 "password.link.login" : "Log in op je account", 100 "password.link.login" : "Log in op je account",
@@ -118,7 +118,7 @@
118 "service.errorHandler.headline" : "Oh nee!", 118 "service.errorHandler.headline" : "Oh nee!",
119 "service.errorHandler.message" : "Fout", 119 "service.errorHandler.message" : "Fout",
120 "service.errorHandler.text" : "{name} kon niet geladen worden.", 120 "service.errorHandler.text" : "{name} kon niet geladen worden.",
121 "service.webviewLoader.loading" : "Loading", 121 "service.webviewLoader.loading" : "Aan het laden",
122 "services.getStarted" : "Beginnen", 122 "services.getStarted" : "Beginnen",
123 "services.welcome" : "Welkom bij Franz", 123 "services.welcome" : "Welkom bij Franz",
124 "settings.account.account.editButton" : "Account bewerken", 124 "settings.account.account.editButton" : "Account bewerken",
@@ -165,7 +165,7 @@
165 "settings.app.headlineGeneral" : "Algemeen", 165 "settings.app.headlineGeneral" : "Algemeen",
166 "settings.app.headlineLanguage" : "Taal", 166 "settings.app.headlineLanguage" : "Taal",
167 "settings.app.headlineUpdates" : "Updates", 167 "settings.app.headlineUpdates" : "Updates",
168 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.", 168 "settings.app.languageDisclaimer" : "Officiële vertalingen zijn in het Engels en Duits. Alle andere tallen zijn op de gemeenschap gebaseerde vertalingen.",
169 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig", 169 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig",
170 "settings.app.subheadlineCache" : "Cache", 170 "settings.app.subheadlineCache" : "Cache",
171 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.", 171 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.",
@@ -178,10 +178,10 @@
178 "settings.navigation.inviteFriends" : "Nodig vrienden uit", 178 "settings.navigation.inviteFriends" : "Nodig vrienden uit",
179 "settings.navigation.logout" : "Uitloggen", 179 "settings.navigation.logout" : "Uitloggen",
180 "settings.navigation.settings" : "Instellingen", 180 "settings.navigation.settings" : "Instellingen",
181 "settings.navigation.team" : "Manage Team", 181 "settings.navigation.team" : "Beheer Team",
182 "settings.navigation.yourServices" : "Jouw services", 182 "settings.navigation.yourServices" : "Jouw services",
183 "settings.navigation.yourWorkspaces" : "Your workspaces", 183 "settings.navigation.yourWorkspaces" : "Jouw werkruimtes",
184 "settings.recipes.all" : "Alle services", 184 "settings.recipes.all" : "Alle diensten",
185 "settings.recipes.dev" : "Ontwikkeling", 185 "settings.recipes.dev" : "Ontwikkeling",
186 "settings.recipes.headline" : "Beschikbare services", 186 "settings.recipes.headline" : "Beschikbare services",
187 "settings.recipes.missingService" : "Mist er een service?", 187 "settings.recipes.missingService" : "Mist er een service?",
@@ -233,17 +233,17 @@
233 "settings.services.discoverServices" : "Services ontdekken", 233 "settings.services.discoverServices" : "Services ontdekken",
234 "settings.services.headline" : "Jouw services", 234 "settings.services.headline" : "Jouw services",
235 "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.", 235 "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.",
236 "settings.services.servicesRequestFailed" : "Could not load your services", 236 "settings.services.servicesRequestFailed" : "Kan je diensten niet laden",
237 "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld", 237 "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld",
238 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld", 238 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld",
239 "settings.services.tooltip.notificationsDisabled" : "Notificaties staan uit", 239 "settings.services.tooltip.notificationsDisabled" : "Notificaties staan uit",
240 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen", 240 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen",
241 "settings.team.contentHeadline" : "Franz for Teams", 241 "settings.team.contentHeadline" : "Frans voor Teams",
242 "settings.team.copy" : "Franz for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", 242 "settings.team.copy" : "Franz voor Teams geeft je de mogelijkheid om collega's uit te nodigen voor je team door hen een e-mail te sturen en hun inschrijvingen te beheren in je accountvoorkeuren. Verspil geen tijd met het instellen van inschrijvingen voor elk teamlid apart, vergeet meerdere facturen en verschillende afrekeningsperiodes - één team regeert alles!",
243 "settings.team.headline" : "Team", 243 "settings.team.headline" : "Team",
244 "settings.team.intro" : "You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", 244 "settings.team.intro" : "Gebruiken jij en je team Franz? Je kunt nu Premium inschrijvingen beheren voor zoveel collega's, vrienden, of familieleden als je wilt, allemaal vanaf één account.",
245 "settings.team.manageAction" : "Manage your Team on meetfranz.com", 245 "settings.team.manageAction" : "Beheer je Team op meetfranz.com",
246 "settings.team.upgradeAction" : "Upgrade your Account", 246 "settings.team.upgradeAction" : "Upgrade je Account",
247 "settings.user.form.accountType.company" : "Bedrijf", 247 "settings.user.form.accountType.company" : "Bedrijf",
248 "settings.user.form.accountType.individual" : "Particulier", 248 "settings.user.form.accountType.individual" : "Particulier",
249 "settings.user.form.accountType.label" : "Account type", 249 "settings.user.form.accountType.label" : "Account type",
@@ -254,24 +254,24 @@
254 "settings.user.form.lastname" : "Achternaam", 254 "settings.user.form.lastname" : "Achternaam",
255 "settings.user.form.newPassword" : "Nieuw wachtwoord", 255 "settings.user.form.newPassword" : "Nieuw wachtwoord",
256 "settings.workspace.add.form.name" : "Naam", 256 "settings.workspace.add.form.name" : "Naam",
257 "settings.workspace.add.form.submitButton" : "Create workspace", 257 "settings.workspace.add.form.submitButton" : "Maak werkruimte aan",
258 "settings.workspace.form.buttonDelete" : "Delete workspace", 258 "settings.workspace.form.buttonDelete" : "Verwijder werkruimte",
259 "settings.workspace.form.buttonSave" : "Save workspace", 259 "settings.workspace.form.buttonSave" : "Bewaar werkruimte",
260 "settings.workspace.form.name" : "Naam", 260 "settings.workspace.form.name" : "Naam",
261 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace", 261 "settings.workspace.form.servicesInWorkspaceHeadline" : "Diensten in deze Werkruimte",
262 "settings.workspace.form.yourWorkspaces" : "Your workspaces", 262 "settings.workspace.form.yourWorkspaces" : "Jouw werkruimtes",
263 "settings.workspaces.deletedInfo" : "Workspace has been deleted", 263 "settings.workspaces.deletedInfo" : "Werkruimte is verwijderd",
264 "settings.workspaces.headline" : "Your workspaces", 264 "settings.workspaces.headline" : "Je werkruimtes",
265 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.", 265 "settings.workspaces.noWorkspacesAdded" : "Je hebt nog geen werkruimtes toegevoegd.",
266 "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw", 266 "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw",
267 "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen", 267 "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen",
268 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces", 268 "settings.workspaces.workspaceFeatureHeadline" : "Minder is meer: we presenteren Franz Werkruimtes",
269 "settings.workspaces.workspaceFeatureInfo" : "Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.", 269 "settings.workspaces.workspaceFeatureInfo" : "Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.",
270 "settings.workspaces.workspacesRequestFailed" : "Could not load your workspaces", 270 "settings.workspaces.workspacesRequestFailed" : "Kan je werkruimtes niet laden",
271 "sidebar.addNewService" : "Nieuw service toevoegen", 271 "sidebar.addNewService" : "Nieuw service toevoegen",
272 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer", 272 "sidebar.closeWorkspaceDrawer" : "Werkruimtelade sluiten",
273 "sidebar.muteApp" : "Berichten & geluid uitschakelen", 273 "sidebar.muteApp" : "Berichten & geluid uitschakelen",
274 "sidebar.openWorkspaceDrawer" : "Open workspace drawer", 274 "sidebar.openWorkspaceDrawer" : "Werkruimtelade openen",
275 "sidebar.settings" : "Instellingen", 275 "sidebar.settings" : "Instellingen",
276 "sidebar.unmuteApp" : "Berichten & geluid inschakelen", 276 "sidebar.unmuteApp" : "Berichten & geluid inschakelen",
277 "signup.company.label" : "Bedrijf", 277 "signup.company.label" : "Bedrijf",
@@ -293,7 +293,7 @@
293 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe", 293 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe",
294 "subscription.features.proxy" : "Proxy ondersteuning voor services", 294 "subscription.features.proxy" : "Proxy ondersteuning voor services",
295 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck", 295 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck",
296 "subscription.features.workspaces" : "Organize your services in workspaces", 296 "subscription.features.workspaces" : "Organiseer je diensten in werkruimtes",
297 "subscription.includedFeatures" : "Een betalend account voor Franz omvat", 297 "subscription.includedFeatures" : "Een betalend account voor Franz omvat",
298 "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden", 298 "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden",
299 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen", 299 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen",
@@ -313,20 +313,20 @@
313 "tabs.item.reload" : "Herladen", 313 "tabs.item.reload" : "Herladen",
314 "validation.email" : "{field} is niet geldig", 314 "validation.email" : "{field} is niet geldig",
315 "validation.minLength" : "{field} moet minimaal {length} karakters lang zijn", 315 "validation.minLength" : "{field} moet minimaal {length} karakters lang zijn",
316 "validation.oneRequired" : "At least one is required", 316 "validation.oneRequired" : "Ten minste één is vereist",
317 "validation.required" : "{field} is vereist", 317 "validation.required" : "{field} is vereist",
318 "validation.url" : "{field} is niet een geldige URL", 318 "validation.url" : "{field} is niet een geldige URL",
319 "welcome.loginButton" : "Inloggen op je account", 319 "welcome.loginButton" : "Inloggen op je account",
320 "welcome.signupButton" : "Maak een gratis account aan", 320 "welcome.signupButton" : "Maak een gratis account aan",
321 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace", 321 "workspaceDrawer.addNewWorkspaceLabel" : "Voeg een nieuwe werkruimte toe",
322 "workspaceDrawer.allServices" : "Alle services", 322 "workspaceDrawer.allServices" : "Alle diensten",
323 "workspaceDrawer.headline" : "Workspaces", 323 "workspaceDrawer.headline" : "Werkruimtes",
324 "workspaceDrawer.item.contextMenuEdit" : "edit", 324 "workspaceDrawer.item.contextMenuEdit" : "bewerken",
325 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet", 325 "workspaceDrawer.item.noServicesAddedYet" : "Nog geen diensten toegevoegd",
326 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace", 326 "workspaceDrawer.premiumCtaButtonLabel" : "Maak je eerste werkruimte aan",
327 "workspaceDrawer.proFeatureBadge" : "Premium feature", 327 "workspaceDrawer.proFeatureBadge" : "Premium feature",
328 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account", 328 "workspaceDrawer.reactivatePremiumAccountLabel" : "Heractiveer premium account",
329 "workspaceDrawer.workspaceFeatureInfo" : "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.<\/p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.<\/p>", 329 "workspaceDrawer.workspaceFeatureInfo" : "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.<\/p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.<\/p>",
330 "workspaceDrawer.workspacesSettingsTooltip" : "Edit workspaces settings", 330 "workspaceDrawer.workspacesSettingsTooltip" : "Pas werkruimte instellingen aan",
331 "workspaces.switchingIndicator.switchingTo" : "Switching to" 331 "workspaces.switchingIndicator.switchingTo" : "Overschakelen naar"
332} 332}
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index fdb96a7db..a05297a64 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -165,7 +165,7 @@
165 "settings.app.headlineGeneral" : "Algemeen", 165 "settings.app.headlineGeneral" : "Algemeen",
166 "settings.app.headlineLanguage" : "Taal", 166 "settings.app.headlineLanguage" : "Taal",
167 "settings.app.headlineUpdates" : "Updates", 167 "settings.app.headlineUpdates" : "Updates",
168 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.", 168 "settings.app.languageDisclaimer" : "Officiële vertalingen zijn in het Engels en Duits. Alle andere talen zijn beheerd door de community.",
169 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig", 169 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig",
170 "settings.app.subheadlineCache" : "Cache", 170 "settings.app.subheadlineCache" : "Cache",
171 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.", 171 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.",
@@ -178,9 +178,9 @@
178 "settings.navigation.inviteFriends" : "Nodig vrienden uit", 178 "settings.navigation.inviteFriends" : "Nodig vrienden uit",
179 "settings.navigation.logout" : "Uitloggen", 179 "settings.navigation.logout" : "Uitloggen",
180 "settings.navigation.settings" : "Instellingen", 180 "settings.navigation.settings" : "Instellingen",
181 "settings.navigation.team" : "Manage Team", 181 "settings.navigation.team" : "Beheer Team",
182 "settings.navigation.yourServices" : "Jouw services", 182 "settings.navigation.yourServices" : "Jouw services",
183 "settings.navigation.yourWorkspaces" : "Your workspaces", 183 "settings.navigation.yourWorkspaces" : "Jouw werkruimtes",
184 "settings.recipes.all" : "Alle services", 184 "settings.recipes.all" : "Alle services",
185 "settings.recipes.dev" : "Ontwikkeling", 185 "settings.recipes.dev" : "Ontwikkeling",
186 "settings.recipes.headline" : "Beschikbare services", 186 "settings.recipes.headline" : "Beschikbare services",
@@ -233,17 +233,17 @@
233 "settings.services.discoverServices" : "Ontdek services", 233 "settings.services.discoverServices" : "Ontdek services",
234 "settings.services.headline" : "Jouw services", 234 "settings.services.headline" : "Jouw services",
235 "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.", 235 "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.",
236 "settings.services.servicesRequestFailed" : "Could not load your services", 236 "settings.services.servicesRequestFailed" : "Kan jouw diensten niet laden",
237 "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld", 237 "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld",
238 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld", 238 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld",
239 "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld", 239 "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld",
240 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen", 240 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen",
241 "settings.team.contentHeadline" : "Franz voor groepen", 241 "settings.team.contentHeadline" : "Franz voor groepen",
242 "settings.team.copy" : "Franz for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!", 242 "settings.team.copy" : "Franz voor Teams geeft je de mogelijkheid om collega's uit te nodigen voor je team door hen een e-mail te sturen en hun inschrijvingen te beheren in je accountvoorkeuren. Verspil geen tijd met het instellen van inschrijvingen voor elk teamlid apart, vergeet meerdere facturen en verschillende afrekeningsperiodes - één team regeert alles!",
243 "settings.team.headline" : "Team", 243 "settings.team.headline" : "Team",
244 "settings.team.intro" : "You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.", 244 "settings.team.intro" : "Gebruiken jij en je team Franz? Je kunt nu Premium inschrijvingen beheren voor zoveel collega's, vrienden, of familieleden als je wilt, allemaal vanaf één account.",
245 "settings.team.manageAction" : "Manage your Team on meetfranz.com", 245 "settings.team.manageAction" : "Beheer je Team op meetfranz.com",
246 "settings.team.upgradeAction" : "Upgrade your Account", 246 "settings.team.upgradeAction" : "Jouw Account opwaarderen",
247 "settings.user.form.accountType.company" : "Bedrijf", 247 "settings.user.form.accountType.company" : "Bedrijf",
248 "settings.user.form.accountType.individual" : "Individueel", 248 "settings.user.form.accountType.individual" : "Individueel",
249 "settings.user.form.accountType.label" : "Accounttype", 249 "settings.user.form.accountType.label" : "Accounttype",
@@ -254,24 +254,24 @@
254 "settings.user.form.lastname" : "Achternaam", 254 "settings.user.form.lastname" : "Achternaam",
255 "settings.user.form.newPassword" : "Nieuw wachtwoord", 255 "settings.user.form.newPassword" : "Nieuw wachtwoord",
256 "settings.workspace.add.form.name" : "Naam", 256 "settings.workspace.add.form.name" : "Naam",
257 "settings.workspace.add.form.submitButton" : "Create workspace", 257 "settings.workspace.add.form.submitButton" : "Maak werkruimte aan",
258 "settings.workspace.form.buttonDelete" : "Delete workspace", 258 "settings.workspace.form.buttonDelete" : "Verwijder werkruimte",
259 "settings.workspace.form.buttonSave" : "Save workspace", 259 "settings.workspace.form.buttonSave" : "Sla werkruimte op",
260 "settings.workspace.form.name" : "Naam", 260 "settings.workspace.form.name" : "Naam",
261 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace", 261 "settings.workspace.form.servicesInWorkspaceHeadline" : "Diensten in deze werkruimte",
262 "settings.workspace.form.yourWorkspaces" : "Jouw werkruimtes", 262 "settings.workspace.form.yourWorkspaces" : "Jouw werkruimtes",
263 "settings.workspaces.deletedInfo" : "Werkruimte is verwijderd", 263 "settings.workspaces.deletedInfo" : "Werkruimte is verwijderd",
264 "settings.workspaces.headline" : "Jouw werkplaatsen", 264 "settings.workspaces.headline" : "Jouw werkplaatsen",
265 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.", 265 "settings.workspaces.noWorkspacesAdded" : "Je hebt nog geen werkruimtes toegevoegd.",
266 "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw", 266 "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw",
267 "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen", 267 "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen",
268 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces", 268 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Zie hier Franz Werkruimtes",
269 "settings.workspaces.workspaceFeatureInfo" : "Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.", 269 "settings.workspaces.workspaceFeatureInfo" : "Franz werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van diensten aan en schakel gelijk wanneer tussen de verschillende sets.Jij beslist welke diensten je wanneer en waar nodig hebt, enkel zo kunnen wij jou helpen je focus te behouden. Of net makkelijk de switch te maken van werk naar ontspanning.",
270 "settings.workspaces.workspacesRequestFailed" : "Could not load your workspaces", 270 "settings.workspaces.workspacesRequestFailed" : "Kan jouw werkruimtes niet laden",
271 "sidebar.addNewService" : "Voeg service toe", 271 "sidebar.addNewService" : "Voeg service toe",
272 "sidebar.closeWorkspaceDrawer" : "Werkruimtepagina sluiten", 272 "sidebar.closeWorkspaceDrawer" : "Werkruimte pagina sluiten",
273 "sidebar.muteApp" : "Schakel berichten & geluid uit", 273 "sidebar.muteApp" : "Schakel berichten & geluid uit",
274 "sidebar.openWorkspaceDrawer" : "Werkruimtepagina openen", 274 "sidebar.openWorkspaceDrawer" : "Werkruimte pagina openen",
275 "sidebar.settings" : "Instellingen", 275 "sidebar.settings" : "Instellingen",
276 "sidebar.unmuteApp" : "Berichten & geluid inschakelen", 276 "sidebar.unmuteApp" : "Berichten & geluid inschakelen",
277 "signup.company.label" : "Bedrijf", 277 "signup.company.label" : "Bedrijf",
@@ -293,7 +293,7 @@
293 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe", 293 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe",
294 "subscription.features.proxy" : "Proxy understeuning voor diensten", 294 "subscription.features.proxy" : "Proxy understeuning voor diensten",
295 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck", 295 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck",
296 "subscription.features.workspaces" : "Organize your services in workspaces", 296 "subscription.features.workspaces" : "Beheer je diensten in de werkruimtes",
297 "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat", 297 "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat",
298 "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren", 298 "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren",
299 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen", 299 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen",
@@ -313,20 +313,20 @@
313 "tabs.item.reload" : "Herladen", 313 "tabs.item.reload" : "Herladen",
314 "validation.email" : "{field} is niet geldig", 314 "validation.email" : "{field} is niet geldig",
315 "validation.minLength" : "{field} moet minimaal {length} karakters lang zijn", 315 "validation.minLength" : "{field} moet minimaal {length} karakters lang zijn",
316 "validation.oneRequired" : "At least one is required", 316 "validation.oneRequired" : "Er is op zijn minst één vereist",
317 "validation.required" : "{field} is vereist", 317 "validation.required" : "{field} is vereist",
318 "validation.url" : "{field} is niet een geldige URL", 318 "validation.url" : "{field} is niet een geldige URL",
319 "welcome.loginButton" : "Log in op je account", 319 "welcome.loginButton" : "Log in op je account",
320 "welcome.signupButton" : "Maak een gratis account", 320 "welcome.signupButton" : "Maak een gratis account",
321 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace", 321 "workspaceDrawer.addNewWorkspaceLabel" : "Voeg een nieuwe werkruimte toe",
322 "workspaceDrawer.allServices" : "Alle services", 322 "workspaceDrawer.allServices" : "Alle diensten",
323 "workspaceDrawer.headline" : "Werkruimtes", 323 "workspaceDrawer.headline" : "Werkruimtes",
324 "workspaceDrawer.item.contextMenuEdit" : "edit", 324 "workspaceDrawer.item.contextMenuEdit" : "bewerken",
325 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet", 325 "workspaceDrawer.item.noServicesAddedYet" : "Nog geen diensten toegevoegd",
326 "workspaceDrawer.premiumCtaButtonLabel" : "Maak je eerste werkruimte", 326 "workspaceDrawer.premiumCtaButtonLabel" : "Maak je eerste werkruimte",
327 "workspaceDrawer.proFeatureBadge" : "Premium feature", 327 "workspaceDrawer.proFeatureBadge" : "Premium feature",
328 "workspaceDrawer.reactivatePremiumAccountLabel" : "Heractiveer premium account", 328 "workspaceDrawer.reactivatePremiumAccountLabel" : "Heractiveer premium account",
329 "workspaceDrawer.workspaceFeatureInfo" : "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.<\/p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.<\/p>", 329 "workspaceDrawer.workspaceFeatureInfo" : "<p>Franz werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van diensten aan en schakel gelijk wanneer tussen de verschillende sets.<\/p><p>Jij beslist welke diensten je wanneer en waar nodig hebt, enkel zo kunnen wij jou helpen je focus te behouden. Of net makkelijk de switch te maken van werk naar ontspanning.<\/p>",
330 "workspaceDrawer.workspacesSettingsTooltip" : "Edit workspaces settings", 330 "workspaceDrawer.workspacesSettingsTooltip" : "Pas werkruimte instellingen aan",
331 "workspaces.switchingIndicator.switchingTo" : "Switching to" 331 "workspaces.switchingIndicator.switchingTo" : "Overschakelen naar"
332} 332}
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index a5d1ea377..5ade8a5a9 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -1,35 +1,35 @@
1{ 1{
2 "app.errorHandler.action" : "Prz‚aduj", 2 "app.errorHandler.action" : "OdÅ›wi¼",
3 "app.errorHandler.headline" : "Coś poszło nie tak", 3 "app.errorHandler.headline" : "Coś poszło nie tak.",
4 "feature.announcements.changelog.headline" : "Zmiany we Franzie {version}", 4 "feature.announcements.changelog.headline" : "Zmiany we Franzie {version}",
5 "feature.delayApp.action" : "Uzyskaj licencjÄ™ Franz Supporter", 5 "feature.delayApp.action" : "Uzyskaj licencjÄ™ Franz Supporter",
6 "feature.delayApp.headline" : "Aby nie czekać kup licencję Franz Supporter", 6 "feature.delayApp.headline" : "Aby nie czekać, kup licencję Franz Supporter",
7 "feature.delayApp.text" : "Franz będzie kontynuował za {seconds} sekund.", 7 "feature.delayApp.text" : "Franz będzie kontynuował za {seconds} sekund.",
8 "feature.shareFranz.action.email" : "Wyślij jako email", 8 "feature.shareFranz.action.email" : "Wyślij jako email",
9 "feature.shareFranz.action.facebook" : "Udostępnij na Facebooku", 9 "feature.shareFranz.action.facebook" : "Udostępnij na Facebooku",
10 "feature.shareFranz.action.twitter" : "Udostępnij na Twitterze", 10 "feature.shareFranz.action.twitter" : "Udostępnij na Twitterze",
11 "feature.shareFranz.headline" : "Franz jest lepszy, gdy tworzymy go razem!", 11 "feature.shareFranz.headline" : "Franz jest lepszy, gdy tworzymy go razem!",
12 "feature.shareFranz.shareText.email" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikacją WhatsApp, Messenger, Slack, Skype i inne na www.meetfranz.com", 12 "feature.shareFranz.shareText.email" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikację z WhatsApp, Messenger, Slack, Skype i innymi na www.meetfranz.com",
13 "feature.shareFranz.shareText.twitter" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikacją WhatsApp, Messenger, Slack, Skype i inne na www.meetfranz.com \/cc @FranzMessenger", 13 "feature.shareFranz.shareText.twitter" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikację z WhatsApp, Messenger, Slack, Skype i innymi na www.meetfranz.com \/cc @FranzMessenger",
14 "feature.shareFranz.text" : "Powiedz znajomym i kolegom o tym, jak odlotowy jest Franz i pomóż nam go spopularyzować.", 14 "feature.shareFranz.text" : "Powiedz znajomym i kolegom o tym, jak odlotowy jest Franz i pomóż nam go spopularyzować.",
15 "global.api.unhealthy" : "Nie można połączyć się z usługami Franz online", 15 "global.api.unhealthy" : "Nie można połączyć się z usługami Franz online",
16 "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.", 16 "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.",
17 "global.spellchecker.useDefault" : "Użyj domyślnego dla systemu ({default})", 17 "global.spellchecker.useDefault" : "Użyj domyślnego dla systemu ({default})",
18 "global.spellchecking.autodetect" : "Automatycznie wykryj język", 18 "global.spellchecking.autodetect" : "Automatycznie wykryj język",
19 "global.spellchecking.autodetect.short" : "Automatycznie", 19 "global.spellchecking.autodetect.short" : "Automatycznie",
20 "global.spellchecking.language" : "Język słownika", 20 "global.spellchecking.language" : "Język sprawdzania pisowni",
21 "import.headline" : "Importuj usługi Franz 4", 21 "import.headline" : "Importuj usługi Franz 4",
22 "import.notSupportedHeadline" : "Usługi, które nie są jeszcze obsługiwane w Franz 5", 22 "import.notSupportedHeadline" : "Usługi, które nie są jeszcze obsługiwane w Franz 5",
23 "import.skip.label" : "Chcę dodać usługi samodzielnie", 23 "import.skip.label" : "Chcę dodać usługi samodzielnie",
24 "import.submit.label" : "Zaimportuj usługi", 24 "import.submit.label" : "Zaimportuj usługi",
25 "infobar.buttonChangelog" : "Co nowego?", 25 "infobar.buttonChangelog" : "Co nowego?",
26 "infobar.buttonInstallUpdate" : "Uruchom ponownie i zainstaluj aktualizacjÄ™", 26 "infobar.buttonInstallUpdate" : "Uruchom ponownie i zainstaluj aktualizacjÄ™",
27 "infobar.buttonReloadServices" : "Załaduj ponownie usługi", 27 "infobar.buttonReloadServices" : "Odśwież usługi",
28 "infobar.requiredRequestsFailed" : "Nie można załadować usług i informacji użytkownika", 28 "infobar.requiredRequestsFailed" : "Nie można załadować usług i informacji użytkownika",
29 "infobar.servicesUpdated" : "Usługi zostały zaktualizowane.", 29 "infobar.servicesUpdated" : "Usługi zostały zaktualizowane.",
30 "infobar.updateAvailable" : "Dostępna jest nowa wersja Franza.", 30 "infobar.updateAvailable" : "Dostępna jest nowa wersja Franza.",
31 "invite.email.label" : "Adres email", 31 "invite.email.label" : "Adres email",
32 "invite.headline.friends" : "Zaproś 3 znajomych lub współpracowników", 32 "invite.headline.friends" : "Zaproś 3 znajomych lub kolegów",
33 "invite.name.label" : "ImiÄ™", 33 "invite.name.label" : "ImiÄ™",
34 "invite.skip.label" : "Chcę to zrobić później", 34 "invite.skip.label" : "Chcę to zrobić później",
35 "invite.submit.label" : "Wyślij zaproszenia", 35 "invite.submit.label" : "Wyślij zaproszenia",
@@ -37,7 +37,7 @@
37 "login.email.label" : "Adres email", 37 "login.email.label" : "Adres email",
38 "login.headline" : "Zaloguj siÄ™", 38 "login.headline" : "Zaloguj siÄ™",
39 "login.invalidCredentials" : "Adres email lub hasło są błędne", 39 "login.invalidCredentials" : "Adres email lub hasło są błędne",
40 "login.link.password" : "Przypomnij hasło", 40 "login.link.password" : "Zresetuj hasło",
41 "login.link.signup" : "Załóż darmowe konto", 41 "login.link.signup" : "Załóż darmowe konto",
42 "login.password.label" : "Hasło", 42 "login.password.label" : "Hasło",
43 "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.", 43 "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.",
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index 27fd796a4..60d74495e 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -1,23 +1,23 @@
1{ 1{
2 "app.errorHandler.action" : "Atualizar", 2 "app.errorHandler.action" : "Recarregar",
3 "app.errorHandler.headline" : "Alguma coisa deu errado", 3 "app.errorHandler.headline" : "Opa! Algo deu errado.",
4 "feature.announcements.changelog.headline" : "Mudanças no Franz {version}", 4 "feature.announcements.changelog.headline" : "Mudanças no Franz {version}",
5 "feature.delayApp.action" : "Adquira uma licença Franz Supporter", 5 "feature.delayApp.action" : "Adquira uma licença de suporte Franz",
6 "feature.delayApp.headline" : "Por favor, adquira uma licença Franz Supporter para pular o tempo de espera", 6 "feature.delayApp.headline" : "Por favor, adquira uma licença para pular o tempo de espera",
7 "feature.delayApp.text" : "Franz continuará em {seconds} segundos.", 7 "feature.delayApp.text" : "Franz continuará em {seconds} segundos.",
8 "feature.shareFranz.action.email" : "Enviar como e-mail", 8 "feature.shareFranz.action.email" : "Enviar por e-mail",
9 "feature.shareFranz.action.facebook" : "Compartilhar no Facebook", 9 "feature.shareFranz.action.facebook" : "Compartilhar no Facebook",
10 "feature.shareFranz.action.twitter" : "Compartilhar no Twitter", 10 "feature.shareFranz.action.twitter" : "Compartilhar no Twitter",
11 "feature.shareFranz.headline" : "Franz é melhor em grupo!", 11 "feature.shareFranz.headline" : "Franz é melhor em grupo!",
12 "feature.shareFranz.shareText.email" : "Eu adicionei {count} serviços ao Franz! Adquira o aplicativo gratuito para WhatsApp, Messenger, Slack, Skype e mais em www.meetfranz.com", 12 "feature.shareFranz.shareText.email" : "Eu adicionei {count} serviços ao Franz! Adquira o aplicativo gratuito para WhatsApp, Messenger, Slack, Skype e mais em www.meetfranz.com",
13 "feature.shareFranz.shareText.twitter" : "Eu adicionei uma contagem de serviços para o Franz! Baixe gratuitamente o aplicativo para WhatsApp, Messenger, Slack, Skype e outros em www.meetfranz.com \/cc @FranzMessenger", 13 "feature.shareFranz.shareText.twitter" : "Eu adicionei uma contagem de serviços para o Franz! Baixe gratuitamente o aplicativo para WhatsApp, Messenger, Slack, Skype e outros em www.meetfranz.com \/cc @FranzMessenger",
14 "feature.shareFranz.text" : "Conte aos seus amigos e colegas o quão incrível Franz é e nos ajude a espalhar a mensagem. ", 14 "feature.shareFranz.text" : "Conte aos seus amigos e colegas o quanto incrível o Franz é e nos ajude a espalhar a mensagem. ",
15 "global.api.unhealthy" : "Não foi possível conectar-se aos serviços on-line do Franz.", 15 "global.api.unhealthy" : "Não foi possível conectar-se aos serviços on-line do Franz.",
16 "global.notConnectedToTheInternet" : "Você não está conectado à internet", 16 "global.notConnectedToTheInternet" : "Você não está conectado à internet",
17 "global.spellchecker.useDefault" : "Use o padrão do sistema ({default})", 17 "global.spellchecker.useDefault" : "Use o padrão do sistema ({default})",
18 "global.spellchecking.autodetect" : "Detectar linguagem automaticamente.", 18 "global.spellchecking.autodetect" : "Detectar idioma automaticamente.",
19 "global.spellchecking.autodetect.short" : "Automático", 19 "global.spellchecking.autodetect.short" : "Automático",
20 "global.spellchecking.language" : "Idioma de verificação ortográfica", 20 "global.spellchecking.language" : "Idioma para verificação ortográfica",
21 "import.headline" : "Importe seus serviços do Franz 4 ", 21 "import.headline" : "Importe seus serviços do Franz 4 ",
22 "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5 ", 22 "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5 ",
23 "import.skip.label" : "Quero adicionar serviços manualmente", 23 "import.skip.label" : "Quero adicionar serviços manualmente",
@@ -50,7 +50,7 @@
50 "menu.app.hideOthers" : "Ocultar Outros", 50 "menu.app.hideOthers" : "Ocultar Outros",
51 "menu.app.quit" : "Sair", 51 "menu.app.quit" : "Sair",
52 "menu.app.settings" : "Configurações", 52 "menu.app.settings" : "Configurações",
53 "menu.app.unhide" : "Reexibir", 53 "menu.app.unhide" : "Mostrar",
54 "menu.edit" : "Editar", 54 "menu.edit" : "Editar",
55 "menu.edit.copy" : "Copiar", 55 "menu.edit.copy" : "Copiar",
56 "menu.edit.cut" : "Cortar", 56 "menu.edit.cut" : "Cortar",
@@ -60,7 +60,7 @@
60 "menu.edit.pasteAndMatchStyle" : "Colar e Corresponder ao Estilo", 60 "menu.edit.pasteAndMatchStyle" : "Colar e Corresponder ao Estilo",
61 "menu.edit.redo" : "Refazer", 61 "menu.edit.redo" : "Refazer",
62 "menu.edit.selectAll" : "Selecionar Tudo", 62 "menu.edit.selectAll" : "Selecionar Tudo",
63 "menu.edit.speech" : "Discurso", 63 "menu.edit.speech" : "Falar",
64 "menu.edit.startDictation" : "Iniciar Digitação", 64 "menu.edit.startDictation" : "Iniciar Digitação",
65 "menu.edit.startSpeaking" : "Começar a Falar", 65 "menu.edit.startSpeaking" : "Começar a Falar",
66 "menu.edit.stopSpeaking" : "Parar de Falar", 66 "menu.edit.stopSpeaking" : "Parar de Falar",
@@ -144,7 +144,7 @@
144 "settings.account.userInfoRequestFailed" : "Não foi possível carregar as informações do usuário", 144 "settings.account.userInfoRequestFailed" : "Não foi possível carregar as informações do usuário",
145 "settings.app.buttonClearAllCache" : "Limpar cache", 145 "settings.app.buttonClearAllCache" : "Limpar cache",
146 "settings.app.buttonInstallUpdate" : "Reiniciar e instalar atualização", 146 "settings.app.buttonInstallUpdate" : "Reiniciar e instalar atualização",
147 "settings.app.buttonSearchForUpdate" : "Verificar se há atualizações", 147 "settings.app.buttonSearchForUpdate" : "Verificar por atualizações",
148 "settings.app.cacheInfo" : "O cache do Franz está usando {size} de espaço em disco atualmente.", 148 "settings.app.cacheInfo" : "O cache do Franz está usando {size} de espaço em disco atualmente.",
149 "settings.app.currentVersion" : "Versão atual:", 149 "settings.app.currentVersion" : "Versão atual:",
150 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", 150 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano",
diff --git a/src/index.html b/src/index.html
index bf15e2d4e..f29aa2686 100644
--- a/src/index.html
+++ b/src/index.html
@@ -10,6 +10,7 @@
10 <div class="window-draggable"></div> 10 <div class="window-draggable"></div>
11 <div class="dev-warning">DEV MODE</div> 11 <div class="dev-warning">DEV MODE</div>
12 <div id="root"></div> 12 <div id="root"></div>
13 <div id="portalContainer"></div>
13 <script> 14 <script>
14 document.querySelector('body').classList.add(process.env.OS_PLATFORM ? process.env.OS_PLATFORM : process.platform); 15 document.querySelector('body').classList.add(process.env.OS_PLATFORM ? process.env.OS_PLATFORM : process.platform);
15 16
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js
index a95a8e1e0..9680c5bcc 100644
--- a/src/stores/UIStore.js
+++ b/src/stores/UIStore.js
@@ -1,4 +1,9 @@
1import { action, observable, computed } from 'mobx'; 1import {
2 action,
3 observable,
4 computed,
5 reaction,
6} from 'mobx';
2import { theme } from '@meetfranz/theme'; 7import { theme } from '@meetfranz/theme';
3 8
4import Store from './lib/Store'; 9import Store from './lib/Store';
@@ -15,10 +20,18 @@ export default class UIStore extends Store {
15 this.actions.ui.toggleServiceUpdatedInfoBar.listen(this._toggleServiceUpdatedInfoBar.bind(this)); 20 this.actions.ui.toggleServiceUpdatedInfoBar.listen(this._toggleServiceUpdatedInfoBar.bind(this));
16 } 21 }
17 22
23 setup() {
24 reaction(
25 () => this.isDarkThemeActive,
26 () => this._setupThemeInDOM(),
27 { fireImmediately: true },
28 );
29 }
30
18 @computed get showMessageBadgesEvenWhenMuted() { 31 @computed get showMessageBadgesEvenWhenMuted() {
19 const settings = this.stores.settings.all; 32 const settings = this.stores.settings.all;
20 33
21 return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.isAppMuted; 34 return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.app.isAppMuted;
22 } 35 }
23 36
24 @computed get isDarkThemeActive() { 37 @computed get isDarkThemeActive() {
@@ -26,7 +39,7 @@ export default class UIStore extends Store {
26 } 39 }
27 40
28 @computed get theme() { 41 @computed get theme() {
29 if (this.isDarkThemeActive) return theme('dark'); 42 if (this.isDarkThemeActive || this.stores.settings.app.darkMode) return theme('dark');
30 return theme('default'); 43 return theme('default');
31 } 44 }
32 45
@@ -47,4 +60,15 @@ export default class UIStore extends Store {
47 } 60 }
48 this.showServicesUpdatedInfoBar = visibility; 61 this.showServicesUpdatedInfoBar = visibility;
49 } 62 }
63
64 // Reactions
65 _setupThemeInDOM() {
66 const body = document.querySelector('body');
67
68 if (!this.isDarkThemeActive) {
69 body.classList.remove('theme__dark');
70 } else {
71 body.classList.add('theme__dark');
72 }
73 }
50} 74}
diff --git a/src/styles/layout.scss b/src/styles/layout.scss
index e858b7904..9f226b61c 100644
--- a/src/styles/layout.scss
+++ b/src/styles/layout.scss
@@ -39,7 +39,7 @@ html { overflow: hidden; }
39 .app__content { display: flex; } 39 .app__content { display: flex; }
40 40
41 .app__service { 41 .app__service {
42 position: relative; 42 // position: relative;
43 display: flex; 43 display: flex;
44 flex: 1; 44 flex: 1;
45 flex-direction: column; 45 flex-direction: column;
diff --git a/src/styles/reset.scss b/src/styles/reset.scss
index 80328dcef..f46ede4a2 100644
--- a/src/styles/reset.scss
+++ b/src/styles/reset.scss
@@ -64,7 +64,7 @@ body {
64 font-size: 1.4rem; 64 font-size: 1.4rem;
65 line-height: 1; 65 line-height: 1;
66 66
67 .theme__dark { color: $dark-theme-gray-smoke; } 67 &.theme__dark { color: $dark-theme-gray-smoke; }
68} 68}
69 69
70* { 70* {
diff --git a/src/webview/contextMenu.js b/src/webview/contextMenu.js
index 967e8e667..a4a6ab899 100644
--- a/src/webview/contextMenu.js
+++ b/src/webview/contextMenu.js
@@ -280,13 +280,12 @@ const buildMenuTpl = (props, suggestions, isSpellcheckEnabled, defaultSpellcheck
280}; 280};
281 281
282export default function contextMenu(spellcheckProvider, isSpellcheckEnabled, getDefaultSpellcheckerLanguage, getSpellcheckerLanguage) { 282export default function contextMenu(spellcheckProvider, isSpellcheckEnabled, getDefaultSpellcheckerLanguage, getSpellcheckerLanguage) {
283 webContents.on('context-menu', async (e, props) => { 283 webContents.on('context-menu', (e, props) => {
284 e.preventDefault(); 284 e.preventDefault();
285 285
286 let suggestions = []; 286 let suggestions = [];
287 if (spellcheckProvider && props.misspelledWord) { 287 if (spellcheckProvider && props.misspelledWord) {
288 debug('Mispelled word', props.misspelledWord); 288 suggestions = spellcheckProvider.getSuggestion(props.misspelledWord);
289 suggestions = await spellcheckProvider.getSuggestion(props.misspelledWord);
290 289
291 debug('Suggestions', suggestions); 290 debug('Suggestions', suggestions);
292 } 291 }
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index 417d1ea1a..9158b3b94 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.js
@@ -1,8 +1,6 @@
1import { webFrame } from 'electron'; 1import { webFrame } from 'electron';
2import { attachSpellCheckProvider, SpellCheckerProvider } from 'electron-hunspell'; 2import { SpellCheckerProvider } from 'electron-hunspell';
3import { ENVIRONMENT } from 'hunspell-asm';
4import path from 'path'; 3import path from 'path';
5import { readFileSync } from 'fs';
6 4
7import { DICTIONARY_PATH } from '../config'; 5import { DICTIONARY_PATH } from '../config';
8import { SPELLCHECKER_LOCALES } from '../i18n/languages'; 6import { SPELLCHECKER_LOCALES } from '../i18n/languages';
@@ -12,12 +10,11 @@ const debug = require('debug')('Franz:spellchecker');
12let provider; 10let provider;
13let currentDict; 11let currentDict;
14let _isEnabled = false; 12let _isEnabled = false;
15let attached;
16 13
17async function loadDictionary(locale) { 14async function loadDictionary(locale) {
18 try { 15 try {
19 const fileLocation = path.join(DICTIONARY_PATH, `hunspell-dict-${locale}/${locale}`); 16 const fileLocation = path.join(DICTIONARY_PATH, `hunspell-dict-${locale}/${locale}`);
20 await provider.loadDictionary(locale, readFileSync(`${fileLocation}.dic`), readFileSync(`${fileLocation}.aff`)); 17 await provider.loadDictionary(locale, `${fileLocation}.dic`, `${fileLocation}.aff`);
21 debug('Loaded dictionary', locale, 'from', fileLocation); 18 debug('Loaded dictionary', locale, 'from', fileLocation);
22 } catch (err) { 19 } catch (err) {
23 console.error('Could not load dictionary', err); 20 console.error('Could not load dictionary', err);
@@ -44,7 +41,7 @@ export async function switchDict(locale) {
44 provider.unloadDictionary(locale); 41 provider.unloadDictionary(locale);
45 } 42 }
46 loadDictionary(locale); 43 loadDictionary(locale);
47 attached.switchLanguage(locale); 44 provider.switchDictionary(locale);
48 45
49 debug('Switched dictionary to', locale); 46 debug('Switched dictionary to', locale);
50 47
@@ -61,14 +58,12 @@ export default async function initialize(languageCode = 'en-us') {
61 const locale = languageCode.toLowerCase(); 58 const locale = languageCode.toLowerCase();
62 59
63 debug('Init spellchecker'); 60 debug('Init spellchecker');
64 await provider.initialize({ environment: ENVIRONMENT.NODE }); 61 await provider.initialize();
65 62 // await loadDictionaries();
66 debug('Attaching spellcheck provider');
67 attached = await attachSpellCheckProvider(provider);
68 63
69 debug('Available spellchecker dictionaries', provider.availableDictionaries); 64 debug('Available spellchecker dictionaries', provider.availableDictionaries);
70 65
71 attached.switchLanguage(locale); 66 switchDict(locale);
72 67
73 return provider; 68 return provider;
74 } catch (err) { 69 } catch (err) {