aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan <stefan@adlk.io>2019-06-04 14:26:56 +0200
committerLibravatar Stefan <stefan@adlk.io>2019-06-04 14:26:56 +0200
commitfd6a1e9ba24c7947af08a30829c860cad4726f67 (patch)
tree0b6276700ced8d13eaf0a1e3b706a69a5a47b1da
parentfix(Windows): Replace tray icon with high-res version (diff)
parentMerge pull request #1443 from meetfranz/feature/multilingual-announcements (diff)
downloadferdium-app-fd6a1e9ba24c7947af08a30829c860cad4726f67.tar.gz
ferdium-app-fd6a1e9ba24c7947af08a30829c860cad4726f67.tar.zst
ferdium-app-fd6a1e9ba24c7947af08a30829c860cad4726f67.zip
Merge branch 'develop' of https://github.com/meetfranz/franz into develop
-rw-r--r--.eslintrc4
-rw-r--r--.travis.yml6
-rw-r--r--CHANGELOG.md31
-rw-r--r--appveyor.yml3
-rw-r--r--jest.config.js3
-rw-r--r--package-lock.json1630
-rw-r--r--package.json12
-rw-r--r--packages/theme/src/themes/dark/index.ts26
-rw-r--r--packages/theme/src/themes/default/index.ts25
-rw-r--r--src/actions/index.js2
-rw-r--r--src/actions/lib/actions.js2
-rw-r--r--src/actions/service.js2
-rw-r--r--src/api/PaymentApi.js8
-rw-r--r--src/api/server/ServerApi.js21
-rw-r--r--src/app.js5
-rw-r--r--src/components/layout/AppLayout.js14
-rw-r--r--src/components/settings/account/AccountDashboard.js126
-rw-r--r--src/components/settings/navigation/SettingsNavigation.js17
-rw-r--r--src/components/settings/settings/EditSettingsForm.js8
-rw-r--r--src/components/settings/team/TeamDashboard.js152
-rw-r--r--src/components/subscription/SubscriptionForm.js7
-rw-r--r--src/config.js13
-rw-r--r--src/containers/layout/AppLayoutContainer.js1
-rw-r--r--src/containers/settings/AccountScreen.js51
-rw-r--r--src/containers/settings/TeamScreen.js57
-rw-r--r--src/electron/ipc-api/autoUpdate.js7
-rw-r--r--src/environment.js22
-rw-r--r--src/features/announcements/actions.js10
-rw-r--r--src/features/announcements/api.js33
-rw-r--r--src/features/announcements/components/AnnouncementScreen.js286
-rw-r--r--src/features/announcements/index.js36
-rw-r--r--src/features/announcements/store.js144
-rwxr-xr-xsrc/features/settingsWS/actions.js10
-rwxr-xr-xsrc/features/settingsWS/index.js29
-rwxr-xr-xsrc/features/settingsWS/state.js13
-rwxr-xr-xsrc/features/settingsWS/store.js130
-rw-r--r--src/features/shareFranz/index.js2
-rw-r--r--src/features/utils/ActionBinding.js29
-rw-r--r--src/features/utils/FeatureStore.js47
-rw-r--r--src/features/utils/FeatureStore.test.js92
-rw-r--r--src/features/workspaces/components/CreateWorkspaceForm.js4
-rw-r--r--src/features/workspaces/components/EditWorkspaceForm.js41
-rw-r--r--src/features/workspaces/components/WorkspacesDashboard.js38
-rw-r--r--src/features/workspaces/store.js89
-rw-r--r--src/i18n/locales/ca.json54
-rw-r--r--src/i18n/locales/cs.json56
-rw-r--r--src/i18n/locales/de.json144
-rw-r--r--src/i18n/locales/defaultMessages.json533
-rw-r--r--src/i18n/locales/el.json50
-rw-r--r--src/i18n/locales/en-US.json11
-rw-r--r--src/i18n/locales/es.json72
-rw-r--r--src/i18n/locales/fr.json76
-rw-r--r--src/i18n/locales/ga.json50
-rw-r--r--src/i18n/locales/hr.json50
-rw-r--r--src/i18n/locales/hu.json50
-rw-r--r--src/i18n/locales/id.json88
-rw-r--r--src/i18n/locales/it.json82
-rw-r--r--src/i18n/locales/ja.json74
-rw-r--r--src/i18n/locales/ka.json50
-rw-r--r--src/i18n/locales/nl-BE.json50
-rw-r--r--src/i18n/locales/nl.json50
-rw-r--r--src/i18n/locales/pl.json70
-rw-r--r--src/i18n/locales/pt-BR.json62
-rw-r--r--src/i18n/locales/pt.json56
-rw-r--r--src/i18n/locales/ru.json76
-rw-r--r--src/i18n/locales/sk.json50
-rw-r--r--src/i18n/locales/sr.json50
-rw-r--r--src/i18n/locales/tr.json50
-rw-r--r--src/i18n/locales/uk.json50
-rw-r--r--src/i18n/locales/zh-TW.json50
-rw-r--r--src/i18n/messages/src/components/layout/AppLayout.json24
-rw-r--r--src/i18n/messages/src/components/settings/account/AccountDashboard.json82
-rw-r--r--src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json41
-rw-r--r--src/i18n/messages/src/components/settings/settings/EditSettingsForm.json13
-rw-r--r--src/i18n/messages/src/components/settings/team/TeamDashboard.json80
-rw-r--r--src/i18n/messages/src/components/subscription/SubscriptionForm.json25
-rw-r--r--src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json15
-rw-r--r--src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json26
-rw-r--r--src/i18n/messages/src/lib/Menu.json221
-rw-r--r--src/lib/Menu.js13
-rw-r--r--src/lib/analytics.js20
-rw-r--r--src/stores/AppStore.js9
-rw-r--r--src/stores/FeaturesStore.js4
-rw-r--r--src/stores/PaymentStore.js17
-rw-r--r--src/stores/ServicesStore.js24
-rw-r--r--src/stores/UserStore.js1
-rw-r--r--src/stores/index.js4
-rw-r--r--src/stores/lib/Reaction.js19
-rw-r--r--src/styles/badge.scss3
-rw-r--r--src/styles/info-bar.scss4
-rw-r--r--src/styles/settings.scss31
91 files changed, 5138 insertions, 880 deletions
diff --git a/.eslintrc b/.eslintrc
index e61d99c20..c85bee1fa 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,6 +1,7 @@
1{ 1{
2 "parser": "babel-eslint", 2 "parser": "babel-eslint",
3 "extends": "eslint-config-airbnb", 3 "extends": "eslint-config-airbnb",
4 "plugins": ["jest"],
4 "rules": { 5 "rules": {
5 "consistent-return": 0, 6 "consistent-return": 0,
6 "no-param-reassign": 0, 7 "no-param-reassign": 0,
@@ -55,5 +56,8 @@
55 "btoa": true, 56 "btoa": true,
56 "ga": true, 57 "ga": true,
57 "mocha": true 58 "mocha": true
59 },
60 "env": {
61 "jest/globals": true
58 } 62 }
59} 63}
diff --git a/.travis.yml b/.travis.yml
index ba827374f..c7e2c714c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,7 +14,7 @@ matrix:
14 14
15language: node_js 15language: node_js
16 16
17install: 17install:
18- echo do nothing 18- echo do nothing
19 19
20before_script: 20before_script:
@@ -22,7 +22,7 @@ before_script:
22- npm install node-sass -g 22- npm install node-sass -g
23 23
24script: 24script:
25# - npm run lint 25- npm run test
26- travis_wait 30 npm run build 26- travis_wait 30 npm run build
27 27
28cache: npm 28cache: npm
@@ -30,7 +30,7 @@ cache: npm
30notifications: 30notifications:
31 email: false 31 email: false
32 slack: 32 slack:
33 secure: NjEDG+6YvJvFNwRT8t8XyVR145m+Pb1pmYgdBeuhqtJbMAr0IOb0lLLW9ixKEsL1NU+0R58QGiG9qqY+lLnMNpDYjzluFo0gQtl2NJrULT4xUFDSu65XTwoutKyvj+hoCsHiwrSrO2dHTx3ZK2vsSueg+8jM/xss7dTLA6BcTYl14wTOU37PqFQZk9JYR+Dfq1Jjhy/mq4BiAsb/1clNIulkjmRjSm6R0XT4ZsZZfj0ifXhL4cLGsUv2n+iePiX6bLwZPFjXV1COYTBafbCu17gw3nRMdNMMTDLbwrXXdJZFS/EjFOPgOhwF7CkZ3kSpB2ZIcAJxG7iAUl5j+jHBXc5dafRbjzE4oYve1vPexLoV3NjV76uANUFkcli6eHYD0uJoUJGBRbRGWp+8Bbw9EcBsn4s3vbf5XqHX3S46zvGgqX+LyhyMJQtEG/iv+9XOsOql18ryyejij0z1K7DxpI0gLV1ATZCphY1Fyz1yZDGlYN4ej/Rl2P1Q3yXilweJRF7Ts04w4U9iuP1u598/w++CKSu4q4EeEuqT/hIeFQUKUkwCEsO4xa39vhLPaxKrG9UEUH8OXN+NPZyTAK/LKuIX7C56O1kwvWNMWlPmTcvsq2RghvNTwgSGUIO0EKZKrQYAEG3Y/veSt5CgZoNzLgc/6Xj+g7daxUo9heLy26A= 33 secure: GMiD9uhGUNkJbasOMvfUmQx/SKG8wd/MC4IPtiZZnlLkiN6eJQnV3p9OeMaiSCcq19gQ65z898h55PXwFX5pFqmGMQF0zdA3VXlVh7wrUU/Z8cYxCBaZTIOgNwtrteT9V9easV/5BuUGLHVgAFYEhS5tJDu2GU4UKdm6mko4YyxKHdsCsvkRpv+zpFF1a+G2ZUwWHDhTZsBJbx7SW7xzPKYI+vq+bNnbyC6p0kpeTehf29A8CoIgQlDctzk4aOHkj35WHIiKS5yzr/nb8oY/B6vCdfFHCrCkZxQrxPEagyYTfEusWwQRJ4rvwt8dgBO1A3ckO+AC1MEAYRYHgQMI5K86tcQ7/su5iOhu9NDbZ/BfriaTDlrurKMWPhZ/RVnFUT4tn7XVVcMxz6/FYFDYIDSHEn5E20a7qV1ixF7XKoJU6eOfo3qZ7euxiZIbDbHBH+Y2ZmzUGfrQ7DFlefMEM/6Laa0jNGOSvfc6mvk1x63bVTT5KfYEX4ztXnBY77haG4/h5bIHyNDzLsZ5vxXbvmHZb6ToMVn9UT6HS0sZQ/B4bghJbdZuOrPFlz8UNRpwoBS4HpLUndhYCo0ppxd3yCd5gqEhIJzEiJNoMq+LA9/iheLbWlJVdjP2WRQ2/m9VCSxnivTdNhnp6lSATiXAgq2WN2LGhTSGtXgqtcYGXhk=
34 34
35deploy: 35deploy:
36 provider: s3 36 provider: s3
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 175ce06d7..c7a93f2b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,14 +1,28 @@
1# [5.0.1](https://github.com/meetfranz/franz/compare/v5.0.0...v5.0.1) (2019-03-25) 1# [5.1.0](https://github.com/meetfranz/franz/compare/v5.1.0...v5.1.0-beta.1) (2019-04-16)
2
3### Features
4
5* **App:** Added Workspaces for all your daily routines 🎉 ([47c1c99](https://github.com/meetfranz/franz/commit/47c1c99))
6* **App:** Added [Team Management](https://meetfranz.com/user/team) 🎉 ([47c1c99](https://github.com/meetfranz/franz/commit/47c1c99))
7* **App:** Added Kerberos Support via Command Line Switches ([#1331](https://github.com/meetfranz/franz/issues/1331)) ([@frumania](https://github.com/frumania)) ([a1950d7](https://github.com/meetfranz/franz/commit/a1950d7))
8* **App:** Open changelog in app
9* **App:** Various small fixes and improvements
2 10
3### General 11### General
4 12
5* **Translations:** Improved translations. **[A million thanks to the amazing community. 🎉](http://i18n.meetfranz.com/)** 13* **Translations:** Improved translations. **[A million thanks to the amazing community. 🎉](http://i18n.meetfranz.com/)**
14* **App:** Update electron to 4.1.4 ([2604914](https://github.com/meetfranz/franz/commit/2604914))
15
16
17# [5.1.0-beta.1](https://github.com/meetfranz/franz/compare/v5.0.1-beta.1...v5.1.0-beta.1) (2019-04-16)
6 18
19[See 5.1.0 changelog.](#5-1-0--2019-04-16-)
20
21# [5.0.1](https://github.com/meetfranz/franz/compare/v5.0.0...v5.0.1) (2019-03-25)
7 22
8### Features 23### Features
9 24
10* **App:** Add security checks for external URLs ([6e5531a](https://github.com/meetfranz/franz/commit/6e5531a)) 25* **App:** Add security checks for external URLs ([6e5531a](https://github.com/meetfranz/franz/commit/6e5531a))
11* **App:** Update electron to 4.0.8 ([8336d17](https://github.com/meetfranz/franz/commit/8336d17))
12* **Linux:** Add auto updater for Linux AppImage builds ([d641b4e](https://github.com/meetfranz/franz/commit/d641b4e)) 26* **Linux:** Add auto updater for Linux AppImage builds ([d641b4e](https://github.com/meetfranz/franz/commit/d641b4e))
13* **Spell check:** Add British English as spell check language ([#1306](https://github.com/meetfranz/franz/issues/1306)) ([67fa325](https://github.com/meetfranz/franz/commit/67fa325)) 27* **Spell check:** Add British English as spell check language ([#1306](https://github.com/meetfranz/franz/issues/1306)) ([67fa325](https://github.com/meetfranz/franz/commit/67fa325))
14* **Windows:** Add option to quit Franz from Taskbar icon ([952fc8b](https://github.com/meetfranz/franz/commit/952fc8b)) 28* **Windows:** Add option to quit Franz from Taskbar icon ([952fc8b](https://github.com/meetfranz/franz/commit/952fc8b))
@@ -22,6 +36,11 @@
22* **Windows:** Fix copy & paste in service context menus ([e66fcaa](https://github.com/meetfranz/franz/commit/e66fcaa)), closes [#1316](https://github.com/meetfranz/franz/issues/1316) 36* **Windows:** Fix copy & paste in service context menus ([e66fcaa](https://github.com/meetfranz/franz/commit/e66fcaa)), closes [#1316](https://github.com/meetfranz/franz/issues/1316)
23* **Windows:** Fix losing window when "Keep Franz in background" is enabled ([78a3722](https://github.com/meetfranz/franz/commit/78a3722)) 37* **Windows:** Fix losing window when "Keep Franz in background" is enabled ([78a3722](https://github.com/meetfranz/franz/commit/78a3722))
24 38
39### General
40
41* **Translations:** Improved translations. **[A million thanks to the amazing community. 🎉](http://i18n.meetfranz.com/)**
42* **App:** Update electron to 4.0.8 ([8336d17](https://github.com/meetfranz/franz/commit/8336d17))
43
25 44
26# [5.0.1-beta.1](https://github.com/meetfranz/franz/compare/v5.0.0...v5.0.1-beta.1) (2019-03-18) 45# [5.0.1-beta.1](https://github.com/meetfranz/franz/compare/v5.0.0...v5.0.1-beta.1) (2019-03-18)
27 46
@@ -29,10 +48,6 @@
29 48
30# [5.0.0](https://github.com/meetfranz/franz/compare/5.0.0-beta.24...5.0.0) (2019-02-15) 49# [5.0.0](https://github.com/meetfranz/franz/compare/5.0.0-beta.24...5.0.0) (2019-02-15)
31 50
32### General
33
34* **App:** Updated electron to 4.0.4
35
36### Features 51### Features
37 52
38* **Spellchecker:** Add automatic spellcheck language detection ([a5e7171](https://github.com/meetfranz/franz/commit/a5e7171)) 53* **Spellchecker:** Add automatic spellcheck language detection ([a5e7171](https://github.com/meetfranz/franz/commit/a5e7171))
@@ -42,6 +57,10 @@
42 57
43* **App:** Various bugfixes and improvements 58* **App:** Various bugfixes and improvements
44 59
60### General
61
62* **App:** Updated electron to 4.0.4
63
45 64
46 65
47# [5.0.0-beta.24](https://github.com/meetfranz/franz/compare/v5.0.0-beta.23...v5.0.0-beta.24) (2019-02-03) 66# [5.0.0-beta.24](https://github.com/meetfranz/franz/compare/v5.0.0-beta.23...v5.0.0-beta.24) (2019-02-03)
diff --git a/appveyor.yml b/appveyor.yml
index 0ed8866a3..abcf81d00 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -17,6 +17,7 @@ cache:
17 17
18before_build: 18before_build:
19 - npm run lint 19 - npm run lint
20 - npm run test
20 21
21build_script: 22build_script:
22 - npm run build 23 - npm run build
@@ -24,7 +25,7 @@ build_script:
24notifications: 25notifications:
25 - provider: Slack 26 - provider: Slack
26 incoming_webhook: 27 incoming_webhook:
27 secure: 2NnhP/L7Jk9PDE0JvdNnYVBnmDHFRWHmTQBQ1492ZQ5O0Ok/97FAbk/FbGZVEalli8xcaPkVu3jiOD7IPVvHLKUrmyvficRgmL+qf4lhD1s= 28 secure: 2NnhP/L7Jk9PDE0JvdNnYVBnmDHFRWHmTQBQ1492ZQ7TpD2xQ/cXi3+G1Spr8zN5O8H+MQi4oMn3Ih2w0e8ZkHgQw138jvK/OfZO+FlF/mI=
28 29
29artifacts: 30artifacts:
30 - path: out\*.exe 31 - path: out\*.exe
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 000000000..8c9b59cf5
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,3 @@
1module.exports = {
2 roots: ['src'],
3};
diff --git a/package-lock.json b/package-lock.json
index 57650aac0..fc328c4b4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1083,6 +1083,16 @@
1083 "to-fast-properties": "^2.0.0" 1083 "to-fast-properties": "^2.0.0"
1084 } 1084 }
1085 }, 1085 },
1086 "@cnakazawa/watch": {
1087 "version": "1.0.3",
1088 "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
1089 "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
1090 "dev": true,
1091 "requires": {
1092 "exec-sh": "^0.3.2",
1093 "minimist": "^1.2.0"
1094 }
1095 },
1086 "@fimbul/bifrost": { 1096 "@fimbul/bifrost": {
1087 "version": "0.17.0", 1097 "version": "0.17.0",
1088 "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.17.0.tgz", 1098 "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.17.0.tgz",
@@ -1123,6 +1133,217 @@
1123 "tslib": "^1.8.1" 1133 "tslib": "^1.8.1"
1124 } 1134 }
1125 }, 1135 },
1136 "@jest/console": {
1137 "version": "24.7.1",
1138 "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
1139 "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==",
1140 "dev": true,
1141 "requires": {
1142 "@jest/source-map": "^24.3.0",
1143 "chalk": "^2.0.1",
1144 "slash": "^2.0.0"
1145 }
1146 },
1147 "@jest/core": {
1148 "version": "24.7.1",
1149 "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.7.1.tgz",
1150 "integrity": "sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA==",
1151 "dev": true,
1152 "requires": {
1153 "@jest/console": "^24.7.1",
1154 "@jest/reporters": "^24.7.1",
1155 "@jest/test-result": "^24.7.1",
1156 "@jest/transform": "^24.7.1",
1157 "@jest/types": "^24.7.0",
1158 "ansi-escapes": "^3.0.0",
1159 "chalk": "^2.0.1",
1160 "exit": "^0.1.2",
1161 "graceful-fs": "^4.1.15",
1162 "jest-changed-files": "^24.7.0",
1163 "jest-config": "^24.7.1",
1164 "jest-haste-map": "^24.7.1",
1165 "jest-message-util": "^24.7.1",
1166 "jest-regex-util": "^24.3.0",
1167 "jest-resolve-dependencies": "^24.7.1",
1168 "jest-runner": "^24.7.1",
1169 "jest-runtime": "^24.7.1",
1170 "jest-snapshot": "^24.7.1",
1171 "jest-util": "^24.7.1",
1172 "jest-validate": "^24.7.0",
1173 "jest-watcher": "^24.7.1",
1174 "micromatch": "^3.1.10",
1175 "p-each-series": "^1.0.0",
1176 "pirates": "^4.0.1",
1177 "realpath-native": "^1.1.0",
1178 "rimraf": "^2.5.4",
1179 "strip-ansi": "^5.0.0"
1180 },
1181 "dependencies": {
1182 "ansi-regex": {
1183 "version": "4.1.0",
1184 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1185 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1186 "dev": true
1187 },
1188 "pirates": {
1189 "version": "4.0.1",
1190 "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
1191 "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
1192 "dev": true,
1193 "requires": {
1194 "node-modules-regexp": "^1.0.0"
1195 }
1196 },
1197 "strip-ansi": {
1198 "version": "5.2.0",
1199 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1200 "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1201 "dev": true,
1202 "requires": {
1203 "ansi-regex": "^4.1.0"
1204 }
1205 }
1206 }
1207 },
1208 "@jest/environment": {
1209 "version": "24.7.1",
1210 "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.7.1.tgz",
1211 "integrity": "sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw==",
1212 "dev": true,
1213 "requires": {
1214 "@jest/fake-timers": "^24.7.1",
1215 "@jest/transform": "^24.7.1",
1216 "@jest/types": "^24.7.0",
1217 "jest-mock": "^24.7.0"
1218 }
1219 },
1220 "@jest/fake-timers": {
1221 "version": "24.7.1",
1222 "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.7.1.tgz",
1223 "integrity": "sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA==",
1224 "dev": true,
1225 "requires": {
1226 "@jest/types": "^24.7.0",
1227 "jest-message-util": "^24.7.1",
1228 "jest-mock": "^24.7.0"
1229 }
1230 },
1231 "@jest/reporters": {
1232 "version": "24.7.1",
1233 "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.7.1.tgz",
1234 "integrity": "sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw==",
1235 "dev": true,
1236 "requires": {
1237 "@jest/environment": "^24.7.1",
1238 "@jest/test-result": "^24.7.1",
1239 "@jest/transform": "^24.7.1",
1240 "@jest/types": "^24.7.0",
1241 "chalk": "^2.0.1",
1242 "exit": "^0.1.2",
1243 "glob": "^7.1.2",
1244 "istanbul-api": "^2.1.1",
1245 "istanbul-lib-coverage": "^2.0.2",
1246 "istanbul-lib-instrument": "^3.0.1",
1247 "istanbul-lib-source-maps": "^3.0.1",
1248 "jest-haste-map": "^24.7.1",
1249 "jest-resolve": "^24.7.1",
1250 "jest-runtime": "^24.7.1",
1251 "jest-util": "^24.7.1",
1252 "jest-worker": "^24.6.0",
1253 "node-notifier": "^5.2.1",
1254 "slash": "^2.0.0",
1255 "source-map": "^0.6.0",
1256 "string-length": "^2.0.0"
1257 }
1258 },
1259 "@jest/source-map": {
1260 "version": "24.3.0",
1261 "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz",
1262 "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==",
1263 "dev": true,
1264 "requires": {
1265 "callsites": "^3.0.0",
1266 "graceful-fs": "^4.1.15",
1267 "source-map": "^0.6.0"
1268 },
1269 "dependencies": {
1270 "callsites": {
1271 "version": "3.1.0",
1272 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1273 "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1274 "dev": true
1275 }
1276 }
1277 },
1278 "@jest/test-result": {
1279 "version": "24.7.1",
1280 "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.7.1.tgz",
1281 "integrity": "sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg==",
1282 "dev": true,
1283 "requires": {
1284 "@jest/console": "^24.7.1",
1285 "@jest/types": "^24.7.0",
1286 "@types/istanbul-lib-coverage": "^2.0.0"
1287 }
1288 },
1289 "@jest/test-sequencer": {
1290 "version": "24.7.1",
1291 "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz",
1292 "integrity": "sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA==",
1293 "dev": true,
1294 "requires": {
1295 "@jest/test-result": "^24.7.1",
1296 "jest-haste-map": "^24.7.1",
1297 "jest-runner": "^24.7.1",
1298 "jest-runtime": "^24.7.1"
1299 }
1300 },
1301 "@jest/transform": {
1302 "version": "24.7.1",
1303 "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.7.1.tgz",
1304 "integrity": "sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw==",
1305 "dev": true,
1306 "requires": {
1307 "@babel/core": "^7.1.0",
1308 "@jest/types": "^24.7.0",
1309 "babel-plugin-istanbul": "^5.1.0",
1310 "chalk": "^2.0.1",
1311 "convert-source-map": "^1.4.0",
1312 "fast-json-stable-stringify": "^2.0.0",
1313 "graceful-fs": "^4.1.15",
1314 "jest-haste-map": "^24.7.1",
1315 "jest-regex-util": "^24.3.0",
1316 "jest-util": "^24.7.1",
1317 "micromatch": "^3.1.10",
1318 "realpath-native": "^1.1.0",
1319 "slash": "^2.0.0",
1320 "source-map": "^0.6.1",
1321 "write-file-atomic": "2.4.1"
1322 },
1323 "dependencies": {
1324 "write-file-atomic": {
1325 "version": "2.4.1",
1326 "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
1327 "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
1328 "dev": true,
1329 "requires": {
1330 "graceful-fs": "^4.1.11",
1331 "imurmurhash": "^0.1.4",
1332 "signal-exit": "^3.0.2"
1333 }
1334 }
1335 }
1336 },
1337 "@jest/types": {
1338 "version": "24.7.0",
1339 "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.7.0.tgz",
1340 "integrity": "sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA==",
1341 "dev": true,
1342 "requires": {
1343 "@types/istanbul-lib-coverage": "^2.0.0",
1344 "@types/yargs": "^12.0.9"
1345 }
1346 },
1126 "@lerna/add": { 1347 "@lerna/add": {
1127 "version": "3.11.0", 1348 "version": "3.11.0",
1128 "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.11.0.tgz", 1349 "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.11.0.tgz",
@@ -2054,6 +2275,47 @@
2054 "url-template": "^2.0.8" 2275 "url-template": "^2.0.8"
2055 } 2276 }
2056 }, 2277 },
2278 "@types/babel__core": {
2279 "version": "7.1.1",
2280 "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz",
2281 "integrity": "sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw==",
2282 "dev": true,
2283 "requires": {
2284 "@babel/parser": "^7.1.0",
2285 "@babel/types": "^7.0.0",
2286 "@types/babel__generator": "*",
2287 "@types/babel__template": "*",
2288 "@types/babel__traverse": "*"
2289 }
2290 },
2291 "@types/babel__generator": {
2292 "version": "7.0.2",
2293 "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz",
2294 "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==",
2295 "dev": true,
2296 "requires": {
2297 "@babel/types": "^7.0.0"
2298 }
2299 },
2300 "@types/babel__template": {
2301 "version": "7.0.2",
2302 "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
2303 "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
2304 "dev": true,
2305 "requires": {
2306 "@babel/parser": "^7.1.0",
2307 "@babel/types": "^7.0.0"
2308 }
2309 },
2310 "@types/babel__traverse": {
2311 "version": "7.0.6",
2312 "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz",
2313 "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==",
2314 "dev": true,
2315 "requires": {
2316 "@babel/types": "^7.3.0"
2317 }
2318 },
2057 "@types/classnames": { 2319 "@types/classnames": {
2058 "version": "2.2.7", 2320 "version": "2.2.7",
2059 "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz", 2321 "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz",
@@ -2084,6 +2346,12 @@
2084 "integrity": "sha512-gZ/Rb+MFXF0pXSEQxdRoPMm5jeO3TycjOdvbpbcpHX/B+n9AqaHFe5q6Ga9CsZ7ir/UgIWPfrBzUzn3F19VH/w==", 2346 "integrity": "sha512-gZ/Rb+MFXF0pXSEQxdRoPMm5jeO3TycjOdvbpbcpHX/B+n9AqaHFe5q6Ga9CsZ7ir/UgIWPfrBzUzn3F19VH/w==",
2085 "dev": true 2347 "dev": true
2086 }, 2348 },
2349 "@types/istanbul-lib-coverage": {
2350 "version": "2.0.0",
2351 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz",
2352 "integrity": "sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg==",
2353 "dev": true
2354 },
2087 "@types/jss": { 2355 "@types/jss": {
2088 "version": "9.5.7", 2356 "version": "9.5.7",
2089 "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.7.tgz", 2357 "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.7.tgz",
@@ -2143,6 +2411,12 @@
2143 "csstype": "^2.0.0" 2411 "csstype": "^2.0.0"
2144 } 2412 }
2145 }, 2413 },
2414 "@types/stack-utils": {
2415 "version": "1.0.1",
2416 "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
2417 "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
2418 "dev": true
2419 },
2146 "@types/theming": { 2420 "@types/theming": {
2147 "version": "1.3.2", 2421 "version": "1.3.2",
2148 "resolved": "https://registry.npmjs.org/@types/theming/-/theming-1.3.2.tgz", 2422 "resolved": "https://registry.npmjs.org/@types/theming/-/theming-1.3.2.tgz",
@@ -2161,6 +2435,12 @@
2161 "@types/node": "*" 2435 "@types/node": "*"
2162 } 2436 }
2163 }, 2437 },
2438 "@types/yargs": {
2439 "version": "12.0.12",
2440 "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz",
2441 "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==",
2442 "dev": true
2443 },
2164 "@webassemblyjs/ast": { 2444 "@webassemblyjs/ast": {
2165 "version": "1.7.11", 2445 "version": "1.7.11",
2166 "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", 2446 "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
@@ -2355,6 +2635,12 @@
2355 "through": ">=2.2.7 <3" 2635 "through": ">=2.2.7 <3"
2356 } 2636 }
2357 }, 2637 },
2638 "abab": {
2639 "version": "2.0.0",
2640 "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
2641 "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
2642 "dev": true
2643 },
2358 "abbrev": { 2644 "abbrev": {
2359 "version": "1.1.1", 2645 "version": "1.1.1",
2360 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 2646 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -2402,12 +2688,28 @@
2402 } 2688 }
2403 } 2689 }
2404 }, 2690 },
2691 "acorn-globals": {
2692 "version": "4.3.1",
2693 "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.1.tgz",
2694 "integrity": "sha512-gJSiKY8dBIjV/0jagZIFBdVMtfQyA5QHCvAT48H2q8REQoW8Fs5AOjqBql1LgSXgrMWdevcE+8cdZ33NtVbIBA==",
2695 "dev": true,
2696 "requires": {
2697 "acorn": "^6.0.1",
2698 "acorn-walk": "^6.0.1"
2699 }
2700 },
2405 "acorn-jsx": { 2701 "acorn-jsx": {
2406 "version": "5.0.1", 2702 "version": "5.0.1",
2407 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", 2703 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
2408 "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", 2704 "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
2409 "dev": true 2705 "dev": true
2410 }, 2706 },
2707 "acorn-walk": {
2708 "version": "6.1.1",
2709 "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
2710 "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
2711 "dev": true
2712 },
2411 "add-stream": { 2713 "add-stream": {
2412 "version": "1.0.0", 2714 "version": "1.0.0",
2413 "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", 2715 "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
@@ -2621,6 +2923,15 @@
2621 "buffer-equal": "^1.0.0" 2923 "buffer-equal": "^1.0.0"
2622 } 2924 }
2623 }, 2925 },
2926 "append-transform": {
2927 "version": "1.0.0",
2928 "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
2929 "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==",
2930 "dev": true,
2931 "requires": {
2932 "default-require-extensions": "^2.0.0"
2933 }
2934 },
2624 "applescript": { 2935 "applescript": {
2625 "version": "1.0.0", 2936 "version": "1.0.0",
2626 "resolved": "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz", 2937 "resolved": "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz",
@@ -2755,6 +3066,12 @@
2755 "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", 3066 "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
2756 "dev": true 3067 "dev": true
2757 }, 3068 },
3069 "array-equal": {
3070 "version": "1.0.0",
3071 "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
3072 "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
3073 "dev": true
3074 },
2758 "array-find-index": { 3075 "array-find-index": {
2759 "version": "1.0.2", 3076 "version": "1.0.2",
2760 "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 3077 "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
@@ -2994,6 +3311,11 @@
2994 "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", 3311 "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
2995 "dev": true 3312 "dev": true
2996 }, 3313 },
3314 "async-limiter": {
3315 "version": "1.0.0",
3316 "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
3317 "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
3318 },
2997 "async-settle": { 3319 "async-settle": {
2998 "version": "1.0.0", 3320 "version": "1.0.0",
2999 "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", 3321 "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
@@ -3128,6 +3450,21 @@
3128 "eslint-visitor-keys": "^1.0.0" 3450 "eslint-visitor-keys": "^1.0.0"
3129 } 3451 }
3130 }, 3452 },
3453 "babel-jest": {
3454 "version": "24.7.1",
3455 "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.7.1.tgz",
3456 "integrity": "sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg==",
3457 "dev": true,
3458 "requires": {
3459 "@jest/transform": "^24.7.1",
3460 "@jest/types": "^24.7.0",
3461 "@types/babel__core": "^7.1.0",
3462 "babel-plugin-istanbul": "^5.1.0",
3463 "babel-preset-jest": "^24.6.0",
3464 "chalk": "^2.4.2",
3465 "slash": "^2.0.0"
3466 }
3467 },
3131 "babel-loader": { 3468 "babel-loader": {
3132 "version": "8.0.5", 3469 "version": "8.0.5",
3133 "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", 3470 "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz",
@@ -3162,6 +3499,26 @@
3162 } 3499 }
3163 } 3500 }
3164 }, 3501 },
3502 "babel-plugin-istanbul": {
3503 "version": "5.1.2",
3504 "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.2.tgz",
3505 "integrity": "sha512-U3ZVajC+Z69Gim7ZzmD4Wcsq76i/1hqDamBfowc1tWzWjybRy70iWfngP2ME+1CrgcgZ/+muIbPY/Yi0dxdIkQ==",
3506 "dev": true,
3507 "requires": {
3508 "find-up": "^3.0.0",
3509 "istanbul-lib-instrument": "^3.2.0",
3510 "test-exclude": "^5.2.2"
3511 }
3512 },
3513 "babel-plugin-jest-hoist": {
3514 "version": "24.6.0",
3515 "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz",
3516 "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==",
3517 "dev": true,
3518 "requires": {
3519 "@types/babel__traverse": "^7.0.6"
3520 }
3521 },
3165 "babel-plugin-react-intl": { 3522 "babel-plugin-react-intl": {
3166 "version": "3.0.1", 3523 "version": "3.0.1",
3167 "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-3.0.1.tgz", 3524 "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-3.0.1.tgz",
@@ -3173,6 +3530,16 @@
3173 "mkdirp": "^0.5.1" 3530 "mkdirp": "^0.5.1"
3174 } 3531 }
3175 }, 3532 },
3533 "babel-preset-jest": {
3534 "version": "24.6.0",
3535 "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz",
3536 "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==",
3537 "dev": true,
3538 "requires": {
3539 "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
3540 "babel-plugin-jest-hoist": "^24.6.0"
3541 }
3542 },
3176 "babel-runtime": { 3543 "babel-runtime": {
3177 "version": "6.26.0", 3544 "version": "6.26.0",
3178 "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 3545 "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -3531,6 +3898,29 @@
3531 "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 3898 "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
3532 "dev": true 3899 "dev": true
3533 }, 3900 },
3901 "browser-process-hrtime": {
3902 "version": "0.1.3",
3903 "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
3904 "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
3905 "dev": true
3906 },
3907 "browser-resolve": {
3908 "version": "1.11.3",
3909 "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
3910 "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
3911 "dev": true,
3912 "requires": {
3913 "resolve": "1.1.7"
3914 },
3915 "dependencies": {
3916 "resolve": {
3917 "version": "1.1.7",
3918 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
3919 "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
3920 "dev": true
3921 }
3922 }
3923 },
3534 "browser-stdout": { 3924 "browser-stdout": {
3535 "version": "1.3.1", 3925 "version": "1.3.1",
3536 "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 3926 "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -3619,6 +4009,15 @@
3619 "node-releases": "^1.1.3" 4009 "node-releases": "^1.1.3"
3620 } 4010 }
3621 }, 4011 },
4012 "bser": {
4013 "version": "2.0.0",
4014 "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
4015 "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
4016 "dev": true,
4017 "requires": {
4018 "node-int64": "^0.4.0"
4019 }
4020 },
3622 "btoa-lite": { 4021 "btoa-lite": {
3623 "version": "1.0.0", 4022 "version": "1.0.0",
3624 "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", 4023 "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
@@ -3925,6 +4324,15 @@
3925 "integrity": "sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw==", 4324 "integrity": "sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw==",
3926 "dev": true 4325 "dev": true
3927 }, 4326 },
4327 "capture-exit": {
4328 "version": "2.0.0",
4329 "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
4330 "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
4331 "dev": true,
4332 "requires": {
4333 "rsvp": "^4.8.4"
4334 }
4335 },
3928 "capture-stack-trace": { 4336 "capture-stack-trace": {
3929 "version": "1.0.1", 4337 "version": "1.0.1",
3930 "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 4338 "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
@@ -4211,6 +4619,12 @@
4211 "mkdirp": "~0.5.0" 4619 "mkdirp": "~0.5.0"
4212 } 4620 }
4213 }, 4621 },
4622 "co": {
4623 "version": "4.6.0",
4624 "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
4625 "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
4626 "dev": true
4627 },
4214 "code-point-at": { 4628 "code-point-at": {
4215 "version": "1.1.0", 4629 "version": "1.1.0",
4216 "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 4630 "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -4345,6 +4759,12 @@
4345 "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", 4759 "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
4346 "dev": true 4760 "dev": true
4347 }, 4761 },
4762 "compare-versions": {
4763 "version": "3.4.0",
4764 "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz",
4765 "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==",
4766 "dev": true
4767 },
4348 "component-bind": { 4768 "component-bind": {
4349 "version": "1.0.0", 4769 "version": "1.0.0",
4350 "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 4770 "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
@@ -5105,6 +5525,21 @@
5105 "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", 5525 "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==",
5106 "dev": true 5526 "dev": true
5107 }, 5527 },
5528 "cssom": {
5529 "version": "0.3.6",
5530 "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
5531 "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==",
5532 "dev": true
5533 },
5534 "cssstyle": {
5535 "version": "1.2.2",
5536 "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
5537 "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
5538 "dev": true,
5539 "requires": {
5540 "cssom": "0.3.x"
5541 }
5542 },
5108 "csstype": { 5543 "csstype": {
5109 "version": "2.6.2", 5544 "version": "2.6.2",
5110 "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz", 5545 "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz",
@@ -5172,6 +5607,17 @@
5172 "assert-plus": "^1.0.0" 5607 "assert-plus": "^1.0.0"
5173 } 5608 }
5174 }, 5609 },
5610 "data-urls": {
5611 "version": "1.1.0",
5612 "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
5613 "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
5614 "dev": true,
5615 "requires": {
5616 "abab": "^2.0.0",
5617 "whatwg-mimetype": "^2.2.0",
5618 "whatwg-url": "^7.0.0"
5619 }
5620 },
5175 "date-fns": { 5621 "date-fns": {
5176 "version": "1.30.1", 5622 "version": "1.30.1",
5177 "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", 5623 "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
@@ -5322,6 +5768,15 @@
5322 } 5768 }
5323 } 5769 }
5324 }, 5770 },
5771 "default-require-extensions": {
5772 "version": "2.0.0",
5773 "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
5774 "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=",
5775 "dev": true,
5776 "requires": {
5777 "strip-bom": "^3.0.0"
5778 }
5779 },
5325 "default-resolution": { 5780 "default-resolution": {
5326 "version": "2.0.0", 5781 "version": "2.0.0",
5327 "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", 5782 "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
@@ -5476,6 +5931,12 @@
5476 "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", 5931 "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
5477 "dev": true 5932 "dev": true
5478 }, 5933 },
5934 "detect-newline": {
5935 "version": "2.1.0",
5936 "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
5937 "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
5938 "dev": true
5939 },
5479 "detect-node": { 5940 "detect-node": {
5480 "version": "2.0.4", 5941 "version": "2.0.4",
5481 "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 5942 "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
@@ -5498,6 +5959,12 @@
5498 "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 5959 "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
5499 "dev": true 5960 "dev": true
5500 }, 5961 },
5962 "diff-sequences": {
5963 "version": "24.3.0",
5964 "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz",
5965 "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==",
5966 "dev": true
5967 },
5501 "diffie-hellman": { 5968 "diffie-hellman": {
5502 "version": "5.0.3", 5969 "version": "5.0.3",
5503 "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 5970 "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -5613,6 +6080,15 @@
5613 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 6080 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
5614 "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 6081 "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
5615 }, 6082 },
6083 "domexception": {
6084 "version": "1.0.1",
6085 "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
6086 "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
6087 "dev": true,
6088 "requires": {
6089 "webidl-conversions": "^4.0.2"
6090 }
6091 },
5616 "domhandler": { 6092 "domhandler": {
5617 "version": "2.4.2", 6093 "version": "2.4.2",
5618 "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 6094 "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
@@ -6191,9 +6667,9 @@
6191 "dev": true 6667 "dev": true
6192 }, 6668 },
6193 "electron": { 6669 "electron": {
6194 "version": "4.0.8", 6670 "version": "4.1.4",
6195 "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.8.tgz", 6671 "resolved": "https://registry.npmjs.org/electron/-/electron-4.1.4.tgz",
6196 "integrity": "sha512-FOBJIHkuv8wc15N+ZyqwDzPavYVu5CHMBEf14jHDWv7QW2vkEIpJjVK+PIT31kfZfvjsIP0j2wvA/FBsiqB7pw==", 6672 "integrity": "sha512-MelOjntJvd33izEjR6H4N/Uii7y535z/b2BuYXJGLNSHL6o1IlyhUQmfiT87kWABayERgeuYERgvsyf956OOFw==",
6197 "dev": true, 6673 "dev": true,
6198 "requires": { 6674 "requires": {
6199 "@types/node": "^10.12.18", 6675 "@types/node": "^10.12.18",
@@ -6202,9 +6678,9 @@
6202 }, 6678 },
6203 "dependencies": { 6679 "dependencies": {
6204 "@types/node": { 6680 "@types/node": {
6205 "version": "10.12.30", 6681 "version": "10.14.4",
6206 "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.30.tgz", 6682 "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz",
6207 "integrity": "sha512-nsqTN6zUcm9xtdJiM9OvOJ5EF0kOI8f1Zuug27O/rgtxCRJHGqncSWfCMZUP852dCKPsDsYXGvBhxfRjDBkF5Q==", 6683 "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==",
6208 "dev": true 6684 "dev": true
6209 } 6685 }
6210 } 6686 }
@@ -6543,6 +7019,16 @@
6543 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 7019 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
6544 "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", 7020 "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
6545 "dev": true 7021 "dev": true
7022 },
7023 "ws": {
7024 "version": "1.1.5",
7025 "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
7026 "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
7027 "dev": true,
7028 "requires": {
7029 "options": ">=0.0.5",
7030 "ultron": "1.0.x"
7031 }
6546 } 7032 }
6547 } 7033 }
6548 }, 7034 },
@@ -6580,6 +7066,16 @@
6580 "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 7066 "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
6581 "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 7067 "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
6582 "dev": true 7068 "dev": true
7069 },
7070 "ws": {
7071 "version": "1.1.5",
7072 "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
7073 "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
7074 "dev": true,
7075 "requires": {
7076 "options": ">=0.0.5",
7077 "ultron": "1.0.x"
7078 }
6583 } 7079 }
6584 } 7080 }
6585 }, 7081 },
@@ -6747,6 +7243,27 @@
6747 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 7243 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
6748 "dev": true 7244 "dev": true
6749 }, 7245 },
7246 "escodegen": {
7247 "version": "1.11.1",
7248 "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
7249 "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
7250 "dev": true,
7251 "requires": {
7252 "esprima": "^3.1.3",
7253 "estraverse": "^4.2.0",
7254 "esutils": "^2.0.2",
7255 "optionator": "^0.8.1",
7256 "source-map": "~0.6.1"
7257 },
7258 "dependencies": {
7259 "esprima": {
7260 "version": "3.1.3",
7261 "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
7262 "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
7263 "dev": true
7264 }
7265 }
7266 },
6750 "eslint": { 7267 "eslint": {
6751 "version": "5.10.0", 7268 "version": "5.10.0",
6752 "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.10.0.tgz", 7269 "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.10.0.tgz",
@@ -7013,6 +7530,12 @@
7013 } 7530 }
7014 } 7531 }
7015 }, 7532 },
7533 "eslint-plugin-jest": {
7534 "version": "22.4.1",
7535 "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz",
7536 "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==",
7537 "dev": true
7538 },
7016 "eslint-plugin-jsx-a11y": { 7539 "eslint-plugin-jsx-a11y": {
7017 "version": "6.1.2", 7540 "version": "6.1.2",
7018 "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", 7541 "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz",
@@ -7160,6 +7683,12 @@
7160 "safe-buffer": "^5.1.1" 7683 "safe-buffer": "^5.1.1"
7161 } 7684 }
7162 }, 7685 },
7686 "exec-sh": {
7687 "version": "0.3.2",
7688 "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
7689 "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==",
7690 "dev": true
7691 },
7163 "execa": { 7692 "execa": {
7164 "version": "1.0.0", 7693 "version": "1.0.0",
7165 "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 7694 "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
@@ -7180,6 +7709,12 @@
7180 "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", 7709 "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
7181 "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" 7710 "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
7182 }, 7711 },
7712 "exit": {
7713 "version": "0.1.2",
7714 "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
7715 "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
7716 "dev": true
7717 },
7183 "expand-brackets": { 7718 "expand-brackets": {
7184 "version": "2.1.4", 7719 "version": "2.1.4",
7185 "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 7720 "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -7310,6 +7845,20 @@
7310 "homedir-polyfill": "^1.0.1" 7845 "homedir-polyfill": "^1.0.1"
7311 } 7846 }
7312 }, 7847 },
7848 "expect": {
7849 "version": "24.7.1",
7850 "resolved": "https://registry.npmjs.org/expect/-/expect-24.7.1.tgz",
7851 "integrity": "sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw==",
7852 "dev": true,
7853 "requires": {
7854 "@jest/types": "^24.7.0",
7855 "ansi-styles": "^3.2.0",
7856 "jest-get-type": "^24.3.0",
7857 "jest-matcher-utils": "^24.7.0",
7858 "jest-message-util": "^24.7.1",
7859 "jest-regex-util": "^24.3.0"
7860 }
7861 },
7313 "expect.js": { 7862 "expect.js": {
7314 "version": "0.3.1", 7863 "version": "0.3.1",
7315 "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", 7864 "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz",
@@ -7691,6 +8240,15 @@
7691 "websocket-driver": ">=0.5.1" 8240 "websocket-driver": ">=0.5.1"
7692 } 8241 }
7693 }, 8242 },
8243 "fb-watchman": {
8244 "version": "2.0.0",
8245 "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
8246 "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
8247 "dev": true,
8248 "requires": {
8249 "bser": "^2.0.0"
8250 }
8251 },
7694 "fbjs": { 8252 "fbjs": {
7695 "version": "0.8.17", 8253 "version": "0.8.17",
7696 "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", 8254 "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
@@ -7757,6 +8315,16 @@
7757 "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 8315 "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
7758 "dev": true 8316 "dev": true
7759 }, 8317 },
8318 "fileset": {
8319 "version": "2.0.3",
8320 "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
8321 "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
8322 "dev": true,
8323 "requires": {
8324 "glob": "^7.0.3",
8325 "minimatch": "^3.0.3"
8326 }
8327 },
7760 "fill-range": { 8328 "fill-range": {
7761 "version": "4.0.0", 8329 "version": "4.0.0",
7762 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 8330 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -8979,6 +9547,12 @@
8979 "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 9547 "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
8980 "dev": true 9548 "dev": true
8981 }, 9549 },
9550 "growly": {
9551 "version": "1.3.0",
9552 "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
9553 "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
9554 "dev": true
9555 },
8982 "gulp": { 9556 "gulp": {
8983 "version": "4.0.0", 9557 "version": "4.0.0",
8984 "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", 9558 "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz",
@@ -10283,6 +10857,15 @@
10283 "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.1.tgz", 10857 "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.1.tgz",
10284 "integrity": "sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA==" 10858 "integrity": "sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA=="
10285 }, 10859 },
10860 "html-encoding-sniffer": {
10861 "version": "1.0.2",
10862 "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
10863 "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
10864 "dev": true,
10865 "requires": {
10866 "whatwg-encoding": "^1.0.1"
10867 }
10868 },
10286 "html-entities": { 10869 "html-entities": {
10287 "version": "1.2.1", 10870 "version": "1.2.1",
10288 "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", 10871 "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
@@ -10967,6 +11550,12 @@
10967 "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", 11550 "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
10968 "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" 11551 "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU="
10969 }, 11552 },
11553 "is-generator-fn": {
11554 "version": "2.1.0",
11555 "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
11556 "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
11557 "dev": true
11558 },
10970 "is-glob": { 11559 "is-glob": {
10971 "version": "4.0.0", 11560 "version": "4.0.0",
10972 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", 11561 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
@@ -11231,6 +11820,665 @@
11231 "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 11820 "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
11232 "dev": true 11821 "dev": true
11233 }, 11822 },
11823 "istanbul-api": {
11824 "version": "2.1.4",
11825 "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.4.tgz",
11826 "integrity": "sha512-aAFQL0HA2BLUl18XmTQ7H7CGKI58DtZFvvfmg6e+rA3iNFergvpi16czLV4CpI7HOImMeZ5mqI62dvSNVtUQVA==",
11827 "dev": true,
11828 "requires": {
11829 "async": "^2.6.1",
11830 "compare-versions": "^3.2.1",
11831 "fileset": "^2.0.3",
11832 "istanbul-lib-coverage": "^2.0.4",
11833 "istanbul-lib-hook": "^2.0.6",
11834 "istanbul-lib-instrument": "^3.2.0",
11835 "istanbul-lib-report": "^2.0.7",
11836 "istanbul-lib-source-maps": "^3.0.5",
11837 "istanbul-reports": "^2.2.2",
11838 "js-yaml": "^3.13.0",
11839 "make-dir": "^2.1.0",
11840 "minimatch": "^3.0.4",
11841 "once": "^1.4.0"
11842 },
11843 "dependencies": {
11844 "async": {
11845 "version": "2.6.2",
11846 "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
11847 "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
11848 "dev": true,
11849 "requires": {
11850 "lodash": "^4.17.11"
11851 }
11852 },
11853 "js-yaml": {
11854 "version": "3.13.1",
11855 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
11856 "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
11857 "dev": true,
11858 "requires": {
11859 "argparse": "^1.0.7",
11860 "esprima": "^4.0.0"
11861 }
11862 },
11863 "make-dir": {
11864 "version": "2.1.0",
11865 "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
11866 "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
11867 "dev": true,
11868 "requires": {
11869 "pify": "^4.0.1",
11870 "semver": "^5.6.0"
11871 }
11872 },
11873 "pify": {
11874 "version": "4.0.1",
11875 "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
11876 "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
11877 "dev": true
11878 }
11879 }
11880 },
11881 "istanbul-lib-coverage": {
11882 "version": "2.0.4",
11883 "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
11884 "integrity": "sha512-LXTBICkMARVgo579kWDm8SqfB6nvSDKNqIOBEjmJRnL04JvoMHCYGWaMddQnseJYtkEuEvO/sIcOxPLk9gERug==",
11885 "dev": true
11886 },
11887 "istanbul-lib-hook": {
11888 "version": "2.0.6",
11889 "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.6.tgz",
11890 "integrity": "sha512-829DKONApZ7UCiPXcOYWSgkFXa4+vNYoNOt3F+4uDJLKL1OotAoVwvThoEj1i8jmOj7odbYcR3rnaHu+QroaXg==",
11891 "dev": true,
11892 "requires": {
11893 "append-transform": "^1.0.0"
11894 }
11895 },
11896 "istanbul-lib-instrument": {
11897 "version": "3.2.0",
11898 "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.2.0.tgz",
11899 "integrity": "sha512-06IM3xShbNW4NgZv5AP4QH0oHqf1/ivFo8eFys0ZjPXHGldHJQWb3riYOKXqmOqfxXBfxu4B+g/iuhOPZH0RJg==",
11900 "dev": true,
11901 "requires": {
11902 "@babel/generator": "^7.0.0",
11903 "@babel/parser": "^7.0.0",
11904 "@babel/template": "^7.0.0",
11905 "@babel/traverse": "^7.0.0",
11906 "@babel/types": "^7.0.0",
11907 "istanbul-lib-coverage": "^2.0.4",
11908 "semver": "^6.0.0"
11909 },
11910 "dependencies": {
11911 "semver": {
11912 "version": "6.0.0",
11913 "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
11914 "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
11915 "dev": true
11916 }
11917 }
11918 },
11919 "istanbul-lib-report": {
11920 "version": "2.0.7",
11921 "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.7.tgz",
11922 "integrity": "sha512-wLH6beJBFbRBLiTlMOBxmb85cnVM1Vyl36N48e4e/aTKSM3WbOx7zbVIH1SQ537fhhsPbX0/C5JB4qsmyRXXyA==",
11923 "dev": true,
11924 "requires": {
11925 "istanbul-lib-coverage": "^2.0.4",
11926 "make-dir": "^2.1.0",
11927 "supports-color": "^6.0.0"
11928 },
11929 "dependencies": {
11930 "make-dir": {
11931 "version": "2.1.0",
11932 "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
11933 "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
11934 "dev": true,
11935 "requires": {
11936 "pify": "^4.0.1",
11937 "semver": "^5.6.0"
11938 }
11939 },
11940 "pify": {
11941 "version": "4.0.1",
11942 "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
11943 "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
11944 "dev": true
11945 },
11946 "supports-color": {
11947 "version": "6.1.0",
11948 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
11949 "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
11950 "dev": true,
11951 "requires": {
11952 "has-flag": "^3.0.0"
11953 }
11954 }
11955 }
11956 },
11957 "istanbul-lib-source-maps": {
11958 "version": "3.0.5",
11959 "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.5.tgz",
11960 "integrity": "sha512-eDhZ7r6r1d1zQPVZehLc3D0K14vRba/eBYkz3rw16DLOrrTzve9RmnkcwrrkWVgO1FL3EK5knujVe5S8QHE9xw==",
11961 "dev": true,
11962 "requires": {
11963 "debug": "^4.1.1",
11964 "istanbul-lib-coverage": "^2.0.4",
11965 "make-dir": "^2.1.0",
11966 "rimraf": "^2.6.2",
11967 "source-map": "^0.6.1"
11968 },
11969 "dependencies": {
11970 "debug": {
11971 "version": "4.1.1",
11972 "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
11973 "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
11974 "dev": true,
11975 "requires": {
11976 "ms": "^2.1.1"
11977 }
11978 },
11979 "make-dir": {
11980 "version": "2.1.0",
11981 "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
11982 "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
11983 "dev": true,
11984 "requires": {
11985 "pify": "^4.0.1",
11986 "semver": "^5.6.0"
11987 }
11988 },
11989 "pify": {
11990 "version": "4.0.1",
11991 "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
11992 "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
11993 "dev": true
11994 }
11995 }
11996 },
11997 "istanbul-reports": {
11998 "version": "2.2.2",
11999 "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.2.tgz",
12000 "integrity": "sha512-ZFuTdBQ3PSaPnm02aEA4R6mzQ2AF9w03CYiXADzWbbE48v/EFOWF4MaX4FT0NRdqIk48I7o0RPi+S8TMswaCbQ==",
12001 "dev": true,
12002 "requires": {
12003 "handlebars": "^4.1.0"
12004 }
12005 },
12006 "jest": {
12007 "version": "24.7.1",
12008 "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz",
12009 "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==",
12010 "dev": true,
12011 "requires": {
12012 "import-local": "^2.0.0",
12013 "jest-cli": "^24.7.1"
12014 },
12015 "dependencies": {
12016 "import-local": {
12017 "version": "2.0.0",
12018 "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
12019 "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
12020 "dev": true,
12021 "requires": {
12022 "pkg-dir": "^3.0.0",
12023 "resolve-cwd": "^2.0.0"
12024 }
12025 },
12026 "jest-cli": {
12027 "version": "24.7.1",
12028 "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.7.1.tgz",
12029 "integrity": "sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ==",
12030 "dev": true,
12031 "requires": {
12032 "@jest/core": "^24.7.1",
12033 "@jest/test-result": "^24.7.1",
12034 "@jest/types": "^24.7.0",
12035 "chalk": "^2.0.1",
12036 "exit": "^0.1.2",
12037 "import-local": "^2.0.0",
12038 "is-ci": "^2.0.0",
12039 "jest-config": "^24.7.1",
12040 "jest-util": "^24.7.1",
12041 "jest-validate": "^24.7.0",
12042 "prompts": "^2.0.1",
12043 "realpath-native": "^1.1.0",
12044 "yargs": "^12.0.2"
12045 }
12046 },
12047 "pkg-dir": {
12048 "version": "3.0.0",
12049 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
12050 "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
12051 "dev": true,
12052 "requires": {
12053 "find-up": "^3.0.0"
12054 }
12055 }
12056 }
12057 },
12058 "jest-changed-files": {
12059 "version": "24.7.0",
12060 "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.7.0.tgz",
12061 "integrity": "sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw==",
12062 "dev": true,
12063 "requires": {
12064 "@jest/types": "^24.7.0",
12065 "execa": "^1.0.0",
12066 "throat": "^4.0.0"
12067 }
12068 },
12069 "jest-config": {
12070 "version": "24.7.1",
12071 "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.7.1.tgz",
12072 "integrity": "sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g==",
12073 "dev": true,
12074 "requires": {
12075 "@babel/core": "^7.1.0",
12076 "@jest/test-sequencer": "^24.7.1",
12077 "@jest/types": "^24.7.0",
12078 "babel-jest": "^24.7.1",
12079 "chalk": "^2.0.1",
12080 "glob": "^7.1.1",
12081 "jest-environment-jsdom": "^24.7.1",
12082 "jest-environment-node": "^24.7.1",
12083 "jest-get-type": "^24.3.0",
12084 "jest-jasmine2": "^24.7.1",
12085 "jest-regex-util": "^24.3.0",
12086 "jest-resolve": "^24.7.1",
12087 "jest-util": "^24.7.1",
12088 "jest-validate": "^24.7.0",
12089 "micromatch": "^3.1.10",
12090 "pretty-format": "^24.7.0",
12091 "realpath-native": "^1.1.0"
12092 }
12093 },
12094 "jest-diff": {
12095 "version": "24.7.0",
12096 "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.7.0.tgz",
12097 "integrity": "sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg==",
12098 "dev": true,
12099 "requires": {
12100 "chalk": "^2.0.1",
12101 "diff-sequences": "^24.3.0",
12102 "jest-get-type": "^24.3.0",
12103 "pretty-format": "^24.7.0"
12104 }
12105 },
12106 "jest-docblock": {
12107 "version": "24.3.0",
12108 "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz",
12109 "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==",
12110 "dev": true,
12111 "requires": {
12112 "detect-newline": "^2.1.0"
12113 }
12114 },
12115 "jest-each": {
12116 "version": "24.7.1",
12117 "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.7.1.tgz",
12118 "integrity": "sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA==",
12119 "dev": true,
12120 "requires": {
12121 "@jest/types": "^24.7.0",
12122 "chalk": "^2.0.1",
12123 "jest-get-type": "^24.3.0",
12124 "jest-util": "^24.7.1",
12125 "pretty-format": "^24.7.0"
12126 }
12127 },
12128 "jest-environment-jsdom": {
12129 "version": "24.7.1",
12130 "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz",
12131 "integrity": "sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg==",
12132 "dev": true,
12133 "requires": {
12134 "@jest/environment": "^24.7.1",
12135 "@jest/fake-timers": "^24.7.1",
12136 "@jest/types": "^24.7.0",
12137 "jest-mock": "^24.7.0",
12138 "jest-util": "^24.7.1",
12139 "jsdom": "^11.5.1"
12140 }
12141 },
12142 "jest-environment-node": {
12143 "version": "24.7.1",
12144 "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.7.1.tgz",
12145 "integrity": "sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA==",
12146 "dev": true,
12147 "requires": {
12148 "@jest/environment": "^24.7.1",
12149 "@jest/fake-timers": "^24.7.1",
12150 "@jest/types": "^24.7.0",
12151 "jest-mock": "^24.7.0",
12152 "jest-util": "^24.7.1"
12153 }
12154 },
12155 "jest-get-type": {
12156 "version": "24.3.0",
12157 "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.3.0.tgz",
12158 "integrity": "sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==",
12159 "dev": true
12160 },
12161 "jest-haste-map": {
12162 "version": "24.7.1",
12163 "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.7.1.tgz",
12164 "integrity": "sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==",
12165 "dev": true,
12166 "requires": {
12167 "@jest/types": "^24.7.0",
12168 "anymatch": "^2.0.0",
12169 "fb-watchman": "^2.0.0",
12170 "fsevents": "^1.2.7",
12171 "graceful-fs": "^4.1.15",
12172 "invariant": "^2.2.4",
12173 "jest-serializer": "^24.4.0",
12174 "jest-util": "^24.7.1",
12175 "jest-worker": "^24.6.0",
12176 "micromatch": "^3.1.10",
12177 "sane": "^4.0.3",
12178 "walker": "^1.0.7"
12179 }
12180 },
12181 "jest-jasmine2": {
12182 "version": "24.7.1",
12183 "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz",
12184 "integrity": "sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w==",
12185 "dev": true,
12186 "requires": {
12187 "@babel/traverse": "^7.1.0",
12188 "@jest/environment": "^24.7.1",
12189 "@jest/test-result": "^24.7.1",
12190 "@jest/types": "^24.7.0",
12191 "chalk": "^2.0.1",
12192 "co": "^4.6.0",
12193 "expect": "^24.7.1",
12194 "is-generator-fn": "^2.0.0",
12195 "jest-each": "^24.7.1",
12196 "jest-matcher-utils": "^24.7.0",
12197 "jest-message-util": "^24.7.1",
12198 "jest-runtime": "^24.7.1",
12199 "jest-snapshot": "^24.7.1",
12200 "jest-util": "^24.7.1",
12201 "pretty-format": "^24.7.0",
12202 "throat": "^4.0.0"
12203 }
12204 },
12205 "jest-leak-detector": {
12206 "version": "24.7.0",
12207 "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz",
12208 "integrity": "sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ==",
12209 "dev": true,
12210 "requires": {
12211 "pretty-format": "^24.7.0"
12212 }
12213 },
12214 "jest-matcher-utils": {
12215 "version": "24.7.0",
12216 "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz",
12217 "integrity": "sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg==",
12218 "dev": true,
12219 "requires": {
12220 "chalk": "^2.0.1",
12221 "jest-diff": "^24.7.0",
12222 "jest-get-type": "^24.3.0",
12223 "pretty-format": "^24.7.0"
12224 }
12225 },
12226 "jest-message-util": {
12227 "version": "24.7.1",
12228 "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.7.1.tgz",
12229 "integrity": "sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg==",
12230 "dev": true,
12231 "requires": {
12232 "@babel/code-frame": "^7.0.0",
12233 "@jest/test-result": "^24.7.1",
12234 "@jest/types": "^24.7.0",
12235 "@types/stack-utils": "^1.0.1",
12236 "chalk": "^2.0.1",
12237 "micromatch": "^3.1.10",
12238 "slash": "^2.0.0",
12239 "stack-utils": "^1.0.1"
12240 }
12241 },
12242 "jest-mock": {
12243 "version": "24.7.0",
12244 "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.7.0.tgz",
12245 "integrity": "sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng==",
12246 "dev": true,
12247 "requires": {
12248 "@jest/types": "^24.7.0"
12249 }
12250 },
12251 "jest-pnp-resolver": {
12252 "version": "1.2.1",
12253 "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
12254 "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
12255 "dev": true
12256 },
12257 "jest-regex-util": {
12258 "version": "24.3.0",
12259 "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz",
12260 "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==",
12261 "dev": true
12262 },
12263 "jest-resolve": {
12264 "version": "24.7.1",
12265 "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz",
12266 "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==",
12267 "dev": true,
12268 "requires": {
12269 "@jest/types": "^24.7.0",
12270 "browser-resolve": "^1.11.3",
12271 "chalk": "^2.0.1",
12272 "jest-pnp-resolver": "^1.2.1",
12273 "realpath-native": "^1.1.0"
12274 }
12275 },
12276 "jest-resolve-dependencies": {
12277 "version": "24.7.1",
12278 "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz",
12279 "integrity": "sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg==",
12280 "dev": true,
12281 "requires": {
12282 "@jest/types": "^24.7.0",
12283 "jest-regex-util": "^24.3.0",
12284 "jest-snapshot": "^24.7.1"
12285 }
12286 },
12287 "jest-runner": {
12288 "version": "24.7.1",
12289 "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.7.1.tgz",
12290 "integrity": "sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw==",
12291 "dev": true,
12292 "requires": {
12293 "@jest/console": "^24.7.1",
12294 "@jest/environment": "^24.7.1",
12295 "@jest/test-result": "^24.7.1",
12296 "@jest/types": "^24.7.0",
12297 "chalk": "^2.4.2",
12298 "exit": "^0.1.2",
12299 "graceful-fs": "^4.1.15",
12300 "jest-config": "^24.7.1",
12301 "jest-docblock": "^24.3.0",
12302 "jest-haste-map": "^24.7.1",
12303 "jest-jasmine2": "^24.7.1",
12304 "jest-leak-detector": "^24.7.0",
12305 "jest-message-util": "^24.7.1",
12306 "jest-resolve": "^24.7.1",
12307 "jest-runtime": "^24.7.1",
12308 "jest-util": "^24.7.1",
12309 "jest-worker": "^24.6.0",
12310 "source-map-support": "^0.5.6",
12311 "throat": "^4.0.0"
12312 }
12313 },
12314 "jest-runtime": {
12315 "version": "24.7.1",
12316 "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.7.1.tgz",
12317 "integrity": "sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A==",
12318 "dev": true,
12319 "requires": {
12320 "@jest/console": "^24.7.1",
12321 "@jest/environment": "^24.7.1",
12322 "@jest/source-map": "^24.3.0",
12323 "@jest/transform": "^24.7.1",
12324 "@jest/types": "^24.7.0",
12325 "@types/yargs": "^12.0.2",
12326 "chalk": "^2.0.1",
12327 "exit": "^0.1.2",
12328 "glob": "^7.1.3",
12329 "graceful-fs": "^4.1.15",
12330 "jest-config": "^24.7.1",
12331 "jest-haste-map": "^24.7.1",
12332 "jest-message-util": "^24.7.1",
12333 "jest-mock": "^24.7.0",
12334 "jest-regex-util": "^24.3.0",
12335 "jest-resolve": "^24.7.1",
12336 "jest-snapshot": "^24.7.1",
12337 "jest-util": "^24.7.1",
12338 "jest-validate": "^24.7.0",
12339 "realpath-native": "^1.1.0",
12340 "slash": "^2.0.0",
12341 "strip-bom": "^3.0.0",
12342 "yargs": "^12.0.2"
12343 }
12344 },
12345 "jest-serializer": {
12346 "version": "24.4.0",
12347 "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
12348 "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
12349 "dev": true
12350 },
12351 "jest-snapshot": {
12352 "version": "24.7.1",
12353 "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.7.1.tgz",
12354 "integrity": "sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA==",
12355 "dev": true,
12356 "requires": {
12357 "@babel/types": "^7.0.0",
12358 "@jest/types": "^24.7.0",
12359 "chalk": "^2.0.1",
12360 "expect": "^24.7.1",
12361 "jest-diff": "^24.7.0",
12362 "jest-matcher-utils": "^24.7.0",
12363 "jest-message-util": "^24.7.1",
12364 "jest-resolve": "^24.7.1",
12365 "mkdirp": "^0.5.1",
12366 "natural-compare": "^1.4.0",
12367 "pretty-format": "^24.7.0",
12368 "semver": "^5.5.0"
12369 }
12370 },
12371 "jest-util": {
12372 "version": "24.7.1",
12373 "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.7.1.tgz",
12374 "integrity": "sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A==",
12375 "dev": true,
12376 "requires": {
12377 "@jest/console": "^24.7.1",
12378 "@jest/fake-timers": "^24.7.1",
12379 "@jest/source-map": "^24.3.0",
12380 "@jest/test-result": "^24.7.1",
12381 "@jest/types": "^24.7.0",
12382 "callsites": "^3.0.0",
12383 "chalk": "^2.0.1",
12384 "graceful-fs": "^4.1.15",
12385 "is-ci": "^2.0.0",
12386 "mkdirp": "^0.5.1",
12387 "slash": "^2.0.0",
12388 "source-map": "^0.6.0"
12389 },
12390 "dependencies": {
12391 "callsites": {
12392 "version": "3.1.0",
12393 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
12394 "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
12395 "dev": true
12396 }
12397 }
12398 },
12399 "jest-validate": {
12400 "version": "24.7.0",
12401 "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.7.0.tgz",
12402 "integrity": "sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA==",
12403 "dev": true,
12404 "requires": {
12405 "@jest/types": "^24.7.0",
12406 "camelcase": "^5.0.0",
12407 "chalk": "^2.0.1",
12408 "jest-get-type": "^24.3.0",
12409 "leven": "^2.1.0",
12410 "pretty-format": "^24.7.0"
12411 }
12412 },
12413 "jest-watcher": {
12414 "version": "24.7.1",
12415 "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.7.1.tgz",
12416 "integrity": "sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw==",
12417 "dev": true,
12418 "requires": {
12419 "@jest/test-result": "^24.7.1",
12420 "@jest/types": "^24.7.0",
12421 "@types/yargs": "^12.0.9",
12422 "ansi-escapes": "^3.0.0",
12423 "chalk": "^2.0.1",
12424 "jest-util": "^24.7.1",
12425 "string-length": "^2.0.0"
12426 }
12427 },
12428 "jest-worker": {
12429 "version": "24.6.0",
12430 "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
12431 "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==",
12432 "dev": true,
12433 "requires": {
12434 "merge-stream": "^1.0.1",
12435 "supports-color": "^6.1.0"
12436 },
12437 "dependencies": {
12438 "merge-stream": {
12439 "version": "1.0.1",
12440 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
12441 "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
12442 "dev": true,
12443 "requires": {
12444 "readable-stream": "^2.0.1"
12445 }
12446 },
12447 "readable-stream": {
12448 "version": "2.3.6",
12449 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
12450 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
12451 "dev": true,
12452 "requires": {
12453 "core-util-is": "~1.0.0",
12454 "inherits": "~2.0.3",
12455 "isarray": "~1.0.0",
12456 "process-nextick-args": "~2.0.0",
12457 "safe-buffer": "~5.1.1",
12458 "string_decoder": "~1.1.1",
12459 "util-deprecate": "~1.0.1"
12460 }
12461 },
12462 "string_decoder": {
12463 "version": "1.1.1",
12464 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
12465 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
12466 "dev": true,
12467 "requires": {
12468 "safe-buffer": "~5.1.0"
12469 }
12470 },
12471 "supports-color": {
12472 "version": "6.1.0",
12473 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
12474 "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
12475 "dev": true,
12476 "requires": {
12477 "has-flag": "^3.0.0"
12478 }
12479 }
12480 }
12481 },
11234 "js-base64": { 12482 "js-base64": {
11235 "version": "2.5.1", 12483 "version": "2.5.1",
11236 "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", 12484 "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
@@ -11263,6 +12511,68 @@
11263 "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 12511 "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
11264 "dev": true 12512 "dev": true
11265 }, 12513 },
12514 "jsdom": {
12515 "version": "11.12.0",
12516 "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
12517 "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
12518 "dev": true,
12519 "requires": {
12520 "abab": "^2.0.0",
12521 "acorn": "^5.5.3",
12522 "acorn-globals": "^4.1.0",
12523 "array-equal": "^1.0.0",
12524 "cssom": ">= 0.3.2 < 0.4.0",
12525 "cssstyle": "^1.0.0",
12526 "data-urls": "^1.0.0",
12527 "domexception": "^1.0.1",
12528 "escodegen": "^1.9.1",
12529 "html-encoding-sniffer": "^1.0.2",
12530 "left-pad": "^1.3.0",
12531 "nwsapi": "^2.0.7",
12532 "parse5": "4.0.0",
12533 "pn": "^1.1.0",
12534 "request": "^2.87.0",
12535 "request-promise-native": "^1.0.5",
12536 "sax": "^1.2.4",
12537 "symbol-tree": "^3.2.2",
12538 "tough-cookie": "^2.3.4",
12539 "w3c-hr-time": "^1.0.1",
12540 "webidl-conversions": "^4.0.2",
12541 "whatwg-encoding": "^1.0.3",
12542 "whatwg-mimetype": "^2.1.0",
12543 "whatwg-url": "^6.4.1",
12544 "ws": "^5.2.0",
12545 "xml-name-validator": "^3.0.0"
12546 },
12547 "dependencies": {
12548 "acorn": {
12549 "version": "5.7.3",
12550 "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
12551 "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
12552 "dev": true
12553 },
12554 "whatwg-url": {
12555 "version": "6.5.0",
12556 "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
12557 "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
12558 "dev": true,
12559 "requires": {
12560 "lodash.sortby": "^4.7.0",
12561 "tr46": "^1.0.1",
12562 "webidl-conversions": "^4.0.2"
12563 }
12564 },
12565 "ws": {
12566 "version": "5.2.2",
12567 "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
12568 "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
12569 "dev": true,
12570 "requires": {
12571 "async-limiter": "~1.0.0"
12572 }
12573 }
12574 }
12575 },
11266 "jsesc": { 12576 "jsesc": {
11267 "version": "2.5.2", 12577 "version": "2.5.2",
11268 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 12578 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -11519,6 +12829,12 @@
11519 "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 12829 "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
11520 "dev": true 12830 "dev": true
11521 }, 12831 },
12832 "kleur": {
12833 "version": "3.0.3",
12834 "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
12835 "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
12836 "dev": true
12837 },
11522 "last-run": { 12838 "last-run": {
11523 "version": "1.1.1", 12839 "version": "1.1.1",
11524 "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", 12840 "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
@@ -11596,6 +12912,12 @@
11596 "flush-write-stream": "^1.0.2" 12912 "flush-write-stream": "^1.0.2"
11597 } 12913 }
11598 }, 12914 },
12915 "left-pad": {
12916 "version": "1.3.0",
12917 "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
12918 "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
12919 "dev": true
12920 },
11599 "lerna": { 12921 "lerna": {
11600 "version": "3.11.1", 12922 "version": "3.11.1",
11601 "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.11.1.tgz", 12923 "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.11.1.tgz",
@@ -11621,6 +12943,12 @@
11621 "npmlog": "^4.1.2" 12943 "npmlog": "^4.1.2"
11622 } 12944 }
11623 }, 12945 },
12946 "leven": {
12947 "version": "2.1.0",
12948 "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
12949 "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
12950 "dev": true
12951 },
11624 "levn": { 12952 "levn": {
11625 "version": "0.3.0", 12953 "version": "0.3.0",
11626 "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 12954 "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -12135,6 +13463,15 @@
12135 "kind-of": "^6.0.2" 13463 "kind-of": "^6.0.2"
12136 } 13464 }
12137 }, 13465 },
13466 "makeerror": {
13467 "version": "1.0.11",
13468 "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
13469 "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
13470 "dev": true,
13471 "requires": {
13472 "tmpl": "1.0.x"
13473 }
13474 },
12138 "map-age-cleaner": { 13475 "map-age-cleaner": {
12139 "version": "0.1.3", 13476 "version": "0.1.3",
12140 "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 13477 "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
@@ -12165,6 +13502,11 @@
12165 "object-visit": "^1.0.0" 13502 "object-visit": "^1.0.0"
12166 } 13503 }
12167 }, 13504 },
13505 "marked": {
13506 "version": "0.6.1",
13507 "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.1.tgz",
13508 "integrity": "sha512-+H0L3ibcWhAZE02SKMqmvYsErLo4EAVJxu5h3bHBBDvvjeWXtl92rGUSBYHL2++5Y+RSNgl8dYOAXcYe7lp1fA=="
13509 },
12168 "matchdep": { 13510 "matchdep": {
12169 "version": "2.0.0", 13511 "version": "2.0.0",
12170 "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", 13512 "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
@@ -12860,6 +14202,12 @@
12860 } 14202 }
12861 } 14203 }
12862 }, 14204 },
14205 "node-int64": {
14206 "version": "0.4.0",
14207 "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
14208 "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
14209 "dev": true
14210 },
12863 "node-libs-browser": { 14211 "node-libs-browser": {
12864 "version": "2.2.0", 14212 "version": "2.2.0",
12865 "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", 14213 "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
@@ -12931,6 +14279,19 @@
12931 "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", 14279 "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
12932 "dev": true 14280 "dev": true
12933 }, 14281 },
14282 "node-notifier": {
14283 "version": "5.4.0",
14284 "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
14285 "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
14286 "dev": true,
14287 "requires": {
14288 "growly": "^1.3.0",
14289 "is-wsl": "^1.1.0",
14290 "semver": "^5.5.0",
14291 "shellwords": "^0.1.1",
14292 "which": "^1.3.0"
14293 }
14294 },
12934 "node-pre-gyp": { 14295 "node-pre-gyp": {
12935 "version": "0.10.3", 14296 "version": "0.10.3",
12936 "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", 14297 "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
@@ -13577,6 +14938,12 @@
13577 "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 14938 "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
13578 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 14939 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
13579 }, 14940 },
14941 "nwsapi": {
14942 "version": "2.1.3",
14943 "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz",
14944 "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==",
14945 "dev": true
14946 },
13580 "oauth-sign": { 14947 "oauth-sign": {
13581 "version": "0.9.0", 14948 "version": "0.9.0",
13582 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 14949 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -13988,6 +15355,15 @@
13988 "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", 15355 "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
13989 "dev": true 15356 "dev": true
13990 }, 15357 },
15358 "p-each-series": {
15359 "version": "1.0.0",
15360 "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
15361 "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
15362 "dev": true,
15363 "requires": {
15364 "p-reduce": "^1.0.0"
15365 }
15366 },
13991 "p-finally": { 15367 "p-finally": {
13992 "version": "1.0.0", 15368 "version": "1.0.0",
13993 "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 15369 "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -14298,6 +15674,12 @@
14298 } 15674 }
14299 } 15675 }
14300 }, 15676 },
15677 "parse5": {
15678 "version": "4.0.0",
15679 "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
15680 "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
15681 "dev": true
15682 },
14301 "parsejson": { 15683 "parsejson": {
14302 "version": "0.0.3", 15684 "version": "0.0.3",
14303 "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", 15685 "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
@@ -14553,6 +15935,12 @@
14553 "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 15935 "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
14554 "dev": true 15936 "dev": true
14555 }, 15937 },
15938 "pn": {
15939 "version": "1.1.0",
15940 "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
15941 "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
15942 "dev": true
15943 },
14556 "portfinder": { 15944 "portfinder": {
14557 "version": "1.0.20", 15945 "version": "1.0.20",
14558 "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", 15946 "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
@@ -14616,6 +16004,32 @@
14616 "utila": "~0.4" 16004 "utila": "~0.4"
14617 } 16005 }
14618 }, 16006 },
16007 "pretty-format": {
16008 "version": "24.7.0",
16009 "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz",
16010 "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==",
16011 "dev": true,
16012 "requires": {
16013 "@jest/types": "^24.7.0",
16014 "ansi-regex": "^4.0.0",
16015 "ansi-styles": "^3.2.0",
16016 "react-is": "^16.8.4"
16017 },
16018 "dependencies": {
16019 "ansi-regex": {
16020 "version": "4.1.0",
16021 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
16022 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
16023 "dev": true
16024 },
16025 "react-is": {
16026 "version": "16.8.6",
16027 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
16028 "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
16029 "dev": true
16030 }
16031 }
16032 },
14619 "pretty-hrtime": { 16033 "pretty-hrtime": {
14620 "version": "1.0.3", 16034 "version": "1.0.3",
14621 "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", 16035 "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
@@ -14731,6 +16145,16 @@
14731 "retry": "^0.10.0" 16145 "retry": "^0.10.0"
14732 } 16146 }
14733 }, 16147 },
16148 "prompts": {
16149 "version": "2.0.4",
16150 "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz",
16151 "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==",
16152 "dev": true,
16153 "requires": {
16154 "kleur": "^3.0.2",
16155 "sisteransi": "^1.0.0"
16156 }
16157 },
14734 "promzard": { 16158 "promzard": {
14735 "version": "0.3.0", 16159 "version": "0.3.0",
14736 "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", 16160 "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz",
@@ -15406,6 +16830,15 @@
15406 } 16830 }
15407 } 16831 }
15408 }, 16832 },
16833 "realpath-native": {
16834 "version": "1.1.0",
16835 "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
16836 "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
16837 "dev": true,
16838 "requires": {
16839 "util.promisify": "^1.0.0"
16840 }
16841 },
15409 "rechoir": { 16842 "rechoir": {
15410 "version": "0.6.2", 16843 "version": "0.6.2",
15411 "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 16844 "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@@ -15739,6 +17172,26 @@
15739 "uuid": "^3.3.2" 17172 "uuid": "^3.3.2"
15740 } 17173 }
15741 }, 17174 },
17175 "request-promise-core": {
17176 "version": "1.1.2",
17177 "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
17178 "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
17179 "dev": true,
17180 "requires": {
17181 "lodash": "^4.17.11"
17182 }
17183 },
17184 "request-promise-native": {
17185 "version": "1.0.7",
17186 "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
17187 "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
17188 "dev": true,
17189 "requires": {
17190 "request-promise-core": "1.1.2",
17191 "stealthy-require": "^1.1.1",
17192 "tough-cookie": "^2.3.3"
17193 }
17194 },
15742 "require-directory": { 17195 "require-directory": {
15743 "version": "2.1.1", 17196 "version": "2.1.1",
15744 "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 17197 "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -15875,6 +17328,12 @@
15875 "resolved": "https://registry.npmjs.org/route-parser/-/route-parser-0.0.5.tgz", 17328 "resolved": "https://registry.npmjs.org/route-parser/-/route-parser-0.0.5.tgz",
15876 "integrity": "sha1-fR0J0zXkkJQDHqFpkaSnmwG74fQ=" 17329 "integrity": "sha1-fR0J0zXkkJQDHqFpkaSnmwG74fQ="
15877 }, 17330 },
17331 "rsvp": {
17332 "version": "4.8.4",
17333 "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz",
17334 "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==",
17335 "dev": true
17336 },
15878 "run-async": { 17337 "run-async": {
15879 "version": "2.3.0", 17338 "version": "2.3.0",
15880 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 17339 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
@@ -15933,6 +17392,23 @@
15933 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 17392 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
15934 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 17393 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
15935 }, 17394 },
17395 "sane": {
17396 "version": "4.1.0",
17397 "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
17398 "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
17399 "dev": true,
17400 "requires": {
17401 "@cnakazawa/watch": "^1.0.3",
17402 "anymatch": "^2.0.0",
17403 "capture-exit": "^2.0.0",
17404 "exec-sh": "^0.3.2",
17405 "execa": "^1.0.0",
17406 "fb-watchman": "^2.0.0",
17407 "micromatch": "^3.1.4",
17408 "minimist": "^1.1.1",
17409 "walker": "~1.0.5"
17410 }
17411 },
15936 "sanitize-filename": { 17412 "sanitize-filename": {
15937 "version": "1.6.1", 17413 "version": "1.6.1",
15938 "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", 17414 "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
@@ -16396,6 +17872,12 @@
16396 "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 17872 "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
16397 "dev": true 17873 "dev": true
16398 }, 17874 },
17875 "shellwords": {
17876 "version": "0.1.1",
17877 "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
17878 "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
17879 "dev": true
17880 },
16399 "sigmund": { 17881 "sigmund": {
16400 "version": "1.0.1", 17882 "version": "1.0.1",
16401 "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 17883 "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
@@ -16460,6 +17942,12 @@
16460 } 17942 }
16461 } 17943 }
16462 }, 17944 },
17945 "sisteransi": {
17946 "version": "1.0.0",
17947 "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz",
17948 "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==",
17949 "dev": true
17950 },
16463 "slash": { 17951 "slash": {
16464 "version": "2.0.0", 17952 "version": "2.0.0",
16465 "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", 17953 "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
@@ -17068,6 +18556,12 @@
17068 "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", 18556 "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
17069 "dev": true 18557 "dev": true
17070 }, 18558 },
18559 "stack-utils": {
18560 "version": "1.0.2",
18561 "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
18562 "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
18563 "dev": true
18564 },
17071 "stat-mode": { 18565 "stat-mode": {
17072 "version": "0.2.2", 18566 "version": "0.2.2",
17073 "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", 18567 "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
@@ -17136,6 +18630,12 @@
17136 } 18630 }
17137 } 18631 }
17138 }, 18632 },
18633 "stealthy-require": {
18634 "version": "1.1.1",
18635 "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
18636 "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
18637 "dev": true
18638 },
17139 "stream-browserify": { 18639 "stream-browserify": {
17140 "version": "2.0.2", 18640 "version": "2.0.2",
17141 "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 18641 "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
@@ -17238,6 +18738,16 @@
17238 "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", 18738 "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
17239 "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" 18739 "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
17240 }, 18740 },
18741 "string-length": {
18742 "version": "2.0.0",
18743 "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
18744 "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
18745 "dev": true,
18746 "requires": {
18747 "astral-regex": "^1.0.0",
18748 "strip-ansi": "^4.0.0"
18749 }
18750 },
17241 "string-width": { 18751 "string-width": {
17242 "version": "2.1.1", 18752 "version": "2.1.1",
17243 "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 18753 "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -17331,6 +18841,12 @@
17331 "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 18841 "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
17332 "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 18842 "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
17333 }, 18843 },
18844 "symbol-tree": {
18845 "version": "3.2.2",
18846 "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
18847 "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
18848 "dev": true
18849 },
17334 "table": { 18850 "table": {
17335 "version": "5.2.3", 18851 "version": "5.2.3",
17336 "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", 18852 "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz",
@@ -17540,6 +19056,47 @@
17540 } 19056 }
17541 } 19057 }
17542 }, 19058 },
19059 "test-exclude": {
19060 "version": "5.2.2",
19061 "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.2.tgz",
19062 "integrity": "sha512-N2pvaLpT8guUpb5Fe1GJlmvmzH3x+DAKmmyEQmFP792QcLYoGE1syxztSvPD1V8yPe6VrcCt6YGQVjSRjCASsA==",
19063 "dev": true,
19064 "requires": {
19065 "glob": "^7.1.3",
19066 "minimatch": "^3.0.4",
19067 "read-pkg-up": "^4.0.0",
19068 "require-main-filename": "^2.0.0"
19069 },
19070 "dependencies": {
19071 "read-pkg": {
19072 "version": "3.0.0",
19073 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
19074 "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
19075 "dev": true,
19076 "requires": {
19077 "load-json-file": "^4.0.0",
19078 "normalize-package-data": "^2.3.2",
19079 "path-type": "^3.0.0"
19080 }
19081 },
19082 "read-pkg-up": {
19083 "version": "4.0.0",
19084 "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
19085 "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
19086 "dev": true,
19087 "requires": {
19088 "find-up": "^3.0.0",
19089 "read-pkg": "^3.0.0"
19090 }
19091 },
19092 "require-main-filename": {
19093 "version": "2.0.0",
19094 "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
19095 "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
19096 "dev": true
19097 }
19098 }
19099 },
17543 "text-extensions": { 19100 "text-extensions": {
17544 "version": "1.9.0", 19101 "version": "1.9.0",
17545 "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", 19102 "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
@@ -17563,6 +19120,12 @@
17563 "prop-types": "^15.5.8" 19120 "prop-types": "^15.5.8"
17564 } 19121 }
17565 }, 19122 },
19123 "throat": {
19124 "version": "4.1.0",
19125 "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
19126 "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
19127 "dev": true
19128 },
17566 "throttleit": { 19129 "throttleit": {
17567 "version": "0.0.2", 19130 "version": "0.0.2",
17568 "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 19131 "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
@@ -17666,6 +19229,12 @@
17666 "os-tmpdir": "~1.0.2" 19229 "os-tmpdir": "~1.0.2"
17667 } 19230 }
17668 }, 19231 },
19232 "tmpl": {
19233 "version": "1.0.4",
19234 "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
19235 "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
19236 "dev": true
19237 },
17669 "to-absolute-glob": { 19238 "to-absolute-glob": {
17670 "version": "2.0.2", 19239 "version": "2.0.2",
17671 "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", 19240 "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
@@ -18602,6 +20171,15 @@
18602 "indexof": "0.0.1" 20171 "indexof": "0.0.1"
18603 } 20172 }
18604 }, 20173 },
20174 "w3c-hr-time": {
20175 "version": "1.0.1",
20176 "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
20177 "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
20178 "dev": true,
20179 "requires": {
20180 "browser-process-hrtime": "^0.1.2"
20181 }
20182 },
18605 "wait-on": { 20183 "wait-on": {
18606 "version": "3.2.0", 20184 "version": "3.2.0",
18607 "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.2.0.tgz", 20185 "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.2.0.tgz",
@@ -18660,6 +20238,15 @@
18660 } 20238 }
18661 } 20239 }
18662 }, 20240 },
20241 "walker": {
20242 "version": "1.0.7",
20243 "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
20244 "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
20245 "dev": true,
20246 "requires": {
20247 "makeerror": "1.0.x"
20248 }
20249 },
18663 "warning": { 20250 "warning": {
18664 "version": "3.0.0", 20251 "version": "3.0.0",
18665 "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", 20252 "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
@@ -19060,11 +20647,26 @@
19060 "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", 20647 "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
19061 "dev": true 20648 "dev": true
19062 }, 20649 },
20650 "whatwg-encoding": {
20651 "version": "1.0.5",
20652 "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
20653 "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
20654 "dev": true,
20655 "requires": {
20656 "iconv-lite": "0.4.24"
20657 }
20658 },
19063 "whatwg-fetch": { 20659 "whatwg-fetch": {
19064 "version": "3.0.0", 20660 "version": "3.0.0",
19065 "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", 20661 "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
19066 "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" 20662 "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
19067 }, 20663 },
20664 "whatwg-mimetype": {
20665 "version": "2.3.0",
20666 "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
20667 "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
20668 "dev": true
20669 },
19068 "whatwg-url": { 20670 "whatwg-url": {
19069 "version": "7.0.0", 20671 "version": "7.0.0",
19070 "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", 20672 "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
@@ -19318,13 +20920,11 @@
19318 } 20920 }
19319 }, 20921 },
19320 "ws": { 20922 "ws": {
19321 "version": "1.1.5", 20923 "version": "6.2.1",
19322 "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", 20924 "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
19323 "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", 20925 "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
19324 "dev": true,
19325 "requires": { 20926 "requires": {
19326 "options": ">=0.0.5", 20927 "async-limiter": "~1.0.0"
19327 "ultron": "1.0.x"
19328 } 20928 }
19329 }, 20929 },
19330 "wtf-8": { 20930 "wtf-8": {
@@ -19339,6 +20939,12 @@
19339 "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", 20939 "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
19340 "dev": true 20940 "dev": true
19341 }, 20941 },
20942 "xml-name-validator": {
20943 "version": "3.0.0",
20944 "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
20945 "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
20946 "dev": true
20947 },
19342 "xmlbuilder": { 20948 "xmlbuilder": {
19343 "version": "9.0.7", 20949 "version": "9.0.7",
19344 "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 20950 "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
diff --git a/package.json b/package.json
index 361491acd..c1a8c310f 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.0.1", 5 "version": "5.1.0",
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",
@@ -15,6 +15,8 @@
15 "start:local": "cross-env LOCAL_API=1 npm start", 15 "start:local": "cross-env LOCAL_API=1 npm start",
16 "start:live": "cross-env LIVE_API=1 npm start", 16 "start:live": "cross-env LIVE_API=1 npm start",
17 "dev": "cross-env NODE_ENV=development gulp dev", 17 "dev": "cross-env NODE_ENV=development gulp dev",
18 "test": "jest",
19 "test:watch": "jest --watch",
18 "lint": "eslint src", 20 "lint": "eslint src",
19 "manage-translations": "node ./src/i18n/manage-translations.js", 21 "manage-translations": "node ./src/i18n/manage-translations.js",
20 "sign": "gulp sign", 22 "sign": "gulp sign",
@@ -54,6 +56,7 @@
54 "hex-to-rgba": "1.0.2", 56 "hex-to-rgba": "1.0.2",
55 "jsonwebtoken": "8.5.1", 57 "jsonwebtoken": "8.5.1",
56 "lodash": "^4.17.4", 58 "lodash": "^4.17.4",
59 "marked": "0.6.1",
57 "mdi": "^1.9.33", 60 "mdi": "^1.9.33",
58 "mime-types": "2.1.21", 61 "mime-types": "2.1.21",
59 "mobx": "5.7.0", 62 "mobx": "5.7.0",
@@ -82,7 +85,8 @@
82 "semver": "^5.4.1", 85 "semver": "^5.4.1",
83 "smoothscroll-polyfill": "^0.3.4", 86 "smoothscroll-polyfill": "^0.3.4",
84 "tar": "^4.0.2", 87 "tar": "^4.0.2",
85 "uuid": "^3.0.1" 88 "uuid": "^3.0.1",
89 "ws": "6.2.1"
86 }, 90 },
87 "devDependencies": { 91 "devDependencies": {
88 "@adlk/misty": "^0.1.1", 92 "@adlk/misty": "^0.1.1",
@@ -113,13 +117,14 @@
113 "cross-env": "^5.0.5", 117 "cross-env": "^5.0.5",
114 "cz-conventional-changelog": "2.1.0", 118 "cz-conventional-changelog": "2.1.0",
115 "dotenv": "^4.0.0", 119 "dotenv": "^4.0.0",
116 "electron": "4.0.8", 120 "electron": "4.1.4",
117 "electron-builder": "20.38.4", 121 "electron-builder": "20.38.4",
118 "electron-rebuild": "1.8.4", 122 "electron-rebuild": "1.8.4",
119 "eslint": "5.10.0", 123 "eslint": "5.10.0",
120 "eslint-config-airbnb": "17.1.0", 124 "eslint-config-airbnb": "17.1.0",
121 "eslint-loader": "^1.9.0", 125 "eslint-loader": "^1.9.0",
122 "eslint-plugin-import": "2.14.0", 126 "eslint-plugin-import": "2.14.0",
127 "eslint-plugin-jest": "22.4.1",
123 "eslint-plugin-jsx-a11y": "6.1.2", 128 "eslint-plugin-jsx-a11y": "6.1.2",
124 "eslint-plugin-react": "7.11.1", 129 "eslint-plugin-react": "7.11.1",
125 "expect.js": "0.3.1", 130 "expect.js": "0.3.1",
@@ -132,6 +137,7 @@
132 "hex-rgb": "3.0.0", 137 "hex-rgb": "3.0.0",
133 "html-webpack-plugin": "4.0.0-beta.5", 138 "html-webpack-plugin": "4.0.0-beta.5",
134 "husky": "^1.1.4", 139 "husky": "^1.1.4",
140 "jest": "24.7.1",
135 "kebab-case": "1.0.0", 141 "kebab-case": "1.0.0",
136 "lerna": "^3.8.0", 142 "lerna": "^3.8.0",
137 "mobx-react-devtools": "6.0.3", 143 "mobx-react-devtools": "6.0.3",
diff --git a/packages/theme/src/themes/dark/index.ts b/packages/theme/src/themes/dark/index.ts
index fd04b106c..bd9f001e8 100644
--- a/packages/theme/src/themes/dark/index.ts
+++ b/packages/theme/src/themes/dark/index.ts
@@ -1,5 +1,5 @@
1import color from 'color'; 1import color from 'color';
2import { merge, cloneDeep } from 'lodash'; 2import { cloneDeep, merge } from 'lodash';
3 3
4import * as defaultStyles from '../default'; 4import * as defaultStyles from '../default';
5import * as legacyStyles from '../legacy'; 5import * as legacyStyles from '../legacy';
@@ -112,21 +112,9 @@ export const workspaces = merge({}, defaultStyles.workspaces, {
112 }, 112 },
113}); 113});
114 114
115// // Workspace settings 115// Announcements
116// export const workspaceSettings = merge({}, defaultStyles.workspaceSettings, { 116export const announcements = merge({}, defaultStyles.announcements, {
117// listItemBorderColor: legacyStyles.darkThemeGrayDarker, 117 spotlight: {
118// listItemHoverBgColor: legacyStyles.darkThemeGrayDarker, 118 background: legacyStyles.darkThemeGrayDark,
119// }); 119 },
120// 120});
121// // Workspace Drawer
122// export const workspaceDrawerBackground = color(colorBackground).lighten(0.3).hex();
123// export const workspaceDrawerAddButtonColor = legacyStyles.darkThemeGrayLighter;
124// export const workspaceDrawerAddButtonHoverColor = legacyStyles.darkThemeGraySmoke;
125// export const workspaceDrawerItemBorder = color(workspaceDrawerBackground).lighten(0.2).hex();
126// export const workspaceDrawerItemHoverBackground = color(workspaceDrawerBackground).lighten(0.2).hex();
127// export const workspaceDrawerItemActiveBackground = defaultStyles.brandPrimary;
128// export const workspaceDrawerItemNameColor = colorText;
129// export const workspaceDrawerItemNameActiveColor = 'white';
130// export const workspaceDrawerServicesColor = color(colorText).darken(0.5).hex();
131// export const workspaceDrawerServicesActiveColor = color(defaultStyles.brandPrimary).lighten(0.5).hex();
132//
diff --git a/packages/theme/src/themes/default/index.ts b/packages/theme/src/themes/default/index.ts
index d0493b82f..0f02fa3c8 100644
--- a/packages/theme/src/themes/default/index.ts
+++ b/packages/theme/src/themes/default/index.ts
@@ -201,22 +201,9 @@ export const workspaces = {
201 }, 201 },
202}; 202};
203 203
204// export const workspaceSettings = { 204// Announcements
205// listItemHeight: 57, 205export const announcements = {
206// listItemBorderColor: legacyStyles.themeGrayLightest, 206 spotlight: {
207// listItemHoverBgColor: legacyStyles.themeGrayLightest, 207 background: legacyStyles.themeGrayLightest,
208// }; 208 },
209// 209};
210// // Workspace Drawer
211// export const workspaceDrawerWidth = 300;
212// export const workspaceDrawerPadding = 20;
213// export const workspaceDrawerBackground = color(colorBackground).lighten(0.1).hex();
214// export const workspaceDrawerAddButtonColor = legacyStyles.themeGrayLight;
215// export const workspaceDrawerAddButtonHoverColor = color(legacyStyles.themeGrayLight).lighten(0.1).hex();
216// export const workspaceDrawerItemHoverBackground = color(workspaceDrawerBackground).darken(0.01).hex();
217// export const workspaceDrawerItemActiveBackground = legacyStyles.themeGrayLightest;
218// export const workspaceDrawerItemBorder = color(workspaceDrawerBackground).darken(0.05).hex();
219// export const workspaceDrawerItemNameColor = colorText;
220// export const workspaceDrawerItemNameActiveColor = colorText;
221// export const workspaceDrawerServicesColor = color(colorText).lighten(1.5).hex();
222// export const workspaceDrawerServicesActiveColor = workspaceDrawerServicesColor;
diff --git a/src/actions/index.js b/src/actions/index.js
index 00f843cd6..fc525afeb 100644
--- a/src/actions/index.js
+++ b/src/actions/index.js
@@ -11,6 +11,7 @@ import payment from './payment';
11import news from './news'; 11import news from './news';
12import settings from './settings'; 12import settings from './settings';
13import requests from './requests'; 13import requests from './requests';
14import announcements from '../features/announcements/actions';
14import workspaces from '../features/workspaces/actions'; 15import workspaces from '../features/workspaces/actions';
15 16
16const actions = Object.assign({}, { 17const actions = Object.assign({}, {
@@ -28,5 +29,6 @@ const actions = Object.assign({}, {
28 29
29export default Object.assign( 30export default Object.assign(
30 defineActions(actions, PropTypes.checkPropTypes), 31 defineActions(actions, PropTypes.checkPropTypes),
32 { announcements },
31 { workspaces }, 33 { workspaces },
32); 34);
diff --git a/src/actions/lib/actions.js b/src/actions/lib/actions.js
index 2bc7d2711..b38db9946 100644
--- a/src/actions/lib/actions.js
+++ b/src/actions/lib/actions.js
@@ -1,7 +1,7 @@
1export const createActionsFromDefinitions = (actionDefinitions, validate) => { 1export const createActionsFromDefinitions = (actionDefinitions, validate) => {
2 const actions = {}; 2 const actions = {};
3 Object.keys(actionDefinitions).forEach((actionName) => { 3 Object.keys(actionDefinitions).forEach((actionName) => {
4 const action = (params) => { 4 const action = (params = {}) => {
5 const schema = actionDefinitions[actionName]; 5 const schema = actionDefinitions[actionName];
6 validate(schema, params, actionName); 6 validate(schema, params, actionName);
7 action.notify(params); 7 action.notify(params);
diff --git a/src/actions/service.js b/src/actions/service.js
index ceaabc31e..68c62d594 100644
--- a/src/actions/service.js
+++ b/src/actions/service.js
@@ -4,7 +4,9 @@ import ServiceModel from '../models/Service';
4export default { 4export default {
5 setActive: { 5 setActive: {
6 serviceId: PropTypes.string.isRequired, 6 serviceId: PropTypes.string.isRequired,
7 keepActiveRoute: PropTypes.bool,
7 }, 8 },
9 blurActive: {},
8 setActiveNext: {}, 10 setActiveNext: {},
9 setActivePrev: {}, 11 setActivePrev: {},
10 showAddServiceInterface: { 12 showAddServiceInterface: {
diff --git a/src/api/PaymentApi.js b/src/api/PaymentApi.js
index 3f6bb442e..7325151e9 100644
--- a/src/api/PaymentApi.js
+++ b/src/api/PaymentApi.js
@@ -11,12 +11,4 @@ export default class PaymentApi {
11 getHostedPage(planId) { 11 getHostedPage(planId) {
12 return this.server.getHostedPage(planId); 12 return this.server.getHostedPage(planId);
13 } 13 }
14
15 getDashboardUrl() {
16 return this.server.getPaymentDashboardUrl();
17 }
18
19 getOrders() {
20 return this.server.getSubscriptionOrders();
21 }
22} 14}
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js
index bafeef005..a9ce202ff 100644
--- a/src/api/server/ServerApi.js
+++ b/src/api/server/ServerApi.js
@@ -268,7 +268,7 @@ export default class ServerApi {
268 const data = await request.json(); 268 const data = await request.json();
269 269
270 const features = data; 270 const features = data;
271 console.debug('ServerApi::getDefaultFeatures resolves', features); 271 debug('ServerApi::getDefaultFeatures resolves', features);
272 return features; 272 return features;
273 } 273 }
274 274
@@ -280,7 +280,7 @@ export default class ServerApi {
280 const data = await request.json(); 280 const data = await request.json();
281 281
282 const features = data; 282 const features = data;
283 console.debug('ServerApi::getFeatures resolves', features); 283 debug('ServerApi::getFeatures resolves', features);
284 return features; 284 return features;
285 } 285 }
286 286
@@ -418,23 +418,6 @@ export default class ServerApi {
418 return data; 418 return data;
419 } 419 }
420 420
421 async getPaymentDashboardUrl() {
422 const request = await sendAuthRequest(`${API_URL}/me/billing`);
423 if (!request.ok) throw request;
424 const data = await request.json();
425 debug('ServerApi::getPaymentDashboardUrl resolves', data);
426 return data;
427 }
428
429 async getSubscriptionOrders() {
430 const request = await sendAuthRequest(`${API_URL}/me/subscription`);
431 if (!request.ok) throw request;
432 const data = await request.json();
433 const orders = this._mapOrderModels(data);
434 debug('ServerApi::getSubscriptionOrders resolves', orders);
435 return orders;
436 }
437
438 // News 421 // News
439 async getLatestNews() { 422 async getLatestNews() {
440 const url = `${API_URL}/news?platform=${os.platform()}&arch=${os.arch()}&version=${app.getVersion()}`; 423 const url = `${API_URL}/news?platform=${os.platform()}&arch=${os.arch()}&version=${app.getVersion()}`;
diff --git a/src/app.js b/src/app.js
index fb9f1c6ab..cb3e37c64 100644
--- a/src/app.js
+++ b/src/app.js
@@ -27,6 +27,7 @@ import RecipesScreen from './containers/settings/RecipesScreen';
27import ServicesScreen from './containers/settings/ServicesScreen'; 27import ServicesScreen from './containers/settings/ServicesScreen';
28import EditServiceScreen from './containers/settings/EditServiceScreen'; 28import EditServiceScreen from './containers/settings/EditServiceScreen';
29import AccountScreen from './containers/settings/AccountScreen'; 29import AccountScreen from './containers/settings/AccountScreen';
30import TeamScreen from './containers/settings/TeamScreen';
30import EditUserScreen from './containers/settings/EditUserScreen'; 31import EditUserScreen from './containers/settings/EditUserScreen';
31import EditSettingsScreen from './containers/settings/EditSettingsScreen'; 32import EditSettingsScreen from './containers/settings/EditSettingsScreen';
32import InviteSettingsScreen from './containers/settings/InviteScreen'; 33import InviteSettingsScreen from './containers/settings/InviteScreen';
@@ -42,6 +43,8 @@ import SubscriptionPopupScreen from './containers/subscription/SubscriptionPopup
42import WorkspacesScreen from './features/workspaces/containers/WorkspacesScreen'; 43import WorkspacesScreen from './features/workspaces/containers/WorkspacesScreen';
43import EditWorkspaceScreen from './features/workspaces/containers/EditWorkspaceScreen'; 44import EditWorkspaceScreen from './features/workspaces/containers/EditWorkspaceScreen';
44import { WORKSPACES_ROUTES } from './features/workspaces'; 45import { WORKSPACES_ROUTES } from './features/workspaces';
46import AnnouncementScreen from './features/announcements/components/AnnouncementScreen';
47import { ANNOUNCEMENTS_ROUTES } from './features/announcements';
45 48
46// Add Polyfills 49// Add Polyfills
47smoothScroll.polyfill(); 50smoothScroll.polyfill();
@@ -72,6 +75,7 @@ window.addEventListener('load', () => {
72 <I18N> 75 <I18N>
73 <Router history={history}> 76 <Router history={history}>
74 <Route path="/" component={AppLayoutContainer}> 77 <Route path="/" component={AppLayoutContainer}>
78 <Route path={ANNOUNCEMENTS_ROUTES.TARGET} component={AnnouncementScreen} />
75 <Route path="/settings" component={SettingsWindow}> 79 <Route path="/settings" component={SettingsWindow}>
76 <IndexRedirect to="/settings/recipes" /> 80 <IndexRedirect to="/settings/recipes" />
77 <Route path="/settings/recipes" component={RecipesScreen} /> 81 <Route path="/settings/recipes" component={RecipesScreen} />
@@ -82,6 +86,7 @@ window.addEventListener('load', () => {
82 <Route path={WORKSPACES_ROUTES.EDIT} component={EditWorkspaceScreen} /> 86 <Route path={WORKSPACES_ROUTES.EDIT} component={EditWorkspaceScreen} />
83 <Route path="/settings/user" component={AccountScreen} /> 87 <Route path="/settings/user" component={AccountScreen} />
84 <Route path="/settings/user/edit" component={EditUserScreen} /> 88 <Route path="/settings/user/edit" component={EditUserScreen} />
89 <Route path="/settings/team" component={TeamScreen} />
85 <Route path="/settings/app" component={EditSettingsScreen} /> 90 <Route path="/settings/app" component={EditSettingsScreen} />
86 <Route path="/settings/invite" component={InviteSettingsScreen} /> 91 <Route path="/settings/invite" component={InviteSettingsScreen} />
87 </Route> 92 </Route>
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index b7f7722dd..b31c00f54 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -16,6 +16,7 @@ import ErrorBoundary from '../util/ErrorBoundary';
16import { isWindows } from '../../environment'; 16import { isWindows } from '../../environment';
17import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; 17import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator';
18import { workspaceStore } from '../../features/workspaces'; 18import { workspaceStore } from '../../features/workspaces';
19import { announcementActions } from '../../features/announcements/actions';
19 20
20function createMarkup(HTMLString) { 21function createMarkup(HTMLString) {
21 return { __html: HTMLString }; 22 return { __html: HTMLString };
@@ -71,6 +72,7 @@ class AppLayout extends Component {
71 // isOnline: PropTypes.bool.isRequired, 72 // isOnline: PropTypes.bool.isRequired,
72 showServicesUpdatedInfoBar: PropTypes.bool.isRequired, 73 showServicesUpdatedInfoBar: PropTypes.bool.isRequired,
73 appUpdateIsDownloaded: PropTypes.bool.isRequired, 74 appUpdateIsDownloaded: PropTypes.bool.isRequired,
75 nextAppReleaseVersion: PropTypes.string,
74 removeNewsItem: PropTypes.func.isRequired, 76 removeNewsItem: PropTypes.func.isRequired,
75 reloadServicesAfterUpdate: PropTypes.func.isRequired, 77 reloadServicesAfterUpdate: PropTypes.func.isRequired,
76 installAppUpdate: PropTypes.func.isRequired, 78 installAppUpdate: PropTypes.func.isRequired,
@@ -84,6 +86,7 @@ class AppLayout extends Component {
84 86
85 static defaultProps = { 87 static defaultProps = {
86 children: [], 88 children: [],
89 nextAppReleaseVersion: null,
87 }; 90 };
88 91
89 static contextTypes = { 92 static contextTypes = {
@@ -102,6 +105,7 @@ class AppLayout extends Component {
102 news, 105 news,
103 showServicesUpdatedInfoBar, 106 showServicesUpdatedInfoBar,
104 appUpdateIsDownloaded, 107 appUpdateIsDownloaded,
108 nextAppReleaseVersion,
105 removeNewsItem, 109 removeNewsItem,
106 reloadServicesAfterUpdate, 110 reloadServicesAfterUpdate,
107 installAppUpdate, 111 installAppUpdate,
@@ -178,19 +182,23 @@ class AppLayout extends Component {
178 <span className="mdi mdi-information" /> 182 <span className="mdi mdi-information" />
179 {intl.formatMessage(messages.updateAvailable)} 183 {intl.formatMessage(messages.updateAvailable)}
180 {' '} 184 {' '}
181 <a href="https://meetfranz.com/changelog" target="_blank"> 185 <button
186 className="info-bar__inline-button"
187 type="button"
188 onClick={() => announcementActions.show({ targetVersion: nextAppReleaseVersion })}
189 >
182 <u>{intl.formatMessage(messages.changelog)}</u> 190 <u>{intl.formatMessage(messages.changelog)}</u>
183 </a> 191 </button>
184 </InfoBar> 192 </InfoBar>
185 )} 193 )}
186 {isDelayAppScreenVisible && (<DelayApp />)} 194 {isDelayAppScreenVisible && (<DelayApp />)}
187 <BasicAuth /> 195 <BasicAuth />
188 <ShareFranz /> 196 <ShareFranz />
189 {services} 197 {services}
198 {children}
190 </div> 199 </div>
191 </div> 200 </div>
192 </div> 201 </div>
193 {children}
194 </div> 202 </div>
195 </ErrorBoundary> 203 </ErrorBoundary>
196 ); 204 );
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 181b95c8c..3f6964b6b 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -3,12 +3,11 @@ import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; 3import { observer, PropTypes as MobxPropTypes } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5import ReactTooltip from 'react-tooltip'; 5import ReactTooltip from 'react-tooltip';
6import moment from 'moment'; 6import { ProBadge } from '@meetfranz/ui';
7 7
8import Loader from '../../ui/Loader'; 8import Loader from '../../ui/Loader';
9import Button from '../../ui/Button'; 9import Button from '../../ui/Button';
10import Infobox from '../../ui/Infobox'; 10import Infobox from '../../ui/Infobox';
11import Link from '../../ui/Link';
12import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; 11import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen';
13 12
14const messages = defineMessages({ 13const messages = defineMessages({
@@ -24,10 +23,6 @@ const messages = defineMessages({
24 id: 'settings.account.headlineUpgrade', 23 id: 'settings.account.headlineUpgrade',
25 defaultMessage: '!!!Upgrade your Account', 24 defaultMessage: '!!!Upgrade your Account',
26 }, 25 },
27 headlineInvoices: {
28 id: 'settings.account.headlineInvoices',
29 defaultMessage: '!!Invoices',
30 },
31 headlineDangerZone: { 26 headlineDangerZone: {
32 id: 'settings.account.headlineDangerZone', 27 id: 'settings.account.headlineDangerZone',
33 defaultMessage: '!!Danger Zone', 28 defaultMessage: '!!Danger Zone',
@@ -48,6 +43,10 @@ const messages = defineMessages({
48 id: 'settings.account.account.editButton', 43 id: 'settings.account.account.editButton',
49 defaultMessage: '!!!Edit Account', 44 defaultMessage: '!!!Edit Account',
50 }, 45 },
46 invoicesButton: {
47 id: 'settings.account.headlineInvoices',
48 defaultMessage: '!!Invoices',
49 },
51 invoiceDownload: { 50 invoiceDownload: {
52 id: 'settings.account.invoiceDownload', 51 id: 'settings.account.invoiceDownload',
53 defaultMessage: '!!!Download', 52 defaultMessage: '!!!Download',
@@ -77,19 +76,17 @@ const messages = defineMessages({
77export default @observer class AccountDashboard extends Component { 76export default @observer class AccountDashboard extends Component {
78 static propTypes = { 77 static propTypes = {
79 user: MobxPropTypes.observableObject.isRequired, 78 user: MobxPropTypes.observableObject.isRequired,
80 orders: MobxPropTypes.arrayOrObservableArray.isRequired,
81 isLoading: PropTypes.bool.isRequired, 79 isLoading: PropTypes.bool.isRequired,
82 isLoadingOrdersInfo: PropTypes.bool.isRequired,
83 isLoadingPlans: PropTypes.bool.isRequired, 80 isLoadingPlans: PropTypes.bool.isRequired,
84 isCreatingPaymentDashboardUrl: PropTypes.bool.isRequired,
85 userInfoRequestFailed: PropTypes.bool.isRequired, 81 userInfoRequestFailed: PropTypes.bool.isRequired,
86 retryUserInfoRequest: PropTypes.func.isRequired, 82 retryUserInfoRequest: PropTypes.func.isRequired,
87 openDashboard: PropTypes.func.isRequired,
88 openExternalUrl: PropTypes.func.isRequired,
89 onCloseSubscriptionWindow: PropTypes.func.isRequired, 83 onCloseSubscriptionWindow: PropTypes.func.isRequired,
90 deleteAccount: PropTypes.func.isRequired, 84 deleteAccount: PropTypes.func.isRequired,
91 isLoadingDeleteAccount: PropTypes.bool.isRequired, 85 isLoadingDeleteAccount: PropTypes.bool.isRequired,
92 isDeleteAccountSuccessful: PropTypes.bool.isRequired, 86 isDeleteAccountSuccessful: PropTypes.bool.isRequired,
87 openEditAccount: PropTypes.func.isRequired,
88 openBilling: PropTypes.func.isRequired,
89 openInvoices: PropTypes.func.isRequired,
93 }; 90 };
94 91
95 static contextTypes = { 92 static contextTypes = {
@@ -99,12 +96,7 @@ export default @observer class AccountDashboard extends Component {
99 render() { 96 render() {
100 const { 97 const {
101 user, 98 user,
102 orders,
103 isLoading, 99 isLoading,
104 isCreatingPaymentDashboardUrl,
105 openDashboard,
106 openExternalUrl,
107 isLoadingOrdersInfo,
108 isLoadingPlans, 100 isLoadingPlans,
109 userInfoRequestFailed, 101 userInfoRequestFailed,
110 retryUserInfoRequest, 102 retryUserInfoRequest,
@@ -112,6 +104,9 @@ export default @observer class AccountDashboard extends Component {
112 deleteAccount, 104 deleteAccount,
113 isLoadingDeleteAccount, 105 isLoadingDeleteAccount,
114 isDeleteAccountSuccessful, 106 isDeleteAccountSuccessful,
107 openEditAccount,
108 openBilling,
109 openInvoices,
115 } = this.props; 110 } = this.props;
116 const { intl } = this.context; 111 const { intl } = this.context;
117 112
@@ -149,80 +144,53 @@ export default @observer class AccountDashboard extends Component {
149 src="./assets/images/logo.svg" 144 src="./assets/images/logo.svg"
150 alt="" 145 alt=""
151 /> 146 />
152 {user.isPremium && (
153 <span
154 className="account__avatar-premium emoji"
155 data-tip="Premium Supporter Account"
156 >
157 <img src="./assets/images/emoji/star.png" alt="" />
158 </span>
159 )}
160 </div> 147 </div>
161 <div className="account__info"> 148 <div className="account__info">
162 <h2> 149 <h2>
163 {`${user.firstname} ${user.lastname}`} 150 <span className="username">{`${user.firstname} ${user.lastname}`}</span>
151 {user.isPremium && (
152 <>
153 {' '}
154 <ProBadge />
155 <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span>
156 </>
157 )}
164 </h2> 158 </h2>
165 {user.organization && `${user.organization}, `} 159 {user.organization && `${user.organization}, `}
166 {user.email} 160 {user.email}
167 <br />
168 {user.isPremium && ( 161 {user.isPremium && (
169 <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> 162 <div className="manage-user-links">
163 <Button
164 label={intl.formatMessage(messages.accountEditButton)}
165 className="franz-form__button--inverted"
166 onClick={openEditAccount}
167 />
168 {user.isSubscriptionOwner && (
169 <>
170 <Button
171 label={intl.formatMessage(messages.manageSubscriptionButtonLabel)}
172 className="franz-form__button--inverted"
173 onClick={openBilling}
174 />
175 <Button
176 label={intl.formatMessage(messages.invoicesButton)}
177 className="franz-form__button--inverted"
178 onClick={openInvoices}
179 />
180 </>
181 )}
182 </div>
170 )} 183 )}
171 </div> 184 </div>
172 <Link to="/settings/user/edit" className="button"> 185 {!user.isPremium && (
173 {intl.formatMessage(messages.accountEditButton)} 186 <Button
174 </Link> 187 label={intl.formatMessage(messages.accountEditButton)}
175 {user.emailValidated} 188 className="franz-form__button--inverted"
176 </div> 189 onClick={openEditAccount}
177 </div> 190 />
178 )}
179
180 {user.isSubscriptionOwner && (
181 isLoadingOrdersInfo ? (
182 <Loader />
183 ) : (
184 <div className="account franz-form">
185 {orders.length > 0 && (
186 <Fragment>
187 <div className="account__box">
188 <h2>{intl.formatMessage(messages.headlineSubscription)}</h2>
189 <div className="account__subscription">
190 {orders[0].name}
191 <span className="badge">{orders[0].price}</span>
192 <Button
193 label={intl.formatMessage(messages.manageSubscriptionButtonLabel)}
194 className="account__subscription-button franz-form__button--inverted"
195 loaded={!isCreatingPaymentDashboardUrl}
196 onClick={() => openDashboard()}
197 />
198 </div>
199 </div>
200 <div className="account__box">
201 <h2>{intl.formatMessage(messages.headlineInvoices)}</h2>
202 <table className="invoices">
203 <tbody>
204 {orders.map(order => (
205 <tr key={order.id}>
206 <td className="invoices__date">
207 {moment(order.date).format('DD.MM.YYYY')}
208 </td>
209 <td className="invoices__action">
210 <button
211 type="button"
212 onClick={() => openExternalUrl(order.invoiceUrl)}
213 >
214 {intl.formatMessage(messages.invoiceDownload)}
215 </button>
216 </td>
217 </tr>
218 ))}
219 </tbody>
220 </table>
221 </div>
222 </Fragment>
223 )} 191 )}
224 </div> 192 </div>
225 ) 193 </div>
226 )} 194 )}
227 195
228 {!user.isPremium && ( 196 {!user.isPremium && (
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js
index 993b0a44a..df4b3b3b2 100644
--- a/src/components/settings/navigation/SettingsNavigation.js
+++ b/src/components/settings/navigation/SettingsNavigation.js
@@ -7,6 +7,7 @@ import { ProBadge } from '@meetfranz/ui';
7import Link from '../../ui/Link'; 7import Link from '../../ui/Link';
8import { workspaceStore } from '../../../features/workspaces'; 8import { workspaceStore } from '../../../features/workspaces';
9import UIStore from '../../../stores/UIStore'; 9import UIStore from '../../../stores/UIStore';
10import UserStore from '../../../stores/UserStore';
10 11
11const messages = defineMessages({ 12const messages = defineMessages({
12 availableServices: { 13 availableServices: {
@@ -25,6 +26,10 @@ const messages = defineMessages({
25 id: 'settings.navigation.account', 26 id: 'settings.navigation.account',
26 defaultMessage: '!!!Account', 27 defaultMessage: '!!!Account',
27 }, 28 },
29 team: {
30 id: 'settings.navigation.team',
31 defaultMessage: '!!!Manage Team',
32 },
28 settings: { 33 settings: {
29 id: 'settings.navigation.settings', 34 id: 'settings.navigation.settings',
30 defaultMessage: '!!!Settings', 35 defaultMessage: '!!!Settings',
@@ -43,6 +48,7 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp
43 static propTypes = { 48 static propTypes = {
44 stores: PropTypes.shape({ 49 stores: PropTypes.shape({
45 ui: PropTypes.instanceOf(UIStore).isRequired, 50 ui: PropTypes.instanceOf(UIStore).isRequired,
51 user: PropTypes.instanceOf(UserStore).isRequired,
46 }).isRequired, 52 }).isRequired,
47 serviceCount: PropTypes.number.isRequired, 53 serviceCount: PropTypes.number.isRequired,
48 workspaceCount: PropTypes.number.isRequired, 54 workspaceCount: PropTypes.number.isRequired,
@@ -55,6 +61,7 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp
55 render() { 61 render() {
56 const { serviceCount, workspaceCount, stores } = this.props; 62 const { serviceCount, workspaceCount, stores } = this.props;
57 const { isDarkThemeActive } = stores.ui; 63 const { isDarkThemeActive } = stores.ui;
64 const { router, user } = stores;
58 const { intl } = this.context; 65 const { intl } = this.context;
59 66
60 return ( 67 return (
@@ -98,6 +105,16 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp
98 {intl.formatMessage(messages.account)} 105 {intl.formatMessage(messages.account)}
99 </Link> 106 </Link>
100 <Link 107 <Link
108 to="/settings/team"
109 className="settings-navigation__link"
110 activeClassName="is-active"
111 >
112 {intl.formatMessage(messages.team)}
113 {!user.data.isPremium && (
114 <ProBadge inverted={!isDarkThemeActive && router.location.pathname === '/settings/team'} />
115 )}
116 </Link>
117 <Link
101 to="/settings/app" 118 to="/settings/app"
102 className="settings-navigation__link" 119 className="settings-navigation__link"
103 activeClassName="is-active" 120 activeClassName="is-active"
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 8429d0ecb..efd453356 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -81,6 +81,10 @@ const messages = defineMessages({
81 id: 'settings.app.restartRequired', 81 id: 'settings.app.restartRequired',
82 defaultMessage: '!!!Changes require restart', 82 defaultMessage: '!!!Changes require restart',
83 }, 83 },
84 languageDisclaimer: {
85 id: 'settings.app.languageDisclaimer',
86 defaultMessage: '!!!Official translations are English & German. All other languages are community based translations.',
87 },
84}); 88});
85 89
86export default @observer class EditSettingsForm extends Component { 90export default @observer class EditSettingsForm extends Component {
@@ -239,6 +243,10 @@ export default @observer class EditSettingsForm extends Component {
239 {intl.formatMessage(messages.currentVersion)} 243 {intl.formatMessage(messages.currentVersion)}
240 {' '} 244 {' '}
241 {remote.app.getVersion()} 245 {remote.app.getVersion()}
246 <p className="settings__message">
247 <span className="mdi mdi-information" />
248 {intl.formatMessage(messages.languageDisclaimer)}
249 </p>
242 </form> 250 </form>
243 </div> 251 </div>
244 </div> 252 </div>
diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js
new file mode 100644
index 000000000..82c517fcb
--- /dev/null
+++ b/src/components/settings/team/TeamDashboard.js
@@ -0,0 +1,152 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl';
5import ReactTooltip from 'react-tooltip';
6import injectSheet from 'react-jss';
7
8import Loader from '../../ui/Loader';
9import Button from '../../ui/Button';
10import Infobox from '../../ui/Infobox';
11import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer';
12
13const messages = defineMessages({
14 headline: {
15 id: 'settings.team.headline',
16 defaultMessage: '!!!Team',
17 },
18 contentHeadline: {
19 id: 'settings.team.contentHeadline',
20 defaultMessage: '!!!Franz for Teams',
21 },
22 intro: {
23 id: 'settings.team.intro',
24 defaultMessage: '!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.',
25 },
26 copy: {
27 id: 'settings.team.copy',
28 defaultMessage: '!!!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!',
29 },
30 manageButton: {
31 id: 'settings.team.manageAction',
32 defaultMessage: '!!!Manage your Team on meetfranz.com',
33 },
34 upgradeButton: {
35 id: 'settings.team.upgradeAction',
36 defaultMessage: '!!!Upgrade your Account',
37 },
38});
39
40const styles = {
41 cta: {
42 margin: [40, 'auto'],
43 },
44 container: {
45 display: 'flex',
46 flexDirection: 'column',
47 height: 'auto',
48
49 '@media(min-width: 800px)': {
50 flexDirection: 'row',
51 },
52 },
53 content: {
54 height: 'auto',
55 order: 1,
56
57 '@media(min-width: 800px)': {
58 order: 0,
59 },
60 },
61 image: {
62 display: 'block',
63 height: 150,
64 order: 0,
65 margin: [0, 'auto', 40, 'auto'],
66
67 '@media(min-width: 800px)': {
68 marginLeft: 40,
69 order: 1,
70 },
71 },
72};
73
74
75export default @injectSheet(styles) @observer class TeamDashboard extends Component {
76 static propTypes = {
77 isLoading: PropTypes.bool.isRequired,
78 userInfoRequestFailed: PropTypes.bool.isRequired,
79 retryUserInfoRequest: PropTypes.func.isRequired,
80 openTeamManagement: PropTypes.func.isRequired,
81 classes: PropTypes.object.isRequired,
82 };
83
84 static contextTypes = {
85 intl: intlShape,
86 };
87
88 render() {
89 const {
90 isLoading,
91 userInfoRequestFailed,
92 retryUserInfoRequest,
93 openTeamManagement,
94 classes,
95 } = this.props;
96 const { intl } = this.context;
97
98 return (
99 <div className="settings__main">
100 <div className="settings__header">
101 <span className="settings__header-item">
102 {intl.formatMessage(messages.headline)}
103 </span>
104 </div>
105 <div className="settings__body">
106 {isLoading && (
107 <Loader />
108 )}
109
110 {!isLoading && userInfoRequestFailed && (
111 <Infobox
112 icon="alert"
113 type="danger"
114 ctaLabel={intl.formatMessage(messages.tryReloadUserInfoRequest)}
115 ctaLoading={isLoading}
116 ctaOnClick={retryUserInfoRequest}
117 >
118 {intl.formatMessage(messages.userInfoRequestFailed)}
119 </Infobox>
120 )}
121
122 {!userInfoRequestFailed && (
123 <>
124 {!isLoading && (
125 <>
126 <PremiumFeatureContainer>
127 <>
128 <h1>{intl.formatMessage(messages.contentHeadline)}</h1>
129 <div className={classes.container}>
130 <div className={classes.content}>
131 <p>{intl.formatMessage(messages.intro)}</p>
132 <p>{intl.formatMessage(messages.copy)}</p>
133 </div>
134 <img className={classes.image} src="https://cdn.franzinfra.com/announcements/assets/teams.png" alt="Franz for Teams" />
135 </div>
136 <Button
137 label={intl.formatMessage(messages.manageButton)}
138 onClick={openTeamManagement}
139 className={classes.cta}
140 />
141 </>
142 </PremiumFeatureContainer>
143 </>
144 )}
145 </>
146 )}
147 </div>
148 <ReactTooltip place="right" type="dark" effect="solid" />
149 </div>
150 );
151 }
152}
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js
index 7a818d100..50f1e0522 100644
--- a/src/components/subscription/SubscriptionForm.js
+++ b/src/components/subscription/SubscriptionForm.js
@@ -51,6 +51,10 @@ const messages = defineMessages({
51 id: 'subscription.features.spellchecker', 51 id: 'subscription.features.spellchecker',
52 defaultMessage: '!!!Support for Spellchecker', 52 defaultMessage: '!!!Support for Spellchecker',
53 }, 53 },
54 workspaces: {
55 id: 'subscription.features.workspaces',
56 defaultMessage: '!!!Organize your services in workspaces',
57 },
54 ads: { 58 ads: {
55 id: 'subscription.features.ads', 59 id: 'subscription.features.ads',
56 defaultMessage: '!!!No ads, ever!', 60 defaultMessage: '!!!No ads, ever!',
@@ -171,6 +175,9 @@ export default @observer class SubscriptionForm extends Component {
171 {intl.formatMessage(messages.proxy)} 175 {intl.formatMessage(messages.proxy)}
172 </li> 176 </li>
173 <li> 177 <li>
178 {intl.formatMessage(messages.workspaces)}
179 </li>
180 <li>
174 {intl.formatMessage(messages.ads)} 181 {intl.formatMessage(messages.ads)}
175 </li> 182 </li>
176 </ul> 183 </ul>
diff --git a/src/config.js b/src/config.js
index 242675762..5bc318545 100644
--- a/src/config.js
+++ b/src/config.js
@@ -9,9 +9,21 @@ const app = process.type === 'renderer' ? electron.remote.app : electron.app;
9const systemPreferences = process.type === 'renderer' ? electron.remote.systemPreferences : electron.systemPreferences; 9const systemPreferences = process.type === 'renderer' ? electron.remote.systemPreferences : electron.systemPreferences;
10 10
11export const CHECK_INTERVAL = ms('1h'); // How often should we perform checks 11export const CHECK_INTERVAL = ms('1h'); // How often should we perform checks
12
12export const LOCAL_API = 'http://localhost:3000'; 13export const LOCAL_API = 'http://localhost:3000';
13export const DEV_API = 'https://dev.franzinfra.com'; 14export const DEV_API = 'https://dev.franzinfra.com';
14export const LIVE_API = 'https://api.franzinfra.com'; 15export const LIVE_API = 'https://api.franzinfra.com';
16
17export const LOCAL_WS_API = 'ws://localhost:3000';
18export const DEV_WS_API = 'wss://dev.franzinfra.com';
19export const LIVE_WS_API = 'wss://api.franzinfra.com';
20
21export const LOCAL_API_WEBSITE = 'http://localhost:3333';
22export const DEV_API_WEBSITE = 'https://meetfranz.com';
23export const LIVE_API_WEBSITE = 'https://meetfranz.com';
24
25export const STATS_API = 'https://stats.franzinfra.com';
26
15export const GA_ID = !isDevMode ? 'UA-74126766-10' : 'UA-74126766-12'; 27export const GA_ID = !isDevMode ? 'UA-74126766-10' : 'UA-74126766-12';
16 28
17export const DEFAULT_APP_SETTINGS = { 29export const DEFAULT_APP_SETTINGS = {
@@ -41,6 +53,7 @@ export const DEFAULT_FEATURES_CONFIG = {
41 }, 53 },
42 isServiceProxyEnabled: false, 54 isServiceProxyEnabled: false,
43 isServiceProxyPremiumFeature: true, 55 isServiceProxyPremiumFeature: true,
56 isAnnouncementsEnabled: true,
44 isWorkspacePremiumFeature: true, 57 isWorkspacePremiumFeature: true,
45 isWorkspaceEnabled: false, 58 isWorkspaceEnabled: false,
46}; 59};
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js
index 2d855c78f..d290a6094 100644
--- a/src/containers/layout/AppLayoutContainer.js
+++ b/src/containers/layout/AppLayoutContainer.js
@@ -135,6 +135,7 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e
135 isOnline={app.isOnline} 135 isOnline={app.isOnline}
136 showServicesUpdatedInfoBar={ui.showServicesUpdatedInfoBar} 136 showServicesUpdatedInfoBar={ui.showServicesUpdatedInfoBar}
137 appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED} 137 appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED}
138 nextAppReleaseVersion={app.nextAppReleaseVersion}
138 sidebar={sidebar} 139 sidebar={sidebar}
139 workspacesDrawer={workspacesDrawer} 140 workspacesDrawer={workspacesDrawer}
140 services={servicesContainer} 141 services={servicesContainer}
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js
index ce1b9c333..b3f967353 100644
--- a/src/containers/settings/AccountScreen.js
+++ b/src/containers/settings/AccountScreen.js
@@ -1,4 +1,3 @@
1import { remote } from 'electron';
2import React, { Component } from 'react'; 1import React, { Component } from 'react';
3import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
4import { inject, observer } from 'mobx-react'; 3import { inject, observer } from 'mobx-react';
@@ -9,84 +8,52 @@ import AppStore from '../../stores/AppStore';
9 8
10import AccountDashboard from '../../components/settings/account/AccountDashboard'; 9import AccountDashboard from '../../components/settings/account/AccountDashboard';
11import ErrorBoundary from '../../components/util/ErrorBoundary'; 10import ErrorBoundary from '../../components/util/ErrorBoundary';
12 11import { WEBSITE } from '../../environment';
13const { BrowserWindow } = remote;
14 12
15export default @inject('stores', 'actions') @observer class AccountScreen extends Component { 13export default @inject('stores', 'actions') @observer class AccountScreen extends Component {
16 componentWillMount() {
17 const {
18 user,
19 } = this.props.stores;
20
21 user.getUserInfoRequest.invalidate({ immediately: true });
22 }
23
24 onCloseWindow() { 14 onCloseWindow() {
25 const { user, payment } = this.props.stores; 15 const { user } = this.props.stores;
26 user.getUserInfoRequest.invalidate({ immediately: true }); 16 user.getUserInfoRequest.invalidate({ immediately: true });
27 payment.ordersDataRequest.invalidate({ immediately: true });
28 } 17 }
29 18
30 reloadData() { 19 reloadData() {
31 const { user, payment } = this.props.stores; 20 const { user, payment } = this.props.stores;
32 21
33 user.getUserInfoRequest.reload(); 22 user.getUserInfoRequest.reload();
34 payment.ordersDataRequest.reload();
35 payment.plansRequest.reload(); 23 payment.plansRequest.reload();
36 } 24 }
37 25
38 async handlePaymentDashboard() { 26 handleWebsiteLink(route) {
39 const { actions, stores } = this.props; 27 const { actions, stores } = this.props;
40 28
41 actions.payment.createDashboardUrl(); 29 const url = `${WEBSITE}${route}?authToken=${stores.user.authToken}&utm_source=app&utm_medium=account_dashboard`;
42 30 console.log(url);
43 const dashboard = await stores.payment.createDashboardUrlRequest;
44
45 if (dashboard.url) {
46 const paymentWindow = new BrowserWindow({
47 title: '🔒 Franz Subscription Dashboard',
48 parent: remote.getCurrentWindow(),
49 modal: false,
50 width: 900,
51 minWidth: 600,
52 webPreferences: {
53 nodeIntegration: false,
54 },
55 });
56 paymentWindow.loadURL(dashboard.url);
57 31
58 paymentWindow.on('closed', () => { 32 actions.app.openExternalUrl({ url });
59 this.onCloseWindow();
60 });
61 }
62 } 33 }
63 34
64 render() { 35 render() {
65 const { user, payment } = this.props.stores; 36 const { user, payment } = this.props.stores;
66 const { openExternalUrl } = this.props.actions.app;
67 const { user: userActions } = this.props.actions; 37 const { user: userActions } = this.props.actions;
68 38
69 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting; 39 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting;
70 const isLoadingOrdersInfo = payment.ordersDataRequest.isExecuting;
71 const isLoadingPlans = payment.plansRequest.isExecuting; 40 const isLoadingPlans = payment.plansRequest.isExecuting;
72 41
73 return ( 42 return (
74 <ErrorBoundary> 43 <ErrorBoundary>
75 <AccountDashboard 44 <AccountDashboard
76 user={user.data} 45 user={user.data}
77 orders={payment.orders}
78 isLoading={isLoadingUserInfo} 46 isLoading={isLoadingUserInfo}
79 isLoadingOrdersInfo={isLoadingOrdersInfo}
80 isLoadingPlans={isLoadingPlans} 47 isLoadingPlans={isLoadingPlans}
81 userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError} 48 userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError}
82 retryUserInfoRequest={() => this.reloadData()} 49 retryUserInfoRequest={() => this.reloadData()}
83 isCreatingPaymentDashboardUrl={payment.createDashboardUrlRequest.isExecuting}
84 openDashboard={price => this.handlePaymentDashboard(price)}
85 openExternalUrl={url => openExternalUrl({ url })}
86 onCloseSubscriptionWindow={() => this.onCloseWindow()} 50 onCloseSubscriptionWindow={() => this.onCloseWindow()}
87 deleteAccount={userActions.delete} 51 deleteAccount={userActions.delete}
88 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting} 52 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting}
89 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError} 53 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError}
54 openEditAccount={() => this.handleWebsiteLink('/user/profile')}
55 openBilling={() => this.handleWebsiteLink('/user/billing')}
56 openInvoices={() => this.handleWebsiteLink('/user/invoices')}
90 /> 57 />
91 </ErrorBoundary> 58 </ErrorBoundary>
92 ); 59 );
diff --git a/src/containers/settings/TeamScreen.js b/src/containers/settings/TeamScreen.js
new file mode 100644
index 000000000..c69d5ad08
--- /dev/null
+++ b/src/containers/settings/TeamScreen.js
@@ -0,0 +1,57 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { inject, observer } from 'mobx-react';
4
5import UserStore from '../../stores/UserStore';
6import AppStore from '../../stores/AppStore';
7
8import TeamDashboard from '../../components/settings/team/TeamDashboard';
9import ErrorBoundary from '../../components/util/ErrorBoundary';
10import { WEBSITE } from '../../environment';
11
12export default @inject('stores', 'actions') @observer class TeamScreen extends Component {
13 handleWebsiteLink(route) {
14 const { actions, stores } = this.props;
15
16 const url = `${WEBSITE}${route}?authToken=${stores.user.authToken}&utm_source=app&utm_medium=account_dashboard`;
17 console.log(url);
18
19 actions.app.openExternalUrl({ url });
20 }
21
22 render() {
23 const { user } = this.props.stores;
24
25 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting;
26
27 return (
28 <ErrorBoundary>
29 <TeamDashboard
30 isLoading={isLoadingUserInfo}
31 userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError}
32 retryUserInfoRequest={() => this.reloadData()}
33 openTeamManagement={() => this.handleWebsiteLink('/user/team')}
34 />
35 </ErrorBoundary>
36 );
37 }
38}
39
40TeamScreen.wrappedComponent.propTypes = {
41 stores: PropTypes.shape({
42 user: PropTypes.instanceOf(UserStore).isRequired,
43 app: PropTypes.instanceOf(AppStore).isRequired,
44 }).isRequired,
45 actions: PropTypes.shape({
46 payment: PropTypes.shape({
47 createDashboardUrl: PropTypes.func.isRequired,
48 }).isRequired,
49 app: PropTypes.shape({
50 openExternalUrl: PropTypes.func.isRequired,
51 }).isRequired,
52 user: PropTypes.shape({
53 update: PropTypes.func.isRequired,
54 delete: PropTypes.func.isRequired,
55 }).isRequired,
56 }).isRequired,
57};
diff --git a/src/electron/ipc-api/autoUpdate.js b/src/electron/ipc-api/autoUpdate.js
index 74b718734..9a04c1958 100644
--- a/src/electron/ipc-api/autoUpdate.js
+++ b/src/electron/ipc-api/autoUpdate.js
@@ -30,9 +30,12 @@ export default (params) => {
30 params.mainWindow.webContents.send('autoUpdate', { available: false }); 30 params.mainWindow.webContents.send('autoUpdate', { available: false });
31 }); 31 });
32 32
33 autoUpdater.on('update-available', () => { 33 autoUpdater.on('update-available', (event) => {
34 debug('update-available'); 34 debug('update-available');
35 params.mainWindow.webContents.send('autoUpdate', { available: true }); 35 params.mainWindow.webContents.send('autoUpdate', {
36 version: event.version,
37 available: true,
38 });
36 }); 39 });
37 40
38 autoUpdater.on('download-progress', (progressObj) => { 41 autoUpdater.on('download-progress', (progressObj) => {
diff --git a/src/environment.js b/src/environment.js
index d67fd6adb..ae7a67e4d 100644
--- a/src/environment.js
+++ b/src/environment.js
@@ -1,6 +1,16 @@
1import isDev from 'electron-is-dev'; 1import isDev from 'electron-is-dev';
2 2
3import { LIVE_API, DEV_API, LOCAL_API } from './config'; 3import {
4 LIVE_API,
5 DEV_API,
6 LOCAL_API,
7 LOCAL_API_WEBSITE,
8 DEV_API_WEBSITE,
9 LIVE_API_WEBSITE,
10 LIVE_WS_API,
11 LOCAL_WS_API,
12 DEV_WS_API,
13} from './config';
4 14
5export const isDevMode = isDev; 15export const isDevMode = isDev;
6export const useLiveAPI = process.env.LIVE_API; 16export const useLiveAPI = process.env.LIVE_API;
@@ -19,13 +29,23 @@ export const ctrlKey = isMac ? '⌘' : 'Ctrl';
19export const cmdKey = isMac ? 'Cmd' : 'Ctrl'; 29export const cmdKey = isMac ? 'Cmd' : 'Ctrl';
20 30
21let api; 31let api;
32let wsApi;
33let web;
22if (!isDevMode || (isDevMode && useLiveAPI)) { 34if (!isDevMode || (isDevMode && useLiveAPI)) {
23 api = LIVE_API; 35 api = LIVE_API;
36 wsApi = LIVE_WS_API;
37 web = LIVE_API_WEBSITE;
24} else if (isDevMode && useLocalAPI) { 38} else if (isDevMode && useLocalAPI) {
25 api = LOCAL_API; 39 api = LOCAL_API;
40 wsApi = LOCAL_WS_API;
41 web = LOCAL_API_WEBSITE;
26} else { 42} else {
27 api = DEV_API; 43 api = DEV_API;
44 wsApi = DEV_WS_API;
45 web = DEV_API_WEBSITE;
28} 46}
29 47
30export const API = api; 48export const API = api;
31export const API_VERSION = 'v1'; 49export const API_VERSION = 'v1';
50export const WS_API = wsApi;
51export const WEBSITE = web;
diff --git a/src/features/announcements/actions.js b/src/features/announcements/actions.js
new file mode 100644
index 000000000..bab496314
--- /dev/null
+++ b/src/features/announcements/actions.js
@@ -0,0 +1,10 @@
1import PropTypes from 'prop-types';
2import { createActionsFromDefinitions } from '../../actions/lib/actions';
3
4export const announcementActions = createActionsFromDefinitions({
5 show: {
6 targetVersion: PropTypes.string,
7 },
8}, PropTypes.checkPropTypes);
9
10export default announcementActions;
diff --git a/src/features/announcements/api.js b/src/features/announcements/api.js
new file mode 100644
index 000000000..a581bd8de
--- /dev/null
+++ b/src/features/announcements/api.js
@@ -0,0 +1,33 @@
1import { remote } from 'electron';
2import Request from '../../stores/lib/Request';
3import { API, API_VERSION } from '../../environment';
4
5const debug = require('debug')('Franz:feature:announcements:api');
6
7export const announcementsApi = {
8 async getCurrentVersion() {
9 debug('getting current version of electron app');
10 return Promise.resolve(remote.app.getVersion());
11 },
12
13 async getChangelog(version) {
14 debug('fetching release changelog from Github');
15 const url = `https://api.github.com/repos/meetfranz/franz/releases/tags/v${version}`;
16 const request = await window.fetch(url, { method: 'GET' });
17 if (!request.ok) return null;
18 const data = await request.json();
19 return data.body;
20 },
21
22 async getAnnouncement(version) {
23 debug('fetching release announcement from api');
24 const url = `${API}/${API_VERSION}/announcements/${version}`;
25 const response = await window.fetch(url, { method: 'GET' });
26 if (!response.ok) return null;
27 return response.json();
28 },
29};
30
31export const getCurrentVersionRequest = new Request(announcementsApi, 'getCurrentVersion');
32export const getChangelogRequest = new Request(announcementsApi, 'getChangelog');
33export const getAnnouncementRequest = new Request(announcementsApi, 'getAnnouncement');
diff --git a/src/features/announcements/components/AnnouncementScreen.js b/src/features/announcements/components/AnnouncementScreen.js
new file mode 100644
index 000000000..e7c5fe395
--- /dev/null
+++ b/src/features/announcements/components/AnnouncementScreen.js
@@ -0,0 +1,286 @@
1import React, { Component } from 'react';
2import marked from 'marked';
3import PropTypes from 'prop-types';
4import { inject, observer } from 'mobx-react';
5import { defineMessages, intlShape } from 'react-intl';
6import injectSheet from 'react-jss';
7import { Button } from '@meetfranz/forms';
8
9import { announcementsStore } from '../index';
10import UIStore from '../../../stores/UIStore';
11import { gaEvent } from '../../../lib/analytics';
12
13const renderer = new marked.Renderer();
14
15renderer.link = (href, title, text) => `<a target="_blank" href="${href}" title="${title}">${text}</a>`;
16
17const markedOptions = { sanitize: true, renderer };
18
19const messages = defineMessages({
20 headline: {
21 id: 'feature.announcements.changelog.headline',
22 defaultMessage: '!!!Changes in Franz {version}',
23 },
24});
25
26const smallScreen = '1000px';
27
28const styles = theme => ({
29 container: {
30 background: theme.colorBackground,
31 position: 'absolute',
32 top: 0,
33 zIndex: 140,
34 width: '100%',
35 height: '100%',
36 overflowY: 'auto',
37 },
38 headline: {
39 color: theme.colorHeadline,
40 margin: [25, 0, 40],
41 // 'max-width': 500,
42 'text-align': 'center',
43 'line-height': '1.3em',
44 },
45 announcement: {
46 height: 'auto',
47
48 [`@media(min-width: ${smallScreen})`]: {
49 display: 'flex',
50 flexDirection: 'column',
51 justifyContent: 'center',
52 height: '100vh',
53 },
54 },
55 main: {
56 display: 'flex',
57 flexDirection: 'column',
58 flexGrow: 1,
59 justifyContent: 'center',
60
61 '& h1': {
62 margin: [40, 0, 15],
63 fontSize: 70,
64 color: theme.styleTypes.primary.accent,
65 textAlign: 'center',
66
67 [`@media(min-width: ${smallScreen})`]: {
68 marginTop: 0,
69 },
70 },
71 '& h2': {
72 fontSize: 30,
73 fontWeight: 300,
74 color: theme.colorText,
75 textAlign: 'center',
76 marginBottom: 60,
77 },
78 },
79 mainBody: {
80 display: 'flex',
81 flexDirection: 'column',
82 alignItems: 'center',
83 width: 'calc(100% - 80px)',
84 height: 'auto',
85 margin: '0 auto',
86 [`@media(min-width: ${smallScreen})`]: {
87 flexDirection: 'row',
88 justifyContent: 'center',
89 },
90 },
91 mainImage: {
92 minWidth: 250,
93 maxWidth: 400,
94 margin: '0 auto',
95 marginBottom: 40,
96 '& img': {
97 width: '100%',
98 },
99 [`@media(min-width: ${smallScreen})`]: {
100 margin: 0,
101 },
102 },
103 mainText: {
104 height: 'auto',
105 maxWidth: 600,
106 textAlign: 'center',
107 '& p': {
108 lineHeight: '1.5em',
109 },
110 [`@media(min-width: ${smallScreen})`]: {
111 textAlign: 'left',
112 },
113 },
114 mainCtaButton: {
115 textAlign: 'center',
116 marginTop: 40,
117 [`@media(min-width: ${smallScreen})`]: {
118 textAlign: 'left',
119 },
120 },
121 spotlight: {
122 height: 'auto',
123 background: theme.announcements.spotlight.background,
124 padding: [40, 0],
125 marginTop: 80,
126 [`@media(min-width: ${smallScreen})`]: {
127 marginTop: 0,
128 justifyContent: 'center',
129 alignItems: 'flex-start',
130 display: 'flex',
131 flexDirection: 'row',
132 },
133 },
134 spotlightTopicContainer: {
135 textAlign: 'center',
136 marginBottom: 20,
137
138 [`@media(min-width: ${smallScreen})`]: {
139 marginBottom: 0,
140 minWidth: 250,
141 maxWidth: 330,
142 width: '100%',
143 textAlign: 'right',
144 marginRight: 60,
145 },
146 },
147 spotlightContentContainer: {
148 textAlign: 'center',
149 [`@media(min-width: ${smallScreen})`]: {
150 height: 'auto',
151 maxWidth: 600,
152 paddingRight: 40,
153 textAlign: 'left',
154 },
155 '& p': {
156 lineHeight: '1.5em',
157 },
158 },
159 spotlightTopic: {
160 fontSize: 20,
161 marginBottom: 5,
162 letterSpacing: 0,
163 fontWeight: 100,
164 },
165 spotlightSubject: {
166 fontSize: 20,
167 },
168 changelog: {
169 padding: [0, 60],
170 maxWidth: 700,
171 margin: [100, 'auto'],
172 height: 'auto',
173
174 '& h3': {
175 fontSize: '24px',
176 margin: '1.5em 0 1em 0',
177 },
178 '& li': {
179 marginBottom: '1em',
180 lineHeight: '1.4em',
181 },
182 '& div': {
183 height: 'auto',
184 },
185 },
186});
187
188
189@inject('stores', 'actions') @injectSheet(styles) @observer
190class AnnouncementScreen extends Component {
191 static propTypes = {
192 classes: PropTypes.object.isRequired,
193 stores: PropTypes.shape({
194 ui: PropTypes.instanceOf(UIStore).isRequired,
195 }).isRequired,
196 };
197
198 static contextTypes = {
199 intl: intlShape,
200 };
201
202 render() {
203 const { classes, stores } = this.props;
204 const { intl } = this.context;
205 const { changelog, announcement } = announcementsStore;
206 const themeImage = stores.ui.isDarkThemeActive ? 'dark' : 'light';
207 return (
208 <div className={classes.container}>
209 {announcement && (
210 <div className={classes.announcement}>
211 <div className={classes.main}>
212 <h1>{announcement.main.headline}</h1>
213 <h2>{announcement.main.subHeadline}</h2>
214 <div className={classes.mainBody}>
215 <div className={classes.mainImage}>
216 <img
217 src={announcement.main.image[themeImage]}
218 alt=""
219 />
220 </div>
221 <div className={classes.mainText}>
222 <div
223 dangerouslySetInnerHTML={{
224 __html: marked(announcement.main.text, markedOptions),
225 }}
226 />
227 <div className={classes.mainCtaButton}>
228 <Button
229 label={announcement.main.cta.label}
230 onClick={() => {
231 const { analytics } = announcement.main.cta;
232 window.location.href = `#${announcement.main.cta.href}`;
233 gaEvent(analytics.category, analytics.action, announcement.main.cta.label);
234 }}
235 />
236 </div>
237 </div>
238 </div>
239 </div>
240 {announcement.spotlight && (
241 <div className={classes.spotlight}>
242 <div className={classes.spotlightTopicContainer}>
243 <h2 className={classes.spotlightTopic}>{announcement.spotlight.title}</h2>
244 <h3 className={classes.spotlightSubject}>{announcement.spotlight.subject}</h3>
245 </div>
246 <div className={classes.spotlightContentContainer}>
247 <div
248 dangerouslySetInnerHTML={{
249 __html: marked(announcement.spotlight.text, markedOptions),
250 }}
251 />
252 <div className={classes.mainCtaButton}>
253 <Button
254 label={announcement.spotlight.cta.label}
255 onClick={() => {
256 const { analytics } = announcement.spotlight.cta;
257 window.location.href = `#${announcement.spotlight.cta.href}`;
258 gaEvent(analytics.category, analytics.action, announcement.spotlight.cta.label);
259 }}
260 />
261 </div>
262 </div>
263 </div>
264 )}
265 </div>
266 )}
267 {changelog && (
268 <div className={classes.changelog}>
269 <h1 className={classes.headline}>
270 {intl.formatMessage(messages.headline, {
271 version: announcementsStore.targetVersion,
272 })}
273 </h1>
274 <div
275 dangerouslySetInnerHTML={{
276 __html: marked(changelog, markedOptions),
277 }}
278 />
279 </div>
280 )}
281 </div>
282 );
283 }
284}
285
286export default AnnouncementScreen;
diff --git a/src/features/announcements/index.js b/src/features/announcements/index.js
new file mode 100644
index 000000000..f14e7c9a5
--- /dev/null
+++ b/src/features/announcements/index.js
@@ -0,0 +1,36 @@
1import { reaction } from 'mobx';
2import { AnnouncementsStore } from './store';
3
4const debug = require('debug')('Franz:feature:announcements');
5
6export const GA_CATEGORY_ANNOUNCEMENTS = 'Announcements';
7
8export const announcementsStore = new AnnouncementsStore();
9
10export const ANNOUNCEMENTS_ROUTES = {
11 TARGET: '/announcements/:id',
12};
13
14export default function initAnnouncements(stores, actions) {
15 // const { features } = stores;
16
17 // Toggle workspace feature
18 reaction(
19 () => (
20 true
21 // features.features.isAnnouncementsEnabled
22 ),
23 (isEnabled) => {
24 if (isEnabled) {
25 debug('Initializing `announcements` feature');
26 announcementsStore.start(stores, actions);
27 } else if (announcementsStore.isFeatureActive) {
28 debug('Disabling `announcements` feature');
29 announcementsStore.stop();
30 }
31 },
32 {
33 fireImmediately: true,
34 },
35 );
36}
diff --git a/src/features/announcements/store.js b/src/features/announcements/store.js
new file mode 100644
index 000000000..ad78a0979
--- /dev/null
+++ b/src/features/announcements/store.js
@@ -0,0 +1,144 @@
1import {
2 action,
3 computed,
4 observable,
5} from 'mobx';
6import semver from 'semver';
7import localStorage from 'mobx-localstorage';
8
9import { FeatureStore } from '../utils/FeatureStore';
10import { ANNOUNCEMENTS_ROUTES, GA_CATEGORY_ANNOUNCEMENTS } from '.';
11import { getAnnouncementRequest, getChangelogRequest, getCurrentVersionRequest } from './api';
12import { announcementActions } from './actions';
13import { createActionBindings } from '../utils/ActionBinding';
14import { createReactions } from '../../stores/lib/Reaction';
15import { gaEvent } from '../../lib/analytics';
16import { matchRoute } from '../../helpers/routing-helpers';
17
18const LOCAL_STORAGE_KEY = 'announcements';
19
20const debug = require('debug')('Franz:feature:announcements:store');
21
22export class AnnouncementsStore extends FeatureStore {
23 @observable targetVersion = null;
24
25 @observable isFeatureActive = false;
26
27 @computed get changelog() {
28 return getChangelogRequest.result;
29 }
30
31 @computed get announcement() {
32 if (!this.stores || !getAnnouncementRequest.result) return null;
33 const { locale, defaultLocale } = this.stores.app;
34 const announcement = getAnnouncementRequest.result;
35 // User locale
36 if (announcement[locale]) return announcement[locale];
37 // Default locale
38 if (announcement[defaultLocale]) return announcement[defaultLocale];
39 // No locales specified
40 return announcement;
41 }
42
43 @computed get areNewsAvailable() {
44 const isChangelogAvailable = getChangelogRequest.wasExecuted && !!this.changelog;
45 const isAnnouncementAvailable = getAnnouncementRequest.wasExecuted && !!this.announcement;
46 return isChangelogAvailable || isAnnouncementAvailable;
47 }
48
49 @computed get settings() {
50 return localStorage.getItem(LOCAL_STORAGE_KEY) || {};
51 }
52
53 @computed get lastSeenAnnouncementVersion() {
54 return this.settings.lastSeenAnnouncementVersion || null;
55 }
56
57 @computed get currentVersion() {
58 return getCurrentVersionRequest.result;
59 }
60
61 @computed get isNewUser() {
62 return this.stores.settings.stats.appStarts <= 1;
63 }
64
65 async start(stores, actions) {
66 debug('AnnouncementsStore::start');
67 this.stores = stores;
68 this.actions = actions;
69 getCurrentVersionRequest.execute();
70
71 this._registerActions(createActionBindings([
72 [announcementActions.show, this._showAnnouncement],
73 ]));
74
75 this._reactions = createReactions([
76 this._showAnnouncementOnRouteMatch,
77 this._showAnnouncementToUsersWhoUpdatedApp,
78 this._fetchAnnouncements,
79 ]);
80 this._registerReactions(this._reactions);
81 this.isFeatureActive = true;
82 }
83
84 stop() {
85 super.stop();
86 debug('AnnouncementsStore::stop');
87 this.isFeatureActive = false;
88 }
89
90 // ======= HELPERS ======= //
91
92 _updateSettings = (changes) => {
93 localStorage.setItem(LOCAL_STORAGE_KEY, {
94 ...this.settings,
95 ...changes,
96 });
97 };
98
99 // ======= ACTIONS ======= //
100
101 @action _showAnnouncement = ({ targetVersion } = {}) => {
102 const { router } = this.stores;
103 this.targetVersion = targetVersion || this.currentVersion;
104 this._updateSettings({
105 lastSeenAnnouncementVersion: this.currentVersion,
106 });
107 const targetRoute = `/announcements/${this.targetVersion}`;
108 if (router.location.pathname !== targetRoute) {
109 this.stores.router.push(targetRoute);
110 }
111 gaEvent(GA_CATEGORY_ANNOUNCEMENTS, 'show');
112 };
113
114 // ======= REACTIONS ========
115
116 _showAnnouncementToUsersWhoUpdatedApp = () => {
117 const { announcement, isNewUser } = this;
118 // Check if there is an announcement and don't show announcements to new users
119 if (!announcement || isNewUser) return;
120
121 // Check if the user has already used current version (= has seen the announcement)
122 const { currentVersion, lastSeenAnnouncementVersion } = this;
123 if (semver.gt(currentVersion, lastSeenAnnouncementVersion || '0.0.0')) {
124 debug(`${currentVersion} > ${lastSeenAnnouncementVersion}: announcement is shown`);
125 this._showAnnouncement();
126 }
127 };
128
129 _fetchAnnouncements = () => {
130 const targetVersion = this.targetVersion || this.currentVersion;
131 if (!targetVersion) return;
132 getChangelogRequest.reset().execute(targetVersion);
133 getAnnouncementRequest.reset().execute(targetVersion);
134 };
135
136 _showAnnouncementOnRouteMatch = () => {
137 const { router } = this.stores;
138 const match = matchRoute(ANNOUNCEMENTS_ROUTES.TARGET, router.location.pathname);
139 if (match) {
140 const targetVersion = match.id;
141 this._showAnnouncement({ targetVersion });
142 }
143 }
144}
diff --git a/src/features/settingsWS/actions.js b/src/features/settingsWS/actions.js
new file mode 100755
index 000000000..631670c8a
--- /dev/null
+++ b/src/features/settingsWS/actions.js
@@ -0,0 +1,10 @@
1import PropTypes from 'prop-types';
2import { createActionsFromDefinitions } from '../../actions/lib/actions';
3
4export const settingsWSActions = createActionsFromDefinitions({
5 greet: {
6 name: PropTypes.string.isRequired,
7 },
8}, PropTypes.checkPropTypes);
9
10export default settingsWSActions;
diff --git a/src/features/settingsWS/index.js b/src/features/settingsWS/index.js
new file mode 100755
index 000000000..2064d2973
--- /dev/null
+++ b/src/features/settingsWS/index.js
@@ -0,0 +1,29 @@
1import { reaction } from 'mobx';
2import { SettingsWSStore } from './store';
3
4const debug = require('debug')('Franz:feature:settingsWS');
5
6export const settingsStore = new SettingsWSStore();
7
8export default function initSettingsWebSocket(stores, actions) {
9 const { features } = stores;
10
11 // Toggle SettingsWebSocket feature
12 reaction(
13 () => (
14 features.features.isSettingsWSEnabled
15 ),
16 (isEnabled) => {
17 if (isEnabled) {
18 debug('Initializing `settingsWS` feature');
19 settingsStore.start(stores, actions);
20 } else if (settingsStore) {
21 debug('Disabling `settingsWS` feature');
22 settingsStore.stop();
23 }
24 },
25 {
26 fireImmediately: true,
27 },
28 );
29}
diff --git a/src/features/settingsWS/state.js b/src/features/settingsWS/state.js
new file mode 100755
index 000000000..7b16b2b6e
--- /dev/null
+++ b/src/features/settingsWS/state.js
@@ -0,0 +1,13 @@
1import { observable } from 'mobx';
2
3const defaultState = {
4 isFeatureActive: false,
5};
6
7export const settingsWSState = observable(defaultState);
8
9export function resetState() {
10 Object.assign(settingsWSState, defaultState);
11}
12
13export default settingsWSState;
diff --git a/src/features/settingsWS/store.js b/src/features/settingsWS/store.js
new file mode 100755
index 000000000..167a70d10
--- /dev/null
+++ b/src/features/settingsWS/store.js
@@ -0,0 +1,130 @@
1import { observable } from 'mobx';
2import WebSocket from 'ws';
3import ms from 'ms';
4
5import { FeatureStore } from '../utils/FeatureStore';
6import { createReactions } from '../../stores/lib/Reaction';
7import { WS_API } from '../../environment';
8
9const debug = require('debug')('Franz:feature:settingsWS:store');
10
11export class SettingsWSStore extends FeatureStore {
12 stores = null;
13
14 actions = null;
15
16 ws = null;
17
18 pingTimeout = null;
19
20 reconnectTimeout = null;
21
22 @observable connected = false;
23
24 start(stores, actions) {
25 this.stores = stores;
26 this.actions = actions;
27
28 this._registerReactions(createReactions([
29 this._initialize.bind(this),
30 this._reconnect.bind(this),
31 this._close.bind(this),
32 ]));
33 }
34
35 connect() {
36 try {
37 const wsURL = `${WS_API}/ws/${this.stores.user.data.id}`;
38 debug('Setting up WebSocket to', wsURL);
39
40 this.ws = new WebSocket(wsURL);
41
42 this.ws.on('open', () => {
43 debug('Opened WebSocket');
44 this.send({
45 action: 'authorize',
46 token: this.stores.user.authToken,
47 });
48
49 this.connected = true;
50
51 this.heartbeat();
52 });
53
54 this.ws.on('message', (data) => {
55 const resp = JSON.parse(data);
56 debug('Received message', resp);
57
58 if (resp.id) {
59 this.stores.user.getUserInfoRequest.patch((result) => {
60 if (!result) return;
61
62 debug('Patching user object with new values');
63 Object.assign(result, resp);
64 });
65 }
66 });
67
68 this.ws.on('ping', this.heartbeat.bind(this));
69 } catch (err) {
70 console.err(err);
71 }
72 }
73
74 heartbeat() {
75 debug('Heartbeat');
76 clearTimeout(this.pingTimeout);
77
78 this.pingTimeout = setTimeout(() => {
79 debug('Terminating connection, reconnecting in 35');
80 this.ws.terminate();
81
82 this.connected = false;
83 }, ms('35s'));
84 }
85
86 send(data) {
87 if (this.ws && this.ws.readyState === 1) {
88 this.ws.send(JSON.stringify(data));
89 debug('Sending data', data);
90 } else {
91 debug('WebSocket is not initialized');
92 }
93 }
94
95 // Reactions
96
97 _initialize() {
98 if (this.stores.user.data.id && !this.ws) {
99 this.connect();
100 }
101 }
102
103 _reconnect() {
104 if (!this.connected) {
105 debug('Trying to reconnect in 30s');
106 this.reconnectTimeout = setInterval(() => {
107 debug('Trying to reconnect');
108 this.connect();
109 }, ms('30s'));
110 } else {
111 debug('Clearing reconnect interval');
112 clearInterval(this.reconnectTimeout);
113 }
114 }
115
116 _close() {
117 if (!this.stores.user.isLoggedIn) {
118 debug('Stopping reactions');
119 this._stopReactions();
120
121 if (this.ws) {
122 debug('Terminating connection');
123 this.ws.terminate();
124 this.ws = null;
125 }
126 }
127 }
128}
129
130export default SettingsWSStore;
diff --git a/src/features/shareFranz/index.js b/src/features/shareFranz/index.js
index 3a8ec95d3..87deacef4 100644
--- a/src/features/shareFranz/index.js
+++ b/src/features/shareFranz/index.js
@@ -35,7 +35,7 @@ export default function initialize(stores) {
35 () => stores.user.isLoggedIn, 35 () => stores.user.isLoggedIn,
36 () => { 36 () => {
37 setTimeout(() => { 37 setTimeout(() => {
38 if (stores.settings.stats.appStarts % 30 === 0) { 38 if (stores.settings.stats.appStarts % 50 === 0) {
39 if (delayAppState.isDelayAppScreenVisible) { 39 if (delayAppState.isDelayAppScreenVisible) {
40 debug('Delaying share modal by 5 minutes'); 40 debug('Delaying share modal by 5 minutes');
41 setTimeout(() => showModal(), ms('5m')); 41 setTimeout(() => showModal(), ms('5m'));
diff --git a/src/features/utils/ActionBinding.js b/src/features/utils/ActionBinding.js
new file mode 100644
index 000000000..497aa071b
--- /dev/null
+++ b/src/features/utils/ActionBinding.js
@@ -0,0 +1,29 @@
1export default class ActionBinding {
2 action;
3
4 isActive = false;
5
6 constructor(action) {
7 this.action = action;
8 }
9
10 start() {
11 if (!this.isActive) {
12 const { action } = this;
13 action[0].listen(action[1]);
14 this.isActive = true;
15 }
16 }
17
18 stop() {
19 if (this.isActive) {
20 const { action } = this;
21 action[0].off(action[1]);
22 this.isActive = false;
23 }
24 }
25}
26
27export const createActionBindings = actions => (
28 actions.map(a => new ActionBinding(a))
29);
diff --git a/src/features/utils/FeatureStore.js b/src/features/utils/FeatureStore.js
index 66b66a104..0bc10e176 100644
--- a/src/features/utils/FeatureStore.js
+++ b/src/features/utils/FeatureStore.js
@@ -1,21 +1,40 @@
1import Reaction from '../../stores/lib/Reaction';
2
3export class FeatureStore { 1export class FeatureStore {
4 _actions = null; 2 _actions = [];
3
4 _reactions = [];
5
6 stop() {
7 this._stopActions();
8 this._stopReactions();
9 }
10
11 // ACTIONS
12
13 _registerActions(actions) {
14 this._actions = actions;
15 this._startActions();
16 }
5 17
6 _reactions = null; 18 _startActions(actions = this._actions) {
19 actions.forEach(a => a.start());
20 }
21
22 _stopActions(actions = this._actions) {
23 actions.forEach(a => a.stop());
24 }
25
26 // REACTIONS
27
28 _registerReactions(reactions) {
29 this._reactions = reactions;
30 this._startReactions();
31 }
7 32
8 _listenToActions(actions) { 33 _startReactions(reactions = this._reactions) {
9 if (this._actions) this._actions.forEach(a => a[0].off(a[1])); 34 reactions.forEach(r => r.start());
10 this._actions = [];
11 actions.forEach(a => this._actions.push(a));
12 this._actions.forEach(a => a[0].listen(a[1]));
13 } 35 }
14 36
15 _startReactions(reactions) { 37 _stopReactions(reactions = this._reactions) {
16 if (this._reactions) this._reactions.forEach(r => r.stop()); 38 reactions.forEach(r => r.stop());
17 this._reactions = [];
18 reactions.forEach(r => this._reactions.push(new Reaction(r)));
19 this._reactions.forEach(r => r.start());
20 } 39 }
21} 40}
diff --git a/src/features/utils/FeatureStore.test.js b/src/features/utils/FeatureStore.test.js
new file mode 100644
index 000000000..92308bf52
--- /dev/null
+++ b/src/features/utils/FeatureStore.test.js
@@ -0,0 +1,92 @@
1import PropTypes from 'prop-types';
2import { observable } from 'mobx';
3import { FeatureStore } from './FeatureStore';
4import { createActionsFromDefinitions } from '../../actions/lib/actions';
5import { createActionBindings } from './ActionBinding';
6import { createReactions } from '../../stores/lib/Reaction';
7
8const actions = createActionsFromDefinitions({
9 countUp: {},
10}, PropTypes.checkPropTypes);
11
12class TestFeatureStore extends FeatureStore {
13 @observable count = 0;
14
15 reactionInvokedCount = 0;
16
17 start() {
18 this._registerActions(createActionBindings([
19 [actions.countUp, this._countUp],
20 ]));
21 this._registerReactions(createReactions([
22 this._countReaction,
23 ]));
24 }
25
26 _countUp = () => {
27 this.count += 1;
28 };
29
30 _countReaction = () => {
31 this.reactionInvokedCount += 1;
32 }
33}
34
35describe('FeatureStore', () => {
36 let store = null;
37
38 beforeEach(() => {
39 store = new TestFeatureStore();
40 });
41
42 describe('registering actions', () => {
43 it('starts the actions', () => {
44 store.start();
45 actions.countUp();
46 expect(store.count).toBe(1);
47 });
48 it('starts the reactions', () => {
49 store.start();
50 actions.countUp();
51 expect(store.reactionInvokedCount).toBe(1);
52 });
53 });
54
55 describe('stopping the store', () => {
56 it('stops the actions', () => {
57 store.start();
58 actions.countUp();
59 store.stop();
60 actions.countUp();
61 expect(store.count).toBe(1);
62 });
63 it('stops the reactions', () => {
64 store.start();
65 actions.countUp();
66 store.stop();
67 store.count += 1;
68 expect(store.reactionInvokedCount).toBe(1);
69 });
70 });
71
72 describe('toggling the store', () => {
73 it('restarts the actions correctly', () => {
74 store.start();
75 actions.countUp();
76 store.stop();
77 actions.countUp();
78 store.start();
79 actions.countUp();
80 expect(store.count).toBe(2);
81 });
82 it('restarts the reactions correctly', () => {
83 store.start();
84 actions.countUp();
85 store.stop();
86 actions.countUp();
87 store.start();
88 actions.countUp();
89 expect(store.count).toBe(2);
90 });
91 });
92});
diff --git a/src/features/workspaces/components/CreateWorkspaceForm.js b/src/features/workspaces/components/CreateWorkspaceForm.js
index 2c00ea63c..cddbb2b04 100644
--- a/src/features/workspaces/components/CreateWorkspaceForm.js
+++ b/src/features/workspaces/components/CreateWorkspaceForm.js
@@ -7,7 +7,7 @@ import injectSheet from 'react-jss';
7import Form from '../../../lib/Form'; 7import Form from '../../../lib/Form';
8import { required } from '../../../helpers/validation-helpers'; 8import { required } from '../../../helpers/validation-helpers';
9import { gaEvent } from '../../../lib/analytics'; 9import { gaEvent } from '../../../lib/analytics';
10import { GA_CATEGORY_WORKSPACES } from '../index'; 10import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index';
11 11
12const messages = defineMessages({ 12const messages = defineMessages({
13 submitButton: { 13 submitButton: {
@@ -82,7 +82,7 @@ class CreateWorkspaceForm extends Component {
82 {...form.$('name').bind()} 82 {...form.$('name').bind()}
83 showLabel={false} 83 showLabel={false}
84 onEnterKey={this.submitForm.bind(this, form)} 84 onEnterKey={this.submitForm.bind(this, form)}
85 focus 85 focus={workspaceStore.isUserAllowedToUseFeature}
86 /> 86 />
87 <Button 87 <Button
88 className={classes.submitButton} 88 className={classes.submitButton}
diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js
index bba4485ff..e602ebd5a 100644
--- a/src/features/workspaces/components/EditWorkspaceForm.js
+++ b/src/features/workspaces/components/EditWorkspaceForm.js
@@ -1,4 +1,4 @@
1import React, { Component } from 'react'; 1import React, { Component, Fragment } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react'; 3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
@@ -36,6 +36,14 @@ const messages = defineMessages({
36 id: 'settings.workspace.form.servicesInWorkspaceHeadline', 36 id: 'settings.workspace.form.servicesInWorkspaceHeadline',
37 defaultMessage: '!!!Services in this Workspace', 37 defaultMessage: '!!!Services in this Workspace',
38 }, 38 },
39 noServicesAdded: {
40 id: 'settings.services.noServicesAdded',
41 defaultMessage: '!!!You haven\'t added any services yet.',
42 },
43 discoverServices: {
44 id: 'settings.services.discoverServices',
45 defaultMessage: '!!!Discover services',
46 },
39}); 47});
40 48
41const styles = () => ({ 49const styles = () => ({
@@ -150,14 +158,29 @@ class EditWorkspaceForm extends Component {
150 </div> 158 </div>
151 <h2>{intl.formatMessage(messages.servicesInWorkspaceHeadline)}</h2> 159 <h2>{intl.formatMessage(messages.servicesInWorkspaceHeadline)}</h2>
152 <div className={classes.serviceList}> 160 <div className={classes.serviceList}>
153 {services.map(s => ( 161 {services.length === 0 ? (
154 <WorkspaceServiceListItem 162 <div className="align-middle settings__empty-state">
155 key={s.id} 163 {/* ===== Empty state ===== */}
156 service={s} 164 <p className="settings__empty-text">
157 isInWorkspace={workspaceServices.includes(s.id)} 165 <span className="emoji">
158 onToggle={() => this.toggleService(s)} 166 <img src="./assets/images/emoji/sad.png" alt="" />
159 /> 167 </span>
160 ))} 168 {intl.formatMessage(messages.noServicesAdded)}
169 </p>
170 <Link to="/settings/recipes" className="button">{intl.formatMessage(messages.discoverServices)}</Link>
171 </div>
172 ) : (
173 <Fragment>
174 {services.map(s => (
175 <WorkspaceServiceListItem
176 key={s.id}
177 service={s}
178 isInWorkspace={workspaceServices.includes(s.id)}
179 onToggle={() => this.toggleService(s)}
180 />
181 ))}
182 </Fragment>
183 )}
161 </div> 184 </div>
162 </div> 185 </div>
163 <div className="settings__controls"> 186 <div className="settings__controls">
diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js
index dd4381a15..09c98ab8c 100644
--- a/src/features/workspaces/components/WorkspacesDashboard.js
+++ b/src/features/workspaces/components/WorkspacesDashboard.js
@@ -170,18 +170,32 @@ class WorkspacesDashboard extends Component {
170 {intl.formatMessage(messages.workspacesRequestFailed)} 170 {intl.formatMessage(messages.workspacesRequestFailed)}
171 </Infobox> 171 </Infobox>
172 ) : ( 172 ) : (
173 <table className={classes.table}> 173 <Fragment>
174 {/* ===== Workspaces list ===== */} 174 {workspaces.length === 0 ? (
175 <tbody> 175 <div className="align-middle settings__empty-state">
176 {workspaces.map(workspace => ( 176 {/* ===== Workspaces empty state ===== */}
177 <WorkspaceItem 177 <p className="settings__empty-text">
178 key={workspace.id} 178 <span className="emoji">
179 workspace={workspace} 179 <img src="./assets/images/emoji/sad.png" alt="" />
180 onItemClick={w => onWorkspaceClick(w)} 180 </span>
181 /> 181 {intl.formatMessage(messages.noServicesAdded)}
182 ))} 182 </p>
183 </tbody> 183 </div>
184 </table> 184 ) : (
185 <table className={classes.table}>
186 {/* ===== Workspaces list ===== */}
187 <tbody>
188 {workspaces.map(workspace => (
189 <WorkspaceItem
190 key={workspace.id}
191 workspace={workspace}
192 onItemClick={w => onWorkspaceClick(w)}
193 />
194 ))}
195 </tbody>
196 </table>
197 )}
198 </Fragment>
185 )} 199 )}
186 </Fragment> 200 </Fragment>
187 )} 201 )}
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js
index ea601700e..51a7f3651 100644
--- a/src/features/workspaces/store.js
+++ b/src/features/workspaces/store.js
@@ -14,6 +14,8 @@ import {
14 updateWorkspaceRequest, 14 updateWorkspaceRequest,
15} from './api'; 15} from './api';
16import { WORKSPACES_ROUTES } from './index'; 16import { WORKSPACES_ROUTES } from './index';
17import { createReactions } from '../../stores/lib/Reaction';
18import { createActionBindings } from '../utils/ActionBinding';
17 19
18const debug = require('debug')('Franz:feature:workspaces:store'); 20const debug = require('debug')('Franz:feature:workspaces:store');
19 21
@@ -51,37 +53,78 @@ export default class WorkspacesStore extends FeatureStore {
51 return getUserWorkspacesRequest.wasExecuted && this.workspaces.length > 0; 53 return getUserWorkspacesRequest.wasExecuted && this.workspaces.length > 0;
52 } 54 }
53 55
56 @computed get isUserAllowedToUseFeature() {
57 return !this.isPremiumUpgradeRequired;
58 }
59
60 @computed get isAnyWorkspaceActive() {
61 return !!this.activeWorkspace;
62 }
63
64 // ========== PRIVATE PROPERTIES ========= //
65
66 _wasDrawerOpenBeforeSettingsRoute = null;
67
68 _freeUserActions = [];
69
70 _premiumUserActions = [];
71
72 _allActions = [];
73
74 _freeUserReactions = [];
75
76 _premiumUserReactions = [];
77
78 _allReactions = [];
79
80 // ========== PUBLIC API ========= //
81
54 start(stores, actions) { 82 start(stores, actions) {
55 debug('WorkspacesStore::start'); 83 debug('WorkspacesStore::start');
56 this.stores = stores; 84 this.stores = stores;
57 this.actions = actions; 85 this.actions = actions;
58 86
59 this._listenToActions([ 87 // ACTIONS
88
89 this._freeUserActions = createActionBindings([
90 [workspaceActions.toggleWorkspaceDrawer, this._toggleWorkspaceDrawer],
91 [workspaceActions.openWorkspaceSettings, this._openWorkspaceSettings],
92 ]);
93 this._premiumUserActions = createActionBindings([
60 [workspaceActions.edit, this._edit], 94 [workspaceActions.edit, this._edit],
61 [workspaceActions.create, this._create], 95 [workspaceActions.create, this._create],
62 [workspaceActions.delete, this._delete], 96 [workspaceActions.delete, this._delete],
63 [workspaceActions.update, this._update], 97 [workspaceActions.update, this._update],
64 [workspaceActions.activate, this._setActiveWorkspace], 98 [workspaceActions.activate, this._setActiveWorkspace],
65 [workspaceActions.deactivate, this._deactivateActiveWorkspace], 99 [workspaceActions.deactivate, this._deactivateActiveWorkspace],
66 [workspaceActions.toggleWorkspaceDrawer, this._toggleWorkspaceDrawer],
67 [workspaceActions.openWorkspaceSettings, this._openWorkspaceSettings],
68 ]); 100 ]);
101 this._allActions = this._freeUserActions.concat(this._premiumUserActions);
102 this._registerActions(this._allActions);
69 103
70 this._startReactions([ 104 // REACTIONS
71 this._setWorkspaceBeingEditedReaction, 105
72 this._setActiveServiceOnWorkspaceSwitchReaction, 106 this._freeUserReactions = createReactions([
107 this._stopPremiumActionsAndReactions,
108 this._openDrawerWithSettingsReaction,
73 this._setFeatureEnabledReaction, 109 this._setFeatureEnabledReaction,
74 this._setIsPremiumFeatureReaction, 110 this._setIsPremiumFeatureReaction,
75 this._activateLastUsedWorkspaceReaction,
76 this._openDrawerWithSettingsReaction,
77 this._cleanupInvalidServiceReferences, 111 this._cleanupInvalidServiceReferences,
78 ]); 112 ]);
113 this._premiumUserReactions = createReactions([
114 this._setActiveServiceOnWorkspaceSwitchReaction,
115 this._activateLastUsedWorkspaceReaction,
116 this._setWorkspaceBeingEditedReaction,
117 ]);
118 this._allReactions = this._freeUserReactions.concat(this._premiumUserReactions);
119
120 this._registerReactions(this._allReactions);
79 121
80 getUserWorkspacesRequest.execute(); 122 getUserWorkspacesRequest.execute();
81 this.isFeatureActive = true; 123 this.isFeatureActive = true;
82 } 124 }
83 125
84 stop() { 126 stop() {
127 super.stop();
85 debug('WorkspacesStore::stop'); 128 debug('WorkspacesStore::stop');
86 this.isFeatureActive = false; 129 this.isFeatureActive = false;
87 this.activeWorkspace = null; 130 this.activeWorkspace = null;
@@ -104,9 +147,7 @@ export default class WorkspacesStore extends FeatureStore {
104 return workspace.services.map(id => services.one(id)).filter(s => !!s); 147 return workspace.services.map(id => services.one(id)).filter(s => !!s);
105 } 148 }
106 149
107 // ========== PRIVATE ========= // 150 // ========== PRIVATE METHODS ========= //
108
109 _wasDrawerOpenBeforeSettingsRoute = null;
110 151
111 _getWorkspaceById = id => this.workspaces.find(w => w.id === id); 152 _getWorkspaceById = id => this.workspaces.find(w => w.id === id);
112 153
@@ -192,6 +233,14 @@ export default class WorkspacesStore extends FeatureStore {
192 this.actions.ui.openSettings({ path: 'workspaces' }); 233 this.actions.ui.openSettings({ path: 'workspaces' });
193 }; 234 };
194 235
236 @action reorderServicesOfActiveWorkspace = async ({ oldIndex, newIndex }) => {
237 const { activeWorkspace } = this;
238 const { services } = activeWorkspace;
239 // Move services from the old to the new position
240 services.splice(newIndex, 0, services.splice(oldIndex, 1)[0]);
241 await updateWorkspaceRequest.execute(activeWorkspace);
242 };
243
195 // Reactions 244 // Reactions
196 245
197 _setFeatureEnabledReaction = () => { 246 _setFeatureEnabledReaction = () => {
@@ -218,13 +267,15 @@ export default class WorkspacesStore extends FeatureStore {
218 _setActiveServiceOnWorkspaceSwitchReaction = () => { 267 _setActiveServiceOnWorkspaceSwitchReaction = () => {
219 if (!this.isFeatureActive) return; 268 if (!this.isFeatureActive) return;
220 if (this.activeWorkspace) { 269 if (this.activeWorkspace) {
221 const services = this.stores.services.allDisplayed; 270 const activeService = this.stores.services.active;
222 const activeService = services.find(s => s.isActive);
223 const workspaceServices = this.getWorkspaceServices(this.activeWorkspace); 271 const workspaceServices = this.getWorkspaceServices(this.activeWorkspace);
224 if (workspaceServices.length <= 0) return; 272 if (workspaceServices.length <= 0) return;
225 const isActiveServiceInWorkspace = workspaceServices.includes(activeService); 273 const isActiveServiceInWorkspace = workspaceServices.includes(activeService);
226 if (!isActiveServiceInWorkspace) { 274 if (!isActiveServiceInWorkspace) {
227 this.actions.service.setActive({ serviceId: workspaceServices[0].id }); 275 this.actions.service.setActive({
276 serviceId: workspaceServices[0].id,
277 keepActiveRoute: true,
278 });
228 } 279 }
229 } 280 }
230 }; 281 };
@@ -273,4 +324,14 @@ export default class WorkspacesStore extends FeatureStore {
273 getUserWorkspacesRequest.execute(); 324 getUserWorkspacesRequest.execute();
274 } 325 }
275 }; 326 };
327
328 _stopPremiumActionsAndReactions = () => {
329 if (!this.isUserAllowedToUseFeature) {
330 this._stopActions(this._premiumUserActions);
331 this._stopReactions(this._premiumUserReactions);
332 } else {
333 this._startActions(this._premiumUserActions);
334 this._startReactions(this._premiumUserReactions);
335 }
336 }
276} 337}
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json
index dabe4ba16..b2aaaa070 100644
--- a/src/i18n/locales/ca.json
+++ b/src/i18n/locales/ca.json
@@ -1,15 +1,16 @@
1{ 1{
2 "app.errorHandler.action" : "Recarrega", 2 "app.errorHandler.action" : "Recarrega",
3 "app.errorHandler.headline" : "Quelcom ha anat malament", 3 "app.errorHandler.headline" : "Quelcom ha anat malament",
4 "feature.announcements.changelog.headline" : "Canvis en Franz {version}",
4 "feature.delayApp.action" : "Aconsegueix una llicència de suport per a Franz", 5 "feature.delayApp.action" : "Aconsegueix una llicència de suport per a Franz",
5 "feature.delayApp.headline" : "Si us plau, compra una llicència de suport per a Franz per saltar l'espera", 6 "feature.delayApp.headline" : "Si us plau, compra una llicència de suport per a Franz per saltar l'espera",
6 "feature.delayApp.text" : "Franz continuarà en {seconds} segons", 7 "feature.delayApp.text" : "Franz continuarà en {seconds} segons",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Envia com a correu",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Compartir en Facebook",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "No es pot connectar amb els serveis en línia de Franz", 15 "global.api.unhealthy" : "No es pot connectar amb els serveis en línia de Franz",
15 "global.notConnectedToTheInternet" : "No esteu connectat a Internet.", 16 "global.notConnectedToTheInternet" : "No esteu connectat a Internet.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Accedir", 44 "login.submit.label" : "Accedir",
44 "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.", 45 "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.",
45 "menu.app.about" : "Sobre Franz", 46 "menu.app.about" : "Sobre Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Amaga", 48 "menu.app.hide" : "Amaga",
47 "menu.app.hideOthers" : "Amaga altres", 49 "menu.app.hideOthers" : "Amaga altres",
48 "menu.app.quit" : "Surt", 50 "menu.app.quit" : "Surt",
@@ -87,6 +89,11 @@
87 "menu.window" : "Finestra", 89 "menu.window" : "Finestra",
88 "menu.window.close" : "Tanca", 90 "menu.window.close" : "Tanca",
89 "menu.window.minimize" : "Minimitza", 91 "menu.window.minimize" : "Minimitza",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Tots els serveis",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Correu electrònic", 97 "password.email.label" : "Correu electrònic",
91 "password.headline" : "Restablir contrasenya", 98 "password.headline" : "Restablir contrasenya",
92 "password.link.login" : "Inicia la sessió al teu compte", 99 "password.link.login" : "Inicia la sessió al teu compte",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh no!", 117 "service.errorHandler.headline" : "Oh no!",
111 "service.errorHandler.message" : "Error", 118 "service.errorHandler.message" : "Error",
112 "service.errorHandler.text" : "{name} ha fallat al carregar", 119 "service.errorHandler.text" : "{name} ha fallat al carregar",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Introducció", 121 "services.getStarted" : "Introducció",
114 "services.welcome" : "Benvingut a Franz", 122 "services.welcome" : "Benvingut a Franz",
115 "settings.account.account.editButton" : "Editar Compte", 123 "settings.account.account.editButton" : "Editar Compte",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "General", 164 "settings.app.headlineGeneral" : "General",
157 "settings.app.headlineLanguage" : "Idioma", 165 "settings.app.headlineLanguage" : "Idioma",
158 "settings.app.headlineUpdates" : "Actualitzacions", 166 "settings.app.headlineUpdates" : "Actualitzacions",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Els canvis requereixen reiniciar", 168 "settings.app.restartRequired" : "Els canvis requereixen reiniciar",
160 "settings.app.subheadlineCache" : "Memòria cau", 169 "settings.app.subheadlineCache" : "Memòria cau",
161 "settings.app.translationHelp" : "Ajuda'ns a traduir Franz en la teva llengua.", 170 "settings.app.translationHelp" : "Ajuda'ns a traduir Franz en la teva llengua.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Convidar amics", 177 "settings.navigation.inviteFriends" : "Convidar amics",
169 "settings.navigation.logout" : "Sortir", 178 "settings.navigation.logout" : "Sortir",
170 "settings.navigation.settings" : "Configuració", 179 "settings.navigation.settings" : "Configuració",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Els vostres serveis", 181 "settings.navigation.yourServices" : "Els vostres serveis",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Tots els serveis", 183 "settings.recipes.all" : "Tots els serveis",
173 "settings.recipes.dev" : "Desenvolupament", 184 "settings.recipes.dev" : "Desenvolupament",
174 "settings.recipes.headline" : "Serveis disponibles", 185 "settings.recipes.headline" : "Serveis disponibles",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Tots els sons estan desactivats", 237 "settings.services.tooltip.isMuted" : "Tots els sons estan desactivats",
227 "settings.services.tooltip.notificationsDisabled" : "Les notificacions estan desactivades", 238 "settings.services.tooltip.notificationsDisabled" : "Les notificacions estan desactivades",
228 "settings.services.updatedInfo" : "S'han desat els canvis", 239 "settings.services.updatedInfo" : "S'han desat els canvis",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Equip",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Empresa", 246 "settings.user.form.accountType.company" : "Empresa",
230 "settings.user.form.accountType.individual" : "Individual", 247 "settings.user.form.accountType.individual" : "Individual",
231 "settings.user.form.accountType.label" : "Tipus de compte", 248 "settings.user.form.accountType.label" : "Tipus de compte",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Nom", 252 "settings.user.form.firstname" : "Nom",
236 "settings.user.form.lastname" : "Cognoms", 253 "settings.user.form.lastname" : "Cognoms",
237 "settings.user.form.newPassword" : "Nova contrasenya", 254 "settings.user.form.newPassword" : "Nova contrasenya",
255 "settings.workspace.add.form.name" : "Nom",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Nom",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Torna a provar-ho",
266 "settings.workspaces.updatedInfo" : "S'han desat els canvis",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Afegeix nou servei", 270 "sidebar.addNewService" : "Afegeix nou servei",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Desactivar notificacions i àudio", 272 "sidebar.muteApp" : "Desactivar notificacions i àudio",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Configuració", 274 "sidebar.settings" : "Configuració",
241 "sidebar.unmuteApp" : "Activar notificacions i àudio", 275 "sidebar.unmuteApp" : "Activar notificacions i àudio",
242 "signup.company.label" : "Empresa", 276 "signup.company.label" : "Empresa",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Afegir serveis allotjats com Mattermost", 292 "subscription.features.onpremise.mattermost" : "Afegir serveis allotjats com Mattermost",
259 "subscription.features.proxy" : "Suport de Proxy per a serveis", 293 "subscription.features.proxy" : "Suport de Proxy per a serveis",
260 "subscription.features.spellchecker" : "Suport per corrector ortogràfic", 294 "subscription.features.spellchecker" : "Suport per corrector ortogràfic",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "El compte de pagament Franz Premium Supporter inclou", 296 "subscription.includedFeatures" : "El compte de pagament Franz Premium Supporter inclou",
262 "subscription.paymentSessionError" : "No s'ha pogut inicialitzar el formulari de pagament", 297 "subscription.paymentSessionError" : "No s'ha pogut inicialitzar el formulari de pagament",
263 "subscription.submit.label" : "Vull donar suport al desenvolupament de Franz", 298 "subscription.submit.label" : "Vull donar suport al desenvolupament de Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} es requerit", 316 "validation.required" : "{field} es requerit",
282 "validation.url" : "{field} es una URL no vàlida", 317 "validation.url" : "{field} es una URL no vàlida",
283 "welcome.loginButton" : "Inicia sessió al teu compte", 318 "welcome.loginButton" : "Inicia sessió al teu compte",
284 "welcome.signupButton" : "Crea un compte gratuït" 319 "welcome.signupButton" : "Crea un compte gratuït",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Tots els serveis",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json
index f0b0b7c81..aadfeffbc 100644
--- a/src/i18n/locales/cs.json
+++ b/src/i18n/locales/cs.json
@@ -1,15 +1,16 @@
1{ 1{
2 "app.errorHandler.action" : "Obnovit", 2 "app.errorHandler.action" : "Obnovit",
3 "app.errorHandler.headline" : "Něco se pokazilo", 3 "app.errorHandler.headline" : "Něco se pokazilo",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Podpoř Franz a získej Supporter licenci", 5 "feature.delayApp.action" : "Podpoř Franz a získej Supporter licenci",
5 "feature.delayApp.headline" : "Kup si Franz Supporter licenci a nebudeÅ¡ už muset Äekat", 6 "feature.delayApp.headline" : "Kup si Franz Supporter licenci a nebudeÅ¡ už muset Äekat",
6 "feature.delayApp.text" : "Franz bude pokraÄovat v {seconds} sekundách.", 7 "feature.delayApp.text" : "Franz bude pokraÄovat v {seconds} sekundách.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Poslat jako e-mail",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Sdílet na Facebooku",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Sdílet na Twitteru",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Nemůžeme připojit Franz k online službám", 15 "global.api.unhealthy" : "Nemůžeme připojit Franz k online službám",
15 "global.notConnectedToTheInternet" : "Připojení k internetu není k dispozici.", 16 "global.notConnectedToTheInternet" : "Připojení k internetu není k dispozici.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Přihlásit se", 44 "login.submit.label" : "Přihlásit se",
44 "login.tokenExpired" : "Sezení vypršelo, prosím přihlaste se znovu", 45 "login.tokenExpired" : "Sezení vypršelo, prosím přihlaste se znovu",
45 "menu.app.about" : "O aplikaci", 46 "menu.app.about" : "O aplikaci",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Skrýt", 48 "menu.app.hide" : "Skrýt",
47 "menu.app.hideOthers" : "Skryt ostatní", 49 "menu.app.hideOthers" : "Skryt ostatní",
48 "menu.app.quit" : "UkonÄit", 50 "menu.app.quit" : "UkonÄit",
@@ -87,6 +89,11 @@
87 "menu.window" : "Okno", 89 "menu.window" : "Okno",
88 "menu.window.close" : "Zavřít", 90 "menu.window.close" : "Zavřít",
89 "menu.window.minimize" : "Minimalizovat", 91 "menu.window.minimize" : "Minimalizovat",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Všechny služby",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "E-mailová adresa", 97 "password.email.label" : "E-mailová adresa",
91 "password.headline" : "Obnovit heslo", 98 "password.headline" : "Obnovit heslo",
92 "password.link.login" : "PÅ™ihlásit se k úÄtu", 99 "password.link.login" : "PÅ™ihlásit se k úÄtu",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Ale ne!", 117 "service.errorHandler.headline" : "Ale ne!",
111 "service.errorHandler.message" : "Chyba", 118 "service.errorHandler.message" : "Chyba",
112 "service.errorHandler.text" : "{name} se nepodaÅ™ilo naÄíst.", 119 "service.errorHandler.text" : "{name} se nepodaÅ™ilo naÄíst.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "ZaÄnÄ›me", 121 "services.getStarted" : "ZaÄnÄ›me",
114 "services.welcome" : "Vítejte v programu Franz", 122 "services.welcome" : "Vítejte v programu Franz",
115 "settings.account.account.editButton" : "Upravit úÄet", 123 "settings.account.account.editButton" : "Upravit úÄet",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Obecné", 164 "settings.app.headlineGeneral" : "Obecné",
157 "settings.app.headlineLanguage" : "Jazyk", 165 "settings.app.headlineLanguage" : "Jazyk",
158 "settings.app.headlineUpdates" : "Aktualizace", 166 "settings.app.headlineUpdates" : "Aktualizace",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Změny vyžadují restart", 168 "settings.app.restartRequired" : "Změny vyžadují restart",
160 "settings.app.subheadlineCache" : "Mezipaměť", 169 "settings.app.subheadlineCache" : "Mezipaměť",
161 "settings.app.translationHelp" : "Pomozte nám přeložit Franz do svého jazyka.", 170 "settings.app.translationHelp" : "Pomozte nám přeložit Franz do svého jazyka.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Pozvi přátele", 177 "settings.navigation.inviteFriends" : "Pozvi přátele",
169 "settings.navigation.logout" : "Odhlásit", 178 "settings.navigation.logout" : "Odhlásit",
170 "settings.navigation.settings" : "Nastavení", 179 "settings.navigation.settings" : "Nastavení",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Vaše služby", 181 "settings.navigation.yourServices" : "Vaše služby",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Všechny služby", 183 "settings.recipes.all" : "Všechny služby",
173 "settings.recipes.dev" : "Vývoj", 184 "settings.recipes.dev" : "Vývoj",
174 "settings.recipes.headline" : "Dostupné služby", 185 "settings.recipes.headline" : "Dostupné služby",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Všechny zvuky jsou ztišeny", 237 "settings.services.tooltip.isMuted" : "Všechny zvuky jsou ztišeny",
227 "settings.services.tooltip.notificationsDisabled" : "Oznámení jsou zakázána", 238 "settings.services.tooltip.notificationsDisabled" : "Oznámení jsou zakázána",
228 "settings.services.updatedInfo" : "Vaše změny byly uloženy", 239 "settings.services.updatedInfo" : "Vaše změny byly uloženy",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Tým",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "SpoleÄnost", 246 "settings.user.form.accountType.company" : "SpoleÄnost",
230 "settings.user.form.accountType.individual" : "Jednotlivec", 247 "settings.user.form.accountType.individual" : "Jednotlivec",
231 "settings.user.form.accountType.label" : "Druh úÄtu", 248 "settings.user.form.accountType.label" : "Druh úÄtu",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Jméno", 252 "settings.user.form.firstname" : "Jméno",
236 "settings.user.form.lastname" : "Příjmení", 253 "settings.user.form.lastname" : "Příjmení",
237 "settings.user.form.newPassword" : "Nové heslo", 254 "settings.user.form.newPassword" : "Nové heslo",
255 "settings.workspace.add.form.name" : "Jméno",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Jméno",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Zkusit opět",
266 "settings.workspaces.updatedInfo" : "Vaše změny byly uloženy",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Přidat novou službu", 270 "sidebar.addNewService" : "Přidat novou službu",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Vypnout upozornění a zvuky", 272 "sidebar.muteApp" : "Vypnout upozornění a zvuky",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Nastavení", 274 "sidebar.settings" : "Nastavení",
241 "sidebar.unmuteApp" : "Zapnout upozornění a zvuky", 275 "sidebar.unmuteApp" : "Zapnout upozornění a zvuky",
242 "signup.company.label" : "SpoleÄnost", 276 "signup.company.label" : "SpoleÄnost",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Placený úÄet Premium Supporter Franz zahrnuje", 296 "subscription.includedFeatures" : "Placený úÄet Premium Supporter Franz zahrnuje",
262 "subscription.paymentSessionError" : "Nebylo možné inicializovat platbu od", 297 "subscription.paymentSessionError" : "Nebylo možné inicializovat platbu od",
263 "subscription.submit.label" : "Chci podpořit vývoj aplikace Franz", 298 "subscription.submit.label" : "Chci podpořit vývoj aplikace Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} je povinné", 316 "validation.required" : "{field} je povinné",
282 "validation.url" : "{field} není validní URL", 317 "validation.url" : "{field} není validní URL",
283 "welcome.loginButton" : "PÅ™ihlášení do vaÅ¡eho úÄtu", 318 "welcome.loginButton" : "PÅ™ihlášení do vaÅ¡eho úÄtu",
284 "welcome.signupButton" : "VytvoÅ™it úÄet zdarma" 319 "welcome.signupButton" : "VytvoÅ™it úÄet zdarma",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Všechny služby",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index 06a03db65..bd5193177 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -1,41 +1,42 @@
1{ 1{
2 "app.errorHandler.action" : "Neu laden", 2 "app.errorHandler.action" : "Neu laden",
3 "app.errorHandler.headline" : "Es trat ein Fehler auf", 3 "app.errorHandler.headline" : "Es ist ein Fehler aufgetreten",
4 "feature.delayApp.action" : "Upgrade deinen Account", 4 "feature.announcements.changelog.headline" : "Was ist neu in Franz {version}",
5 "feature.delayApp.headline" : "Erspare dir das Warten mit einer Franz Supporter Lizenz", 5 "feature.delayApp.action" : "Hol dir Franz Premium!",
6 "feature.delayApp.text" : "Es geht in {seconds} Sekunden weiter.", 6 "feature.delayApp.headline" : "Erspare dir das Warten mit Franz Premium!",
7 "feature.delayApp.text" : "In {seconds} Sekunden geht's weiter!",
7 "feature.shareFranz.action.email" : "Als E-Mail senden", 8 "feature.shareFranz.action.email" : "Als E-Mail senden",
8 "feature.shareFranz.action.facebook" : "Auf Facebook teilen", 9 "feature.shareFranz.action.facebook" : "Auf Facebook teilen",
9 "feature.shareFranz.action.twitter" : "Auf Twitter teilen", 10 "feature.shareFranz.action.twitter" : "Auf Twitter teilen",
10 "feature.shareFranz.headline" : "Gemeinsam ist Franz noch besser!", 11 "feature.shareFranz.headline" : "Gemeinsam ist Franz noch besser!",
11 "feature.shareFranz.shareText.email" : "Ich verwende Franz! Hol dir jetzt die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com", 12 "feature.shareFranz.shareText.email" : "Ich verwende Franz! Hol dir jetzt die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com",
12 "feature.shareFranz.shareText.twitter" : "Ich verwende Franz mit {count} Diensten! Hol dir jetzt die kostenlose App für WhatsApp, Messenger, Slack, Skype und mehr auf www.meetfranz.com \/cc @MeetFranz", 13 "feature.shareFranz.shareText.twitter" : "Ich habe {count} Services zu Franz hinzugefügt! Hol dir die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.meetfranz.com \/cc @FranzMessenger",
13 "feature.shareFranz.text" : "Bitte erzähle deinen Freunden und Kollegen wie toll du Franz findest.", 14 "feature.shareFranz.text" : "Bitte erzähle deinen Freunden und Kolleginnen, warum du Franz toll findest.",
14 "global.api.unhealthy" : "Verbindung mit dem Franz Online Service fehlgeschlagen", 15 "global.api.unhealthy" : "Verbindung zum Franz Online Service fehlgeschlagen",
15 "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.", 16 "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.",
16 "global.spellchecker.useDefault" : "Standard benutzen ({default})", 17 "global.spellchecker.useDefault" : "Standard benutzen ({default})",
17 "global.spellchecking.autodetect" : "Sprache automatisch erkennen", 18 "global.spellchecking.autodetect" : "Sprache automatisch erkennen",
18 "global.spellchecking.autodetect.short" : "Automatisch", 19 "global.spellchecking.autodetect.short" : "Automatisch",
19 "global.spellchecking.language" : "Sprache für Rechtschreibprüfung", 20 "global.spellchecking.language" : "Sprache für Rechtschreibprüfung",
20 "import.headline" : "Deine Franz 4 Dienste importieren", 21 "import.headline" : "Deine Franz-4-Dienste importieren",
21 "import.notSupportedHeadline" : "Dienste, die noch nicht von Franz 5 unterstützt werden", 22 "import.notSupportedHeadline" : "Dienste, die noch nicht von Franz 5 unterstützt werden",
22 "import.skip.label" : "Ich möchte Dienste selbst hinzufügen", 23 "import.skip.label" : "Ich möchte Dienste selbst hinzufügen",
23 "import.submit.label" : "Dienste importieren", 24 "import.submit.label" : "Dienste importieren",
24 "infobar.buttonChangelog" : "Was ist neu?", 25 "infobar.buttonChangelog" : "Was gibt es Neues?",
25 "infobar.buttonInstallUpdate" : "Neu starten & Update installieren", 26 "infobar.buttonInstallUpdate" : "Neu starten & Update installieren",
26 "infobar.buttonReloadServices" : "Dienste neuladen", 27 "infobar.buttonReloadServices" : "Dienste neu laden",
27 "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden", 28 "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden",
28 "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.", 29 "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.",
29 "infobar.updateAvailable" : "Eine neue Version von Franz ist verfügbar.", 30 "infobar.updateAvailable" : "Eine neue Version von Franz ist verfügbar!",
30 "invite.email.label" : "E-Mail-Adresse", 31 "invite.email.label" : "E-Mail-Adresse",
31 "invite.headline.friends" : "Lade 3 Freunde oder Kollegen ein", 32 "invite.headline.friends" : "Lade drei Freunde oder Kolleginnen ein!",
32 "invite.name.label" : "Name", 33 "invite.name.label" : "Name",
33 "invite.skip.label" : "Ich möchte das später tun", 34 "invite.skip.label" : "Jetzt nicht! Ich möchte das später tun.",
34 "invite.submit.label" : "Einladungen schicken", 35 "invite.submit.label" : "Einladungen schicken",
35 "invite.successInfo" : "Die Einladungen wurden erfolgreich gesendet.", 36 "invite.successInfo" : "Die Einladungen wurden erfolgreich versendet.",
36 "login.email.label" : "E-Mail-Adresse", 37 "login.email.label" : "E-Mail-Adresse",
37 "login.headline" : "Anmelden", 38 "login.headline" : "Anmelden",
38 "login.invalidCredentials" : "E-Mail Adresse oder Passwort ungültig", 39 "login.invalidCredentials" : "E-Mail-Adresse oder Passwort ungültig",
39 "login.link.password" : "Passwort zurücksetzen", 40 "login.link.password" : "Passwort zurücksetzen",
40 "login.link.signup" : "Kostenloses Konto erstellen", 41 "login.link.signup" : "Kostenloses Konto erstellen",
41 "login.password.label" : "Passwort", 42 "login.password.label" : "Passwort",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Anmelden", 44 "login.submit.label" : "Anmelden",
44 "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", 45 "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.",
45 "menu.app.about" : "Ãœber Franz", 46 "menu.app.about" : "Ãœber Franz",
47 "menu.app.announcement" : "Was ist neu?",
46 "menu.app.hide" : "Ausblenden", 48 "menu.app.hide" : "Ausblenden",
47 "menu.app.hideOthers" : "Andere ausblenden", 49 "menu.app.hideOthers" : "Andere ausblenden",
48 "menu.app.quit" : "Beenden", 50 "menu.app.quit" : "Beenden",
@@ -87,12 +89,14 @@
87 "menu.window" : "Fenster", 89 "menu.window" : "Fenster",
88 "menu.window.close" : "Schließen", 90 "menu.window.close" : "Schließen",
89 "menu.window.minimize" : "Minimieren", 91 "menu.window.minimize" : "Minimieren",
90 "menu.workspaces": "Workspaces", 92 "menu.workspaces" : "Workspaces",
91 "menu.workspaces.defaultWorkspace": "All services", 93 "menu.workspaces.addNewWorkspace" : "Neuen Workspace hinzufügen",
92 "menu.workspaces.addNewWorkspace": "Add New Workspace", 94 "menu.workspaces.closeWorkspaceDrawer" : "Workspaces öffnen",
93 "password.email.label" : "E-Mail Adresse", 95 "menu.workspaces.defaultWorkspace" : "Alle Dienste",
96 "menu.workspaces.openWorkspaceDrawer" : "Workspaces schließen",
97 "password.email.label" : "E-Mail-Adresse",
94 "password.headline" : "Passwort zurücksetzen", 98 "password.headline" : "Passwort zurücksetzen",
95 "password.link.login" : "An Deinem Konto anmelden", 99 "password.link.login" : "Mit deinem Konto anmelden",
96 "password.link.signup" : "Kostenloses Konto erstellen", 100 "password.link.signup" : "Kostenloses Konto erstellen",
97 "password.noUser" : "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.", 101 "password.noUser" : "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.",
98 "password.submit.label" : "Absenden", 102 "password.submit.label" : "Absenden",
@@ -102,28 +106,29 @@
102 "pricing.link.skipPayment" : "Ich möchte die Entwicklung von Franz nicht unterstützen.", 106 "pricing.link.skipPayment" : "Ich möchte die Entwicklung von Franz nicht unterstützen.",
103 "pricing.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen.", 107 "pricing.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen.",
104 "pricing.support.label" : "Wie möchtest Du Franz unterstützen?", 108 "pricing.support.label" : "Wie möchtest Du Franz unterstützen?",
105 "service.crashHandler.action" : "{name} neuladen", 109 "service.crashHandler.action" : "{name} neu laden",
106 "service.crashHandler.autoReload" : "{name} wird in {seconds} Sekunden automatisch wiederhergestellt", 110 "service.crashHandler.autoReload" : "{name} wird in {seconds} Sekunden automatisch wiederhergestellt",
107 "service.crashHandler.headline" : "Oh nein!", 111 "service.crashHandler.headline" : "Oh nein!",
108 "service.crashHandler.text" : "{name} hat einen Fehler verursacht.", 112 "service.crashHandler.text" : "{name} hat einen Fehler verursacht.",
109 "service.disabledHandler.action" : "{name} aktivieren", 113 "service.disabledHandler.action" : "{name} aktivieren",
110 "service.disabledHandler.headline" : "{name} ist deaktiviert", 114 "service.disabledHandler.headline" : "{name} ist deaktiviert",
111 "service.errorHandler.action" : "{name} neuladen", 115 "service.errorHandler.action" : "{name} neu laden",
112 "service.errorHandler.editAction" : "{name} bearbeiten", 116 "service.errorHandler.editAction" : "{name} bearbeiten",
113 "service.errorHandler.headline" : "Oh nein!", 117 "service.errorHandler.headline" : "Oh nein!",
114 "service.errorHandler.message" : "Fehler", 118 "service.errorHandler.message" : "Fehler",
115 "service.errorHandler.text" : "{name} konnte nicht geladen werden.", 119 "service.errorHandler.text" : "{name} konnte nicht geladen werden.",
116 "services.getStarted" : "Loslegen", 120 "service.webviewLoader.loading" : "Lade",
117 "services.welcome" : "Willkommen bei Franz.", 121 "services.getStarted" : "Los geht's!",
122 "services.welcome" : "Willkommen bei Franz!",
118 "settings.account.account.editButton" : "Konto bearbeiten", 123 "settings.account.account.editButton" : "Konto bearbeiten",
119 "settings.account.accountType.basic" : "Basis Konto", 124 "settings.account.accountType.basic" : "Basis-Konto",
120 "settings.account.accountType.premium" : "Premium-Supporter Konto", 125 "settings.account.accountType.premium" : "Premium Lizenz",
121 "settings.account.buttonSave" : "Profil aktualisieren", 126 "settings.account.buttonSave" : "Profil aktualisieren",
122 "settings.account.deleteAccount" : "Benutzerkonto löschen", 127 "settings.account.deleteAccount" : "Benutzerkonto löschen",
123 "settings.account.deleteEmailSent" : "Du hast eine Email zur Bestätigung der Löschung Deines Benutzerkontos erhalten. Dein Benutzerkonto und Deine Daten können nach der Löschung nicht wiederhergestellt werden!", 128 "settings.account.deleteEmailSent" : "Du hast eine E-Mail zur Bestätigung der Löschung Deines Benutzerkontos erhalten. Dein Benutzerkonto und Deine Daten können nach der Löschung nicht wiederhergestellt werden!",
124 "settings.account.deleteInfo" : "Wenn du dein Franz Benutzerkonto nicht mehr länger benötigst, kannst du hier deinen Account und alle dazugehörigen Daten löschen.", 129 "settings.account.deleteInfo" : "Wenn du dein Franz-Benutzerkonto nicht mehr länger benötigst, kannst du es hier mit allen dazugehörigen Daten löschen.",
125 "settings.account.headline" : "Konto", 130 "settings.account.headline" : "Konto",
126 "settings.account.headlineAccount" : "Konto Informationen", 131 "settings.account.headlineAccount" : "Konto-Informationen",
127 "settings.account.headlineDangerZone" : "Benutzerkonto löschen", 132 "settings.account.headlineDangerZone" : "Benutzerkonto löschen",
128 "settings.account.headlineInvoices" : "Rechnungen", 133 "settings.account.headlineInvoices" : "Rechnungen",
129 "settings.account.headlinePassword" : "Passwort ändern", 134 "settings.account.headlinePassword" : "Passwort ändern",
@@ -144,7 +149,7 @@
144 "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen", 149 "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen",
145 "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen", 150 "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen",
146 "settings.app.form.beta" : "Beta-Versionen einbeziehen", 151 "settings.app.form.beta" : "Beta-Versionen einbeziehen",
147 "settings.app.form.darkMode" : "Die dunkle Seite erwartet dich (Dark Mode)", 152 "settings.app.form.darkMode" : "Die dunkle Seite erwartet dich! (Dark Mode)",
148 "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren", 153 "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren",
149 "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren", 154 "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren",
150 "settings.app.form.enableSystemTray" : "Franz im Infobereich anzeigen", 155 "settings.app.form.enableSystemTray" : "Franz im Infobereich anzeigen",
@@ -159,26 +164,28 @@
159 "settings.app.headlineGeneral" : "Allgemeines", 164 "settings.app.headlineGeneral" : "Allgemeines",
160 "settings.app.headlineLanguage" : "Sprache", 165 "settings.app.headlineLanguage" : "Sprache",
161 "settings.app.headlineUpdates" : "Updates", 166 "settings.app.headlineUpdates" : "Updates",
167 "settings.app.languageDisclaimer" : "Offizielle Ãœbersetzungen: Englisch & Deutsch. Alle anderen Sprachen sind Ãœbersetzungen der Franz Community.",
162 "settings.app.restartRequired" : "Änderungen werden erst nach einem Neustart wirksam.", 168 "settings.app.restartRequired" : "Änderungen werden erst nach einem Neustart wirksam.",
163 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
164 "settings.app.translationHelp" : "Hilf uns, Franz in Deine Sprache zu übersetzen.", 170 "settings.app.translationHelp" : "Hilf uns, Franz in Deine Sprache zu übersetzen.",
165 "settings.app.updateStatusAvailable" : "Update verfügbar, lädt herunter...", 171 "settings.app.updateStatusAvailable" : "Update verfügbar, lädt herunter ...",
166 "settings.app.updateStatusSearching" : "Suche nach Updates", 172 "settings.app.updateStatusSearching" : "Suche nach Updates",
167 "settings.app.updateStatusUpToDate" : "Du nutzt die aktuellste Version von Franz", 173 "settings.app.updateStatusUpToDate" : "Du nutzt die aktuellste Version von Franz",
168 "settings.invite.headline" : "Lade 3 Deiner Freunde ein", 174 "settings.invite.headline" : "Lade drei Deiner Freunde ein",
169 "settings.navigation.account" : "Konto", 175 "settings.navigation.account" : "Konto",
170 "settings.navigation.availableServices" : "Verfügbare Dienste", 176 "settings.navigation.availableServices" : "Verfügbare Dienste",
171 "settings.navigation.inviteFriends" : "Freunde einladen", 177 "settings.navigation.inviteFriends" : "Freunde einladen",
172 "settings.navigation.logout" : "Abmelden", 178 "settings.navigation.logout" : "Abmelden",
173 "settings.navigation.settings" : "Einstellungen", 179 "settings.navigation.settings" : "Einstellungen",
180 "settings.navigation.team" : "Team verwalten",
174 "settings.navigation.yourServices" : "Deine Dienste", 181 "settings.navigation.yourServices" : "Deine Dienste",
175 "settings.navigation.yourWorkspaces": "Deine Workspaces", 182 "settings.navigation.yourWorkspaces" : "Deine Workspaces",
176 "settings.recipes.all" : "Alle Dienste", 183 "settings.recipes.all" : "Alle Dienste",
177 "settings.recipes.dev" : "Entwicklung", 184 "settings.recipes.dev" : "Entwicklung",
178 "settings.recipes.headline" : "Verfügbare Dienste", 185 "settings.recipes.headline" : "Verfügbare Dienste",
179 "settings.recipes.missingService" : "Fehlt ein Dienst?", 186 "settings.recipes.missingService" : "Fehlt ein Dienst?",
180 "settings.recipes.mostPopular" : "Am beliebtesten", 187 "settings.recipes.mostPopular" : "Am beliebtesten",
181 "settings.recipes.nothingFound" : "Entschuldigung, aber der von Dir gesuchte Dienst konnte nicht gefunden werden.", 188 "settings.recipes.nothingFound" : "Entschuldigung, der gesuchte Dienst konnte nicht gefunden werden.",
182 "settings.recipes.servicesSuccessfulAddedInfo" : "Dienst erfolgreich hinzugefügt", 189 "settings.recipes.servicesSuccessfulAddedInfo" : "Dienst erfolgreich hinzugefügt",
183 "settings.searchService" : "Dienst suchen", 190 "settings.searchService" : "Dienst suchen",
184 "settings.service.error.goBack" : "Zurück zu den Diensten", 191 "settings.service.error.goBack" : "Zurück zu den Diensten",
@@ -187,7 +194,7 @@
187 "settings.service.form.addServiceHeadline" : "{name} hinzufügen", 194 "settings.service.form.addServiceHeadline" : "{name} hinzufügen",
188 "settings.service.form.availableServices" : "Verfügbare Dienste", 195 "settings.service.form.availableServices" : "Verfügbare Dienste",
189 "settings.service.form.customUrl" : "Eigener Server", 196 "settings.service.form.customUrl" : "Eigener Server",
190 "settings.service.form.customUrlPremiumInfo" : "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst Du ein Franz Premium-Supporter Konto.", 197 "settings.service.form.customUrlPremiumInfo" : "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst Du ein Franz Premium Konto.",
191 "settings.service.form.customUrlUpgradeAccount" : "Dein Konto upgraden", 198 "settings.service.form.customUrlUpgradeAccount" : "Dein Konto upgraden",
192 "settings.service.form.customUrlValidationError" : "Dein {name}-Server konnte nicht verifiziert werden.", 199 "settings.service.form.customUrlValidationError" : "Dein {name}-Server konnte nicht verifiziert werden.",
193 "settings.service.form.deleteButton" : "Dienst löschen", 200 "settings.service.form.deleteButton" : "Dienst löschen",
@@ -207,13 +214,13 @@
207 "settings.service.form.indirectMessages" : "Nachrichten-Badge für alle neuen Nachrichten anzeigen", 214 "settings.service.form.indirectMessages" : "Nachrichten-Badge für alle neuen Nachrichten anzeigen",
208 "settings.service.form.isMutedInfo" : "Sämtliche Wiedergabe von Tönen wird deaktiviert", 215 "settings.service.form.isMutedInfo" : "Sämtliche Wiedergabe von Tönen wird deaktiviert",
209 "settings.service.form.name" : "Name", 216 "settings.service.form.name" : "Name",
210 "settings.service.form.proxy.headline" : "HTTP\/HTTPS Proxy Einstellungen", 217 "settings.service.form.proxy.headline" : "HTTP-\/HTTPS-Proxy-Einstellungen",
211 "settings.service.form.proxy.host" : "Proxy Host\/IP", 218 "settings.service.form.proxy.host" : "Proxy Host\/IP",
212 "settings.service.form.proxy.info" : "Proxy Einstellungen werden nicht mit den Franz Servern synchronisiert.", 219 "settings.service.form.proxy.info" : "Proxy-Einstellungen werden nicht mit den Franz Servern synchronisiert.",
213 "settings.service.form.proxy.isEnabled" : "Proxy Server verwenden", 220 "settings.service.form.proxy.isEnabled" : "Proxy-Server verwenden",
214 "settings.service.form.proxy.password" : "Passwort (optional)", 221 "settings.service.form.proxy.password" : "Passwort (optional)",
215 "settings.service.form.proxy.port" : "Port", 222 "settings.service.form.proxy.port" : "Port",
216 "settings.service.form.proxy.restartInfo" : "Bitte starte Franz nach dem Ändern der Proxy Einstellungen neu.", 223 "settings.service.form.proxy.restartInfo" : "Bitte starte Franz nach dem Ändern der Proxy-Einstellungen neu.",
217 "settings.service.form.proxy.user" : "Benutzer (optional)", 224 "settings.service.form.proxy.user" : "Benutzer (optional)",
218 "settings.service.form.saveButton" : "Dienst speichern", 225 "settings.service.form.saveButton" : "Dienst speichern",
219 "settings.service.form.tabHosted" : "Gehostet", 226 "settings.service.form.tabHosted" : "Gehostet",
@@ -230,14 +237,12 @@
230 "settings.services.tooltip.isMuted" : "Alle Töne sind deaktiviert", 237 "settings.services.tooltip.isMuted" : "Alle Töne sind deaktiviert",
231 "settings.services.tooltip.notificationsDisabled" : "Benachrichtigungen deaktiviert", 238 "settings.services.tooltip.notificationsDisabled" : "Benachrichtigungen deaktiviert",
232 "settings.services.updatedInfo" : "Deine Änderungen wurden gespeichert", 239 "settings.services.updatedInfo" : "Deine Änderungen wurden gespeichert",
233 "settings.workspaces.headline": "Deine Workspaces", 240 "settings.team.contentHeadline" : "Franz für Teams",
234 "settings.workspace.add.form.submitButton": "Workspace erstellen", 241 "settings.team.copy" : "Mit Franz für Teams kannst du Kolleginnen und Kollegen per Email-Invite in dein Team einladen und ihre Abonnments in den Einstellungen deines Accounts verwalten. Verschwende keine Zeit mehr damit, Lizenzen für jedes Teammitglied einzeln einzurichten, vergiss mehrfache Rechnungen und unterschiedliche Abrechnungszeiträume - alles unter einem Dach.",
235 "settings.workspace.add.form.name": "Name", 242 "settings.team.headline" : "Team",
236 "settings.workspace.form.yourWorkspaces": "Deine Workspaces", 243 "settings.team.intro" : "Mit Franz für Teams kannst du Premium Lizenzen für Kolleginnen und Kollegen oder Freunde und Familienmitglieder kaufen und verwalten - so viele du willst.",
237 "settings.workspace.form.name": "Name", 244 "settings.team.manageAction" : "Verwalte dein Team auf meetfranz.com",
238 "settings.workspace.form.buttonDelete": "Workspace löschen", 245 "settings.team.upgradeAction" : "Account Upgrade durchführen",
239 "settings.workspace.form.buttonSave": "Workspace speichern",
240 "settings.workspace.form.servicesInWorkspaceHeadline": "Services in diesem Workspace",
241 "settings.user.form.accountType.company" : "Firma", 246 "settings.user.form.accountType.company" : "Firma",
242 "settings.user.form.accountType.individual" : "Einzelperson", 247 "settings.user.form.accountType.individual" : "Einzelperson",
243 "settings.user.form.accountType.label" : "Konto-Typ", 248 "settings.user.form.accountType.label" : "Konto-Typ",
@@ -247,30 +252,48 @@
247 "settings.user.form.firstname" : "Vorname", 252 "settings.user.form.firstname" : "Vorname",
248 "settings.user.form.lastname" : "Nachname", 253 "settings.user.form.lastname" : "Nachname",
249 "settings.user.form.newPassword" : "Neues Passwort", 254 "settings.user.form.newPassword" : "Neues Passwort",
255 "settings.workspace.add.form.name" : "Name",
256 "settings.workspace.add.form.submitButton" : "Workspace erstellen",
257 "settings.workspace.form.buttonDelete" : "Workspace löschen",
258 "settings.workspace.form.buttonSave" : "Workspace speichern",
259 "settings.workspace.form.name" : "Name",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in diesem Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Deine Workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace wurde gelöscht",
263 "settings.workspaces.headline" : "Deine Workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "Du hast noch keine Workspaces hinzugefügt",
265 "settings.workspaces.tryReloadWorkspaces" : "Erneut versuchen",
266 "settings.workspaces.updatedInfo" : "Deine Änderungen wurden gespeichert",
267 "settings.workspaces.workspaceFeatureHeadline" : "Weniger ist mehr: Franz Workspaces",
268 "settings.workspaces.workspaceFeatureInfo" : "Mit Franz Workspaces hast du alles im Blick, was gerade wichtig ist - und nur das. Erstelle unterschiedliche Sets von Services, und wechsle jederzeit zwischen ihnen hin und her. Du entscheidest welche Services du wann und wo brauchst, um ungestört arbeiten zu können - oder zu Hause besser abzuschalten.",
269 "settings.workspaces.workspacesRequestFailed" : "Workspaces konnte nicht geladen werden",
250 "sidebar.addNewService" : "Neuen Dienst hinzufügen", 270 "sidebar.addNewService" : "Neuen Dienst hinzufügen",
271 "sidebar.closeWorkspaceDrawer" : "Workspaces schließen",
251 "sidebar.muteApp" : "Benachrichtigungen & Audio deaktivieren", 272 "sidebar.muteApp" : "Benachrichtigungen & Audio deaktivieren",
273 "sidebar.openWorkspaceDrawer" : "Workspaces öffnen",
252 "sidebar.settings" : "Einstellungen", 274 "sidebar.settings" : "Einstellungen",
253 "sidebar.unmuteApp" : "Benachrichtigungen & Audio aktivieren", 275 "sidebar.unmuteApp" : "Benachrichtigungen & Audio aktivieren",
254 "signup.company.label" : "Firma", 276 "signup.company.label" : "Firma",
255 "signup.email.label" : "E-Mail Adresse", 277 "signup.email.label" : "E-Mail-Adresse",
256 "signup.emailDuplicate" : "Es existiert bereits ein Benutzer mit dieser E-Mail Adresse.", 278 "signup.emailDuplicate" : "Es existiert bereits ein Benutzer mit dieser E-Mail Adresse.",
257 "signup.firstname.label" : "Vorname", 279 "signup.firstname.label" : "Vorname",
258 "signup.headline" : "Anmelden", 280 "signup.headline" : "Anmelden",
259 "signup.lastname.label" : "Nachname", 281 "signup.lastname.label" : "Nachname",
260 "signup.legal.info" : "Mit der Erstellung eines Franz Kontos akzeptierst Du die", 282 "signup.legal.info" : "Mit der Erstellung eines Franz-Kontos akzeptierst Du die",
261 "signup.legal.privacy" : "Datenschutzerklärung", 283 "signup.legal.privacy" : "Datenschutzerklärung",
262 "signup.legal.terms" : "Nutzungsbedingungen", 284 "signup.legal.terms" : "Nutzungsbedingungen",
263 "signup.link.login" : "Du hast bereits ein Konto? Melde Dich an.", 285 "signup.link.login" : "Du hast bereits ein Konto? Melde Dich an.",
264 "signup.password.label" : "Passwort", 286 "signup.password.label" : "Passwort",
265 "signup.submit.label" : "Konto erstellen", 287 "signup.submit.label" : "Konto erstellen",
266 "subscription.euTaxInfo" : "Preise sind exklusive Steuern.", 288 "subscription.euTaxInfo" : "Preise zuzüglich allfälliger Steuern",
267 "subscription.features.ads" : "Werbefrei auf Lebenszeit!", 289 "subscription.features.ads" : "Werbefrei auf Lebenszeit!",
268 "subscription.features.comingSoon" : "folgt bald", 290 "subscription.features.comingSoon" : "folgt bald",
269 "subscription.features.noInterruptions" : "Keine Wartezeiten um Franz zu verwenden", 291 "subscription.features.noInterruptions" : "Verwende Franz ohne Wartezeiten",
270 "subscription.features.onpremise.mattermost" : "Integration von gehosteten Diensten, wie Mattermost", 292 "subscription.features.onpremise.mattermost" : "Integration von gehosteten Diensten wie Mattermost",
271 "subscription.features.proxy" : "Proxy Support für Dienste", 293 "subscription.features.proxy" : "Proxy Support für Dienste",
272 "subscription.features.spellchecker" : "Unterstützung für Rechtschreibprüfung", 294 "subscription.features.spellchecker" : "Unterstützung für Rechtschreibprüfung",
273 "subscription.includedFeatures" : "Bezahlte Franz Premium Support Konten beinhalten", 295 "subscription.features.workspaces" : "Organisiere deine Services in Workspaces",
296 "subscription.includedFeatures" : "Bezahlte Franz Premium Lizenzen beinhalten",
274 "subscription.paymentSessionError" : "Das Zahlungs-Formular konnte nicht geladen werden.", 297 "subscription.paymentSessionError" : "Das Zahlungs-Formular konnte nicht geladen werden.",
275 "subscription.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen", 298 "subscription.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen",
276 "subscription.type.free" : "kostenlos", 299 "subscription.type.free" : "kostenlos",
@@ -286,12 +309,23 @@
286 "tabs.item.enableAudio" : "Audio aktivieren", 309 "tabs.item.enableAudio" : "Audio aktivieren",
287 "tabs.item.enableNotification" : "Benachrichtigungen aktivieren", 310 "tabs.item.enableNotification" : "Benachrichtigungen aktivieren",
288 "tabs.item.enableService" : "Dienst aktivieren", 311 "tabs.item.enableService" : "Dienst aktivieren",
289 "tabs.item.reload" : "Neuladen", 312 "tabs.item.reload" : "Neu laden",
290 "validation.email" : "{field} ist ungültig", 313 "validation.email" : "{field} ist ungültig",
291 "validation.minLength" : "{field} muss mindestens {length} Zeichen enthalten", 314 "validation.minLength" : "{field} muss mindestens {length} Zeichen enthalten",
292 "validation.oneRequired" : "Mindestens ein Wert wird benötigt", 315 "validation.oneRequired" : "Mindestens ein Wert wird benötigt",
293 "validation.required" : "{field} wird benötigt", 316 "validation.required" : "{field} wird benötigt",
294 "validation.url" : "{field} ist keine gültige URL", 317 "validation.url" : "{field} ist keine gültige URL",
295 "welcome.loginButton" : "Bei Franz einloggen", 318 "welcome.loginButton" : "Bei Franz einloggen",
296 "welcome.signupButton" : "Kostenloses Konto erstellen" 319 "welcome.signupButton" : "Kostenloses Konto erstellen",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Neuen Workspace hinzufügen",
321 "workspaceDrawer.allServices" : "Alle Dienste",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "Bearbeiten",
324 "workspaceDrawer.item.noServicesAddedYet" : "Noch keine Services hinzugefügt",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Erstelle deinen ersten Workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium Feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Premium Account aktivieren",
328 "workspaceDrawer.workspaceFeatureInfo" : "Mit Franz Workspaces hast du alles im Blick, was gerade wichtig ist - und nur das. Erstelle unterschiedliche Sets von Services, und wechsle jederzeit zwischen ihnen hin und her. Du entscheidest welche Services du wann und wo brauchst, um ungestört arbeiten zu können - oder zu Hause besser abzuschalten.",
329 "workspaceDrawer.workspacesSettingsTooltip" : "Workspaces bearbeiten",
330 "workspaces.switchingIndicator.switchingTo" : "Wechsle zu"
297} 331}
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 65799b614..9524238f0 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -625,78 +625,78 @@
625 "defaultMessage": "!!!Your services have been updated.", 625 "defaultMessage": "!!!Your services have been updated.",
626 "end": { 626 "end": {
627 "column": 3, 627 "column": 3,
628 "line": 28 628 "line": 29
629 }, 629 },
630 "file": "src/components/layout/AppLayout.js", 630 "file": "src/components/layout/AppLayout.js",
631 "id": "infobar.servicesUpdated", 631 "id": "infobar.servicesUpdated",
632 "start": { 632 "start": {
633 "column": 19, 633 "column": 19,
634 "line": 25 634 "line": 26
635 } 635 }
636 }, 636 },
637 { 637 {
638 "defaultMessage": "!!!A new update for Franz is available.", 638 "defaultMessage": "!!!A new update for Franz is available.",
639 "end": { 639 "end": {
640 "column": 3, 640 "column": 3,
641 "line": 32 641 "line": 33
642 }, 642 },
643 "file": "src/components/layout/AppLayout.js", 643 "file": "src/components/layout/AppLayout.js",
644 "id": "infobar.updateAvailable", 644 "id": "infobar.updateAvailable",
645 "start": { 645 "start": {
646 "column": 19, 646 "column": 19,
647 "line": 29 647 "line": 30
648 } 648 }
649 }, 649 },
650 { 650 {
651 "defaultMessage": "!!!Reload services", 651 "defaultMessage": "!!!Reload services",
652 "end": { 652 "end": {
653 "column": 3, 653 "column": 3,
654 "line": 36 654 "line": 37
655 }, 655 },
656 "file": "src/components/layout/AppLayout.js", 656 "file": "src/components/layout/AppLayout.js",
657 "id": "infobar.buttonReloadServices", 657 "id": "infobar.buttonReloadServices",
658 "start": { 658 "start": {
659 "column": 24, 659 "column": 24,
660 "line": 33 660 "line": 34
661 } 661 }
662 }, 662 },
663 { 663 {
664 "defaultMessage": "!!!Changelog", 664 "defaultMessage": "!!!Changelog",
665 "end": { 665 "end": {
666 "column": 3, 666 "column": 3,
667 "line": 40 667 "line": 41
668 }, 668 },
669 "file": "src/components/layout/AppLayout.js", 669 "file": "src/components/layout/AppLayout.js",
670 "id": "infobar.buttonChangelog", 670 "id": "infobar.buttonChangelog",
671 "start": { 671 "start": {
672 "column": 13, 672 "column": 13,
673 "line": 37 673 "line": 38
674 } 674 }
675 }, 675 },
676 { 676 {
677 "defaultMessage": "!!!Restart & install update", 677 "defaultMessage": "!!!Restart & install update",
678 "end": { 678 "end": {
679 "column": 3, 679 "column": 3,
680 "line": 44 680 "line": 45
681 }, 681 },
682 "file": "src/components/layout/AppLayout.js", 682 "file": "src/components/layout/AppLayout.js",
683 "id": "infobar.buttonInstallUpdate", 683 "id": "infobar.buttonInstallUpdate",
684 "start": { 684 "start": {
685 "column": 23, 685 "column": 23,
686 "line": 41 686 "line": 42
687 } 687 }
688 }, 688 },
689 { 689 {
690 "defaultMessage": "!!!Could not load services and user information", 690 "defaultMessage": "!!!Could not load services and user information",
691 "end": { 691 "end": {
692 "column": 3, 692 "column": 3,
693 "line": 48 693 "line": 49
694 }, 694 },
695 "file": "src/components/layout/AppLayout.js", 695 "file": "src/components/layout/AppLayout.js",
696 "id": "infobar.requiredRequestsFailed", 696 "id": "infobar.requiredRequestsFailed",
697 "start": { 697 "start": {
698 "column": 26, 698 "column": 26,
699 "line": 45 699 "line": 46
700 } 700 }
701 } 701 }
702 ], 702 ],
@@ -1102,195 +1102,195 @@
1102 "defaultMessage": "!!!Account", 1102 "defaultMessage": "!!!Account",
1103 "end": { 1103 "end": {
1104 "column": 3, 1104 "column": 3,
1105 "line": 18 1105 "line": 17
1106 }, 1106 },
1107 "file": "src/components/settings/account/AccountDashboard.js", 1107 "file": "src/components/settings/account/AccountDashboard.js",
1108 "id": "settings.account.headline", 1108 "id": "settings.account.headline",
1109 "start": { 1109 "start": {
1110 "column": 12, 1110 "column": 12,
1111 "line": 15 1111 "line": 14
1112 } 1112 }
1113 }, 1113 },
1114 { 1114 {
1115 "defaultMessage": "!!!Your Subscription", 1115 "defaultMessage": "!!!Your Subscription",
1116 "end": { 1116 "end": {
1117 "column": 3, 1117 "column": 3,
1118 "line": 22 1118 "line": 21
1119 }, 1119 },
1120 "file": "src/components/settings/account/AccountDashboard.js", 1120 "file": "src/components/settings/account/AccountDashboard.js",
1121 "id": "settings.account.headlineSubscription", 1121 "id": "settings.account.headlineSubscription",
1122 "start": { 1122 "start": {
1123 "column": 24, 1123 "column": 24,
1124 "line": 19 1124 "line": 18
1125 } 1125 }
1126 }, 1126 },
1127 { 1127 {
1128 "defaultMessage": "!!!Upgrade your Account", 1128 "defaultMessage": "!!!Upgrade your Account",
1129 "end": { 1129 "end": {
1130 "column": 3, 1130 "column": 3,
1131 "line": 26 1131 "line": 25
1132 }, 1132 },
1133 "file": "src/components/settings/account/AccountDashboard.js", 1133 "file": "src/components/settings/account/AccountDashboard.js",
1134 "id": "settings.account.headlineUpgrade", 1134 "id": "settings.account.headlineUpgrade",
1135 "start": { 1135 "start": {
1136 "column": 19, 1136 "column": 19,
1137 "line": 23 1137 "line": 22
1138 }
1139 },
1140 {
1141 "defaultMessage": "!!Invoices",
1142 "end": {
1143 "column": 3,
1144 "line": 30
1145 },
1146 "file": "src/components/settings/account/AccountDashboard.js",
1147 "id": "settings.account.headlineInvoices",
1148 "start": {
1149 "column": 20,
1150 "line": 27
1151 } 1138 }
1152 }, 1139 },
1153 { 1140 {
1154 "defaultMessage": "!!Danger Zone", 1141 "defaultMessage": "!!Danger Zone",
1155 "end": { 1142 "end": {
1156 "column": 3, 1143 "column": 3,
1157 "line": 34 1144 "line": 29
1158 }, 1145 },
1159 "file": "src/components/settings/account/AccountDashboard.js", 1146 "file": "src/components/settings/account/AccountDashboard.js",
1160 "id": "settings.account.headlineDangerZone", 1147 "id": "settings.account.headlineDangerZone",
1161 "start": { 1148 "start": {
1162 "column": 22, 1149 "column": 22,
1163 "line": 31 1150 "line": 26
1164 } 1151 }
1165 }, 1152 },
1166 { 1153 {
1167 "defaultMessage": "!!!Manage your subscription", 1154 "defaultMessage": "!!!Manage your subscription",
1168 "end": { 1155 "end": {
1169 "column": 3, 1156 "column": 3,
1170 "line": 38 1157 "line": 33
1171 }, 1158 },
1172 "file": "src/components/settings/account/AccountDashboard.js", 1159 "file": "src/components/settings/account/AccountDashboard.js",
1173 "id": "settings.account.manageSubscription.label", 1160 "id": "settings.account.manageSubscription.label",
1174 "start": { 1161 "start": {
1175 "column": 33, 1162 "column": 33,
1176 "line": 35 1163 "line": 30
1177 } 1164 }
1178 }, 1165 },
1179 { 1166 {
1180 "defaultMessage": "!!!Basic Account", 1167 "defaultMessage": "!!!Basic Account",
1181 "end": { 1168 "end": {
1182 "column": 3, 1169 "column": 3,
1183 "line": 42 1170 "line": 37
1184 }, 1171 },
1185 "file": "src/components/settings/account/AccountDashboard.js", 1172 "file": "src/components/settings/account/AccountDashboard.js",
1186 "id": "settings.account.accountType.basic", 1173 "id": "settings.account.accountType.basic",
1187 "start": { 1174 "start": {
1188 "column": 20, 1175 "column": 20,
1189 "line": 39 1176 "line": 34
1190 } 1177 }
1191 }, 1178 },
1192 { 1179 {
1193 "defaultMessage": "!!!Premium Supporter Account", 1180 "defaultMessage": "!!!Premium Supporter Account",
1194 "end": { 1181 "end": {
1195 "column": 3, 1182 "column": 3,
1196 "line": 46 1183 "line": 41
1197 }, 1184 },
1198 "file": "src/components/settings/account/AccountDashboard.js", 1185 "file": "src/components/settings/account/AccountDashboard.js",
1199 "id": "settings.account.accountType.premium", 1186 "id": "settings.account.accountType.premium",
1200 "start": { 1187 "start": {
1201 "column": 22, 1188 "column": 22,
1202 "line": 43 1189 "line": 38
1203 } 1190 }
1204 }, 1191 },
1205 { 1192 {
1206 "defaultMessage": "!!!Edit Account", 1193 "defaultMessage": "!!!Edit Account",
1207 "end": { 1194 "end": {
1208 "column": 3, 1195 "column": 3,
1209 "line": 50 1196 "line": 45
1210 }, 1197 },
1211 "file": "src/components/settings/account/AccountDashboard.js", 1198 "file": "src/components/settings/account/AccountDashboard.js",
1212 "id": "settings.account.account.editButton", 1199 "id": "settings.account.account.editButton",
1213 "start": { 1200 "start": {
1214 "column": 21, 1201 "column": 21,
1215 "line": 47 1202 "line": 42
1203 }
1204 },
1205 {
1206 "defaultMessage": "!!Invoices",
1207 "end": {
1208 "column": 3,
1209 "line": 49
1210 },
1211 "file": "src/components/settings/account/AccountDashboard.js",
1212 "id": "settings.account.headlineInvoices",
1213 "start": {
1214 "column": 18,
1215 "line": 46
1216 } 1216 }
1217 }, 1217 },
1218 { 1218 {
1219 "defaultMessage": "!!!Download", 1219 "defaultMessage": "!!!Download",
1220 "end": { 1220 "end": {
1221 "column": 3, 1221 "column": 3,
1222 "line": 54 1222 "line": 53
1223 }, 1223 },
1224 "file": "src/components/settings/account/AccountDashboard.js", 1224 "file": "src/components/settings/account/AccountDashboard.js",
1225 "id": "settings.account.invoiceDownload", 1225 "id": "settings.account.invoiceDownload",
1226 "start": { 1226 "start": {
1227 "column": 19, 1227 "column": 19,
1228 "line": 51 1228 "line": 50
1229 } 1229 }
1230 }, 1230 },
1231 { 1231 {
1232 "defaultMessage": "!!!Could not load user information", 1232 "defaultMessage": "!!!Could not load user information",
1233 "end": { 1233 "end": {
1234 "column": 3, 1234 "column": 3,
1235 "line": 58 1235 "line": 57
1236 }, 1236 },
1237 "file": "src/components/settings/account/AccountDashboard.js", 1237 "file": "src/components/settings/account/AccountDashboard.js",
1238 "id": "settings.account.userInfoRequestFailed", 1238 "id": "settings.account.userInfoRequestFailed",
1239 "start": { 1239 "start": {
1240 "column": 25, 1240 "column": 25,
1241 "line": 55 1241 "line": 54
1242 } 1242 }
1243 }, 1243 },
1244 { 1244 {
1245 "defaultMessage": "!!!Try again", 1245 "defaultMessage": "!!!Try again",
1246 "end": { 1246 "end": {
1247 "column": 3, 1247 "column": 3,
1248 "line": 62 1248 "line": 61
1249 }, 1249 },
1250 "file": "src/components/settings/account/AccountDashboard.js", 1250 "file": "src/components/settings/account/AccountDashboard.js",
1251 "id": "settings.account.tryReloadUserInfoRequest", 1251 "id": "settings.account.tryReloadUserInfoRequest",
1252 "start": { 1252 "start": {
1253 "column": 28, 1253 "column": 28,
1254 "line": 59 1254 "line": 58
1255 } 1255 }
1256 }, 1256 },
1257 { 1257 {
1258 "defaultMessage": "!!!Delete account", 1258 "defaultMessage": "!!!Delete account",
1259 "end": { 1259 "end": {
1260 "column": 3, 1260 "column": 3,
1261 "line": 66 1261 "line": 65
1262 }, 1262 },
1263 "file": "src/components/settings/account/AccountDashboard.js", 1263 "file": "src/components/settings/account/AccountDashboard.js",
1264 "id": "settings.account.deleteAccount", 1264 "id": "settings.account.deleteAccount",
1265 "start": { 1265 "start": {
1266 "column": 17, 1266 "column": 17,
1267 "line": 63 1267 "line": 62
1268 } 1268 }
1269 }, 1269 },
1270 { 1270 {
1271 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", 1271 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.",
1272 "end": { 1272 "end": {
1273 "column": 3, 1273 "column": 3,
1274 "line": 70 1274 "line": 69
1275 }, 1275 },
1276 "file": "src/components/settings/account/AccountDashboard.js", 1276 "file": "src/components/settings/account/AccountDashboard.js",
1277 "id": "settings.account.deleteInfo", 1277 "id": "settings.account.deleteInfo",
1278 "start": { 1278 "start": {
1279 "column": 14, 1279 "column": 14,
1280 "line": 67 1280 "line": 66
1281 } 1281 }
1282 }, 1282 },
1283 { 1283 {
1284 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 1284 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
1285 "end": { 1285 "end": {
1286 "column": 3, 1286 "column": 3,
1287 "line": 74 1287 "line": 73
1288 }, 1288 },
1289 "file": "src/components/settings/account/AccountDashboard.js", 1289 "file": "src/components/settings/account/AccountDashboard.js",
1290 "id": "settings.account.deleteEmailSent", 1290 "id": "settings.account.deleteEmailSent",
1291 "start": { 1291 "start": {
1292 "column": 19, 1292 "column": 19,
1293 "line": 71 1293 "line": 70
1294 } 1294 }
1295 } 1295 }
1296 ], 1296 ],
@@ -1302,91 +1302,104 @@
1302 "defaultMessage": "!!!Available services", 1302 "defaultMessage": "!!!Available services",
1303 "end": { 1303 "end": {
1304 "column": 3, 1304 "column": 3,
1305 "line": 15 1305 "line": 16
1306 }, 1306 },
1307 "file": "src/components/settings/navigation/SettingsNavigation.js", 1307 "file": "src/components/settings/navigation/SettingsNavigation.js",
1308 "id": "settings.navigation.availableServices", 1308 "id": "settings.navigation.availableServices",
1309 "start": { 1309 "start": {
1310 "column": 21, 1310 "column": 21,
1311 "line": 12 1311 "line": 13
1312 } 1312 }
1313 }, 1313 },
1314 { 1314 {
1315 "defaultMessage": "!!!Your services", 1315 "defaultMessage": "!!!Your services",
1316 "end": { 1316 "end": {
1317 "column": 3, 1317 "column": 3,
1318 "line": 19 1318 "line": 20
1319 }, 1319 },
1320 "file": "src/components/settings/navigation/SettingsNavigation.js", 1320 "file": "src/components/settings/navigation/SettingsNavigation.js",
1321 "id": "settings.navigation.yourServices", 1321 "id": "settings.navigation.yourServices",
1322 "start": { 1322 "start": {
1323 "column": 16, 1323 "column": 16,
1324 "line": 16 1324 "line": 17
1325 } 1325 }
1326 }, 1326 },
1327 { 1327 {
1328 "defaultMessage": "!!!Your workspaces", 1328 "defaultMessage": "!!!Your workspaces",
1329 "end": { 1329 "end": {
1330 "column": 3, 1330 "column": 3,
1331 "line": 23 1331 "line": 24
1332 }, 1332 },
1333 "file": "src/components/settings/navigation/SettingsNavigation.js", 1333 "file": "src/components/settings/navigation/SettingsNavigation.js",
1334 "id": "settings.navigation.yourWorkspaces", 1334 "id": "settings.navigation.yourWorkspaces",
1335 "start": { 1335 "start": {
1336 "column": 18, 1336 "column": 18,
1337 "line": 20 1337 "line": 21
1338 } 1338 }
1339 }, 1339 },
1340 { 1340 {
1341 "defaultMessage": "!!!Account", 1341 "defaultMessage": "!!!Account",
1342 "end": { 1342 "end": {
1343 "column": 3, 1343 "column": 3,
1344 "line": 27 1344 "line": 28
1345 }, 1345 },
1346 "file": "src/components/settings/navigation/SettingsNavigation.js", 1346 "file": "src/components/settings/navigation/SettingsNavigation.js",
1347 "id": "settings.navigation.account", 1347 "id": "settings.navigation.account",
1348 "start": { 1348 "start": {
1349 "column": 11, 1349 "column": 11,
1350 "line": 24 1350 "line": 25
1351 }
1352 },
1353 {
1354 "defaultMessage": "!!!Manage Team",
1355 "end": {
1356 "column": 3,
1357 "line": 32
1358 },
1359 "file": "src/components/settings/navigation/SettingsNavigation.js",
1360 "id": "settings.navigation.team",
1361 "start": {
1362 "column": 8,
1363 "line": 29
1351 } 1364 }
1352 }, 1365 },
1353 { 1366 {
1354 "defaultMessage": "!!!Settings", 1367 "defaultMessage": "!!!Settings",
1355 "end": { 1368 "end": {
1356 "column": 3, 1369 "column": 3,
1357 "line": 31 1370 "line": 36
1358 }, 1371 },
1359 "file": "src/components/settings/navigation/SettingsNavigation.js", 1372 "file": "src/components/settings/navigation/SettingsNavigation.js",
1360 "id": "settings.navigation.settings", 1373 "id": "settings.navigation.settings",
1361 "start": { 1374 "start": {
1362 "column": 12, 1375 "column": 12,
1363 "line": 28 1376 "line": 33
1364 } 1377 }
1365 }, 1378 },
1366 { 1379 {
1367 "defaultMessage": "!!!Invite Friends", 1380 "defaultMessage": "!!!Invite Friends",
1368 "end": { 1381 "end": {
1369 "column": 3, 1382 "column": 3,
1370 "line": 35 1383 "line": 40
1371 }, 1384 },
1372 "file": "src/components/settings/navigation/SettingsNavigation.js", 1385 "file": "src/components/settings/navigation/SettingsNavigation.js",
1373 "id": "settings.navigation.inviteFriends", 1386 "id": "settings.navigation.inviteFriends",
1374 "start": { 1387 "start": {
1375 "column": 17, 1388 "column": 17,
1376 "line": 32 1389 "line": 37
1377 } 1390 }
1378 }, 1391 },
1379 { 1392 {
1380 "defaultMessage": "!!!Logout", 1393 "defaultMessage": "!!!Logout",
1381 "end": { 1394 "end": {
1382 "column": 3, 1395 "column": 3,
1383 "line": 39 1396 "line": 44
1384 }, 1397 },
1385 "file": "src/components/settings/navigation/SettingsNavigation.js", 1398 "file": "src/components/settings/navigation/SettingsNavigation.js",
1386 "id": "settings.navigation.logout", 1399 "id": "settings.navigation.logout",
1387 "start": { 1400 "start": {
1388 "column": 10, 1401 "column": 10,
1389 "line": 36 1402 "line": 41
1390 } 1403 }
1391 } 1404 }
1392 ], 1405 ],
@@ -2237,6 +2250,19 @@
2237 "column": 29, 2250 "column": 29,
2238 "line": 80 2251 "line": 80
2239 } 2252 }
2253 },
2254 {
2255 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
2256 "end": {
2257 "column": 3,
2258 "line": 87
2259 },
2260 "file": "src/components/settings/settings/EditSettingsForm.js",
2261 "id": "settings.app.languageDisclaimer",
2262 "start": {
2263 "column": 22,
2264 "line": 84
2265 }
2240 } 2266 }
2241 ], 2267 ],
2242 "path": "src/components/settings/settings/EditSettingsForm.json" 2268 "path": "src/components/settings/settings/EditSettingsForm.json"
@@ -2244,6 +2270,89 @@
2244 { 2270 {
2245 "descriptors": [ 2271 "descriptors": [
2246 { 2272 {
2273 "defaultMessage": "!!!Team",
2274 "end": {
2275 "column": 3,
2276 "line": 17
2277 },
2278 "file": "src/components/settings/team/TeamDashboard.js",
2279 "id": "settings.team.headline",
2280 "start": {
2281 "column": 12,
2282 "line": 14
2283 }
2284 },
2285 {
2286 "defaultMessage": "!!!Franz for Teams",
2287 "end": {
2288 "column": 3,
2289 "line": 21
2290 },
2291 "file": "src/components/settings/team/TeamDashboard.js",
2292 "id": "settings.team.contentHeadline",
2293 "start": {
2294 "column": 19,
2295 "line": 18
2296 }
2297 },
2298 {
2299 "defaultMessage": "!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.",
2300 "end": {
2301 "column": 3,
2302 "line": 25
2303 },
2304 "file": "src/components/settings/team/TeamDashboard.js",
2305 "id": "settings.team.intro",
2306 "start": {
2307 "column": 9,
2308 "line": 22
2309 }
2310 },
2311 {
2312 "defaultMessage": "!!!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!",
2313 "end": {
2314 "column": 3,
2315 "line": 29
2316 },
2317 "file": "src/components/settings/team/TeamDashboard.js",
2318 "id": "settings.team.copy",
2319 "start": {
2320 "column": 8,
2321 "line": 26
2322 }
2323 },
2324 {
2325 "defaultMessage": "!!!Manage your Team on meetfranz.com",
2326 "end": {
2327 "column": 3,
2328 "line": 33
2329 },
2330 "file": "src/components/settings/team/TeamDashboard.js",
2331 "id": "settings.team.manageAction",
2332 "start": {
2333 "column": 16,
2334 "line": 30
2335 }
2336 },
2337 {
2338 "defaultMessage": "!!!Upgrade your Account",
2339 "end": {
2340 "column": 3,
2341 "line": 37
2342 },
2343 "file": "src/components/settings/team/TeamDashboard.js",
2344 "id": "settings.team.upgradeAction",
2345 "start": {
2346 "column": 17,
2347 "line": 34
2348 }
2349 }
2350 ],
2351 "path": "src/components/settings/team/TeamDashboard.json"
2352 },
2353 {
2354 "descriptors": [
2355 {
2247 "defaultMessage": "!!!Account", 2356 "defaultMessage": "!!!Account",
2248 "end": { 2357 "end": {
2249 "column": 3, 2358 "column": 3,
@@ -2457,42 +2566,55 @@
2457 } 2566 }
2458 }, 2567 },
2459 { 2568 {
2460 "defaultMessage": "!!!No ads, ever!", 2569 "defaultMessage": "!!!Organize your services in workspaces",
2461 "end": { 2570 "end": {
2462 "column": 3, 2571 "column": 3,
2463 "line": 57 2572 "line": 57
2464 }, 2573 },
2465 "file": "src/components/subscription/SubscriptionForm.js", 2574 "file": "src/components/subscription/SubscriptionForm.js",
2575 "id": "subscription.features.workspaces",
2576 "start": {
2577 "column": 14,
2578 "line": 54
2579 }
2580 },
2581 {
2582 "defaultMessage": "!!!No ads, ever!",
2583 "end": {
2584 "column": 3,
2585 "line": 61
2586 },
2587 "file": "src/components/subscription/SubscriptionForm.js",
2466 "id": "subscription.features.ads", 2588 "id": "subscription.features.ads",
2467 "start": { 2589 "start": {
2468 "column": 7, 2590 "column": 7,
2469 "line": 54 2591 "line": 58
2470 } 2592 }
2471 }, 2593 },
2472 { 2594 {
2473 "defaultMessage": "!!!coming soon", 2595 "defaultMessage": "!!!coming soon",
2474 "end": { 2596 "end": {
2475 "column": 3, 2597 "column": 3,
2476 "line": 61 2598 "line": 65
2477 }, 2599 },
2478 "file": "src/components/subscription/SubscriptionForm.js", 2600 "file": "src/components/subscription/SubscriptionForm.js",
2479 "id": "subscription.features.comingSoon", 2601 "id": "subscription.features.comingSoon",
2480 "start": { 2602 "start": {
2481 "column": 14, 2603 "column": 14,
2482 "line": 58 2604 "line": 62
2483 } 2605 }
2484 }, 2606 },
2485 { 2607 {
2486 "defaultMessage": "!!!EU residents: local sales tax may apply", 2608 "defaultMessage": "!!!EU residents: local sales tax may apply",
2487 "end": { 2609 "end": {
2488 "column": 3, 2610 "column": 3,
2489 "line": 65 2611 "line": 69
2490 }, 2612 },
2491 "file": "src/components/subscription/SubscriptionForm.js", 2613 "file": "src/components/subscription/SubscriptionForm.js",
2492 "id": "subscription.euTaxInfo", 2614 "id": "subscription.euTaxInfo",
2493 "start": { 2615 "start": {
2494 "column": 13, 2616 "column": 13,
2495 "line": 62 2617 "line": 66
2496 } 2618 }
2497 } 2619 }
2498 ], 2620 ],
@@ -3082,6 +3204,24 @@
3082 { 3204 {
3083 "descriptors": [ 3205 "descriptors": [
3084 { 3206 {
3207 "defaultMessage": "!!!Changes in Franz {version}",
3208 "end": {
3209 "column": 3,
3210 "line": 23
3211 },
3212 "file": "src/features/announcements/components/AnnouncementScreen.js",
3213 "id": "feature.announcements.changelog.headline",
3214 "start": {
3215 "column": 12,
3216 "line": 20
3217 }
3218 }
3219 ],
3220 "path": "src/features/announcements/components/AnnouncementScreen.json"
3221 },
3222 {
3223 "descriptors": [
3224 {
3085 "defaultMessage": "!!!Please purchase license to skip waiting", 3225 "defaultMessage": "!!!Please purchase license to skip waiting",
3086 "end": { 3226 "end": {
3087 "column": 3, 3227 "column": 3,
@@ -3316,6 +3456,32 @@
3316 "column": 31, 3456 "column": 31,
3317 "line": 35 3457 "line": 35
3318 } 3458 }
3459 },
3460 {
3461 "defaultMessage": "!!!You haven't added any services yet.",
3462 "end": {
3463 "column": 3,
3464 "line": 42
3465 },
3466 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
3467 "id": "settings.services.noServicesAdded",
3468 "start": {
3469 "column": 19,
3470 "line": 39
3471 }
3472 },
3473 {
3474 "defaultMessage": "!!!Discover services",
3475 "end": {
3476 "column": 3,
3477 "line": 46
3478 },
3479 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
3480 "id": "settings.services.discoverServices",
3481 "start": {
3482 "column": 20,
3483 "line": 43
3484 }
3319 } 3485 }
3320 ], 3486 ],
3321 "path": "src/features/workspaces/components/EditWorkspaceForm.json" 3487 "path": "src/features/workspaces/components/EditWorkspaceForm.json"
@@ -3746,676 +3912,689 @@
3746 "defaultMessage": "!!!Edit", 3912 "defaultMessage": "!!!Edit",
3747 "end": { 3913 "end": {
3748 "column": 3, 3914 "column": 3,
3749 "line": 16 3915 "line": 18
3750 }, 3916 },
3751 "file": "src/lib/Menu.js", 3917 "file": "src/lib/Menu.js",
3752 "id": "menu.edit", 3918 "id": "menu.edit",
3753 "start": { 3919 "start": {
3754 "column": 8, 3920 "column": 8,
3755 "line": 13 3921 "line": 15
3756 } 3922 }
3757 }, 3923 },
3758 { 3924 {
3759 "defaultMessage": "!!!Undo", 3925 "defaultMessage": "!!!Undo",
3760 "end": { 3926 "end": {
3761 "column": 3, 3927 "column": 3,
3762 "line": 20 3928 "line": 22
3763 }, 3929 },
3764 "file": "src/lib/Menu.js", 3930 "file": "src/lib/Menu.js",
3765 "id": "menu.edit.undo", 3931 "id": "menu.edit.undo",
3766 "start": { 3932 "start": {
3767 "column": 8, 3933 "column": 8,
3768 "line": 17 3934 "line": 19
3769 } 3935 }
3770 }, 3936 },
3771 { 3937 {
3772 "defaultMessage": "!!!Redo", 3938 "defaultMessage": "!!!Redo",
3773 "end": { 3939 "end": {
3774 "column": 3, 3940 "column": 3,
3775 "line": 24 3941 "line": 26
3776 }, 3942 },
3777 "file": "src/lib/Menu.js", 3943 "file": "src/lib/Menu.js",
3778 "id": "menu.edit.redo", 3944 "id": "menu.edit.redo",
3779 "start": { 3945 "start": {
3780 "column": 8, 3946 "column": 8,
3781 "line": 21 3947 "line": 23
3782 } 3948 }
3783 }, 3949 },
3784 { 3950 {
3785 "defaultMessage": "!!!Cut", 3951 "defaultMessage": "!!!Cut",
3786 "end": { 3952 "end": {
3787 "column": 3, 3953 "column": 3,
3788 "line": 28 3954 "line": 30
3789 }, 3955 },
3790 "file": "src/lib/Menu.js", 3956 "file": "src/lib/Menu.js",
3791 "id": "menu.edit.cut", 3957 "id": "menu.edit.cut",
3792 "start": { 3958 "start": {
3793 "column": 7, 3959 "column": 7,
3794 "line": 25 3960 "line": 27
3795 } 3961 }
3796 }, 3962 },
3797 { 3963 {
3798 "defaultMessage": "!!!Copy", 3964 "defaultMessage": "!!!Copy",
3799 "end": { 3965 "end": {
3800 "column": 3, 3966 "column": 3,
3801 "line": 32 3967 "line": 34
3802 }, 3968 },
3803 "file": "src/lib/Menu.js", 3969 "file": "src/lib/Menu.js",
3804 "id": "menu.edit.copy", 3970 "id": "menu.edit.copy",
3805 "start": { 3971 "start": {
3806 "column": 8, 3972 "column": 8,
3807 "line": 29 3973 "line": 31
3808 } 3974 }
3809 }, 3975 },
3810 { 3976 {
3811 "defaultMessage": "!!!Paste", 3977 "defaultMessage": "!!!Paste",
3812 "end": { 3978 "end": {
3813 "column": 3, 3979 "column": 3,
3814 "line": 36 3980 "line": 38
3815 }, 3981 },
3816 "file": "src/lib/Menu.js", 3982 "file": "src/lib/Menu.js",
3817 "id": "menu.edit.paste", 3983 "id": "menu.edit.paste",
3818 "start": { 3984 "start": {
3819 "column": 9, 3985 "column": 9,
3820 "line": 33 3986 "line": 35
3821 } 3987 }
3822 }, 3988 },
3823 { 3989 {
3824 "defaultMessage": "!!!Paste And Match Style", 3990 "defaultMessage": "!!!Paste And Match Style",
3825 "end": { 3991 "end": {
3826 "column": 3, 3992 "column": 3,
3827 "line": 40 3993 "line": 42
3828 }, 3994 },
3829 "file": "src/lib/Menu.js", 3995 "file": "src/lib/Menu.js",
3830 "id": "menu.edit.pasteAndMatchStyle", 3996 "id": "menu.edit.pasteAndMatchStyle",
3831 "start": { 3997 "start": {
3832 "column": 22, 3998 "column": 22,
3833 "line": 37 3999 "line": 39
3834 } 4000 }
3835 }, 4001 },
3836 { 4002 {
3837 "defaultMessage": "!!!Delete", 4003 "defaultMessage": "!!!Delete",
3838 "end": { 4004 "end": {
3839 "column": 3, 4005 "column": 3,
3840 "line": 44 4006 "line": 46
3841 }, 4007 },
3842 "file": "src/lib/Menu.js", 4008 "file": "src/lib/Menu.js",
3843 "id": "menu.edit.delete", 4009 "id": "menu.edit.delete",
3844 "start": { 4010 "start": {
3845 "column": 10, 4011 "column": 10,
3846 "line": 41 4012 "line": 43
3847 } 4013 }
3848 }, 4014 },
3849 { 4015 {
3850 "defaultMessage": "!!!Select All", 4016 "defaultMessage": "!!!Select All",
3851 "end": { 4017 "end": {
3852 "column": 3, 4018 "column": 3,
3853 "line": 48 4019 "line": 50
3854 }, 4020 },
3855 "file": "src/lib/Menu.js", 4021 "file": "src/lib/Menu.js",
3856 "id": "menu.edit.selectAll", 4022 "id": "menu.edit.selectAll",
3857 "start": { 4023 "start": {
3858 "column": 13, 4024 "column": 13,
3859 "line": 45 4025 "line": 47
3860 } 4026 }
3861 }, 4027 },
3862 { 4028 {
3863 "defaultMessage": "!!!Speech", 4029 "defaultMessage": "!!!Speech",
3864 "end": { 4030 "end": {
3865 "column": 3, 4031 "column": 3,
3866 "line": 52 4032 "line": 54
3867 }, 4033 },
3868 "file": "src/lib/Menu.js", 4034 "file": "src/lib/Menu.js",
3869 "id": "menu.edit.speech", 4035 "id": "menu.edit.speech",
3870 "start": { 4036 "start": {
3871 "column": 10, 4037 "column": 10,
3872 "line": 49 4038 "line": 51
3873 } 4039 }
3874 }, 4040 },
3875 { 4041 {
3876 "defaultMessage": "!!!Start Speaking", 4042 "defaultMessage": "!!!Start Speaking",
3877 "end": { 4043 "end": {
3878 "column": 3, 4044 "column": 3,
3879 "line": 56 4045 "line": 58
3880 }, 4046 },
3881 "file": "src/lib/Menu.js", 4047 "file": "src/lib/Menu.js",
3882 "id": "menu.edit.startSpeaking", 4048 "id": "menu.edit.startSpeaking",
3883 "start": { 4049 "start": {
3884 "column": 17, 4050 "column": 17,
3885 "line": 53 4051 "line": 55
3886 } 4052 }
3887 }, 4053 },
3888 { 4054 {
3889 "defaultMessage": "!!!Stop Speaking", 4055 "defaultMessage": "!!!Stop Speaking",
3890 "end": { 4056 "end": {
3891 "column": 3, 4057 "column": 3,
3892 "line": 60 4058 "line": 62
3893 }, 4059 },
3894 "file": "src/lib/Menu.js", 4060 "file": "src/lib/Menu.js",
3895 "id": "menu.edit.stopSpeaking", 4061 "id": "menu.edit.stopSpeaking",
3896 "start": { 4062 "start": {
3897 "column": 16, 4063 "column": 16,
3898 "line": 57 4064 "line": 59
3899 } 4065 }
3900 }, 4066 },
3901 { 4067 {
3902 "defaultMessage": "!!!Start Dictation", 4068 "defaultMessage": "!!!Start Dictation",
3903 "end": { 4069 "end": {
3904 "column": 3, 4070 "column": 3,
3905 "line": 64 4071 "line": 66
3906 }, 4072 },
3907 "file": "src/lib/Menu.js", 4073 "file": "src/lib/Menu.js",
3908 "id": "menu.edit.startDictation", 4074 "id": "menu.edit.startDictation",
3909 "start": { 4075 "start": {
3910 "column": 18, 4076 "column": 18,
3911 "line": 61 4077 "line": 63
3912 } 4078 }
3913 }, 4079 },
3914 { 4080 {
3915 "defaultMessage": "!!!Emoji & Symbols", 4081 "defaultMessage": "!!!Emoji & Symbols",
3916 "end": { 4082 "end": {
3917 "column": 3, 4083 "column": 3,
3918 "line": 68 4084 "line": 70
3919 }, 4085 },
3920 "file": "src/lib/Menu.js", 4086 "file": "src/lib/Menu.js",
3921 "id": "menu.edit.emojiSymbols", 4087 "id": "menu.edit.emojiSymbols",
3922 "start": { 4088 "start": {
3923 "column": 16, 4089 "column": 16,
3924 "line": 65 4090 "line": 67
3925 } 4091 }
3926 }, 4092 },
3927 { 4093 {
3928 "defaultMessage": "!!!Actual Size", 4094 "defaultMessage": "!!!Actual Size",
3929 "end": { 4095 "end": {
3930 "column": 3, 4096 "column": 3,
3931 "line": 72 4097 "line": 74
3932 }, 4098 },
3933 "file": "src/lib/Menu.js", 4099 "file": "src/lib/Menu.js",
3934 "id": "menu.view.resetZoom", 4100 "id": "menu.view.resetZoom",
3935 "start": { 4101 "start": {
3936 "column": 13, 4102 "column": 13,
3937 "line": 69 4103 "line": 71
3938 } 4104 }
3939 }, 4105 },
3940 { 4106 {
3941 "defaultMessage": "!!!Zoom In", 4107 "defaultMessage": "!!!Zoom In",
3942 "end": { 4108 "end": {
3943 "column": 3, 4109 "column": 3,
3944 "line": 76 4110 "line": 78
3945 }, 4111 },
3946 "file": "src/lib/Menu.js", 4112 "file": "src/lib/Menu.js",
3947 "id": "menu.view.zoomIn", 4113 "id": "menu.view.zoomIn",
3948 "start": { 4114 "start": {
3949 "column": 10, 4115 "column": 10,
3950 "line": 73 4116 "line": 75
3951 } 4117 }
3952 }, 4118 },
3953 { 4119 {
3954 "defaultMessage": "!!!Zoom Out", 4120 "defaultMessage": "!!!Zoom Out",
3955 "end": { 4121 "end": {
3956 "column": 3, 4122 "column": 3,
3957 "line": 80 4123 "line": 82
3958 }, 4124 },
3959 "file": "src/lib/Menu.js", 4125 "file": "src/lib/Menu.js",
3960 "id": "menu.view.zoomOut", 4126 "id": "menu.view.zoomOut",
3961 "start": { 4127 "start": {
3962 "column": 11, 4128 "column": 11,
3963 "line": 77 4129 "line": 79
3964 } 4130 }
3965 }, 4131 },
3966 { 4132 {
3967 "defaultMessage": "!!!Enter Full Screen", 4133 "defaultMessage": "!!!Enter Full Screen",
3968 "end": { 4134 "end": {
3969 "column": 3, 4135 "column": 3,
3970 "line": 84 4136 "line": 86
3971 }, 4137 },
3972 "file": "src/lib/Menu.js", 4138 "file": "src/lib/Menu.js",
3973 "id": "menu.view.enterFullScreen", 4139 "id": "menu.view.enterFullScreen",
3974 "start": { 4140 "start": {
3975 "column": 19, 4141 "column": 19,
3976 "line": 81 4142 "line": 83
3977 } 4143 }
3978 }, 4144 },
3979 { 4145 {
3980 "defaultMessage": "!!!Exit Full Screen", 4146 "defaultMessage": "!!!Exit Full Screen",
3981 "end": { 4147 "end": {
3982 "column": 3, 4148 "column": 3,
3983 "line": 88 4149 "line": 90
3984 }, 4150 },
3985 "file": "src/lib/Menu.js", 4151 "file": "src/lib/Menu.js",
3986 "id": "menu.view.exitFullScreen", 4152 "id": "menu.view.exitFullScreen",
3987 "start": { 4153 "start": {
3988 "column": 18, 4154 "column": 18,
3989 "line": 85 4155 "line": 87
3990 } 4156 }
3991 }, 4157 },
3992 { 4158 {
3993 "defaultMessage": "!!!Toggle Full Screen", 4159 "defaultMessage": "!!!Toggle Full Screen",
3994 "end": { 4160 "end": {
3995 "column": 3, 4161 "column": 3,
3996 "line": 92 4162 "line": 94
3997 }, 4163 },
3998 "file": "src/lib/Menu.js", 4164 "file": "src/lib/Menu.js",
3999 "id": "menu.view.toggleFullScreen", 4165 "id": "menu.view.toggleFullScreen",
4000 "start": { 4166 "start": {
4001 "column": 20, 4167 "column": 20,
4002 "line": 89 4168 "line": 91
4003 } 4169 }
4004 }, 4170 },
4005 { 4171 {
4006 "defaultMessage": "!!!Toggle Developer Tools", 4172 "defaultMessage": "!!!Toggle Developer Tools",
4007 "end": { 4173 "end": {
4008 "column": 3, 4174 "column": 3,
4009 "line": 96 4175 "line": 98
4010 }, 4176 },
4011 "file": "src/lib/Menu.js", 4177 "file": "src/lib/Menu.js",
4012 "id": "menu.view.toggleDevTools", 4178 "id": "menu.view.toggleDevTools",
4013 "start": { 4179 "start": {
4014 "column": 18, 4180 "column": 18,
4015 "line": 93 4181 "line": 95
4016 } 4182 }
4017 }, 4183 },
4018 { 4184 {
4019 "defaultMessage": "!!!Toggle Service Developer Tools", 4185 "defaultMessage": "!!!Toggle Service Developer Tools",
4020 "end": { 4186 "end": {
4021 "column": 3, 4187 "column": 3,
4022 "line": 100 4188 "line": 102
4023 }, 4189 },
4024 "file": "src/lib/Menu.js", 4190 "file": "src/lib/Menu.js",
4025 "id": "menu.view.toggleServiceDevTools", 4191 "id": "menu.view.toggleServiceDevTools",
4026 "start": { 4192 "start": {
4027 "column": 25, 4193 "column": 25,
4028 "line": 97 4194 "line": 99
4029 } 4195 }
4030 }, 4196 },
4031 { 4197 {
4032 "defaultMessage": "!!!Reload Service", 4198 "defaultMessage": "!!!Reload Service",
4033 "end": { 4199 "end": {
4034 "column": 3, 4200 "column": 3,
4035 "line": 104 4201 "line": 106
4036 }, 4202 },
4037 "file": "src/lib/Menu.js", 4203 "file": "src/lib/Menu.js",
4038 "id": "menu.view.reloadService", 4204 "id": "menu.view.reloadService",
4039 "start": { 4205 "start": {
4040 "column": 17, 4206 "column": 17,
4041 "line": 101 4207 "line": 103
4042 } 4208 }
4043 }, 4209 },
4044 { 4210 {
4045 "defaultMessage": "!!!Reload Franz", 4211 "defaultMessage": "!!!Reload Franz",
4046 "end": { 4212 "end": {
4047 "column": 3, 4213 "column": 3,
4048 "line": 108 4214 "line": 110
4049 }, 4215 },
4050 "file": "src/lib/Menu.js", 4216 "file": "src/lib/Menu.js",
4051 "id": "menu.view.reloadFranz", 4217 "id": "menu.view.reloadFranz",
4052 "start": { 4218 "start": {
4053 "column": 15, 4219 "column": 15,
4054 "line": 105 4220 "line": 107
4055 } 4221 }
4056 }, 4222 },
4057 { 4223 {
4058 "defaultMessage": "!!!Minimize", 4224 "defaultMessage": "!!!Minimize",
4059 "end": { 4225 "end": {
4060 "column": 3, 4226 "column": 3,
4061 "line": 112 4227 "line": 114
4062 }, 4228 },
4063 "file": "src/lib/Menu.js", 4229 "file": "src/lib/Menu.js",
4064 "id": "menu.window.minimize", 4230 "id": "menu.window.minimize",
4065 "start": { 4231 "start": {
4066 "column": 12, 4232 "column": 12,
4067 "line": 109 4233 "line": 111
4068 } 4234 }
4069 }, 4235 },
4070 { 4236 {
4071 "defaultMessage": "!!!Close", 4237 "defaultMessage": "!!!Close",
4072 "end": { 4238 "end": {
4073 "column": 3, 4239 "column": 3,
4074 "line": 116 4240 "line": 118
4075 }, 4241 },
4076 "file": "src/lib/Menu.js", 4242 "file": "src/lib/Menu.js",
4077 "id": "menu.window.close", 4243 "id": "menu.window.close",
4078 "start": { 4244 "start": {
4079 "column": 9, 4245 "column": 9,
4080 "line": 113 4246 "line": 115
4081 } 4247 }
4082 }, 4248 },
4083 { 4249 {
4084 "defaultMessage": "!!!Learn More", 4250 "defaultMessage": "!!!Learn More",
4085 "end": { 4251 "end": {
4086 "column": 3, 4252 "column": 3,
4087 "line": 120 4253 "line": 122
4088 }, 4254 },
4089 "file": "src/lib/Menu.js", 4255 "file": "src/lib/Menu.js",
4090 "id": "menu.help.learnMore", 4256 "id": "menu.help.learnMore",
4091 "start": { 4257 "start": {
4092 "column": 13, 4258 "column": 13,
4093 "line": 117 4259 "line": 119
4094 } 4260 }
4095 }, 4261 },
4096 { 4262 {
4097 "defaultMessage": "!!!Changelog", 4263 "defaultMessage": "!!!Changelog",
4098 "end": { 4264 "end": {
4099 "column": 3, 4265 "column": 3,
4100 "line": 124 4266 "line": 126
4101 }, 4267 },
4102 "file": "src/lib/Menu.js", 4268 "file": "src/lib/Menu.js",
4103 "id": "menu.help.changelog", 4269 "id": "menu.help.changelog",
4104 "start": { 4270 "start": {
4105 "column": 13, 4271 "column": 13,
4106 "line": 121 4272 "line": 123
4107 } 4273 }
4108 }, 4274 },
4109 { 4275 {
4110 "defaultMessage": "!!!Support", 4276 "defaultMessage": "!!!Support",
4111 "end": { 4277 "end": {
4112 "column": 3, 4278 "column": 3,
4113 "line": 128 4279 "line": 130
4114 }, 4280 },
4115 "file": "src/lib/Menu.js", 4281 "file": "src/lib/Menu.js",
4116 "id": "menu.help.support", 4282 "id": "menu.help.support",
4117 "start": { 4283 "start": {
4118 "column": 11, 4284 "column": 11,
4119 "line": 125 4285 "line": 127
4120 } 4286 }
4121 }, 4287 },
4122 { 4288 {
4123 "defaultMessage": "!!!Terms of Service", 4289 "defaultMessage": "!!!Terms of Service",
4124 "end": { 4290 "end": {
4125 "column": 3, 4291 "column": 3,
4126 "line": 132 4292 "line": 134
4127 }, 4293 },
4128 "file": "src/lib/Menu.js", 4294 "file": "src/lib/Menu.js",
4129 "id": "menu.help.tos", 4295 "id": "menu.help.tos",
4130 "start": { 4296 "start": {
4131 "column": 7, 4297 "column": 7,
4132 "line": 129 4298 "line": 131
4133 } 4299 }
4134 }, 4300 },
4135 { 4301 {
4136 "defaultMessage": "!!!Privacy Statement", 4302 "defaultMessage": "!!!Privacy Statement",
4137 "end": { 4303 "end": {
4138 "column": 3, 4304 "column": 3,
4139 "line": 136 4305 "line": 138
4140 }, 4306 },
4141 "file": "src/lib/Menu.js", 4307 "file": "src/lib/Menu.js",
4142 "id": "menu.help.privacy", 4308 "id": "menu.help.privacy",
4143 "start": { 4309 "start": {
4144 "column": 11, 4310 "column": 11,
4145 "line": 133 4311 "line": 135
4146 } 4312 }
4147 }, 4313 },
4148 { 4314 {
4149 "defaultMessage": "!!!File", 4315 "defaultMessage": "!!!File",
4150 "end": { 4316 "end": {
4151 "column": 3, 4317 "column": 3,
4152 "line": 140 4318 "line": 142
4153 }, 4319 },
4154 "file": "src/lib/Menu.js", 4320 "file": "src/lib/Menu.js",
4155 "id": "menu.file", 4321 "id": "menu.file",
4156 "start": { 4322 "start": {
4157 "column": 8, 4323 "column": 8,
4158 "line": 137 4324 "line": 139
4159 } 4325 }
4160 }, 4326 },
4161 { 4327 {
4162 "defaultMessage": "!!!View", 4328 "defaultMessage": "!!!View",
4163 "end": { 4329 "end": {
4164 "column": 3, 4330 "column": 3,
4165 "line": 144 4331 "line": 146
4166 }, 4332 },
4167 "file": "src/lib/Menu.js", 4333 "file": "src/lib/Menu.js",
4168 "id": "menu.view", 4334 "id": "menu.view",
4169 "start": { 4335 "start": {
4170 "column": 8, 4336 "column": 8,
4171 "line": 141 4337 "line": 143
4172 } 4338 }
4173 }, 4339 },
4174 { 4340 {
4175 "defaultMessage": "!!!Services", 4341 "defaultMessage": "!!!Services",
4176 "end": { 4342 "end": {
4177 "column": 3, 4343 "column": 3,
4178 "line": 148 4344 "line": 150
4179 }, 4345 },
4180 "file": "src/lib/Menu.js", 4346 "file": "src/lib/Menu.js",
4181 "id": "menu.services", 4347 "id": "menu.services",
4182 "start": { 4348 "start": {
4183 "column": 12, 4349 "column": 12,
4184 "line": 145 4350 "line": 147
4185 } 4351 }
4186 }, 4352 },
4187 { 4353 {
4188 "defaultMessage": "!!!Window", 4354 "defaultMessage": "!!!Window",
4189 "end": { 4355 "end": {
4190 "column": 3, 4356 "column": 3,
4191 "line": 152 4357 "line": 154
4192 }, 4358 },
4193 "file": "src/lib/Menu.js", 4359 "file": "src/lib/Menu.js",
4194 "id": "menu.window", 4360 "id": "menu.window",
4195 "start": { 4361 "start": {
4196 "column": 10, 4362 "column": 10,
4197 "line": 149 4363 "line": 151
4198 } 4364 }
4199 }, 4365 },
4200 { 4366 {
4201 "defaultMessage": "!!!Help", 4367 "defaultMessage": "!!!Help",
4202 "end": { 4368 "end": {
4203 "column": 3, 4369 "column": 3,
4204 "line": 156 4370 "line": 158
4205 }, 4371 },
4206 "file": "src/lib/Menu.js", 4372 "file": "src/lib/Menu.js",
4207 "id": "menu.help", 4373 "id": "menu.help",
4208 "start": { 4374 "start": {
4209 "column": 8, 4375 "column": 8,
4210 "line": 153 4376 "line": 155
4211 } 4377 }
4212 }, 4378 },
4213 { 4379 {
4214 "defaultMessage": "!!!About Franz", 4380 "defaultMessage": "!!!About Franz",
4215 "end": { 4381 "end": {
4216 "column": 3, 4382 "column": 3,
4217 "line": 160 4383 "line": 162
4218 }, 4384 },
4219 "file": "src/lib/Menu.js", 4385 "file": "src/lib/Menu.js",
4220 "id": "menu.app.about", 4386 "id": "menu.app.about",
4221 "start": { 4387 "start": {
4222 "column": 9, 4388 "column": 9,
4223 "line": 157 4389 "line": 159
4390 }
4391 },
4392 {
4393 "defaultMessage": "!!!What's new?",
4394 "end": {
4395 "column": 3,
4396 "line": 166
4397 },
4398 "file": "src/lib/Menu.js",
4399 "id": "menu.app.announcement",
4400 "start": {
4401 "column": 16,
4402 "line": 163
4224 } 4403 }
4225 }, 4404 },
4226 { 4405 {
4227 "defaultMessage": "!!!Settings", 4406 "defaultMessage": "!!!Settings",
4228 "end": { 4407 "end": {
4229 "column": 3, 4408 "column": 3,
4230 "line": 164 4409 "line": 170
4231 }, 4410 },
4232 "file": "src/lib/Menu.js", 4411 "file": "src/lib/Menu.js",
4233 "id": "menu.app.settings", 4412 "id": "menu.app.settings",
4234 "start": { 4413 "start": {
4235 "column": 12, 4414 "column": 12,
4236 "line": 161 4415 "line": 167
4237 } 4416 }
4238 }, 4417 },
4239 { 4418 {
4240 "defaultMessage": "!!!Hide", 4419 "defaultMessage": "!!!Hide",
4241 "end": { 4420 "end": {
4242 "column": 3, 4421 "column": 3,
4243 "line": 168 4422 "line": 174
4244 }, 4423 },
4245 "file": "src/lib/Menu.js", 4424 "file": "src/lib/Menu.js",
4246 "id": "menu.app.hide", 4425 "id": "menu.app.hide",
4247 "start": { 4426 "start": {
4248 "column": 8, 4427 "column": 8,
4249 "line": 165 4428 "line": 171
4250 } 4429 }
4251 }, 4430 },
4252 { 4431 {
4253 "defaultMessage": "!!!Hide Others", 4432 "defaultMessage": "!!!Hide Others",
4254 "end": { 4433 "end": {
4255 "column": 3, 4434 "column": 3,
4256 "line": 172 4435 "line": 178
4257 }, 4436 },
4258 "file": "src/lib/Menu.js", 4437 "file": "src/lib/Menu.js",
4259 "id": "menu.app.hideOthers", 4438 "id": "menu.app.hideOthers",
4260 "start": { 4439 "start": {
4261 "column": 14, 4440 "column": 14,
4262 "line": 169 4441 "line": 175
4263 } 4442 }
4264 }, 4443 },
4265 { 4444 {
4266 "defaultMessage": "!!!Unhide", 4445 "defaultMessage": "!!!Unhide",
4267 "end": { 4446 "end": {
4268 "column": 3, 4447 "column": 3,
4269 "line": 176 4448 "line": 182
4270 }, 4449 },
4271 "file": "src/lib/Menu.js", 4450 "file": "src/lib/Menu.js",
4272 "id": "menu.app.unhide", 4451 "id": "menu.app.unhide",
4273 "start": { 4452 "start": {
4274 "column": 10, 4453 "column": 10,
4275 "line": 173 4454 "line": 179
4276 } 4455 }
4277 }, 4456 },
4278 { 4457 {
4279 "defaultMessage": "!!!Quit", 4458 "defaultMessage": "!!!Quit",
4280 "end": { 4459 "end": {
4281 "column": 3, 4460 "column": 3,
4282 "line": 180 4461 "line": 186
4283 }, 4462 },
4284 "file": "src/lib/Menu.js", 4463 "file": "src/lib/Menu.js",
4285 "id": "menu.app.quit", 4464 "id": "menu.app.quit",
4286 "start": { 4465 "start": {
4287 "column": 8, 4466 "column": 8,
4288 "line": 177 4467 "line": 183
4289 } 4468 }
4290 }, 4469 },
4291 { 4470 {
4292 "defaultMessage": "!!!Add New Service...", 4471 "defaultMessage": "!!!Add New Service...",
4293 "end": { 4472 "end": {
4294 "column": 3, 4473 "column": 3,
4295 "line": 184 4474 "line": 190
4296 }, 4475 },
4297 "file": "src/lib/Menu.js", 4476 "file": "src/lib/Menu.js",
4298 "id": "menu.services.addNewService", 4477 "id": "menu.services.addNewService",
4299 "start": { 4478 "start": {
4300 "column": 17, 4479 "column": 17,
4301 "line": 181 4480 "line": 187
4302 } 4481 }
4303 }, 4482 },
4304 { 4483 {
4305 "defaultMessage": "!!!Add New Workspace...", 4484 "defaultMessage": "!!!Add New Workspace...",
4306 "end": { 4485 "end": {
4307 "column": 3, 4486 "column": 3,
4308 "line": 188 4487 "line": 194
4309 }, 4488 },
4310 "file": "src/lib/Menu.js", 4489 "file": "src/lib/Menu.js",
4311 "id": "menu.workspaces.addNewWorkspace", 4490 "id": "menu.workspaces.addNewWorkspace",
4312 "start": { 4491 "start": {
4313 "column": 19, 4492 "column": 19,
4314 "line": 185 4493 "line": 191
4315 } 4494 }
4316 }, 4495 },
4317 { 4496 {
4318 "defaultMessage": "!!!Open workspace drawer", 4497 "defaultMessage": "!!!Open workspace drawer",
4319 "end": { 4498 "end": {
4320 "column": 3, 4499 "column": 3,
4321 "line": 192 4500 "line": 198
4322 }, 4501 },
4323 "file": "src/lib/Menu.js", 4502 "file": "src/lib/Menu.js",
4324 "id": "menu.workspaces.openWorkspaceDrawer", 4503 "id": "menu.workspaces.openWorkspaceDrawer",
4325 "start": { 4504 "start": {
4326 "column": 23, 4505 "column": 23,
4327 "line": 189 4506 "line": 195
4328 } 4507 }
4329 }, 4508 },
4330 { 4509 {
4331 "defaultMessage": "!!!Close workspace drawer", 4510 "defaultMessage": "!!!Close workspace drawer",
4332 "end": { 4511 "end": {
4333 "column": 3, 4512 "column": 3,
4334 "line": 196 4513 "line": 202
4335 }, 4514 },
4336 "file": "src/lib/Menu.js", 4515 "file": "src/lib/Menu.js",
4337 "id": "menu.workspaces.closeWorkspaceDrawer", 4516 "id": "menu.workspaces.closeWorkspaceDrawer",
4338 "start": { 4517 "start": {
4339 "column": 24, 4518 "column": 24,
4340 "line": 193 4519 "line": 199
4341 } 4520 }
4342 }, 4521 },
4343 { 4522 {
4344 "defaultMessage": "!!!Activate next service...", 4523 "defaultMessage": "!!!Activate next service...",
4345 "end": { 4524 "end": {
4346 "column": 3, 4525 "column": 3,
4347 "line": 200 4526 "line": 206
4348 }, 4527 },
4349 "file": "src/lib/Menu.js", 4528 "file": "src/lib/Menu.js",
4350 "id": "menu.services.setNextServiceActive", 4529 "id": "menu.services.setNextServiceActive",
4351 "start": { 4530 "start": {
4352 "column": 23, 4531 "column": 23,
4353 "line": 197 4532 "line": 203
4354 } 4533 }
4355 }, 4534 },
4356 { 4535 {
4357 "defaultMessage": "!!!Activate previous service...", 4536 "defaultMessage": "!!!Activate previous service...",
4358 "end": { 4537 "end": {
4359 "column": 3, 4538 "column": 3,
4360 "line": 204 4539 "line": 210
4361 }, 4540 },
4362 "file": "src/lib/Menu.js", 4541 "file": "src/lib/Menu.js",
4363 "id": "menu.services.activatePreviousService", 4542 "id": "menu.services.activatePreviousService",
4364 "start": { 4543 "start": {
4365 "column": 27, 4544 "column": 27,
4366 "line": 201 4545 "line": 207
4367 } 4546 }
4368 }, 4547 },
4369 { 4548 {
4370 "defaultMessage": "!!!Disable notifications & audio", 4549 "defaultMessage": "!!!Disable notifications & audio",
4371 "end": { 4550 "end": {
4372 "column": 3, 4551 "column": 3,
4373 "line": 208 4552 "line": 214
4374 }, 4553 },
4375 "file": "src/lib/Menu.js", 4554 "file": "src/lib/Menu.js",
4376 "id": "sidebar.muteApp", 4555 "id": "sidebar.muteApp",
4377 "start": { 4556 "start": {
4378 "column": 11, 4557 "column": 11,
4379 "line": 205 4558 "line": 211
4380 } 4559 }
4381 }, 4560 },
4382 { 4561 {
4383 "defaultMessage": "!!!Enable notifications & audio", 4562 "defaultMessage": "!!!Enable notifications & audio",
4384 "end": { 4563 "end": {
4385 "column": 3, 4564 "column": 3,
4386 "line": 212 4565 "line": 218
4387 }, 4566 },
4388 "file": "src/lib/Menu.js", 4567 "file": "src/lib/Menu.js",
4389 "id": "sidebar.unmuteApp", 4568 "id": "sidebar.unmuteApp",
4390 "start": { 4569 "start": {
4391 "column": 13, 4570 "column": 13,
4392 "line": 209 4571 "line": 215
4393 } 4572 }
4394 }, 4573 },
4395 { 4574 {
4396 "defaultMessage": "!!!Workspaces", 4575 "defaultMessage": "!!!Workspaces",
4397 "end": { 4576 "end": {
4398 "column": 3, 4577 "column": 3,
4399 "line": 216 4578 "line": 222
4400 }, 4579 },
4401 "file": "src/lib/Menu.js", 4580 "file": "src/lib/Menu.js",
4402 "id": "menu.workspaces", 4581 "id": "menu.workspaces",
4403 "start": { 4582 "start": {
4404 "column": 14, 4583 "column": 14,
4405 "line": 213 4584 "line": 219
4406 } 4585 }
4407 }, 4586 },
4408 { 4587 {
4409 "defaultMessage": "!!!Default", 4588 "defaultMessage": "!!!Default",
4410 "end": { 4589 "end": {
4411 "column": 3, 4590 "column": 3,
4412 "line": 220 4591 "line": 226
4413 }, 4592 },
4414 "file": "src/lib/Menu.js", 4593 "file": "src/lib/Menu.js",
4415 "id": "menu.workspaces.defaultWorkspace", 4594 "id": "menu.workspaces.defaultWorkspace",
4416 "start": { 4595 "start": {
4417 "column": 20, 4596 "column": 20,
4418 "line": 217 4597 "line": 223
4419 } 4598 }
4420 } 4599 }
4421 ], 4600 ],
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json
index 626abfddd..0ff4b5abb 100644
--- a/src/i18n/locales/el.json
+++ b/src/i18n/locales/el.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "ΕπαναφόÏτωση", 2 "app.errorHandler.action" : "ΕπαναφόÏτωση",
3 "app.errorHandler.headline" : "Κάτι δεν λειτουÏγεί", 3 "app.errorHandler.headline" : "Κάτι δεν λειτουÏγεί",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Get a Franz Supporter License", 5 "feature.delayApp.action" : "Get a Franz Supporter License",
5 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text" : "Franz θα συνεχίσει σε {seconds} δευτεÏόλεπτα.", 7 "feature.delayApp.text" : "Franz θα συνεχίσει σε {seconds} δευτεÏόλεπτα.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Δεν είναι δυνατή η σÏνδεση με τις ζωντανές υπηÏεσίες του Franz", 15 "global.api.unhealthy" : "Δεν είναι δυνατή η σÏνδεση με τις ζωντανές υπηÏεσίες του Franz",
15 "global.notConnectedToTheInternet" : "Έχετε αποσυνδεθεί από το Διαδίκτυο", 16 "global.notConnectedToTheInternet" : "Έχετε αποσυνδεθεί από το Διαδίκτυο",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "ΣÏνδεση", 44 "login.submit.label" : "ΣÏνδεση",
44 "login.tokenExpired" : "Η συνεδÏία σας έληξε, συνδεθείτε ξανά.", 45 "login.tokenExpired" : "Η συνεδÏία σας έληξε, συνδεθείτε ξανά.",
45 "menu.app.about" : "Σχετικά με το Franz", 46 "menu.app.about" : "Σχετικά με το Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "ΑπόκÏυψη", 48 "menu.app.hide" : "ΑπόκÏυψη",
47 "menu.app.hideOthers" : "ΑπόκÏυψη των άλλων", 49 "menu.app.hideOthers" : "ΑπόκÏυψη των άλλων",
48 "menu.app.quit" : "Έξοδος", 50 "menu.app.quit" : "Έξοδος",
@@ -87,6 +89,11 @@
87 "menu.window" : "ΠαÏάθυÏο", 89 "menu.window" : "ΠαÏάθυÏο",
88 "menu.window.close" : "Κλείσιμο", 90 "menu.window.close" : "Κλείσιμο",
89 "menu.window.minimize" : "Ελαχιστοποίηση", 91 "menu.window.minimize" : "Ελαχιστοποίηση",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Όλες οι υπηÏεσίες",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου", 97 "password.email.label" : "ΔιεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου",
91 "password.headline" : "ΕπαναφοÏά ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης", 98 "password.headline" : "ΕπαναφοÏά ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης",
92 "password.link.login" : "ΣÏνδεση στο λογαÏιασμό σας", 99 "password.link.login" : "ΣÏνδεση στο λογαÏιασμό σας",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Ω, όχι!", 117 "service.errorHandler.headline" : "Ω, όχι!",
111 "service.errorHandler.message" : "Σφάλμα", 118 "service.errorHandler.message" : "Σφάλμα",
112 "service.errorHandler.text" : "{name} has failed to load.", 119 "service.errorHandler.text" : "{name} has failed to load.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Ξεκινήστε", 121 "services.getStarted" : "Ξεκινήστε",
114 "services.welcome" : "Καλώς οÏίσατε στον Franz", 122 "services.welcome" : "Καλώς οÏίσατε στον Franz",
115 "settings.account.account.editButton" : "ΕπεξεÏγασία λογαÏιασμοÏ", 123 "settings.account.account.editButton" : "ΕπεξεÏγασία λογαÏιασμοÏ",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Γενικά", 164 "settings.app.headlineGeneral" : "Γενικά",
157 "settings.app.headlineLanguage" : "Γλώσσα", 165 "settings.app.headlineLanguage" : "Γλώσσα",
158 "settings.app.headlineUpdates" : "ΕνημεÏώσεις", 166 "settings.app.headlineUpdates" : "ΕνημεÏώσεις",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Οι αλλαγές απαιτοÏν επανεκκίνηση", 168 "settings.app.restartRequired" : "Οι αλλαγές απαιτοÏν επανεκκίνηση",
160 "settings.app.subheadlineCache" : "Λανθάνουσα μνήμη", 169 "settings.app.subheadlineCache" : "Λανθάνουσα μνήμη",
161 "settings.app.translationHelp" : "Βοηθήστε μας να μεταφÏάσουμε το Franz στη δική σας γλώσσα.", 170 "settings.app.translationHelp" : "Βοηθήστε μας να μεταφÏάσουμε το Franz στη δική σας γλώσσα.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "ΠÏασκαλέστε Φίλους", 177 "settings.navigation.inviteFriends" : "ΠÏασκαλέστε Φίλους",
169 "settings.navigation.logout" : "ΑποσÏνδεση", 178 "settings.navigation.logout" : "ΑποσÏνδεση",
170 "settings.navigation.settings" : "Ρυθμίσεις", 179 "settings.navigation.settings" : "Ρυθμίσεις",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Οι υπηÏεσίες σας", 181 "settings.navigation.yourServices" : "Οι υπηÏεσίες σας",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Όλες οι υπηÏεσίες", 183 "settings.recipes.all" : "Όλες οι υπηÏεσίες",
173 "settings.recipes.dev" : "Ανάπτυξη", 184 "settings.recipes.dev" : "Ανάπτυξη",
174 "settings.recipes.headline" : "Διαθέσιμες υπηÏεσίες", 185 "settings.recipes.headline" : "Διαθέσιμες υπηÏεσίες",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Όλοι οι ήχοι είναι απενεÏγοποιημένοι", 237 "settings.services.tooltip.isMuted" : "Όλοι οι ήχοι είναι απενεÏγοποιημένοι",
227 "settings.services.tooltip.notificationsDisabled" : "Οι ειδοποιήσεις είναι απενεÏγοποιημένες", 238 "settings.services.tooltip.notificationsDisabled" : "Οι ειδοποιήσεις είναι απενεÏγοποιημένες",
228 "settings.services.updatedInfo" : "Οι αλλαγές σας έχουν αποθηκευτεί", 239 "settings.services.updatedInfo" : "Οι αλλαγές σας έχουν αποθηκευτεί",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Ομάδα",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "ΕταιÏεία", 246 "settings.user.form.accountType.company" : "ΕταιÏεία",
230 "settings.user.form.accountType.individual" : "Ατομικός", 247 "settings.user.form.accountType.individual" : "Ατομικός",
231 "settings.user.form.accountType.label" : "ΤÏπος λογαÏιασμοÏ", 248 "settings.user.form.accountType.label" : "ΤÏπος λογαÏιασμοÏ",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Όνομα", 252 "settings.user.form.firstname" : "Όνομα",
236 "settings.user.form.lastname" : "Επίθετο", 253 "settings.user.form.lastname" : "Επίθετο",
237 "settings.user.form.newPassword" : "Îέος κωδικός Ï€Ïόσβασης", 254 "settings.user.form.newPassword" : "Îέος κωδικός Ï€Ïόσβασης",
255 "settings.workspace.add.form.name" : "Όνομα",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Όνομα",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Δοκιμάστε ξανά",
266 "settings.workspaces.updatedInfo" : "Οι αλλαγές σας έχουν αποθηκευτεί",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "ΠÏοσθήκη νέας υπηÏεσίας", 270 "sidebar.addNewService" : "ΠÏοσθήκη νέας υπηÏεσίας",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "ΑπενεÏγοποίηση ειδοποιήσεων & ήχου", 272 "sidebar.muteApp" : "ΑπενεÏγοποίηση ειδοποιήσεων & ήχου",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Ρυθμίσεις", 274 "sidebar.settings" : "Ρυθμίσεις",
241 "sidebar.unmuteApp" : "ΕνεÏγοποίηση ειδοποιήσεων & ήχου", 275 "sidebar.unmuteApp" : "ΕνεÏγοποίηση ειδοποιήσεων & ήχου",
242 "signup.company.label" : "ΕταιÏεία", 276 "signup.company.label" : "ΕταιÏεία",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Ο Premium λογαÏιασμός υποστήÏιξης Franz πεÏιλαμβάνει", 296 "subscription.includedFeatures" : "Ο Premium λογαÏιασμός υποστήÏιξης Franz πεÏιλαμβάνει",
262 "subscription.paymentSessionError" : "Δεν ήταν δυνατή η Ï€Ïοετοιμασία της φόÏμας πληÏωμής", 297 "subscription.paymentSessionError" : "Δεν ήταν δυνατή η Ï€Ïοετοιμασία της φόÏμας πληÏωμής",
263 "subscription.submit.label" : "Θέλω να βοηθήσω στην ανάπτυξη του Franz", 298 "subscription.submit.label" : "Θέλω να βοηθήσω στην ανάπτυξη του Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} είναι υποχÏεωτικό", 316 "validation.required" : "{field} είναι υποχÏεωτικό",
282 "validation.url" : "{field} δεν είναι έγκυÏος σÏνδεσμος URL", 317 "validation.url" : "{field} δεν είναι έγκυÏος σÏνδεσμος URL",
283 "welcome.loginButton" : "ΣÏνδεση στο λογαÏιασμό σας", 318 "welcome.loginButton" : "ΣÏνδεση στο λογαÏιασμό σας",
284 "welcome.signupButton" : "ΔημιουÏγία δωÏεάν λογαÏιασμοÏ" 319 "welcome.signupButton" : "ΔημιουÏγία δωÏεάν λογαÏιασμοÏ",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Όλες οι υπηÏεσίες",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 84a71117a..6c2759dcc 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action": "Reload", 2 "app.errorHandler.action": "Reload",
3 "app.errorHandler.headline": "Something went wrong", 3 "app.errorHandler.headline": "Something went wrong",
4 "feature.announcements.changelog.headline": "Changes in Franz {version}",
4 "feature.delayApp.action": "Get a Franz Supporter License", 5 "feature.delayApp.action": "Get a Franz Supporter License",
5 "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text": "Franz will continue in {seconds} seconds.", 7 "feature.delayApp.text": "Franz will continue in {seconds} seconds.",
@@ -43,6 +44,7 @@
43 "login.submit.label": "Sign in", 44 "login.submit.label": "Sign in",
44 "login.tokenExpired": "Your session expired, please login again.", 45 "login.tokenExpired": "Your session expired, please login again.",
45 "menu.app.about": "About Franz", 46 "menu.app.about": "About Franz",
47 "menu.app.announcement": "What's new?",
46 "menu.app.hide": "Hide", 48 "menu.app.hide": "Hide",
47 "menu.app.hideOthers": "Hide Others", 49 "menu.app.hideOthers": "Hide Others",
48 "menu.app.quit": "Quit", 50 "menu.app.quit": "Quit",
@@ -162,6 +164,7 @@
162 "settings.app.headlineGeneral": "General", 164 "settings.app.headlineGeneral": "General",
163 "settings.app.headlineLanguage": "Language", 165 "settings.app.headlineLanguage": "Language",
164 "settings.app.headlineUpdates": "Updates", 166 "settings.app.headlineUpdates": "Updates",
167 "settings.app.languageDisclaimer": "Official translations are English & German. All other languages are community based translations.",
165 "settings.app.restartRequired": "Changes require restart", 168 "settings.app.restartRequired": "Changes require restart",
166 "settings.app.subheadlineCache": "Cache", 169 "settings.app.subheadlineCache": "Cache",
167 "settings.app.translationHelp": "Help us to translate Franz into your language.", 170 "settings.app.translationHelp": "Help us to translate Franz into your language.",
@@ -174,6 +177,7 @@
174 "settings.navigation.inviteFriends": "Invite Friends", 177 "settings.navigation.inviteFriends": "Invite Friends",
175 "settings.navigation.logout": "Logout", 178 "settings.navigation.logout": "Logout",
176 "settings.navigation.settings": "Settings", 179 "settings.navigation.settings": "Settings",
180 "settings.navigation.team": "Manage Team",
177 "settings.navigation.yourServices": "Your services", 181 "settings.navigation.yourServices": "Your services",
178 "settings.navigation.yourWorkspaces": "Your workspaces", 182 "settings.navigation.yourWorkspaces": "Your workspaces",
179 "settings.recipes.all": "All services", 183 "settings.recipes.all": "All services",
@@ -233,6 +237,12 @@
233 "settings.services.tooltip.isMuted": "All sounds are muted", 237 "settings.services.tooltip.isMuted": "All sounds are muted",
234 "settings.services.tooltip.notificationsDisabled": "Notifications are disabled", 238 "settings.services.tooltip.notificationsDisabled": "Notifications are disabled",
235 "settings.services.updatedInfo": "Your changes have been saved", 239 "settings.services.updatedInfo": "Your changes have been saved",
240 "settings.team.contentHeadline": "Franz for Teams",
241 "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.headline": "Team",
243 "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.manageAction": "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction": "Upgrade your Account",
236 "settings.user.form.accountType.company": "Company", 246 "settings.user.form.accountType.company": "Company",
237 "settings.user.form.accountType.individual": "Individual", 247 "settings.user.form.accountType.individual": "Individual",
238 "settings.user.form.accountType.label": "Account type", 248 "settings.user.form.accountType.label": "Account type",
@@ -282,6 +292,7 @@
282 "subscription.features.onpremise.mattermost": "Add on-premise/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost": "Add on-premise/hosted services like Mattermost",
283 "subscription.features.proxy": "Proxy support for services", 293 "subscription.features.proxy": "Proxy support for services",
284 "subscription.features.spellchecker": "Support for spellchecker", 294 "subscription.features.spellchecker": "Support for spellchecker",
295 "subscription.features.workspaces": "Organize your services in workspaces",
285 "subscription.includedFeatures": "Paid Franz Premium Supporter Account includes", 296 "subscription.includedFeatures": "Paid Franz Premium Supporter Account includes",
286 "subscription.paymentSessionError": "Could not initialize payment form", 297 "subscription.paymentSessionError": "Could not initialize payment form",
287 "subscription.submit.label": "I want to support the development of Franz", 298 "subscription.submit.label": "I want to support the development of Franz",
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index 5c26b456c..4167a5c7d 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -1,21 +1,22 @@
1{ 1{
2 "app.errorHandler.action" : "Recargar", 2 "app.errorHandler.action" : "Recargar",
3 "app.errorHandler.headline" : "Ha surgido un error", 3 "app.errorHandler.headline" : "Ha surgido un error",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Consigue una Licencia de Soporte de Franz", 5 "feature.delayApp.action" : "Consigue una Licencia de Soporte de Franz",
5 "feature.delayApp.headline" : "Por favor, compra una Licencia de Soporte de Franz para saltar la espera", 6 "feature.delayApp.headline" : "Por favor, compra una Licencia de Soporte de Franz para saltar la espera",
6 "feature.delayApp.text" : "Franz continuará en {seconds} segundos.", 7 "feature.delayApp.text" : "Franz continuará en {seconds} segundos.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Envía como correo",
8 "feature.shareFranz.action.facebook" : "Compartir en Facebook", 9 "feature.shareFranz.action.facebook" : "Compartir en Facebook",
9 "feature.shareFranz.action.twitter" : "Compartir en Twitter", 10 "feature.shareFranz.action.twitter" : "Compartir en Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "¡Juntos mejoramos Franz!",
11 "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" : "¡He añadido {count} servicios a Franz! Obtén la aplicación gratuita para WhatsApp, Messenger, Slack, Skype en www.meetfranz.com",
12 "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 @MeetFranz", 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.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "Dile a tus amigos y colegas lo asombroso que es Franz y ayúdanos a correr la voz.",
14 "global.api.unhealthy" : "No es posible conectarse a los servicios en línea de Franz.", 15 "global.api.unhealthy" : "No es posible conectarse a los servicios en línea de Franz.",
15 "global.notConnectedToTheInternet" : "No estás conectado a Internet", 16 "global.notConnectedToTheInternet" : "No estás conectado a Internet",
16 "global.spellchecker.useDefault" : "Utilizar estándar del sistema ({default})", 17 "global.spellchecker.useDefault" : "Utilizar estándar del sistema ({default})",
17 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "Detectar el idioma automáticamente",
18 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "Automático",
19 "global.spellchecking.language" : "Corrector de ortografía", 20 "global.spellchecking.language" : "Corrector de ortografía",
20 "import.headline" : "Importa tus servicios de Franz 4", 21 "import.headline" : "Importa tus servicios de Franz 4",
21 "import.notSupportedHeadline" : "Servicios no admitidos aún en Franz 5", 22 "import.notSupportedHeadline" : "Servicios no admitidos aún en Franz 5",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Iniciar sesión", 44 "login.submit.label" : "Iniciar sesión",
44 "login.tokenExpired" : "Tu sesión ha expirado, por favor inicia sesión de nuevo.", 45 "login.tokenExpired" : "Tu sesión ha expirado, por favor inicia sesión de nuevo.",
45 "menu.app.about" : "Sobre Franz", 46 "menu.app.about" : "Sobre Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Ocultar", 48 "menu.app.hide" : "Ocultar",
47 "menu.app.hideOthers" : "Ocultar otros", 49 "menu.app.hideOthers" : "Ocultar otros",
48 "menu.app.quit" : "Salir", 50 "menu.app.quit" : "Salir",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Ayuda técnica", 72 "menu.help.support" : "Ayuda técnica",
71 "menu.help.tos" : "Términos del Servicio", 73 "menu.help.tos" : "Términos del Servicio",
72 "menu.services" : "Servicios", 74 "menu.services" : "Servicios",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "Activa el servicio previo",
74 "menu.services.addNewService" : "Añadir Nuevo Servicio...", 76 "menu.services.addNewService" : "Añadir Nuevo Servicio...",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "Activa el siguiente servicio",
76 "menu.view" : "Mostrar", 78 "menu.view" : "Mostrar",
77 "menu.view.enterFullScreen" : "Pasar a pantalla completa", 79 "menu.view.enterFullScreen" : "Pasar a pantalla completa",
78 "menu.view.exitFullScreen" : "Salir de Pantalla Completa", 80 "menu.view.exitFullScreen" : "Salir de Pantalla Completa",
@@ -87,6 +89,11 @@
87 "menu.window" : "Ventana", 89 "menu.window" : "Ventana",
88 "menu.window.close" : "Cerrar", 90 "menu.window.close" : "Cerrar",
89 "menu.window.minimize" : "Minimizar", 91 "menu.window.minimize" : "Minimizar",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Todos los servicios",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Dirección de correo electrónico", 97 "password.email.label" : "Dirección de correo electrónico",
91 "password.headline" : "Restablecer contraseña", 98 "password.headline" : "Restablecer contraseña",
92 "password.link.login" : "Inicia sesión en tu cuenta", 99 "password.link.login" : "Inicia sesión en tu cuenta",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "¡Oh, no!", 117 "service.errorHandler.headline" : "¡Oh, no!",
111 "service.errorHandler.message" : "Error", 118 "service.errorHandler.message" : "Error",
112 "service.errorHandler.text" : "{name} ha fallado la carga", 119 "service.errorHandler.text" : "{name} ha fallado la carga",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Primeros pasos", 121 "services.getStarted" : "Primeros pasos",
114 "services.welcome" : "Bienvenido a Franz", 122 "services.welcome" : "Bienvenido a Franz",
115 "settings.account.account.editButton" : "Editar cuenta", 123 "settings.account.account.editButton" : "Editar cuenta",
@@ -131,7 +139,7 @@
131 "settings.account.manageSubscription.label" : "Administra tu suscripción", 139 "settings.account.manageSubscription.label" : "Administra tu suscripción",
132 "settings.account.successInfo" : "Tus cambios han sido guardados", 140 "settings.account.successInfo" : "Tus cambios han sido guardados",
133 "settings.account.tryReloadServices" : "Intentar de nuevo", 141 "settings.account.tryReloadServices" : "Intentar de nuevo",
134 "settings.account.tryReloadUserInfoRequest" : "Intentar de nuevo", 142 "settings.account.tryReloadUserInfoRequest" : "Intenta de nuevo",
135 "settings.account.userInfoRequestFailed" : "No se pudo cargar la información de usuario", 143 "settings.account.userInfoRequestFailed" : "No se pudo cargar la información de usuario",
136 "settings.app.buttonClearAllCache" : "Limpiar caché", 144 "settings.app.buttonClearAllCache" : "Limpiar caché",
137 "settings.app.buttonInstallUpdate" : "Reiniciar e instalar actualizaciones", 145 "settings.app.buttonInstallUpdate" : "Reiniciar e instalar actualizaciones",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "General", 164 "settings.app.headlineGeneral" : "General",
157 "settings.app.headlineLanguage" : "Idioma", 165 "settings.app.headlineLanguage" : "Idioma",
158 "settings.app.headlineUpdates" : "Actualizaciones", 166 "settings.app.headlineUpdates" : "Actualizaciones",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Los cambios requieren reiniciar", 168 "settings.app.restartRequired" : "Los cambios requieren reiniciar",
160 "settings.app.subheadlineCache" : "Caché", 169 "settings.app.subheadlineCache" : "Caché",
161 "settings.app.translationHelp" : "Ayúdanos a traducir Franz a tu idioma.", 170 "settings.app.translationHelp" : "Ayúdanos a traducir Franz a tu idioma.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Invita a tus amigos", 177 "settings.navigation.inviteFriends" : "Invita a tus amigos",
169 "settings.navigation.logout" : "Cerrar sesión", 178 "settings.navigation.logout" : "Cerrar sesión",
170 "settings.navigation.settings" : "Configuración", 179 "settings.navigation.settings" : "Configuración",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Tus servicios", 181 "settings.navigation.yourServices" : "Tus servicios",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Todos los servicios", 183 "settings.recipes.all" : "Todos los servicios",
173 "settings.recipes.dev" : "Desarrollo", 184 "settings.recipes.dev" : "Desarrollo",
174 "settings.recipes.headline" : "Servicios disponibles", 185 "settings.recipes.headline" : "Servicios disponibles",
@@ -221,11 +232,17 @@
221 "settings.services.discoverServices" : "Descubrir servicios", 232 "settings.services.discoverServices" : "Descubrir servicios",
222 "settings.services.headline" : "Tus servicios", 233 "settings.services.headline" : "Tus servicios",
223 "settings.services.noServicesAdded" : "No has añadido ningún servicio aún.", 234 "settings.services.noServicesAdded" : "No has añadido ningún servicio aún.",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "No pudo cargar tus servicios",
225 "settings.services.tooltip.isDisabled" : "El servicio está desactivado", 236 "settings.services.tooltip.isDisabled" : "El servicio está desactivado",
226 "settings.services.tooltip.isMuted" : "Todos los sonidos están silenciados", 237 "settings.services.tooltip.isMuted" : "Todos los sonidos están silenciados",
227 "settings.services.tooltip.notificationsDisabled" : "Las notificaciones están desactivadas", 238 "settings.services.tooltip.notificationsDisabled" : "Las notificaciones están desactivadas",
228 "settings.services.updatedInfo" : "Tus cambios han sido guardados", 239 "settings.services.updatedInfo" : "Tus cambios han sido guardados",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Equipo",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Empresa", 246 "settings.user.form.accountType.company" : "Empresa",
230 "settings.user.form.accountType.individual" : "Individual", 247 "settings.user.form.accountType.individual" : "Individual",
231 "settings.user.form.accountType.label" : "Tipo de cuenta", 248 "settings.user.form.accountType.label" : "Tipo de cuenta",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Nombre", 252 "settings.user.form.firstname" : "Nombre",
236 "settings.user.form.lastname" : "Apellido", 253 "settings.user.form.lastname" : "Apellido",
237 "settings.user.form.newPassword" : "Nueva contraseña", 254 "settings.user.form.newPassword" : "Nueva contraseña",
255 "settings.workspace.add.form.name" : "Nombre",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Nombre",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Try again",
266 "settings.workspaces.updatedInfo" : "Tus cambios han sido guardados",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Añadir nuevo servicio", 270 "sidebar.addNewService" : "Añadir nuevo servicio",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Desactivar notificaciones y sonido", 272 "sidebar.muteApp" : "Desactivar notificaciones y sonido",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Configuración", 274 "sidebar.settings" : "Configuración",
241 "sidebar.unmuteApp" : "Activar notificaciones y sonido", 275 "sidebar.unmuteApp" : "Activar notificaciones y sonido",
242 "signup.company.label" : "Compañía", 276 "signup.company.label" : "Compañía",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Agregar servicios de almacenamiento como Mattermost", 292 "subscription.features.onpremise.mattermost" : "Agregar servicios de almacenamiento como Mattermost",
259 "subscription.features.proxy" : "Soporte Proxy para servicios", 293 "subscription.features.proxy" : "Soporte Proxy para servicios",
260 "subscription.features.spellchecker" : "Soporte para corrector de ortografía", 294 "subscription.features.spellchecker" : "Soporte para corrector de ortografía",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "La Cuenta pagada de Colaborador Premium de Franz incluye", 296 "subscription.includedFeatures" : "La Cuenta pagada de Colaborador Premium de Franz incluye",
262 "subscription.paymentSessionError" : "No se pudo inicializar el formulario de pago", 297 "subscription.paymentSessionError" : "No se pudo inicializar el formulario de pago",
263 "subscription.submit.label" : "Quiero apoyar el desarrollo de Franz", 298 "subscription.submit.label" : "Quiero apoyar el desarrollo de Franz",
@@ -277,9 +312,20 @@
277 "tabs.item.reload" : "Recargar", 312 "tabs.item.reload" : "Recargar",
278 "validation.email" : "{field} no es válido", 313 "validation.email" : "{field} no es válido",
279 "validation.minLength" : "{field} debería tener al menos {length} caracteres", 314 "validation.minLength" : "{field} debería tener al menos {length} caracteres",
280 "validation.oneRequired" : "At least one is required", 315 "validation.oneRequired" : "Al menos uno es requerido",
281 "validation.required" : "{field} es obligatorio", 316 "validation.required" : "{field} es obligatorio",
282 "validation.url" : "{field} no es una URL válida", 317 "validation.url" : "{field} no es una URL válida",
283 "welcome.loginButton" : "Accede a tu cuenta", 318 "welcome.loginButton" : "Accede a tu cuenta",
284 "welcome.signupButton" : "Crear una cuenta gratuita" 319 "welcome.signupButton" : "Crear una cuenta gratuita",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Todos los servicios",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 6f9d81713..2bd5326c0 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Recharger", 2 "app.errorHandler.action" : "Recharger",
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.delayApp.action" : "Obtenez une licence de Supporter Franz", 5 "feature.delayApp.action" : "Obtenez une licence de Supporter Franz",
5 "feature.delayApp.headline" : "Veuillez acheter une licence de Supporter Franz pour sauter le temps d'attente", 6 "feature.delayApp.headline" : "Veuillez acheter une licence de Supporter Franz pour sauter le temps d'attente",
6 "feature.delayApp.text" : "Franz reprendra dans {seconds} secondes.", 7 "feature.delayApp.text" : "Franz reprendra dans {seconds} secondes.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Partager sur Twitter", 10 "feature.shareFranz.action.twitter" : "Partager sur Twitter",
10 "feature.shareFranz.headline" : "Franz est meilleur quand on est tous ensemble !", 11 "feature.shareFranz.headline" : "Franz est meilleur quand on est tous ensemble !",
11 "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",
12 "feature.shareFranz.shareText.twitter" : "J'ai ajouté {count} services à Franz ! Télécharger l'appli gratuite pour WhatsApp, Messenger, Skype et cie sur www.meetfranz.com \/cc @NeetFranz", 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.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 combien Franz est super et aidez nous à faire passer le mot.",
14 "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",
15 "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.", 16 "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Se connecter", 44 "login.submit.label" : "Se connecter",
44 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", 45 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.",
45 "menu.app.about" : "À propos de Franz", 46 "menu.app.about" : "À propos de Franz",
47 "menu.app.announcement" : "Quoi de neuf? ",
46 "menu.app.hide" : "Masquer", 48 "menu.app.hide" : "Masquer",
47 "menu.app.hideOthers" : "Masquer les autres", 49 "menu.app.hideOthers" : "Masquer les autres",
48 "menu.app.quit" : "Quitter", 50 "menu.app.quit" : "Quitter",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Support", 72 "menu.help.support" : "Support",
71 "menu.help.tos" : "Conditions d'utilisation", 73 "menu.help.tos" : "Conditions d'utilisation",
72 "menu.services" : "Services", 74 "menu.services" : "Services",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "Activer le service précédent",
74 "menu.services.addNewService" : "Ajouter un nouveau service...", 76 "menu.services.addNewService" : "Ajouter un nouveau service...",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "Activer le service suivant",
76 "menu.view" : "Aperçu", 78 "menu.view" : "Aperçu",
77 "menu.view.enterFullScreen" : "Entrer en mode plein écran", 79 "menu.view.enterFullScreen" : "Entrer en mode plein écran",
78 "menu.view.exitFullScreen" : "Sortir du mode plein écran", 80 "menu.view.exitFullScreen" : "Sortir du mode plein écran",
@@ -87,13 +89,18 @@
87 "menu.window" : "Fenêtre", 89 "menu.window" : "Fenêtre",
88 "menu.window.close" : "Fermer", 90 "menu.window.close" : "Fermer",
89 "menu.window.minimize" : "Réduire", 91 "menu.window.minimize" : "Réduire",
90 "password.email.label" : "Adresse e-mail", 92 "menu.workspaces" : "Espace de travail",
93 "menu.workspaces.addNewWorkspace" : "Ajouter un nouvel espace de travail",
94 "menu.workspaces.closeWorkspaceDrawer" : "Ouvrir l'espace de travail",
95 "menu.workspaces.defaultWorkspace" : "Tous les services",
96 "menu.workspaces.openWorkspaceDrawer" : "Fermer l'espace de travail",
97 "password.email.label" : "Adresse email",
91 "password.headline" : "Réinitialiser le mot de passe", 98 "password.headline" : "Réinitialiser le mot de passe",
92 "password.link.login" : "Connectez-vous à votre compte", 99 "password.link.login" : "Connectez-vous à votre compte",
93 "password.link.signup" : "Créer un compte gratuit.", 100 "password.link.signup" : "Créer un compte gratuit.",
94 "password.noUser" : "Aucun utilisateur n'a été trouvé avec cette adresse e-mail", 101 "password.noUser" : "Aucun utilisateur n'a été trouvé avec cette adresse email",
95 "password.submit.label" : "Soumettre", 102 "password.submit.label" : "Soumettre",
96 "password.successInfo" : "Merci de consulter vos e-mails", 103 "password.successInfo" : "Merci de consulter vos emails",
97 "premiumFeature.button.upgradeAccount" : "Mettre à niveau mon compte", 104 "premiumFeature.button.upgradeAccount" : "Mettre à niveau mon compte",
98 "pricing.headline" : "Soutenez Franz", 105 "pricing.headline" : "Soutenez Franz",
99 "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.", 106 "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh non !", 117 "service.errorHandler.headline" : "Oh non !",
111 "service.errorHandler.message" : "Erreur", 118 "service.errorHandler.message" : "Erreur",
112 "service.errorHandler.text" : "Le chargement de {name} a échoué.", 119 "service.errorHandler.text" : "Le chargement de {name} a échoué.",
120 "service.webviewLoader.loading" : "Chargement (c'est l'heure du café...)",
113 "services.getStarted" : "Commencer", 121 "services.getStarted" : "Commencer",
114 "services.welcome" : "Bienvenue dans Franz", 122 "services.welcome" : "Bienvenue dans Franz",
115 "settings.account.account.editButton" : "Modifier le compte", 123 "settings.account.account.editButton" : "Modifier le compte",
@@ -121,7 +129,7 @@
121 "settings.account.deleteInfo" : "Si vous n'avez plus besoin de votre compte Franz, vous pouvez le supprimer avec toutes ses données associées.", 129 "settings.account.deleteInfo" : "Si vous n'avez plus besoin de votre compte Franz, vous pouvez le supprimer avec toutes ses données associées.",
122 "settings.account.headline" : "Compte", 130 "settings.account.headline" : "Compte",
123 "settings.account.headlineAccount" : "Informations sur le compte", 131 "settings.account.headlineAccount" : "Informations sur le compte",
124 "settings.account.headlineDangerZone" : "Zone Dangereuse !", 132 "settings.account.headlineDangerZone" : "Zone dangereuse !",
125 "settings.account.headlineInvoices" : "Factures", 133 "settings.account.headlineInvoices" : "Factures",
126 "settings.account.headlinePassword" : "Changer le mot de passe", 134 "settings.account.headlinePassword" : "Changer le mot de passe",
127 "settings.account.headlineProfile" : "Mettre à jour le profil", 135 "settings.account.headlineProfile" : "Mettre à jour le profil",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Général", 164 "settings.app.headlineGeneral" : "Général",
157 "settings.app.headlineLanguage" : "Langue", 165 "settings.app.headlineLanguage" : "Langue",
158 "settings.app.headlineUpdates" : "Mises à jour", 166 "settings.app.headlineUpdates" : "Mises à jour",
167 "settings.app.languageDisclaimer" : "Les traductions officielles sont l'anglais et l'allemand. Toutes les autres langues sont des traductions faites par la communauté.",
159 "settings.app.restartRequired" : "Les modifications nécessitent un redémarrage", 168 "settings.app.restartRequired" : "Les modifications nécessitent un redémarrage",
160 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Aidez-nous à traduire Franz dans votre langue.", 170 "settings.app.translationHelp" : "Aidez-nous à traduire Franz dans votre langue.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Inviter des amis", 177 "settings.navigation.inviteFriends" : "Inviter des amis",
169 "settings.navigation.logout" : "Se déconnecter", 178 "settings.navigation.logout" : "Se déconnecter",
170 "settings.navigation.settings" : "Paramètres", 179 "settings.navigation.settings" : "Paramètres",
180 "settings.navigation.team" : "Gérer l'équipe",
171 "settings.navigation.yourServices" : "Vos services", 181 "settings.navigation.yourServices" : "Vos services",
182 "settings.navigation.yourWorkspaces" : "Tes espaces de travail",
172 "settings.recipes.all" : "Tous les services", 183 "settings.recipes.all" : "Tous les services",
173 "settings.recipes.dev" : "Développement", 184 "settings.recipes.dev" : "Développement",
174 "settings.recipes.headline" : "Services disponibles", 185 "settings.recipes.headline" : "Services disponibles",
@@ -203,7 +214,7 @@
203 "settings.service.form.indirectMessages" : "Afficher le badge des messages pour tous les nouveaux messages", 214 "settings.service.form.indirectMessages" : "Afficher le badge des messages pour tous les nouveaux messages",
204 "settings.service.form.isMutedInfo" : "Lorsque désactivé, tous les sons de notifications ainsi que l'audio sont coupés", 215 "settings.service.form.isMutedInfo" : "Lorsque désactivé, tous les sons de notifications ainsi que l'audio sont coupés",
205 "settings.service.form.name" : "Nom", 216 "settings.service.form.name" : "Nom",
206 "settings.service.form.proxy.headline" : "Paramètres Proxy HTTP\/HTTPS", 217 "settings.service.form.proxy.headline" : "Paramètres proxy HTTP\/HTTPS",
207 "settings.service.form.proxy.host" : "Hôte\/IP du proxy", 218 "settings.service.form.proxy.host" : "Hôte\/IP du proxy",
208 "settings.service.form.proxy.info" : "Les paramètres de proxy ne seront pas synchronisés avec les serveurs de Franz.", 219 "settings.service.form.proxy.info" : "Les paramètres de proxy ne seront pas synchronisés avec les serveurs de Franz.",
209 "settings.service.form.proxy.isEnabled" : "Utiliser un proxy", 220 "settings.service.form.proxy.isEnabled" : "Utiliser un proxy",
@@ -213,7 +224,7 @@
213 "settings.service.form.proxy.user" : "Utilisateur (facultatif)", 224 "settings.service.form.proxy.user" : "Utilisateur (facultatif)",
214 "settings.service.form.saveButton" : "Enregistrer le service", 225 "settings.service.form.saveButton" : "Enregistrer le service",
215 "settings.service.form.tabHosted" : "Hébergé", 226 "settings.service.form.tabHosted" : "Hébergé",
216 "settings.service.form.tabOnPremise" : "Auto-hébergé â­ï¸", 227 "settings.service.form.tabOnPremise" : "hébergé par soi-même â­ï¸",
217 "settings.service.form.team" : "Équipe", 228 "settings.service.form.team" : "Équipe",
218 "settings.service.form.useHostedService" : "Utilisez le service hébergé {name}.", 229 "settings.service.form.useHostedService" : "Utilisez le service hébergé {name}.",
219 "settings.service.form.yourServices" : "Vos services", 230 "settings.service.form.yourServices" : "Vos services",
@@ -221,27 +232,50 @@
221 "settings.services.discoverServices" : "Découvrir les services", 232 "settings.services.discoverServices" : "Découvrir les services",
222 "settings.services.headline" : "Vos services", 233 "settings.services.headline" : "Vos services",
223 "settings.services.noServicesAdded" : "Vous n'avez pas encore ajouté de services.", 234 "settings.services.noServicesAdded" : "Vous n'avez pas encore ajouté de services.",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "Impossible de charger vos services",
225 "settings.services.tooltip.isDisabled" : "Ce service est désactivé", 236 "settings.services.tooltip.isDisabled" : "Ce service est désactivé",
226 "settings.services.tooltip.isMuted" : "Tous les sons sont coupés", 237 "settings.services.tooltip.isMuted" : "Tous les sons sont coupés",
227 "settings.services.tooltip.notificationsDisabled" : "Notifications désactivées.", 238 "settings.services.tooltip.notificationsDisabled" : "Notifications désactivées.",
228 "settings.services.updatedInfo" : "Vos modifications ont été enregistrées", 239 "settings.services.updatedInfo" : "Vos modifications ont été enregistrées",
240 "settings.team.contentHeadline" : "Franz pour les équipes",
241 "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.headline" : "Équipe de travail",
243 "settings.team.intro" : "Tu peux désormais gérer les abonnements Premium pour autant de collègues, amis ou membres de famille que tu souhaites, à partir d'un seul et même compte.",
244 "settings.team.manageAction" : "Gère ton équipe sur meetfranz.com",
245 "settings.team.upgradeAction" : "Mise à niveau du compte",
229 "settings.user.form.accountType.company" : "Entreprise", 246 "settings.user.form.accountType.company" : "Entreprise",
230 "settings.user.form.accountType.individual" : "Individuel", 247 "settings.user.form.accountType.individual" : "Individuel",
231 "settings.user.form.accountType.label" : "Type de compte", 248 "settings.user.form.accountType.label" : "Type de compte",
232 "settings.user.form.accountType.non-profit" : "Non-lucratif", 249 "settings.user.form.accountType.non-profit" : "Non-lucratif",
233 "settings.user.form.currentPassword" : "Mot de passe actuel", 250 "settings.user.form.currentPassword" : "Mot de passe actuel",
234 "settings.user.form.email" : "E-mail", 251 "settings.user.form.email" : "Email",
235 "settings.user.form.firstname" : "Prénom", 252 "settings.user.form.firstname" : "Prénom",
236 "settings.user.form.lastname" : "Nom", 253 "settings.user.form.lastname" : "Nom",
237 "settings.user.form.newPassword" : "Nouveau mot de passe", 254 "settings.user.form.newPassword" : "Nouveau mot de passe",
255 "settings.workspace.add.form.name" : "Nom",
256 "settings.workspace.add.form.submitButton" : "Créer un espace de travail",
257 "settings.workspace.form.buttonDelete" : "Effacer l'espace de travail",
258 "settings.workspace.form.buttonSave" : "Sauvegarder l'espace de travail",
259 "settings.workspace.form.name" : "Nom",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Tes espaces de travail",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Vos espaces de travails",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Réessayer",
266 "settings.workspaces.updatedInfo" : "Vos modifications ont été enregistrées",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Ajouter un nouveau service", 270 "sidebar.addNewService" : "Ajouter un nouveau service",
271 "sidebar.closeWorkspaceDrawer" : "Ouvrir l'espace de travail",
239 "sidebar.muteApp" : "Désactiver les notifications et les sons", 272 "sidebar.muteApp" : "Désactiver les notifications et les sons",
273 "sidebar.openWorkspaceDrawer" : "Fermer l'espace de travail",
240 "sidebar.settings" : "Paramètres", 274 "sidebar.settings" : "Paramètres",
241 "sidebar.unmuteApp" : "Activer les notifications et les sons", 275 "sidebar.unmuteApp" : "Activer les notifications et les sons",
242 "signup.company.label" : "Entreprise", 276 "signup.company.label" : "Entreprise",
243 "signup.email.label" : "Adresse e-mail", 277 "signup.email.label" : "Adresse email",
244 "signup.emailDuplicate" : "Cette adresse e-mail est déjà utilisée", 278 "signup.emailDuplicate" : "Cette adresse email est déjà utilisée",
245 "signup.firstname.label" : "Prénom", 279 "signup.firstname.label" : "Prénom",
246 "signup.headline" : "S'inscrire", 280 "signup.headline" : "S'inscrire",
247 "signup.lastname.label" : "Nom", 281 "signup.lastname.label" : "Nom",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Ajouter des services auto-hébergés comme Mattermost", 292 "subscription.features.onpremise.mattermost" : "Ajouter des services auto-hébergés comme Mattermost",
259 "subscription.features.proxy" : "Support proxy pour les services", 293 "subscription.features.proxy" : "Support proxy pour les services",
260 "subscription.features.spellchecker" : "Prise en charge du correcteur orthographique", 294 "subscription.features.spellchecker" : "Prise en charge du correcteur orthographique",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Le compte payant Supporter Premium Franz inclut", 296 "subscription.includedFeatures" : "Le compte payant Supporter Premium Franz inclut",
262 "subscription.paymentSessionError" : "Initialisation du paiement impossible", 297 "subscription.paymentSessionError" : "Initialisation du paiement impossible",
263 "subscription.submit.label" : "Je souhaite aider au développement de Franz", 298 "subscription.submit.label" : "Je souhaite aider au développement de Franz",
@@ -277,9 +312,20 @@
277 "tabs.item.reload" : "Recharger", 312 "tabs.item.reload" : "Recharger",
278 "validation.email" : "{field} n'est pas valide", 313 "validation.email" : "{field} n'est pas valide",
279 "validation.minLength" : "{field} doit contenir au moins {length} caractère(s)", 314 "validation.minLength" : "{field} doit contenir au moins {length} caractère(s)",
280 "validation.oneRequired" : "At least one is required", 315 "validation.oneRequired" : "Au moins un de ces champs est requis",
281 "validation.required" : "{field} est requis", 316 "validation.required" : "{field} est requis",
282 "validation.url" : "{field} n'est pas une URL valide", 317 "validation.url" : "{field} n'est pas une URL valide",
283 "welcome.loginButton" : "Se connecter sur son compte", 318 "welcome.loginButton" : "Se connecter sur son compte",
284 "welcome.signupButton" : "Créer un compte gratuit" 319 "welcome.signupButton" : "Créer un compte gratuit",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Tous les services",
322 "workspaceDrawer.headline" : "Espace de travail",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json
index eb7c04491..3f1e827fb 100644
--- a/src/i18n/locales/ga.json
+++ b/src/i18n/locales/ga.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Athlódáil", 2 "app.errorHandler.action" : "Athlódáil",
3 "app.errorHandler.headline" : "Something went wrong", 3 "app.errorHandler.headline" : "Something went wrong",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Get a Franz Supporter License", 5 "feature.delayApp.action" : "Get a Franz Supporter License",
5 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", 7 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Ní féidir nascadh le seirbhísí Franz ar líne", 15 "global.api.unhealthy" : "Ní féidir nascadh le seirbhísí Franz ar líne",
15 "global.notConnectedToTheInternet" : "Níl tú nasctha leis an Idirlíon.", 16 "global.notConnectedToTheInternet" : "Níl tú nasctha leis an Idirlíon.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Logáil isteach", 44 "login.submit.label" : "Logáil isteach",
44 "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arís le do thoil.", 45 "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arís le do thoil.",
45 "menu.app.about" : "Faoi Franz", 46 "menu.app.about" : "Faoi Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Cuir Franz i bhfolach", 48 "menu.app.hide" : "Cuir Franz i bhfolach",
47 "menu.app.hideOthers" : "Folaigh feidhmchláir eile", 49 "menu.app.hideOthers" : "Folaigh feidhmchláir eile",
48 "menu.app.quit" : "Scoir", 50 "menu.app.quit" : "Scoir",
@@ -87,6 +89,11 @@
87 "menu.window" : "Fuinneog", 89 "menu.window" : "Fuinneog",
88 "menu.window.close" : "Dún", 90 "menu.window.close" : "Dún",
89 "menu.window.minimize" : "Ãoslaghdaigh", 91 "menu.window.minimize" : "Ãoslaghdaigh",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Gach seirbhís",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Seoladh ríomhphoist", 97 "password.email.label" : "Seoladh ríomhphoist",
91 "password.headline" : "Athshocraigh pasfhocal", 98 "password.headline" : "Athshocraigh pasfhocal",
92 "password.link.login" : "Logáil isteach i do chuntas", 99 "password.link.login" : "Logáil isteach i do chuntas",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oró, ní hea!", 117 "service.errorHandler.headline" : "Oró, ní hea!",
111 "service.errorHandler.message" : "Earráid", 118 "service.errorHandler.message" : "Earráid",
112 "service.errorHandler.text" : "{name} has failed to load.", 119 "service.errorHandler.text" : "{name} has failed to load.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Cuir tús", 121 "services.getStarted" : "Cuir tús",
114 "services.welcome" : "Fáilte go Franz", 122 "services.welcome" : "Fáilte go Franz",
115 "settings.account.account.editButton" : "Cuir cuntas in eagar", 123 "settings.account.account.editButton" : "Cuir cuntas in eagar",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Ginearálta", 164 "settings.app.headlineGeneral" : "Ginearálta",
157 "settings.app.headlineLanguage" : "Teanga", 165 "settings.app.headlineLanguage" : "Teanga",
158 "settings.app.headlineUpdates" : "Nuashonruithe", 166 "settings.app.headlineUpdates" : "Nuashonruithe",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Ní gá atosú chun athruithe a chur i bhfeidhm.", 168 "settings.app.restartRequired" : "Ní gá atosú chun athruithe a chur i bhfeidhm.",
160 "settings.app.subheadlineCache" : "Taisce", 169 "settings.app.subheadlineCache" : "Taisce",
161 "settings.app.translationHelp" : "Cabhraigh linn Franz a aistriú i do theanga.", 170 "settings.app.translationHelp" : "Cabhraigh linn Franz a aistriú i do theanga.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Tabhair cuireadh do chairde", 177 "settings.navigation.inviteFriends" : "Tabhair cuireadh do chairde",
169 "settings.navigation.logout" : "Logáil amach", 178 "settings.navigation.logout" : "Logáil amach",
170 "settings.navigation.settings" : "Socruithe", 179 "settings.navigation.settings" : "Socruithe",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Do sheirbhísí", 181 "settings.navigation.yourServices" : "Do sheirbhísí",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Gach seirbhís", 183 "settings.recipes.all" : "Gach seirbhís",
173 "settings.recipes.dev" : "Forbairt", 184 "settings.recipes.dev" : "Forbairt",
174 "settings.recipes.headline" : "Seirbhísí le fáil", 185 "settings.recipes.headline" : "Seirbhísí le fáil",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Tachtar gach fuaim", 237 "settings.services.tooltip.isMuted" : "Tachtar gach fuaim",
227 "settings.services.tooltip.notificationsDisabled" : "Fógraí dhíchumasaithe", 238 "settings.services.tooltip.notificationsDisabled" : "Fógraí dhíchumasaithe",
228 "settings.services.updatedInfo" : "Sábháiltear do chuid athruithe", 239 "settings.services.updatedInfo" : "Sábháiltear do chuid athruithe",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Foireann",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Comhlacht", 246 "settings.user.form.accountType.company" : "Comhlacht",
230 "settings.user.form.accountType.individual" : "Ar leith", 247 "settings.user.form.accountType.individual" : "Ar leith",
231 "settings.user.form.accountType.label" : "Cineál chuntais", 248 "settings.user.form.accountType.label" : "Cineál chuntais",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Céadainm", 252 "settings.user.form.firstname" : "Céadainm",
236 "settings.user.form.lastname" : "Sloinne", 253 "settings.user.form.lastname" : "Sloinne",
237 "settings.user.form.newPassword" : "Pasfhocal nua", 254 "settings.user.form.newPassword" : "Pasfhocal nua",
255 "settings.workspace.add.form.name" : "Ainm",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Ainm",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Atriail",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Cuir seirbhís nua leis", 270 "sidebar.addNewService" : "Cuir seirbhís nua leis",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Díchumasaigh fógraí ⊠fuaim", 272 "sidebar.muteApp" : "Díchumasaigh fógraí ⊠fuaim",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Socruithe", 274 "sidebar.settings" : "Socruithe",
241 "sidebar.unmuteApp" : "Cumasaigh fógraí ⊠fuaim", 275 "sidebar.unmuteApp" : "Cumasaigh fógraí ⊠fuaim",
242 "signup.company.label" : "Comhlacht", 276 "signup.company.label" : "Comhlacht",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Cuireann Cuntas Phŕeimhthacadóra Franz san áireamh", 296 "subscription.includedFeatures" : "Cuireann Cuntas Phŕeimhthacadóra Franz san áireamh",
262 "subscription.paymentSessionError" : "Ní féidir an bhfoirm íocaíochta a lódáil", 297 "subscription.paymentSessionError" : "Ní féidir an bhfoirm íocaíochta a lódáil",
263 "subscription.submit.label" : "Ba mhaith liom tacaíocht a thabhairt d'fhorbairt Franz", 298 "subscription.submit.label" : "Ba mhaith liom tacaíocht a thabhairt d'fhorbairt Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "Tá {field} de dhíth", 316 "validation.required" : "Tá {field} de dhíth",
282 "validation.url" : "Ní AAA bhailí é {field}", 317 "validation.url" : "Ní AAA bhailí é {field}",
283 "welcome.loginButton" : "Logáil isteach i do chuntas", 318 "welcome.loginButton" : "Logáil isteach i do chuntas",
284 "welcome.signupButton" : "Cruthaigh cuntas nua" 319 "welcome.signupButton" : "Cruthaigh cuntas nua",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Gach seirbhís",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json
index 95920c4ce..468238166 100644
--- a/src/i18n/locales/hr.json
+++ b/src/i18n/locales/hr.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Ponovno uÄitavanje", 2 "app.errorHandler.action" : "Ponovno uÄitavanje",
3 "app.errorHandler.headline" : "Something went wrong", 3 "app.errorHandler.headline" : "Something went wrong",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Get a Franz Supporter License", 5 "feature.delayApp.action" : "Get a Franz Supporter License",
5 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", 7 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Nije se moguće povezati na Francove on-line servise. ", 15 "global.api.unhealthy" : "Nije se moguće povezati na Francove on-line servise. ",
15 "global.notConnectedToTheInternet" : "Sada ste povezani s internetom. ", 16 "global.notConnectedToTheInternet" : "Sada ste povezani s internetom. ",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Prijavite se", 44 "login.submit.label" : "Prijavite se",
44 "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", 45 "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.",
45 "menu.app.about" : "O aplikaciji", 46 "menu.app.about" : "O aplikaciji",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Hide", 48 "menu.app.hide" : "Hide",
47 "menu.app.hideOthers" : "Hide Others", 49 "menu.app.hideOthers" : "Hide Others",
48 "menu.app.quit" : "Quit", 50 "menu.app.quit" : "Quit",
@@ -87,6 +89,11 @@
87 "menu.window" : "Window", 89 "menu.window" : "Window",
88 "menu.window.close" : "Close", 90 "menu.window.close" : "Close",
89 "menu.window.minimize" : "Minimize", 91 "menu.window.minimize" : "Minimize",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Sve usluge",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Vaša e-adresa", 97 "password.email.label" : "Vaša e-adresa",
91 "password.headline" : "Stvorite novu zaporku", 98 "password.headline" : "Stvorite novu zaporku",
92 "password.link.login" : "Prijavite se na VaÅ¡ raÄun", 99 "password.link.login" : "Prijavite se na VaÅ¡ raÄun",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "O, ne! ", 117 "service.errorHandler.headline" : "O, ne! ",
111 "service.errorHandler.message" : "Greška", 118 "service.errorHandler.message" : "Greška",
112 "service.errorHandler.text" : "{name} has failed to load.", 119 "service.errorHandler.text" : "{name} has failed to load.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "ZapoÄnimo!", 121 "services.getStarted" : "ZapoÄnimo!",
114 "services.welcome" : "Dobrodošli u Franz", 122 "services.welcome" : "Dobrodošli u Franz",
115 "settings.account.account.editButton" : "Uredi raÄun", 123 "settings.account.account.editButton" : "Uredi raÄun",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Općenito", 164 "settings.app.headlineGeneral" : "Općenito",
157 "settings.app.headlineLanguage" : "Jezik", 165 "settings.app.headlineLanguage" : "Jezik",
158 "settings.app.headlineUpdates" : "Nadogradnje", 166 "settings.app.headlineUpdates" : "Nadogradnje",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Promjene postavki zahtijevaju ponovni zagon", 168 "settings.app.restartRequired" : "Promjene postavki zahtijevaju ponovni zagon",
160 "settings.app.subheadlineCache" : "Predmemorija", 169 "settings.app.subheadlineCache" : "Predmemorija",
161 "settings.app.translationHelp" : "Pomozite nam prevesti aplikaciju na Vaš jezik. ", 170 "settings.app.translationHelp" : "Pomozite nam prevesti aplikaciju na Vaš jezik. ",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Pozovi prijatelje", 177 "settings.navigation.inviteFriends" : "Pozovi prijatelje",
169 "settings.navigation.logout" : "Odjava", 178 "settings.navigation.logout" : "Odjava",
170 "settings.navigation.settings" : "Postavke", 179 "settings.navigation.settings" : "Postavke",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Vaše usluge", 181 "settings.navigation.yourServices" : "Vaše usluge",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Sve usluge", 183 "settings.recipes.all" : "Sve usluge",
173 "settings.recipes.dev" : "Razvoj", 184 "settings.recipes.dev" : "Razvoj",
174 "settings.recipes.headline" : "Dostupne usluge", 185 "settings.recipes.headline" : "Dostupne usluge",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Svi zvukovi su onemogućeni. ", 237 "settings.services.tooltip.isMuted" : "Svi zvukovi su onemogućeni. ",
227 "settings.services.tooltip.notificationsDisabled" : "Obavijesti su onemogućene.", 238 "settings.services.tooltip.notificationsDisabled" : "Obavijesti su onemogućene.",
228 "settings.services.updatedInfo" : "Vaše promjene su pohranjene. ", 239 "settings.services.updatedInfo" : "Vaše promjene su pohranjene. ",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Tim",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Tvrtka", 246 "settings.user.form.accountType.company" : "Tvrtka",
230 "settings.user.form.accountType.individual" : "Pojedinac", 247 "settings.user.form.accountType.individual" : "Pojedinac",
231 "settings.user.form.accountType.label" : "Tip raÄuna", 248 "settings.user.form.accountType.label" : "Tip raÄuna",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Ime", 252 "settings.user.form.firstname" : "Ime",
236 "settings.user.form.lastname" : "Prezime", 253 "settings.user.form.lastname" : "Prezime",
237 "settings.user.form.newPassword" : "Nova lozinka", 254 "settings.user.form.newPassword" : "Nova lozinka",
255 "settings.workspace.add.form.name" : "Ime",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Ime",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Pokušajte ponovno",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Dodajte novu uslugu", 270 "sidebar.addNewService" : "Dodajte novu uslugu",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Ugasi obavijesti i zvuk", 272 "sidebar.muteApp" : "Ugasi obavijesti i zvuk",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Postavke", 274 "sidebar.settings" : "Postavke",
241 "sidebar.unmuteApp" : "Omogući obavijesti i zvuk", 275 "sidebar.unmuteApp" : "Omogući obavijesti i zvuk",
242 "signup.company.label" : "Tvrtka", 276 "signup.company.label" : "Tvrtka",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće: ", 296 "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće: ",
262 "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", 297 "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu",
263 "subscription.submit.label" : "Želim da podržim razvoj Franca. ", 298 "subscription.submit.label" : "Želim da podržim razvoj Franca. ",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} is required", 316 "validation.required" : "{field} is required",
282 "validation.url" : "{field} is not a valid URL", 317 "validation.url" : "{field} is not a valid URL",
283 "welcome.loginButton" : "Prijavite se na raÄun", 318 "welcome.loginButton" : "Prijavite se na raÄun",
284 "welcome.signupButton" : "Stvorite novi korisniÄki raÄun" 319 "welcome.signupButton" : "Stvorite novi korisniÄki raÄun",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Sve usluge",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
index bce9a368e..b28dcb17a 100644
--- a/src/i18n/locales/hu.json
+++ b/src/i18n/locales/hu.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Újratöltés", 2 "app.errorHandler.action" : "Újratöltés",
3 "app.errorHandler.headline" : "Valami nem jött össze", 3 "app.errorHandler.headline" : "Valami nem jött össze",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Szerezz egy Franz Támogatói Liszencet", 5 "feature.delayApp.action" : "Szerezz egy Franz Támogatói Liszencet",
5 "feature.delayApp.headline" : "Kérjük vásárolj egy Franc Támogatói Liszencet a várakozás átugrásához", 6 "feature.delayApp.headline" : "Kérjük vásárolj egy Franc Támogatói Liszencet a várakozás átugrásához",
6 "feature.delayApp.text" : "A Franz továbblép {seconds} másodperc múlva.", 7 "feature.delayApp.text" : "A Franz továbblép {seconds} másodperc múlva.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Nem lehet csatlakozni a Franz online szolgáltatáshoz", 15 "global.api.unhealthy" : "Nem lehet csatlakozni a Franz online szolgáltatáshoz",
15 "global.notConnectedToTheInternet" : "Nincs hálózati kapcsolat.", 16 "global.notConnectedToTheInternet" : "Nincs hálózati kapcsolat.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Bejelentkezés", 44 "login.submit.label" : "Bejelentkezés",
44 "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.",
45 "menu.app.about" : "Névjegy", 46 "menu.app.about" : "Névjegy",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Elrejt", 48 "menu.app.hide" : "Elrejt",
47 "menu.app.hideOthers" : "Többi elrejtése", 49 "menu.app.hideOthers" : "Többi elrejtése",
48 "menu.app.quit" : "Kilépés", 50 "menu.app.quit" : "Kilépés",
@@ -87,6 +89,11 @@
87 "menu.window" : "Ablak", 89 "menu.window" : "Ablak",
88 "menu.window.close" : "Bezárás", 90 "menu.window.close" : "Bezárás",
89 "menu.window.minimize" : "Tálcára", 91 "menu.window.minimize" : "Tálcára",
92 "menu.workspaces" : "Munkaterületek",
93 "menu.workspaces.addNewWorkspace" : "Új munkaterület...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Munkaterület panel bezárása",
95 "menu.workspaces.defaultWorkspace" : "Összes szolgáltatás",
96 "menu.workspaces.openWorkspaceDrawer" : "Munkaterület panel kinyitása",
90 "password.email.label" : "Email cím", 97 "password.email.label" : "Email cím",
91 "password.headline" : "Jelszó visszaállítása", 98 "password.headline" : "Jelszó visszaállítása",
92 "password.link.login" : "Jelentkezz be a fiókodba", 99 "password.link.login" : "Jelentkezz be a fiókodba",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Jajj ne!", 117 "service.errorHandler.headline" : "Jajj ne!",
111 "service.errorHandler.message" : "Hiba", 118 "service.errorHandler.message" : "Hiba",
112 "service.errorHandler.text" : "{name} nem tudott betöltődni.", 119 "service.errorHandler.text" : "{name} nem tudott betöltődni.",
120 "service.webviewLoader.loading" : "Betöltés",
113 "services.getStarted" : "Kezdj hozzá", 121 "services.getStarted" : "Kezdj hozzá",
114 "services.welcome" : "Üdvözöl a Franz", 122 "services.welcome" : "Üdvözöl a Franz",
115 "settings.account.account.editButton" : "Fiók szerkesztése", 123 "settings.account.account.editButton" : "Fiók szerkesztése",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Ãltalános", 164 "settings.app.headlineGeneral" : "Ãltalános",
157 "settings.app.headlineLanguage" : "Nyelv", 165 "settings.app.headlineLanguage" : "Nyelv",
158 "settings.app.headlineUpdates" : "Frissítések", 166 "settings.app.headlineUpdates" : "Frissítések",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Újraindítást igénylő módosítás", 168 "settings.app.restartRequired" : "Újraindítást igénylő módosítás",
160 "settings.app.subheadlineCache" : "Gyorsítótár", 169 "settings.app.subheadlineCache" : "Gyorsítótár",
161 "settings.app.translationHelp" : "Segíts nekünk a Franz-ot lefordítani a nyelvedre.", 170 "settings.app.translationHelp" : "Segíts nekünk a Franz-ot lefordítani a nyelvedre.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Barát meghívása", 177 "settings.navigation.inviteFriends" : "Barát meghívása",
169 "settings.navigation.logout" : "Kijelentkezés", 178 "settings.navigation.logout" : "Kijelentkezés",
170 "settings.navigation.settings" : "Beállítások", 179 "settings.navigation.settings" : "Beállítások",
180 "settings.navigation.team" : "Csapat kezelése",
171 "settings.navigation.yourServices" : "Szolgáltatásaid", 181 "settings.navigation.yourServices" : "Szolgáltatásaid",
182 "settings.navigation.yourWorkspaces" : "Munkaterületeid",
172 "settings.recipes.all" : "Összes szolgáltatás", 183 "settings.recipes.all" : "Összes szolgáltatás",
173 "settings.recipes.dev" : "Fejlesztés", 184 "settings.recipes.dev" : "Fejlesztés",
174 "settings.recipes.headline" : "Elérhető szolgáltatások", 185 "settings.recipes.headline" : "Elérhető szolgáltatások",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Minden hang lenémítva", 237 "settings.services.tooltip.isMuted" : "Minden hang lenémítva",
227 "settings.services.tooltip.notificationsDisabled" : "Értesítések letiltva", 238 "settings.services.tooltip.notificationsDisabled" : "Értesítések letiltva",
228 "settings.services.updatedInfo" : "A módosításokat elmentettük", 239 "settings.services.updatedInfo" : "A módosításokat elmentettük",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Csapat",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Cég", 246 "settings.user.form.accountType.company" : "Cég",
230 "settings.user.form.accountType.individual" : "Egyén", 247 "settings.user.form.accountType.individual" : "Egyén",
231 "settings.user.form.accountType.label" : "Fiók típusa", 248 "settings.user.form.accountType.label" : "Fiók típusa",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Keresztnév", 252 "settings.user.form.firstname" : "Keresztnév",
236 "settings.user.form.lastname" : "Vezetéknév", 253 "settings.user.form.lastname" : "Vezetéknév",
237 "settings.user.form.newPassword" : "Új jelszó", 254 "settings.user.form.newPassword" : "Új jelszó",
255 "settings.workspace.add.form.name" : "Név",
256 "settings.workspace.add.form.submitButton" : "Új munkaterület",
257 "settings.workspace.form.buttonDelete" : "Munkaterület törlése",
258 "settings.workspace.form.buttonSave" : "Munkaterület mentése",
259 "settings.workspace.form.name" : "Név",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Szolgáltatások ezen a Munkaterületen",
261 "settings.workspace.form.yourWorkspaces" : "Munkaterületeid",
262 "settings.workspaces.deletedInfo" : "Munkaterület törölve",
263 "settings.workspaces.headline" : "Munkaterületeid",
264 "settings.workspaces.noWorkspacesAdded" : "Még nem hoztál létre munkaterületeket.",
265 "settings.workspaces.tryReloadWorkspaces" : "Próbáld újra",
266 "settings.workspaces.updatedInfo" : "A módosításokat elmentettük",
267 "settings.workspaces.workspaceFeatureHeadline" : "A kevesebb több: Bemutatjuk a Franz Munkaterületeket",
268 "settings.workspaces.workspaceFeatureInfo" : "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. 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.",
269 "settings.workspaces.workspacesRequestFailed" : "Nem sikerült betölteni a munkaterületeket",
238 "sidebar.addNewService" : "Szolgáltatás hozzáadása", 270 "sidebar.addNewService" : "Szolgáltatás hozzáadása",
271 "sidebar.closeWorkspaceDrawer" : "Munkaterület panel bezárása",
239 "sidebar.muteApp" : "Értesítések és hangok letiltása", 272 "sidebar.muteApp" : "Értesítések és hangok letiltása",
273 "sidebar.openWorkspaceDrawer" : "Munkaterület panel megnyitása",
240 "sidebar.settings" : "Beállítások", 274 "sidebar.settings" : "Beállítások",
241 "sidebar.unmuteApp" : "Értesítések és hangok engedélyezése", 275 "sidebar.unmuteApp" : "Értesítések és hangok engedélyezése",
242 "signup.company.label" : "Cég", 276 "signup.company.label" : "Cég",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Saját kiszolgálós szolgáltatások hozzáadása, pl.: Mattermost", 292 "subscription.features.onpremise.mattermost" : "Saját kiszolgálós szolgáltatások hozzáadása, pl.: Mattermost",
259 "subscription.features.proxy" : "Proxy támogatás a szolgáltatásokhoz", 293 "subscription.features.proxy" : "Proxy támogatás a szolgáltatásokhoz",
260 "subscription.features.spellchecker" : "Támogatás a Helyesírás-ellenőrzőhöz", 294 "subscription.features.spellchecker" : "Támogatás a Helyesírás-ellenőrzőhöz",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza", 296 "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza",
262 "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni", 297 "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni",
263 "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését", 298 "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} kitöltése kötelező", 316 "validation.required" : "{field} kitöltése kötelező",
282 "validation.url" : "{field} nem érvényes URL", 317 "validation.url" : "{field} nem érvényes URL",
283 "welcome.loginButton" : "Jelentkezz be a fiókodba", 318 "welcome.loginButton" : "Jelentkezz be a fiókodba",
284 "welcome.signupButton" : "Új fiók létrehozása" 319 "welcome.signupButton" : "Új fiók létrehozása",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Összes szolgáltatás",
322 "workspaceDrawer.headline" : "Munkaterületek",
323 "workspaceDrawer.item.contextMenuEdit" : "szerkeszt",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Készítsd el az első munkaterületedet",
326 "workspaceDrawer.proFeatureBadge" : "Prémium funkció",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Prémium fiók reaktiválása",
328 "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.workspacesSettingsTooltip" : "Munkaterület beállítások szerkesztése",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
index 73271dceb..e7a46e5e9 100644
--- a/src/i18n/locales/id.json
+++ b/src/i18n/locales/id.json
@@ -1,27 +1,28 @@
1{ 1{
2 "app.errorHandler.action" : "Muat Ulang", 2 "app.errorHandler.action" : "Muat Ulang",
3 "app.errorHandler.headline" : "Terjadi kesalahan", 3 "app.errorHandler.headline" : "Terjadi kesalahan",
4 "feature.delayApp.action" : "Dapatkan Franz Supporter License", 4 "feature.announcements.changelog.headline" : "Perubahan dalam Franz {version}",
5 "feature.delayApp.headline" : "Beli Franz Supporter License agar tidak perlu menunggu", 5 "feature.delayApp.action" : "Dapatkan Lisensi Pendukung Franz",
6 "feature.delayApp.headline" : "Beli Lisensi Pendukung Franz agar tidak perlu menunggu",
6 "feature.delayApp.text" : "Franz akan melanjutkan dalam {seconds} detik.", 7 "feature.delayApp.text" : "Franz akan melanjutkan dalam {seconds} detik.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Kirim sebagai email",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Bagikan di Facebook",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Bagikan di Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz lebih baik bersama!",
11 "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" : "Saya telah menambahkan layanan {count} ke Franz! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan co di www.meetfranz.com",
12 "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 @MeetFranz", 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.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "Beri tahu teman dan kolega Anda betapa hebatnya Franz dan bantu kami menyebarkan berita.",
14 "global.api.unhealthy" : "Tidak dapat tersambung ke layanan Franz", 15 "global.api.unhealthy" : "Tidak dapat tersambung ke layanan Franz",
15 "global.notConnectedToTheInternet" : "Anda tidak tersambung ke internet.", 16 "global.notConnectedToTheInternet" : "Anda tidak tersambung ke internet.",
16 "global.spellchecker.useDefault" : "Gunakan Bawaan Sistem ({default})", 17 "global.spellchecker.useDefault" : "Gunakan Bawaan Sistem ({default})",
17 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "Deteksi bahasa secara otomatis",
18 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "Otomatis",
19 "global.spellchecking.language" : "Periksa ejaan", 20 "global.spellchecking.language" : "Periksa ejaan",
20 "import.headline" : "Impor layanan Franz 4 Anda", 21 "import.headline" : "Impor layanan Franz 4 Anda",
21 "import.notSupportedHeadline" : "Layanan belum didukung di Franz 5", 22 "import.notSupportedHeadline" : "Layanan belum didukung di Franz 5",
22 "import.skip.label" : "Saya ingin menambahkan layanan secara manual", 23 "import.skip.label" : "Saya ingin menambahkan layanan secara manual",
23 "import.submit.label" : "Impor layanan", 24 "import.submit.label" : "Impor layanan",
24 "infobar.buttonChangelog" : "Apa yang baru?", 25 "infobar.buttonChangelog" : "Yang baru",
25 "infobar.buttonInstallUpdate" : "Mulai ulang & instal pembaruan", 26 "infobar.buttonInstallUpdate" : "Mulai ulang & instal pembaruan",
26 "infobar.buttonReloadServices" : "Muat ulang layanan", 27 "infobar.buttonReloadServices" : "Muat ulang layanan",
27 "infobar.requiredRequestsFailed" : "Gagal memuat layanan dan informasi pengguna", 28 "infobar.requiredRequestsFailed" : "Gagal memuat layanan dan informasi pengguna",
@@ -30,12 +31,12 @@
30 "invite.email.label" : "Alamat email", 31 "invite.email.label" : "Alamat email",
31 "invite.headline.friends" : "Undang 3 teman atau kolega Anda", 32 "invite.headline.friends" : "Undang 3 teman atau kolega Anda",
32 "invite.name.label" : "Nama", 33 "invite.name.label" : "Nama",
33 "invite.skip.label" : "Nanti saja", 34 "invite.skip.label" : "Saya ingin melakukan ini nanti",
34 "invite.submit.label" : "Kirim undangan", 35 "invite.submit.label" : "Kirim undangan",
35 "invite.successInfo" : "Undangan berhasil dikirim", 36 "invite.successInfo" : "Undangan berhasil dikirim",
36 "login.email.label" : "Alamat email", 37 "login.email.label" : "Alamat email",
37 "login.headline" : "Masuk", 38 "login.headline" : "Masuk",
38 "login.invalidCredentials" : "Email atau sandi salah", 39 "login.invalidCredentials" : "Email atau kata sandi tidak valid",
39 "login.link.password" : "Setel ulang sandi", 40 "login.link.password" : "Setel ulang sandi",
40 "login.link.signup" : "Buat akun gratis", 41 "login.link.signup" : "Buat akun gratis",
41 "login.password.label" : "Sandi", 42 "login.password.label" : "Sandi",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Masuk", 44 "login.submit.label" : "Masuk",
44 "login.tokenExpired" : "Sesi Anda telah kedaluwarsa, silakan masuk kembali.", 45 "login.tokenExpired" : "Sesi Anda telah kedaluwarsa, silakan masuk kembali.",
45 "menu.app.about" : "Tentang Franz", 46 "menu.app.about" : "Tentang Franz",
47 "menu.app.announcement" : "Yang baru",
46 "menu.app.hide" : "Sembunyikan", 48 "menu.app.hide" : "Sembunyikan",
47 "menu.app.hideOthers" : "Sembunyikan Lainnya", 49 "menu.app.hideOthers" : "Sembunyikan Lainnya",
48 "menu.app.quit" : "Keluar", 50 "menu.app.quit" : "Keluar",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Dukungan", 72 "menu.help.support" : "Dukungan",
71 "menu.help.tos" : "Ketentuan Layanan", 73 "menu.help.tos" : "Ketentuan Layanan",
72 "menu.services" : "Layanan", 74 "menu.services" : "Layanan",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "Aktifkan layanan sebelumnya",
74 "menu.services.addNewService" : "Tambahkan Layanan Baru...", 76 "menu.services.addNewService" : "Tambahkan Layanan Baru...",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "Aktifkan layanan berikutnya",
76 "menu.view" : "Tampilan", 78 "menu.view" : "Tampilan",
77 "menu.view.enterFullScreen" : "Masuk ke Mode Layar Penuh", 79 "menu.view.enterFullScreen" : "Masuk ke Mode Layar Penuh",
78 "menu.view.exitFullScreen" : "Keluar dari Layar Penuh", 80 "menu.view.exitFullScreen" : "Keluar dari Layar Penuh",
@@ -87,6 +89,11 @@
87 "menu.window" : "Jendela", 89 "menu.window" : "Jendela",
88 "menu.window.close" : "Tutup", 90 "menu.window.close" : "Tutup",
89 "menu.window.minimize" : "Minimalkan", 91 "menu.window.minimize" : "Minimalkan",
92 "menu.workspaces" : "Ruang kerja",
93 "menu.workspaces.addNewWorkspace" : "Tambah Ruang Kerja Baru...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Tutup laci ruang kerja",
95 "menu.workspaces.defaultWorkspace" : "Semua layanan",
96 "menu.workspaces.openWorkspaceDrawer" : "Buka laci ruang kerja",
90 "password.email.label" : "Alamat email", 97 "password.email.label" : "Alamat email",
91 "password.headline" : "Setel ulang sandi", 98 "password.headline" : "Setel ulang sandi",
92 "password.link.login" : "Masuk ke akun Anda", 99 "password.link.login" : "Masuk ke akun Anda",
@@ -110,14 +117,15 @@
110 "service.errorHandler.headline" : "Oh tidak!", 117 "service.errorHandler.headline" : "Oh tidak!",
111 "service.errorHandler.message" : "Kesalahan", 118 "service.errorHandler.message" : "Kesalahan",
112 "service.errorHandler.text" : "{name} gagal dimuat", 119 "service.errorHandler.text" : "{name} gagal dimuat",
113 "services.getStarted" : "Ayo mulai!", 120 "service.webviewLoader.loading" : "Memuat",
121 "services.getStarted" : "Memulai",
114 "services.welcome" : "Selamat datang di Franz", 122 "services.welcome" : "Selamat datang di Franz",
115 "settings.account.account.editButton" : "Edit akun", 123 "settings.account.account.editButton" : "Edit akun",
116 "settings.account.accountType.basic" : "Akun Dasar", 124 "settings.account.accountType.basic" : "Akun Dasar",
117 "settings.account.accountType.premium" : "Akun Pendukung Premium", 125 "settings.account.accountType.premium" : "Akun Pendukung Premium",
118 "settings.account.buttonSave" : "Perbarui profil", 126 "settings.account.buttonSave" : "Perbarui profil",
119 "settings.account.deleteAccount" : "Hapus akun", 127 "settings.account.deleteAccount" : "Hapus akun",
120 "settings.account.deleteEmailSent" : "Anda akan menerima email yang berisi tautan untuk melakukan konfirmasi penghapusan akun. Akun dan data Anda tidak bisa dipulihkan!", 128 "settings.account.deleteEmailSent" : "Anda menerima email dengan tautan untuk mengonfirmasi penghapusan akun. Akun dan data Anda tidak bisa dipulihkan!",
121 "settings.account.deleteInfo" : "Jika Anda tidak membutuhkan akun Franz lagi, Anda bisa menghapus akun dan semua data terkait di sini.", 129 "settings.account.deleteInfo" : "Jika Anda tidak membutuhkan akun Franz lagi, Anda bisa menghapus akun dan semua data terkait di sini.",
122 "settings.account.headline" : "Akun", 130 "settings.account.headline" : "Akun",
123 "settings.account.headlineAccount" : "Informasi akun", 131 "settings.account.headlineAccount" : "Informasi akun",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Umum", 164 "settings.app.headlineGeneral" : "Umum",
157 "settings.app.headlineLanguage" : "Bahasa", 165 "settings.app.headlineLanguage" : "Bahasa",
158 "settings.app.headlineUpdates" : "Versi Baru", 166 "settings.app.headlineUpdates" : "Versi Baru",
167 "settings.app.languageDisclaimer" : "Penerjemahan resmi dilakukan untuk Bahasa Inggris dan Jerman. Bahasa lainnya merupakan penerjemahan oleh komunitas.",
159 "settings.app.restartRequired" : "Perubahan membutuhkan mulai ulang", 168 "settings.app.restartRequired" : "Perubahan membutuhkan mulai ulang",
160 "settings.app.subheadlineCache" : "Singgahan", 169 "settings.app.subheadlineCache" : "Singgahan",
161 "settings.app.translationHelp" : "Bantu kami menerjemahkan Franz ke bahasa Anda.", 170 "settings.app.translationHelp" : "Bantu kami menerjemahkan Franz ke bahasa Anda.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Undang Teman", 177 "settings.navigation.inviteFriends" : "Undang Teman",
169 "settings.navigation.logout" : "Keluar", 178 "settings.navigation.logout" : "Keluar",
170 "settings.navigation.settings" : "Pengaturan", 179 "settings.navigation.settings" : "Pengaturan",
180 "settings.navigation.team" : "Kelola Tim",
171 "settings.navigation.yourServices" : "Layanan Anda", 181 "settings.navigation.yourServices" : "Layanan Anda",
182 "settings.navigation.yourWorkspaces" : "Ruang kerja Anda",
172 "settings.recipes.all" : "Semua layanan", 183 "settings.recipes.all" : "Semua layanan",
173 "settings.recipes.dev" : "Pengembangan", 184 "settings.recipes.dev" : "Pengembangan",
174 "settings.recipes.headline" : "Layanan tersedia", 185 "settings.recipes.headline" : "Layanan tersedia",
@@ -221,11 +232,17 @@
221 "settings.services.discoverServices" : "Temukan layanan", 232 "settings.services.discoverServices" : "Temukan layanan",
222 "settings.services.headline" : "Layanan Anda", 233 "settings.services.headline" : "Layanan Anda",
223 "settings.services.noServicesAdded" : "Anda belum menambahkan layanan apa pun.", 234 "settings.services.noServicesAdded" : "Anda belum menambahkan layanan apa pun.",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "Tidak dapat memuat layanan Anda",
225 "settings.services.tooltip.isDisabled" : "Layanan dinonaktifkan", 236 "settings.services.tooltip.isDisabled" : "Layanan dinonaktifkan",
226 "settings.services.tooltip.isMuted" : "Semua suara dibisukan", 237 "settings.services.tooltip.isMuted" : "Semua suara dibisukan",
227 "settings.services.tooltip.notificationsDisabled" : "Pemberitahuan dinonaktifkan", 238 "settings.services.tooltip.notificationsDisabled" : "Pemberitahuan dinonaktifkan",
228 "settings.services.updatedInfo" : "Perubahan telah disimpan", 239 "settings.services.updatedInfo" : "Perubahan telah disimpan",
240 "settings.team.contentHeadline" : "Franz untuk Tim",
241 "settings.team.copy" : "Franz untuk Tim menyediakan opsi untuk mengundang rekan kerja ke tim Anda dengan mengirimkan undangan email dan mengelola langganan mereka pada preferensi akun Anda. Jangan habiskan waktu Anda menyiapkan langganan bagi masing-masing anggota tim, lupakan berbagai faktur dan periode penagihan - satu tim untuk semua!",
242 "settings.team.headline" : "Tim",
243 "settings.team.intro" : "Anda dan tim Anda menggunakan Franz? Kini Anda bisa mengelola langganan Premium untuk semua rekan kerja, teman, atau anggota keluar sebanyak yang Anda inginkan, semuanya cukup dari satu akun.",
244 "settings.team.manageAction" : "Kelola Tim Anda di meetfranz.com",
245 "settings.team.upgradeAction" : "Tingkatkan Akun Anda",
229 "settings.user.form.accountType.company" : "Perusahaan", 246 "settings.user.form.accountType.company" : "Perusahaan",
230 "settings.user.form.accountType.individual" : "Pribadi", 247 "settings.user.form.accountType.individual" : "Pribadi",
231 "settings.user.form.accountType.label" : "Jenis akun", 248 "settings.user.form.accountType.label" : "Jenis akun",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Nama Depan", 252 "settings.user.form.firstname" : "Nama Depan",
236 "settings.user.form.lastname" : "Nama Belakang", 253 "settings.user.form.lastname" : "Nama Belakang",
237 "settings.user.form.newPassword" : "Sandi baru", 254 "settings.user.form.newPassword" : "Sandi baru",
255 "settings.workspace.add.form.name" : "Nama",
256 "settings.workspace.add.form.submitButton" : "Buat ruang kerja",
257 "settings.workspace.form.buttonDelete" : "Hapus ruang kerja",
258 "settings.workspace.form.buttonSave" : "Simpan ruang kerja",
259 "settings.workspace.form.name" : "Nama",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Layanan dalam Ruang Kerja ini",
261 "settings.workspace.form.yourWorkspaces" : "Ruang kerja Anda",
262 "settings.workspaces.deletedInfo" : "Ruang kerja telah dihapus",
263 "settings.workspaces.headline" : "Ruang kerja Anda",
264 "settings.workspaces.noWorkspacesAdded" : "Anda belum menambahkan ruang kerja.",
265 "settings.workspaces.tryReloadWorkspaces" : "Coba lagi",
266 "settings.workspaces.updatedInfo" : "Perubahan Anda telah disimpan",
267 "settings.workspaces.workspaceFeatureHeadline" : "Sedikit Namun Banyak: Memperkenalkan Ruang Kerja Franz",
268 "settings.workspaces.workspaceFeatureInfo" : "Ruang Kerja Franz dapat digunakan untuk tetap fokus pada hal penting saat ini. Siapkan sekelompok layanan yang berbeda dan dengan mudah beralih ke yang lain. Anda yang memutuskan layanan mana yang Anda perlukan dan kapan, agar kami bisa membantu Anda tetap berada di garis depan - atau dengan mudah mengakhiri hari kerja kapan saja Anda inginkan.",
269 "settings.workspaces.workspacesRequestFailed" : "Tidak dapat memuat ruang kerja Anda",
238 "sidebar.addNewService" : "Tambahkan layanan baru", 270 "sidebar.addNewService" : "Tambahkan layanan baru",
271 "sidebar.closeWorkspaceDrawer" : "Tutup laci ruang kerja",
239 "sidebar.muteApp" : "Nonaktifkan pemberitahuan & audio", 272 "sidebar.muteApp" : "Nonaktifkan pemberitahuan & audio",
273 "sidebar.openWorkspaceDrawer" : "Buka laci ruang kerja",
240 "sidebar.settings" : "Pengaturan", 274 "sidebar.settings" : "Pengaturan",
241 "sidebar.unmuteApp" : "Aktifkan pemberitahuan", 275 "sidebar.unmuteApp" : "Aktifkan pemberitahuan",
242 "signup.company.label" : "Perusahaan", 276 "signup.company.label" : "Perusahaan",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Integrasi layanan hosted, misalnya Mattermost", 292 "subscription.features.onpremise.mattermost" : "Integrasi layanan hosted, misalnya Mattermost",
259 "subscription.features.proxy" : "Dukungan proksi untuk layanan", 293 "subscription.features.proxy" : "Dukungan proksi untuk layanan",
260 "subscription.features.spellchecker" : "Dukungan pengecek ejaan", 294 "subscription.features.spellchecker" : "Dukungan pengecek ejaan",
295 "subscription.features.workspaces" : "Kelola layanan Anda dalam ruang kerja",
261 "subscription.includedFeatures" : "Franz Premium Supporter Account berbayar menyertakan", 296 "subscription.includedFeatures" : "Franz Premium Supporter Account berbayar menyertakan",
262 "subscription.paymentSessionError" : "Tidak bisa menginisialisasi formulir pembayaran", 297 "subscription.paymentSessionError" : "Tidak bisa menginisialisasi formulir pembayaran",
263 "subscription.submit.label" : "Saya ingin mendukung pengembangan Franz", 298 "subscription.submit.label" : "Saya ingin mendukung pengembangan Franz",
@@ -277,9 +312,20 @@
277 "tabs.item.reload" : "Muat Ulang", 312 "tabs.item.reload" : "Muat Ulang",
278 "validation.email" : "{field} tidak benar", 313 "validation.email" : "{field} tidak benar",
279 "validation.minLength" : "{field} setidaknya harus {length} karakter", 314 "validation.minLength" : "{field} setidaknya harus {length} karakter",
280 "validation.oneRequired" : "At least one is required", 315 "validation.oneRequired" : "Setidaknya diperlukan satu",
281 "validation.required" : "{field} wajib diisi", 316 "validation.required" : "{field} wajib diisi",
282 "validation.url" : "{field} bukan URL yang benar", 317 "validation.url" : "{field} bukan URL yang benar",
283 "welcome.loginButton" : "Masuk ke akun Anda", 318 "welcome.loginButton" : "Masuk ke akun Anda",
284 "welcome.signupButton" : "Buat akun gratis" 319 "welcome.signupButton" : "Buat akun gratis",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Tambah ruang kerja baru",
321 "workspaceDrawer.allServices" : "Semua layanan",
322 "workspaceDrawer.headline" : "Ruang kerja",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "Belum ada layanan yang ditambahkan",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Buat ruang kerja pertama Anda",
326 "workspaceDrawer.proFeatureBadge" : "Fitur premium",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Aktifkan ulang akun premium",
328 "workspaceDrawer.workspaceFeatureInfo" : "<p>Ruang Kerja Franz dapat digunakan untuk tetap fokus pada hal penting saat ini. Siapkan sekelompok layanan yang berbeda dan dengan mudah beralih ke yang lain.<\/p><p>Anda yang memutuskan layanan mana yang Anda perlukan dan kapan, agar kami bisa membantu Anda tetap berada di garis depan - atau dengan mudah mengakhiri hari kerja kapan saja Anda inginkan.<\/p>",
329 "workspaceDrawer.workspacesSettingsTooltip" : "Edit setelan ruang kerja",
330 "workspaces.switchingIndicator.switchingTo" : "Beralih ke"
285} 331}
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index 71150483c..c12641e36 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -1,21 +1,22 @@
1{ 1{
2 "app.errorHandler.action" : "Ricarica", 2 "app.errorHandler.action" : "Ricarica",
3 "app.errorHandler.headline" : "Qualcosa è andato storto", 3 "app.errorHandler.headline" : "Qualcosa è andato storto",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Ricevi una Licenza Supporter di Franz", 5 "feature.delayApp.action" : "Ricevi una Licenza Supporter di Franz",
5 "feature.delayApp.headline" : "Per favore, compra una Licenza Supporter di Franz per saltare l'attesa", 6 "feature.delayApp.headline" : "Per favore, compra una Licenza Supporter di Franz per saltare l'attesa",
6 "feature.delayApp.text" : "Franz continuerà a funzionare tra {seconds} secondi.", 7 "feature.delayApp.text" : "Franz continuerà a funzionare tra {seconds} secondi.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Manda come email",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Condividi su Facebook",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Condividi su Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franze è migliore insieme!",
11 "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" : "Ho aggiunto {count} nuovi servizi a Franz! Scarica ora l'app gratuita per WhatsApp, Messenger, Slack, Skype e altri all'indirizzo www.meetfranz.com",
12 "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 @MeetFranz", 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.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "Condividi con i tuoi amici e colleghi quanto Franz è fantastico e aiutaci a diffondere la parola.",
14 "global.api.unhealthy" : "Impossibile connettersi ai servizi online di Franz", 15 "global.api.unhealthy" : "Impossibile connettersi ai servizi online di Franz",
15 "global.notConnectedToTheInternet" : "Non sei connesso a Internet.", 16 "global.notConnectedToTheInternet" : "Non sei connesso a Internet.",
16 "global.spellchecker.useDefault" : "Usa le impostazioni predefinite di sistema ({default})", 17 "global.spellchecker.useDefault" : "Usa le impostazioni predefinite di sistema ({default})",
17 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "Rileva automaticamente la lingua",
18 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "Automatico",
19 "global.spellchecking.language" : "Lingua per controllo ortografico", 20 "global.spellchecking.language" : "Lingua per controllo ortografico",
20 "import.headline" : "Importa i servizi di Franz 4", 21 "import.headline" : "Importa i servizi di Franz 4",
21 "import.notSupportedHeadline" : "Servizi non ancora supportati in Franz 5", 22 "import.notSupportedHeadline" : "Servizi non ancora supportati in Franz 5",
@@ -43,8 +44,9 @@
43 "login.submit.label" : "Accedi", 44 "login.submit.label" : "Accedi",
44 "login.tokenExpired" : "La tua sessione è scaduta, per favore accedi di nuovo.", 45 "login.tokenExpired" : "La tua sessione è scaduta, per favore accedi di nuovo.",
45 "menu.app.about" : "Info su Franz", 46 "menu.app.about" : "Info su Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Nascondi", 48 "menu.app.hide" : "Nascondi",
47 "menu.app.hideOthers" : "Nascondi Altri", 49 "menu.app.hideOthers" : "Nascondi altri",
48 "menu.app.quit" : "Esci", 50 "menu.app.quit" : "Esci",
49 "menu.app.settings" : "Settings", 51 "menu.app.settings" : "Settings",
50 "menu.app.unhide" : "Mostra", 52 "menu.app.unhide" : "Mostra",
@@ -52,7 +54,7 @@
52 "menu.edit.copy" : "Copia", 54 "menu.edit.copy" : "Copia",
53 "menu.edit.cut" : "Taglia", 55 "menu.edit.cut" : "Taglia",
54 "menu.edit.delete" : "Elimina", 56 "menu.edit.delete" : "Elimina",
55 "menu.edit.emojiSymbols" : "Emoji e Simboli", 57 "menu.edit.emojiSymbols" : "Emoji e simboli",
56 "menu.edit.paste" : "Incolla", 58 "menu.edit.paste" : "Incolla",
57 "menu.edit.pasteAndMatchStyle" : "Incolla e Mantieni Stile", 59 "menu.edit.pasteAndMatchStyle" : "Incolla e Mantieni Stile",
58 "menu.edit.redo" : "Ripeti", 60 "menu.edit.redo" : "Ripeti",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Supporto", 72 "menu.help.support" : "Supporto",
71 "menu.help.tos" : "Termini di Servizio", 73 "menu.help.tos" : "Termini di Servizio",
72 "menu.services" : "Servizi", 74 "menu.services" : "Servizi",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "Attiva servizio precedente",
74 "menu.services.addNewService" : "Aggiungi Nuovo Servizio...", 76 "menu.services.addNewService" : "Aggiungi Nuovo Servizio...",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "Attiva servizio seguente",
76 "menu.view" : "Visualizza", 78 "menu.view" : "Visualizza",
77 "menu.view.enterFullScreen" : "Visualizza a Schermo Intero", 79 "menu.view.enterFullScreen" : "Visualizza a Schermo Intero",
78 "menu.view.exitFullScreen" : "Esci da Schermo Intero", 80 "menu.view.exitFullScreen" : "Esci da Schermo Intero",
@@ -87,6 +89,11 @@
87 "menu.window" : "Finestra", 89 "menu.window" : "Finestra",
88 "menu.window.close" : "Chiudi", 90 "menu.window.close" : "Chiudi",
89 "menu.window.minimize" : "Minimizza", 91 "menu.window.minimize" : "Minimizza",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Tutti i servizi",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Indirizzo email", 97 "password.email.label" : "Indirizzo email",
91 "password.headline" : "Reimposta password", 98 "password.headline" : "Reimposta password",
92 "password.link.login" : "Accedi al tuo account", 99 "password.link.login" : "Accedi al tuo account",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh no!", 117 "service.errorHandler.headline" : "Oh no!",
111 "service.errorHandler.message" : "Errore", 118 "service.errorHandler.message" : "Errore",
112 "service.errorHandler.text" : "{name} non si è caricato correttamente.", 119 "service.errorHandler.text" : "{name} non si è caricato correttamente.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Iniziamo", 121 "services.getStarted" : "Iniziamo",
114 "services.welcome" : "Benvenuto su Franz", 122 "services.welcome" : "Benvenuto su Franz",
115 "settings.account.account.editButton" : "Modifica account", 123 "settings.account.account.editButton" : "Modifica account",
@@ -131,7 +139,7 @@
131 "settings.account.manageSubscription.label" : "Gestisci il tuo abbonamento", 139 "settings.account.manageSubscription.label" : "Gestisci il tuo abbonamento",
132 "settings.account.successInfo" : "Le tue modifiche sono state salvate", 140 "settings.account.successInfo" : "Le tue modifiche sono state salvate",
133 "settings.account.tryReloadServices" : "Prova di nuovo", 141 "settings.account.tryReloadServices" : "Prova di nuovo",
134 "settings.account.tryReloadUserInfoRequest" : "Prova di nuovo", 142 "settings.account.tryReloadUserInfoRequest" : "Riprova",
135 "settings.account.userInfoRequestFailed" : "Impossibile caricare le informazioni dell'utente.", 143 "settings.account.userInfoRequestFailed" : "Impossibile caricare le informazioni dell'utente.",
136 "settings.app.buttonClearAllCache" : "Svuota la cache", 144 "settings.app.buttonClearAllCache" : "Svuota la cache",
137 "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", 145 "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Generale", 164 "settings.app.headlineGeneral" : "Generale",
157 "settings.app.headlineLanguage" : "Lingua", 165 "settings.app.headlineLanguage" : "Lingua",
158 "settings.app.headlineUpdates" : "Aggiornamenti", 166 "settings.app.headlineUpdates" : "Aggiornamenti",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Le modifiche richiedono un riavvio", 168 "settings.app.restartRequired" : "Le modifiche richiedono un riavvio",
160 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Aiutaci a tradurre Franz nella tua lingua.", 170 "settings.app.translationHelp" : "Aiutaci a tradurre Franz nella tua lingua.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Invita Amici", 177 "settings.navigation.inviteFriends" : "Invita Amici",
169 "settings.navigation.logout" : "Esci", 178 "settings.navigation.logout" : "Esci",
170 "settings.navigation.settings" : "Impostazioni", 179 "settings.navigation.settings" : "Impostazioni",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "I tuoi servizi", 181 "settings.navigation.yourServices" : "I tuoi servizi",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Tutti i servizi", 183 "settings.recipes.all" : "Tutti i servizi",
173 "settings.recipes.dev" : "Sviluppo", 184 "settings.recipes.dev" : "Sviluppo",
174 "settings.recipes.headline" : "Servizi disponibili", 185 "settings.recipes.headline" : "Servizi disponibili",
@@ -221,11 +232,17 @@
221 "settings.services.discoverServices" : "Scopri servizi", 232 "settings.services.discoverServices" : "Scopri servizi",
222 "settings.services.headline" : "I tuoi servizi", 233 "settings.services.headline" : "I tuoi servizi",
223 "settings.services.noServicesAdded" : "Non hai aggiunto ancora nessun servizio.", 234 "settings.services.noServicesAdded" : "Non hai aggiunto ancora nessun servizio.",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "Impossibile caricare il servizio",
225 "settings.services.tooltip.isDisabled" : "Il servizio è disattivato", 236 "settings.services.tooltip.isDisabled" : "Il servizio è disattivato",
226 "settings.services.tooltip.isMuted" : "Tutti i suoni sono disattivati", 237 "settings.services.tooltip.isMuted" : "Tutti i suoni sono disattivati",
227 "settings.services.tooltip.notificationsDisabled" : "Le notifiche sono disattivate", 238 "settings.services.tooltip.notificationsDisabled" : "Le notifiche sono disattivate",
228 "settings.services.updatedInfo" : "Le tue modifiche sono state salvate", 239 "settings.services.updatedInfo" : "Le tue modifiche sono state salvate",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Gruppo",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Società", 246 "settings.user.form.accountType.company" : "Società",
230 "settings.user.form.accountType.individual" : "Individuale", 247 "settings.user.form.accountType.individual" : "Individuale",
231 "settings.user.form.accountType.label" : "Tipo di account", 248 "settings.user.form.accountType.label" : "Tipo di account",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Nome", 252 "settings.user.form.firstname" : "Nome",
236 "settings.user.form.lastname" : "Cognome", 253 "settings.user.form.lastname" : "Cognome",
237 "settings.user.form.newPassword" : "Nuova password", 254 "settings.user.form.newPassword" : "Nuova password",
255 "settings.workspace.add.form.name" : "Nome",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Nome",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Try again",
266 "settings.workspaces.updatedInfo" : "Le tue modifiche sono state salvate",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Aggiungi un nuovo servizio", 270 "sidebar.addNewService" : "Aggiungi un nuovo servizio",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Disattiva notifiche e audio", 272 "sidebar.muteApp" : "Disattiva notifiche e audio",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Impostazioni", 274 "sidebar.settings" : "Impostazioni",
241 "sidebar.unmuteApp" : "Attiva notifiche e audio", 275 "sidebar.unmuteApp" : "Attiva notifiche e audio",
242 "signup.company.label" : "Società", 276 "signup.company.label" : "Società",
@@ -245,7 +279,7 @@
245 "signup.firstname.label" : "Nome", 279 "signup.firstname.label" : "Nome",
246 "signup.headline" : "Iscriviti", 280 "signup.headline" : "Iscriviti",
247 "signup.lastname.label" : "Cognome", 281 "signup.lastname.label" : "Cognome",
248 "signup.legal.info" : "Creando un account di Franz accetti l' ", 282 "signup.legal.info" : "Creando un account di Franz stai accettando il ",
249 "signup.legal.privacy" : "Informativa sulla Privacy", 283 "signup.legal.privacy" : "Informativa sulla Privacy",
250 "signup.legal.terms" : "Termini di Servizio", 284 "signup.legal.terms" : "Termini di Servizio",
251 "signup.link.login" : "Hai già un account, vuoi accedere?", 285 "signup.link.login" : "Hai già un account, vuoi accedere?",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Aggiungi servizi on-premise\/hosted come \"Mattermost\"", 292 "subscription.features.onpremise.mattermost" : "Aggiungi servizi on-premise\/hosted come \"Mattermost\"",
259 "subscription.features.proxy" : "Supporto proxy per i servizi", 293 "subscription.features.proxy" : "Supporto proxy per i servizi",
260 "subscription.features.spellchecker" : "Supporto per il correttore ortografico", 294 "subscription.features.spellchecker" : "Supporto per il correttore ortografico",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "L'account a pagamento Franz Premium Supporter include", 296 "subscription.includedFeatures" : "L'account a pagamento Franz Premium Supporter include",
262 "subscription.paymentSessionError" : "Impossibile inizializzare il modulo per il pagamento", 297 "subscription.paymentSessionError" : "Impossibile inizializzare il modulo per il pagamento",
263 "subscription.submit.label" : "Voglio supportare lo sviluppo di Franz", 298 "subscription.submit.label" : "Voglio supportare lo sviluppo di Franz",
@@ -277,9 +312,20 @@
277 "tabs.item.reload" : "Ricarica", 312 "tabs.item.reload" : "Ricarica",
278 "validation.email" : "{field} non valido", 313 "validation.email" : "{field} non valido",
279 "validation.minLength" : "{field} dovrebbe contenere almeno {length} caratteri", 314 "validation.minLength" : "{field} dovrebbe contenere almeno {length} caratteri",
280 "validation.oneRequired" : "At least one is required", 315 "validation.oneRequired" : "Almeno un campo è richiesto",
281 "validation.required" : "{field} è necessario", 316 "validation.required" : "{field} è necessario",
282 "validation.url" : "{field} non è un URL valido", 317 "validation.url" : "{field} non è un URL valido",
283 "welcome.loginButton" : "Accedi al tuo account", 318 "welcome.loginButton" : "Accedi al tuo account",
284 "welcome.signupButton" : "Crea un account gratuito" 319 "welcome.signupButton" : "Crea un account gratuito",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Tutti i servizi",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index bd1024a34..cf7e9ab78 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -1,21 +1,22 @@
1{ 1{
2 "app.errorHandler.action" : "å†èª­ã¿è¾¼ã¿", 2 "app.errorHandler.action" : "å†èª­ã¿è¾¼ã¿",
3 "app.errorHandler.headline" : "é–“é•ãˆã¦ã„る部分ãŒã‚ã‚Šã¾ã™", 3 "app.errorHandler.headline" : "é–“é•ãˆã¦ã„る部分ãŒã‚ã‚Šã¾ã™",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Franzサãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã™ã‚‹", 5 "feature.delayApp.action" : "Franzサãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã™ã‚‹",
5 "feature.delayApp.headline" : "Franzã‚’ã™ãã«èµ·å‹•ã™ã‚‹ã«ã¯ã€Franz サãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã—ã¦ãã ã•ã„。", 6 "feature.delayApp.headline" : "Franzã‚’ã™ãã«èµ·å‹•ã™ã‚‹ã«ã¯ã€Franz サãƒãƒ¼ã‚¿ãƒ¼ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’購入ã—ã¦ãã ã•ã„。",
6 "feature.delayApp.text" : "Franzã¯ã‚ã¨{seconds}秒後ã«èµ·å‹•ã—ã¾ã™ã€‚", 7 "feature.delayApp.text" : "Franzã¯ã‚ã¨{seconds}秒後ã«èµ·å‹•ã—ã¾ã™ã€‚",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "メールã§é€ä¿¡",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Facebookã§ã‚·ã‚§ã‚¢",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Twitterã§ã‚·ã‚§ã‚¢",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franzã¯ã‚ãªãŸã¨ã¨ã‚‚ã«",
11 "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" : "Franzã§{count}個ã®ã‚µãƒ¼ãƒ“スを使ã£ã¦ã„ã¾ã™ï¼ã‚ãªãŸã‚‚Gmail, Messenger, Slack, Skypeãªã©ã®ã‚µãƒ¼ãƒ“スをFranzã§ä¸€å…ƒç®¡ç†ã—ã¾ã—ょã†ï¼ www.meetfranz.com",
12 "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 @MeetFranz", 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.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "ã‚ãªãŸã®ãŠå‹é”ã«Franzã‚’æ•™ãˆã¦ã‚ã’ã¾ã—ょã†ã€‚",
14 "global.api.unhealthy" : "Franzã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。", 15 "global.api.unhealthy" : "Franzã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。",
15 "global.notConnectedToTheInternet" : "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。", 16 "global.notConnectedToTheInternet" : "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
16 "global.spellchecker.useDefault" : " {default}ã‚’åˆæœŸè¨­å®šã§ä½¿ç”¨ã—ã¦ãã ã•ã„", 17 "global.spellchecker.useDefault" : " {default}ã‚’åˆæœŸè¨­å®šã§ä½¿ç”¨ã—ã¦ãã ã•ã„",
17 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "言語を自動的ã«æ¤œå‡ºã™ã‚‹",
18 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "自動",
19 "global.spellchecking.language" : "スペルãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªž", 20 "global.spellchecking.language" : "スペルãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªž",
20 "import.headline" : "Franz 4ã®ã‚µãƒ¼ãƒ“スをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„", 21 "import.headline" : "Franz 4ã®ã‚µãƒ¼ãƒ“スをインãƒãƒ¼ãƒˆã—ã¦ä¸‹ã•ã„",
21 "import.notSupportedHeadline" : "Franz 5ã§ã¯ã“ã®ã‚µãƒ¼ãƒ“スã«ã¾ã å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“", 22 "import.notSupportedHeadline" : "Franz 5ã§ã¯ã“ã®ã‚µãƒ¼ãƒ“スã«ã¾ã å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "サインイン", 44 "login.submit.label" : "サインイン",
44 "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ログインã—ç›´ã—ã¦ä¸‹ã•ã„。", 45 "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ログインã—ç›´ã—ã¦ä¸‹ã•ã„。",
45 "menu.app.about" : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±", 46 "menu.app.about" : "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "éš ã™", 48 "menu.app.hide" : "éš ã™",
47 "menu.app.hideOthers" : "ä»–ã‚’éš ã™", 49 "menu.app.hideOthers" : "ä»–ã‚’éš ã™",
48 "menu.app.quit" : "終了", 50 "menu.app.quit" : "終了",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "サãƒãƒ¼ãƒˆ", 72 "menu.help.support" : "サãƒãƒ¼ãƒˆ",
71 "menu.help.tos" : "サービス利用è¦ç´„", 73 "menu.help.tos" : "サービス利用è¦ç´„",
72 "menu.services" : "サービス", 74 "menu.services" : "サービス",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "å‰ã®ã‚µãƒ¼ãƒ“スを有効ã«ã™ã‚‹",
74 "menu.services.addNewService" : "サービスを追加", 76 "menu.services.addNewService" : "サービスを追加",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "次ã®ã‚µãƒ¼ãƒ“スを有効ã«ã™ã‚‹",
76 "menu.view" : "表示", 78 "menu.view" : "表示",
77 "menu.view.enterFullScreen" : "全画é¢è¡¨ç¤º", 79 "menu.view.enterFullScreen" : "全画é¢è¡¨ç¤º",
78 "menu.view.exitFullScreen" : "全画é¢è¡¨ç¤ºã‚’終了ã™ã‚‹", 80 "menu.view.exitFullScreen" : "全画é¢è¡¨ç¤ºã‚’終了ã™ã‚‹",
@@ -87,6 +89,11 @@
87 "menu.window" : "ウィンドウ", 89 "menu.window" : "ウィンドウ",
88 "menu.window.close" : "é–‰ã˜ã‚‹", 90 "menu.window.close" : "é–‰ã˜ã‚‹",
89 "menu.window.minimize" : "最å°åŒ–", 91 "menu.window.minimize" : "最å°åŒ–",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“ス",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "メールアドレス", 97 "password.email.label" : "メールアドレス",
91 "password.headline" : "パスワードã®ãƒªã‚»ãƒƒãƒˆ", 98 "password.headline" : "パスワードã®ãƒªã‚»ãƒƒãƒˆ",
92 "password.link.login" : "サインイン", 99 "password.link.login" : "サインイン",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "ã—ã¾ã£ãŸï¼", 117 "service.errorHandler.headline" : "ã—ã¾ã£ãŸï¼",
111 "service.errorHandler.message" : "エラー", 118 "service.errorHandler.message" : "エラー",
112 "service.errorHandler.text" : "{name} ã¯ãƒ­ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ", 119 "service.errorHandler.text" : "{name} ã¯ãƒ­ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "ã¯ã˜ã‚ã‚‹", 121 "services.getStarted" : "ã¯ã˜ã‚ã‚‹",
114 "services.welcome" : "Franzã«ã‚ˆã†ã“ã", 122 "services.welcome" : "Franzã«ã‚ˆã†ã“ã",
115 "settings.account.account.editButton" : "アカウントã®ç·¨é›†", 123 "settings.account.account.editButton" : "アカウントã®ç·¨é›†",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "一般", 164 "settings.app.headlineGeneral" : "一般",
157 "settings.app.headlineLanguage" : "言語", 165 "settings.app.headlineLanguage" : "言語",
158 "settings.app.headlineUpdates" : "æ›´æ–°", 166 "settings.app.headlineUpdates" : "æ›´æ–°",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "変更ã«ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™", 168 "settings.app.restartRequired" : "変更ã«ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™",
160 "settings.app.subheadlineCache" : "キャッシュ", 169 "settings.app.subheadlineCache" : "キャッシュ",
161 "settings.app.translationHelp" : "Franzã®ç¿»è¨³ä½œæ¥­ã«ã”å”力をãŠé¡˜ã„ã—ã¾ã™ã€‚", 170 "settings.app.translationHelp" : "Franzã®ç¿»è¨³ä½œæ¥­ã«ã”å”力をãŠé¡˜ã„ã—ã¾ã™ã€‚",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "知りåˆã„を招待ã™ã‚‹", 177 "settings.navigation.inviteFriends" : "知りåˆã„を招待ã™ã‚‹",
169 "settings.navigation.logout" : "ログアウト", 178 "settings.navigation.logout" : "ログアウト",
170 "settings.navigation.settings" : "設定", 179 "settings.navigation.settings" : "設定",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "利用中ã®ã‚µãƒ¼ãƒ“ス", 181 "settings.navigation.yourServices" : "利用中ã®ã‚µãƒ¼ãƒ“ス",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“ス", 183 "settings.recipes.all" : "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“ス",
173 "settings.recipes.dev" : "開発版", 184 "settings.recipes.dev" : "開発版",
174 "settings.recipes.headline" : "利用å¯èƒ½ãªã‚µãƒ¼ãƒ“ス", 185 "settings.recipes.headline" : "利用å¯èƒ½ãªã‚µãƒ¼ãƒ“ス",
@@ -221,11 +232,17 @@
221 "settings.services.discoverServices" : "サービスを探ã™", 232 "settings.services.discoverServices" : "サービスを探ã™",
222 "settings.services.headline" : "利用中ã®ã‚µãƒ¼ãƒ“ス", 233 "settings.services.headline" : "利用中ã®ã‚µãƒ¼ãƒ“ス",
223 "settings.services.noServicesAdded" : "ã¾ã ã€ã©ã®ã‚µãƒ¼ãƒ“スも追加ã•ã‚Œã¦ã„ã¾ã›ã‚“。", 234 "settings.services.noServicesAdded" : "ã¾ã ã€ã©ã®ã‚µãƒ¼ãƒ“スも追加ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "サービスを読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ",
225 "settings.services.tooltip.isDisabled" : "サービスãŒç„¡åŠ¹ã§ã™", 236 "settings.services.tooltip.isDisabled" : "サービスãŒç„¡åŠ¹ã§ã™",
226 "settings.services.tooltip.isMuted" : "無音ã¨ãªã£ã¦ã„ã¾ã™", 237 "settings.services.tooltip.isMuted" : "無音ã¨ãªã£ã¦ã„ã¾ã™",
227 "settings.services.tooltip.notificationsDisabled" : "通知ã¯ç„¡åŠ¹ã§ã™", 238 "settings.services.tooltip.notificationsDisabled" : "通知ã¯ç„¡åŠ¹ã§ã™",
228 "settings.services.updatedInfo" : "変更内容ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸ", 239 "settings.services.updatedInfo" : "変更内容ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸ",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "ãƒãƒ¼ãƒ ",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "法人", 246 "settings.user.form.accountType.company" : "法人",
230 "settings.user.form.accountType.individual" : "個人", 247 "settings.user.form.accountType.individual" : "個人",
231 "settings.user.form.accountType.label" : "アカウントã®ç¨®é¡ž", 248 "settings.user.form.accountType.label" : "アカウントã®ç¨®é¡ž",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "å", 252 "settings.user.form.firstname" : "å",
236 "settings.user.form.lastname" : "姓", 253 "settings.user.form.lastname" : "姓",
237 "settings.user.form.newPassword" : "æ–°ã—ã„パスワード", 254 "settings.user.form.newPassword" : "æ–°ã—ã„パスワード",
255 "settings.workspace.add.form.name" : "Name",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Name",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "ã‚‚ã†ä¸€åº¦è©¦ã™",
266 "settings.workspaces.updatedInfo" : "変更内容ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸ",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "サービスを追加", 270 "sidebar.addNewService" : "サービスを追加",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "通知ã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’無効化", 272 "sidebar.muteApp" : "通知ã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’無効化",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "設定", 274 "sidebar.settings" : "設定",
241 "sidebar.unmuteApp" : "通知ã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効化", 275 "sidebar.unmuteApp" : "通知ã¨ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効化",
242 "signup.company.label" : "法人", 276 "signup.company.label" : "法人",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Mattermost ã®ã‚ˆã†ãªã‚ªãƒ³ãƒ—レミス(自社é‹ç”¨ï¼‰åž‹ã®ã‚µãƒ¼ãƒ“スを追加ã§ãるよã†ã«ãªã‚Šã¾ã™", 292 "subscription.features.onpremise.mattermost" : "Mattermost ã®ã‚ˆã†ãªã‚ªãƒ³ãƒ—レミス(自社é‹ç”¨ï¼‰åž‹ã®ã‚µãƒ¼ãƒ“スを追加ã§ãるよã†ã«ãªã‚Šã¾ã™",
259 "subscription.features.proxy" : "プロキシ設定ãŒåˆ©ç”¨å¯èƒ½", 293 "subscription.features.proxy" : "プロキシ設定ãŒåˆ©ç”¨å¯èƒ½",
260 "subscription.features.spellchecker" : "スペルãƒã‚§ãƒƒã‚¯æ©Ÿèƒ½ã‚’ãŠä½¿ã„ã„ãŸã ã‘ã¾ã™", 294 "subscription.features.spellchecker" : "スペルãƒã‚§ãƒƒã‚¯æ©Ÿèƒ½ã‚’ãŠä½¿ã„ã„ãŸã ã‘ã¾ã™",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Franz Premium Supporter有料アカウントã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™", 296 "subscription.includedFeatures" : "Franz Premium Supporter有料アカウントã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™",
262 "subscription.paymentSessionError" : "支払ã„フォームをåˆæœŸåŒ–出æ¥ã¾ã›ã‚“", 297 "subscription.paymentSessionError" : "支払ã„フォームをåˆæœŸåŒ–出æ¥ã¾ã›ã‚“",
263 "subscription.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„", 298 "subscription.submit.label" : "Franzã®é–‹ç™ºã‚’支æ´ã—ãŸã„",
@@ -277,9 +312,20 @@
277 "tabs.item.reload" : "å†èª­ã¿è¾¼ã¿", 312 "tabs.item.reload" : "å†èª­ã¿è¾¼ã¿",
278 "validation.email" : "{field}ã¯æ­£ã—ãã‚ã‚Šã¾ã›ã‚“", 313 "validation.email" : "{field}ã¯æ­£ã—ãã‚ã‚Šã¾ã›ã‚“",
279 "validation.minLength" : "{field}ã¯å°‘ãªãã¨ã‚‚{length}文字以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“", 314 "validation.minLength" : "{field}ã¯å°‘ãªãã¨ã‚‚{length}文字以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“",
280 "validation.oneRequired" : "At least one is required", 315 "validation.oneRequired" : "å°‘ãªãã¨ã‚‚1ã¤ã¯å¿…è¦ã§ã™",
281 "validation.required" : "{field}ã¯å¿…é ˆã§ã™", 316 "validation.required" : "{field}ã¯å¿…é ˆã§ã™",
282 "validation.url" : "{field}ã¯æ­£ã—ã„URLã§ã¯ã‚ã‚Šã¾ã›ã‚“", 317 "validation.url" : "{field}ã¯æ­£ã—ã„URLã§ã¯ã‚ã‚Šã¾ã›ã‚“",
283 "welcome.loginButton" : "アカウントã«ãƒ­ã‚°ã‚¤ãƒ³", 318 "welcome.loginButton" : "アカウントã«ãƒ­ã‚°ã‚¤ãƒ³",
284 "welcome.signupButton" : "無料アカウントを作æˆ" 319 "welcome.signupButton" : "無料アカウントを作æˆ",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“ス",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json
index 4796cbe9f..af224c115 100644
--- a/src/i18n/locales/ka.json
+++ b/src/i18n/locales/ka.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ", 2 "app.errorHandler.action" : "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ",
3 "app.errorHandler.headline" : "Something went wrong", 3 "app.errorHandler.headline" : "Something went wrong",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Get a Franz Supporter License", 5 "feature.delayApp.action" : "Get a Franz Supporter License",
5 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", 7 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Franz-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ", 15 "global.api.unhealthy" : "Franz-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ",
15 "global.notConnectedToTheInternet" : "თქვენ áƒáƒ  ხáƒáƒ áƒ— ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბული.", 16 "global.notConnectedToTheInternet" : "თქვენ áƒáƒ  ხáƒáƒ áƒ— ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბული.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "შესვლáƒ", 44 "login.submit.label" : "შესვლáƒ",
44 "login.tokenExpired" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ¨áƒ˜ ხელáƒáƒ®áƒšáƒ.", 45 "login.tokenExpired" : "თქვენს სესიáƒáƒ¡ ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ, შედით áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ¨áƒ˜ ხელáƒáƒ®áƒšáƒ.",
45 "menu.app.about" : "Franz-ის შესáƒáƒ®áƒ”ბ", 46 "menu.app.about" : "Franz-ის შესáƒáƒ®áƒ”ბ",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Hide", 48 "menu.app.hide" : "Hide",
47 "menu.app.hideOthers" : "სხვების დáƒáƒ›áƒáƒšáƒ•áƒ", 49 "menu.app.hideOthers" : "სხვების დáƒáƒ›áƒáƒšáƒ•áƒ",
48 "menu.app.quit" : "გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ", 50 "menu.app.quit" : "გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ",
@@ -87,6 +89,11 @@
87 "menu.window" : "Window", 89 "menu.window" : "Window",
88 "menu.window.close" : "Close", 90 "menu.window.close" : "Close",
89 "menu.window.minimize" : "Minimize", 91 "menu.window.minimize" : "Minimize",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "ყველრსერვისი",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "მეილი", 97 "password.email.label" : "მეილი",
91 "password.headline" : "პáƒáƒ áƒáƒšáƒ˜áƒ¡ áƒáƒ¦áƒ“გენáƒ", 98 "password.headline" : "პáƒáƒ áƒáƒšáƒ˜áƒ¡ áƒáƒ¦áƒ“გენáƒ",
92 "password.link.login" : "შედით თქვენს áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ¨áƒ˜", 99 "password.link.login" : "შედით თქვენს áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ¨áƒ˜",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh no!", 117 "service.errorHandler.headline" : "Oh no!",
111 "service.errorHandler.message" : "შეცდáƒáƒ›áƒ", 118 "service.errorHandler.message" : "შეცდáƒáƒ›áƒ",
112 "service.errorHandler.text" : "{name} has failed to load.", 119 "service.errorHandler.text" : "{name} has failed to load.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "დáƒáƒ¬áƒ§áƒ”ბáƒ", 121 "services.getStarted" : "დáƒáƒ¬áƒ§áƒ”ბáƒ",
114 "services.welcome" : "მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბით Franz-ზე", 122 "services.welcome" : "მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბით Franz-ზე",
115 "settings.account.account.editButton" : "áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜áƒ¡ მáƒáƒ áƒ—ვáƒ", 123 "settings.account.account.editButton" : "áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜áƒ¡ მáƒáƒ áƒ—ვáƒ",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "მთáƒáƒ•áƒáƒ áƒ˜", 164 "settings.app.headlineGeneral" : "მთáƒáƒ•áƒáƒ áƒ˜",
157 "settings.app.headlineLanguage" : "ენáƒ", 165 "settings.app.headlineLanguage" : "ენáƒ",
158 "settings.app.headlineUpdates" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბები", 166 "settings.app.headlineUpdates" : "გáƒáƒœáƒáƒ®áƒšáƒ”ბები",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Changes require restart", 168 "settings.app.restartRequired" : "Changes require restart",
160 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Help us to translate Franz into your language.", 170 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Invite Friends", 177 "settings.navigation.inviteFriends" : "Invite Friends",
169 "settings.navigation.logout" : "გáƒáƒ¡áƒ•áƒšáƒ", 178 "settings.navigation.logout" : "გáƒáƒ¡áƒ•áƒšáƒ",
170 "settings.navigation.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები", 179 "settings.navigation.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "თქვენი სერვისები", 181 "settings.navigation.yourServices" : "თქვენი სერვისები",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "ყველრსერვისი", 183 "settings.recipes.all" : "ყველრსერვისი",
173 "settings.recipes.dev" : "გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ áƒ”ბáƒ", 184 "settings.recipes.dev" : "გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ áƒ”ბáƒ",
174 "settings.recipes.headline" : "ხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜ სერვისები", 185 "settings.recipes.headline" : "ხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜ სერვისები",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "All sounds are muted", 237 "settings.services.tooltip.isMuted" : "All sounds are muted",
227 "settings.services.tooltip.notificationsDisabled" : "შეტყáƒáƒ‘ინებები გáƒáƒ—იშულიáƒ", 238 "settings.services.tooltip.notificationsDisabled" : "შეტყáƒáƒ‘ინებები გáƒáƒ—იშულიáƒ",
228 "settings.services.updatedInfo" : "ცვლილებები შენáƒáƒ®áƒ£áƒšáƒ˜áƒ", 239 "settings.services.updatedInfo" : "ცვლილებები შენáƒáƒ®áƒ£áƒšáƒ˜áƒ",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "გუნდი",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "კáƒáƒ›áƒžáƒáƒœáƒ˜áƒ", 246 "settings.user.form.accountType.company" : "კáƒáƒ›áƒžáƒáƒœáƒ˜áƒ",
230 "settings.user.form.accountType.individual" : "ინდივიდუáƒáƒšáƒ£áƒ áƒ˜", 247 "settings.user.form.accountType.individual" : "ინდივიდუáƒáƒšáƒ£áƒ áƒ˜",
231 "settings.user.form.accountType.label" : "áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜áƒ¡ ტიპი", 248 "settings.user.form.accountType.label" : "áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜áƒ¡ ტიპი",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "First Name", 252 "settings.user.form.firstname" : "First Name",
236 "settings.user.form.lastname" : "Last Name", 253 "settings.user.form.lastname" : "Last Name",
237 "settings.user.form.newPassword" : "áƒáƒ®áƒáƒšáƒ˜ პáƒáƒ áƒáƒšáƒ˜", 254 "settings.user.form.newPassword" : "áƒáƒ®áƒáƒšáƒ˜ პáƒáƒ áƒáƒšáƒ˜",
255 "settings.workspace.add.form.name" : "Name",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Name",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "სცáƒáƒ“ეთ ხელáƒáƒ®áƒšáƒ",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Add new service", 270 "sidebar.addNewService" : "Add new service",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Disable notifications & audio", 272 "sidebar.muteApp" : "Disable notifications & audio",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები", 274 "sidebar.settings" : "პáƒáƒ áƒáƒ›áƒ”ტრები",
241 "sidebar.unmuteApp" : "Enable notifications & audio", 275 "sidebar.unmuteApp" : "Enable notifications & audio",
242 "signup.company.label" : "კáƒáƒ›áƒžáƒáƒœáƒ˜áƒ", 276 "signup.company.label" : "კáƒáƒ›áƒžáƒáƒœáƒ˜áƒ",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "ფáƒáƒ¡áƒ˜áƒáƒœáƒ˜ Franz-ის პრემიუმ მხáƒáƒ áƒ›áƒ“áƒáƒ›áƒ­áƒ”რი áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜", 296 "subscription.includedFeatures" : "ფáƒáƒ¡áƒ˜áƒáƒœáƒ˜ Franz-ის პრემიუმ მხáƒáƒ áƒ›áƒ“áƒáƒ›áƒ­áƒ”რი áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜",
262 "subscription.paymentSessionError" : "გáƒáƒ“áƒáƒ®áƒ“ის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ¡ ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერ მáƒáƒ®áƒ”რხდáƒ", 297 "subscription.paymentSessionError" : "გáƒáƒ“áƒáƒ®áƒ“ის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ¡ ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერ მáƒáƒ®áƒ”რხდáƒ",
263 "subscription.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ áƒ”ბáƒáƒ¡", 298 "subscription.submit.label" : "მინდრხელი შევუწყრFranz-ის გáƒáƒœáƒ•áƒ˜áƒ—áƒáƒ áƒ”ბáƒáƒ¡",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} is required", 316 "validation.required" : "{field} is required",
282 "validation.url" : "{field} is not a valid URL", 317 "validation.url" : "{field} is not a valid URL",
283 "welcome.loginButton" : "შედით თქვენს áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ¨áƒ˜", 318 "welcome.loginButton" : "შედით თქვენს áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ¨áƒ˜",
284 "welcome.signupButton" : "შექმენი áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜, ეს უფáƒáƒ¡áƒáƒ" 319 "welcome.signupButton" : "შექმენი áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜, ეს უფáƒáƒ¡áƒáƒ",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "ყველრსერვისი",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index 00d7ddd06..2854fcb09 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -1,6 +1,7 @@
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.delayApp.action" : "Neem een Franz Supporter Licentie ", 5 "feature.delayApp.action" : "Neem een Franz Supporter Licentie ",
5 "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",
6 "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.", 7 "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services", 15 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services",
15 "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.", 16 "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Inloggen", 44 "login.submit.label" : "Inloggen",
44 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", 45 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
45 "menu.app.about" : "Over Franz", 46 "menu.app.about" : "Over Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Verbergen", 48 "menu.app.hide" : "Verbergen",
47 "menu.app.hideOthers" : "Andere Verbergen", 49 "menu.app.hideOthers" : "Andere Verbergen",
48 "menu.app.quit" : "Afsluiten", 50 "menu.app.quit" : "Afsluiten",
@@ -87,6 +89,11 @@
87 "menu.window" : "Venster", 89 "menu.window" : "Venster",
88 "menu.window.close" : "Sluiten", 90 "menu.window.close" : "Sluiten",
89 "menu.window.minimize" : "Minimaliseren", 91 "menu.window.minimize" : "Minimaliseren",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Alle services",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "E-mailadres", 97 "password.email.label" : "E-mailadres",
91 "password.headline" : "Wachtwoord resetten", 98 "password.headline" : "Wachtwoord resetten",
92 "password.link.login" : "Log in op je account", 99 "password.link.login" : "Log in op je account",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh nee!", 117 "service.errorHandler.headline" : "Oh nee!",
111 "service.errorHandler.message" : "Fout", 118 "service.errorHandler.message" : "Fout",
112 "service.errorHandler.text" : "{name} kon niet geladen worden.", 119 "service.errorHandler.text" : "{name} kon niet geladen worden.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Beginnen", 121 "services.getStarted" : "Beginnen",
114 "services.welcome" : "Welkom bij Franz", 122 "services.welcome" : "Welkom bij Franz",
115 "settings.account.account.editButton" : "Account bewerken", 123 "settings.account.account.editButton" : "Account bewerken",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Algemeen", 164 "settings.app.headlineGeneral" : "Algemeen",
157 "settings.app.headlineLanguage" : "Taal", 165 "settings.app.headlineLanguage" : "Taal",
158 "settings.app.headlineUpdates" : "Updates", 166 "settings.app.headlineUpdates" : "Updates",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig", 168 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig",
160 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.", 170 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Nodig vrienden uit", 177 "settings.navigation.inviteFriends" : "Nodig vrienden uit",
169 "settings.navigation.logout" : "Uitloggen", 178 "settings.navigation.logout" : "Uitloggen",
170 "settings.navigation.settings" : "Instellingen", 179 "settings.navigation.settings" : "Instellingen",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Jouw services", 181 "settings.navigation.yourServices" : "Jouw services",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Alle services", 183 "settings.recipes.all" : "Alle services",
173 "settings.recipes.dev" : "Ontwikkeling", 184 "settings.recipes.dev" : "Ontwikkeling",
174 "settings.recipes.headline" : "Beschikbare services", 185 "settings.recipes.headline" : "Beschikbare services",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld", 237 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld",
227 "settings.services.tooltip.notificationsDisabled" : "Notificaties staan uit", 238 "settings.services.tooltip.notificationsDisabled" : "Notificaties staan uit",
228 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen", 239 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Team",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Bedrijf", 246 "settings.user.form.accountType.company" : "Bedrijf",
230 "settings.user.form.accountType.individual" : "Particulier", 247 "settings.user.form.accountType.individual" : "Particulier",
231 "settings.user.form.accountType.label" : "Account type", 248 "settings.user.form.accountType.label" : "Account type",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Voornaam", 252 "settings.user.form.firstname" : "Voornaam",
236 "settings.user.form.lastname" : "Achternaam", 253 "settings.user.form.lastname" : "Achternaam",
237 "settings.user.form.newPassword" : "Nieuw wachtwoord", 254 "settings.user.form.newPassword" : "Nieuw wachtwoord",
255 "settings.workspace.add.form.name" : "Naam",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Naam",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw",
266 "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Nieuw service toevoegen", 270 "sidebar.addNewService" : "Nieuw service toevoegen",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Berichten & geluid uitschakelen", 272 "sidebar.muteApp" : "Berichten & geluid uitschakelen",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Instellingen", 274 "sidebar.settings" : "Instellingen",
241 "sidebar.unmuteApp" : "Berichten & geluid inschakelen", 275 "sidebar.unmuteApp" : "Berichten & geluid inschakelen",
242 "signup.company.label" : "Bedrijf", 276 "signup.company.label" : "Bedrijf",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe", 292 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe",
259 "subscription.features.proxy" : "Proxy ondersteuning voor services", 293 "subscription.features.proxy" : "Proxy ondersteuning voor services",
260 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck", 294 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Een betalend account voor Franz omvat", 296 "subscription.includedFeatures" : "Een betalend account voor Franz omvat",
262 "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden", 297 "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden",
263 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen", 298 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} is vereist", 316 "validation.required" : "{field} is vereist",
282 "validation.url" : "{field} is niet een geldige URL", 317 "validation.url" : "{field} is niet een geldige URL",
283 "welcome.loginButton" : "Inloggen op je account", 318 "welcome.loginButton" : "Inloggen op je account",
284 "welcome.signupButton" : "Maak een gratis account aan" 319 "welcome.signupButton" : "Maak een gratis account aan",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Alle services",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index 782c29a6c..03d4474c1 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -1,6 +1,7 @@
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.delayApp.action" : "Sponsor Franz", 5 "feature.delayApp.action" : "Sponsor Franz",
5 "feature.delayApp.headline" : "Sponsor Franz om wachten over te slaan", 6 "feature.delayApp.headline" : "Sponsor Franz om wachten over te slaan",
6 "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.", 7 "feature.delayApp.text" : "Franz gaat over {seconds} seconden verder.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz-services", 15 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz-services",
15 "global.notConnectedToTheInternet" : "U bent niet verbonden met het internet.", 16 "global.notConnectedToTheInternet" : "U bent niet verbonden met het internet.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Inloggen", 44 "login.submit.label" : "Inloggen",
44 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", 45 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
45 "menu.app.about" : "Over Franz", 46 "menu.app.about" : "Over Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Verbergen", 48 "menu.app.hide" : "Verbergen",
47 "menu.app.hideOthers" : "Andere verbergen", 49 "menu.app.hideOthers" : "Andere verbergen",
48 "menu.app.quit" : "Afsluiten", 50 "menu.app.quit" : "Afsluiten",
@@ -87,6 +89,11 @@
87 "menu.window" : "Venster", 89 "menu.window" : "Venster",
88 "menu.window.close" : "Sluiten", 90 "menu.window.close" : "Sluiten",
89 "menu.window.minimize" : "Minimaliseren", 91 "menu.window.minimize" : "Minimaliseren",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Alle services",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "E-mailadres", 97 "password.email.label" : "E-mailadres",
91 "password.headline" : "Wachtwoord vergeten", 98 "password.headline" : "Wachtwoord vergeten",
92 "password.link.login" : "Log in op je account", 99 "password.link.login" : "Log in op je account",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh nee!", 117 "service.errorHandler.headline" : "Oh nee!",
111 "service.errorHandler.message" : "Fout", 118 "service.errorHandler.message" : "Fout",
112 "service.errorHandler.text" : "{name} kon niet geladen worden.", 119 "service.errorHandler.text" : "{name} kon niet geladen worden.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Begin", 121 "services.getStarted" : "Begin",
114 "services.welcome" : "Welkom bij Franz", 122 "services.welcome" : "Welkom bij Franz",
115 "settings.account.account.editButton" : "Bewerk account", 123 "settings.account.account.editButton" : "Bewerk account",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Algemeen", 164 "settings.app.headlineGeneral" : "Algemeen",
157 "settings.app.headlineLanguage" : "Taal", 165 "settings.app.headlineLanguage" : "Taal",
158 "settings.app.headlineUpdates" : "Updates", 166 "settings.app.headlineUpdates" : "Updates",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig", 168 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig",
160 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.", 170 "settings.app.translationHelp" : "Help ons om Franz te vertalen naar uw taal.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Nodig vrienden uit", 177 "settings.navigation.inviteFriends" : "Nodig vrienden uit",
169 "settings.navigation.logout" : "Uitloggen", 178 "settings.navigation.logout" : "Uitloggen",
170 "settings.navigation.settings" : "Instellingen", 179 "settings.navigation.settings" : "Instellingen",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Jouw services", 181 "settings.navigation.yourServices" : "Jouw services",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Alle services", 183 "settings.recipes.all" : "Alle services",
173 "settings.recipes.dev" : "Ontwikkeling", 184 "settings.recipes.dev" : "Ontwikkeling",
174 "settings.recipes.headline" : "Beschikbare services", 185 "settings.recipes.headline" : "Beschikbare services",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld", 237 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld",
227 "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld", 238 "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld",
228 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen", 239 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Team",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Bedrijf", 246 "settings.user.form.accountType.company" : "Bedrijf",
230 "settings.user.form.accountType.individual" : "Individueel", 247 "settings.user.form.accountType.individual" : "Individueel",
231 "settings.user.form.accountType.label" : "Accounttype", 248 "settings.user.form.accountType.label" : "Accounttype",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Voornaam", 252 "settings.user.form.firstname" : "Voornaam",
236 "settings.user.form.lastname" : "Achternaam", 253 "settings.user.form.lastname" : "Achternaam",
237 "settings.user.form.newPassword" : "Nieuw wachtwoord", 254 "settings.user.form.newPassword" : "Nieuw wachtwoord",
255 "settings.workspace.add.form.name" : "Naam",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Naam",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Probeer opnieuw",
266 "settings.workspaces.updatedInfo" : "Je wijzigingen zijn opgeslagen",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Voeg service toe", 270 "sidebar.addNewService" : "Voeg service toe",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Schakel berichten & geluid uit", 272 "sidebar.muteApp" : "Schakel berichten & geluid uit",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Instellingen", 274 "sidebar.settings" : "Instellingen",
241 "sidebar.unmuteApp" : "Berichten & geluid inschakelen", 275 "sidebar.unmuteApp" : "Berichten & geluid inschakelen",
242 "signup.company.label" : "Bedrijf", 276 "signup.company.label" : "Bedrijf",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe", 292 "subscription.features.onpremise.mattermost" : "Voeg op-locatie\/gehoste diensten zoals Mattermost toe",
259 "subscription.features.proxy" : "Proxy understeuning voor diensten", 293 "subscription.features.proxy" : "Proxy understeuning voor diensten",
260 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck", 294 "subscription.features.spellchecker" : "Ondersteuning voor spellingscheck",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat", 296 "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat",
262 "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren", 297 "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren",
263 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen", 298 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} is vereist", 316 "validation.required" : "{field} is vereist",
282 "validation.url" : "{field} is niet een geldige URL", 317 "validation.url" : "{field} is niet een geldige URL",
283 "welcome.loginButton" : "Log in op je account", 318 "welcome.loginButton" : "Log in op je account",
284 "welcome.signupButton" : "Maak een gratis account" 319 "welcome.signupButton" : "Maak een gratis account",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Alle services",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index dd70f25f7..591b13145 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -1,21 +1,22 @@
1{ 1{
2 "app.errorHandler.action" : "Przeładuj", 2 "app.errorHandler.action" : "Przeładuj",
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.delayApp.action" : "Uzyskaj licencjÄ™ Franz Supporter", 5 "feature.delayApp.action" : "Uzyskaj licencjÄ™ Franz Supporter",
5 "feature.delayApp.headline" : "Aby nie czekać kup licencję Franz Supporter", 6 "feature.delayApp.headline" : "Aby nie czekać kup licencję Franz Supporter",
6 "feature.delayApp.text" : "Franz będzie kontynuował za {seconds} sekund.", 7 "feature.delayApp.text" : "Franz będzie kontynuował za {seconds} sekund.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Wyślij nam maila",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Udostępnij na Facebooku",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Udostępnij na Twitterze",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz jest lepszy, gdy tworzymy go razem!",
11 "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" : "Dodałem {count} serwisów do Franza! Pobierz darmową aplikacją WhatsApp, Messenger, Slack, Skype i inne na www.meetfranz.com",
12 "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 @MeetFranz", 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.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "Powiedz znajomym i kolegom o tym, jak odlotowy jest Franz i pomóż nam go spopularyzować.",
14 "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",
15 "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.", 16 "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.",
16 "global.spellchecker.useDefault" : "Użyj domyślnego dla systemu ({default})", 17 "global.spellchecker.useDefault" : "Użyj domyślnego dla systemu ({default})",
17 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "Automatycznie wykryj język",
18 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "Automatycznie",
19 "global.spellchecking.language" : "Język słownika", 20 "global.spellchecking.language" : "Język słownika",
20 "import.headline" : "Importuj usługi Franz 4", 21 "import.headline" : "Importuj usługi Franz 4",
21 "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",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Zaloguj siÄ™", 44 "login.submit.label" : "Zaloguj siÄ™",
44 "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.", 45 "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.",
45 "menu.app.about" : "O Franz", 46 "menu.app.about" : "O Franz",
47 "menu.app.announcement" : "Co słychać?",
46 "menu.app.hide" : "Ukryj", 48 "menu.app.hide" : "Ukryj",
47 "menu.app.hideOthers" : "Ukryj pozostałe", 49 "menu.app.hideOthers" : "Ukryj pozostałe",
48 "menu.app.quit" : "Zakończ", 50 "menu.app.quit" : "Zakończ",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Wsparcie", 72 "menu.help.support" : "Wsparcie",
71 "menu.help.tos" : "Warunki świadczenia usług", 73 "menu.help.tos" : "Warunki świadczenia usług",
72 "menu.services" : "Usługi", 74 "menu.services" : "Usługi",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "WÅ‚Ä…cz poprzedni serwis",
74 "menu.services.addNewService" : "Dodaj nową usługę...", 76 "menu.services.addNewService" : "Dodaj nową usługę...",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "WÅ‚Ä…cz kolejny serwis",
76 "menu.view" : "Widok", 78 "menu.view" : "Widok",
77 "menu.view.enterFullScreen" : "Włącz tryb pełnoekranowy", 79 "menu.view.enterFullScreen" : "Włącz tryb pełnoekranowy",
78 "menu.view.exitFullScreen" : "Zakończ tryb pełnoekranowy", 80 "menu.view.exitFullScreen" : "Zakończ tryb pełnoekranowy",
@@ -87,6 +89,11 @@
87 "menu.window" : "Okno", 89 "menu.window" : "Okno",
88 "menu.window.close" : "Zamknij", 90 "menu.window.close" : "Zamknij",
89 "menu.window.minimize" : "Zminimalizuj", 91 "menu.window.minimize" : "Zminimalizuj",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Wszystkie usługi",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Adres email", 97 "password.email.label" : "Adres email",
91 "password.headline" : "Przypomnij hasło", 98 "password.headline" : "Przypomnij hasło",
92 "password.link.login" : "Zaloguj siÄ™ na swoje konto", 99 "password.link.login" : "Zaloguj siÄ™ na swoje konto",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "O nie!", 117 "service.errorHandler.headline" : "O nie!",
111 "service.errorHandler.message" : "BÅ‚Ä…d", 118 "service.errorHandler.message" : "BÅ‚Ä…d",
112 "service.errorHandler.text" : "Nie udało się załadować {name}.", 119 "service.errorHandler.text" : "Nie udało się załadować {name}.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Zacznij", 121 "services.getStarted" : "Zacznij",
114 "services.welcome" : "Witaj w programie Franz", 122 "services.welcome" : "Witaj w programie Franz",
115 "settings.account.account.editButton" : "Modyfikuj konta", 123 "settings.account.account.editButton" : "Modyfikuj konta",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Ogólne", 164 "settings.app.headlineGeneral" : "Ogólne",
157 "settings.app.headlineLanguage" : "Język", 165 "settings.app.headlineLanguage" : "Język",
158 "settings.app.headlineUpdates" : "Aktualizacje", 166 "settings.app.headlineUpdates" : "Aktualizacje",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Zmiany. wymagajÄ… ponownego uruchomienia", 168 "settings.app.restartRequired" : "Zmiany. wymagajÄ… ponownego uruchomienia",
160 "settings.app.subheadlineCache" : "Pamięć podręczna", 169 "settings.app.subheadlineCache" : "Pamięć podręczna",
161 "settings.app.translationHelp" : "Pomóż nam tłumaczyć Franz na Twój język.", 170 "settings.app.translationHelp" : "Pomóż nam tłumaczyć Franz na Twój język.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "ZaproÅ› znajomych", 177 "settings.navigation.inviteFriends" : "ZaproÅ› znajomych",
169 "settings.navigation.logout" : "Wyloguj", 178 "settings.navigation.logout" : "Wyloguj",
170 "settings.navigation.settings" : "Ustawienia", 179 "settings.navigation.settings" : "Ustawienia",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Twoje usługi", 181 "settings.navigation.yourServices" : "Twoje usługi",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Wszystkie usługi", 183 "settings.recipes.all" : "Wszystkie usługi",
173 "settings.recipes.dev" : "Rozwojowe", 184 "settings.recipes.dev" : "Rozwojowe",
174 "settings.recipes.headline" : "Dostępne usługi", 185 "settings.recipes.headline" : "Dostępne usługi",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Wszystkie dźwięki są wyciszone", 237 "settings.services.tooltip.isMuted" : "Wszystkie dźwięki są wyciszone",
227 "settings.services.tooltip.notificationsDisabled" : "Powiadomienia sÄ… nieaktywne", 238 "settings.services.tooltip.notificationsDisabled" : "Powiadomienia sÄ… nieaktywne",
228 "settings.services.updatedInfo" : "Zmiany zostały zapisane", 239 "settings.services.updatedInfo" : "Zmiany zostały zapisane",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Zespół",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Firma", 246 "settings.user.form.accountType.company" : "Firma",
230 "settings.user.form.accountType.individual" : "Prywatne", 247 "settings.user.form.accountType.individual" : "Prywatne",
231 "settings.user.form.accountType.label" : "Typ konta", 248 "settings.user.form.accountType.label" : "Typ konta",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "ImiÄ™", 252 "settings.user.form.firstname" : "ImiÄ™",
236 "settings.user.form.lastname" : "Nazwisko", 253 "settings.user.form.lastname" : "Nazwisko",
237 "settings.user.form.newPassword" : "Nowe hasło", 254 "settings.user.form.newPassword" : "Nowe hasło",
255 "settings.workspace.add.form.name" : "Name",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Name",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Spróbuj ponownie",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Dodaj kolejną usługę", 270 "sidebar.addNewService" : "Dodaj kolejną usługę",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Wyłącz powiadomienia i dźwięki", 272 "sidebar.muteApp" : "Wyłącz powiadomienia i dźwięki",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Ustawienia", 274 "sidebar.settings" : "Ustawienia",
241 "sidebar.unmuteApp" : "Włącz powiadomienia i dźwięki", 275 "sidebar.unmuteApp" : "Włącz powiadomienia i dźwięki",
242 "signup.company.label" : "Firma", 276 "signup.company.label" : "Firma",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Dodaj prywatnie hostowane usługi takie jak Mattermost", 292 "subscription.features.onpremise.mattermost" : "Dodaj prywatnie hostowane usługi takie jak Mattermost",
259 "subscription.features.proxy" : "Obsługa proxy dla usług", 293 "subscription.features.proxy" : "Obsługa proxy dla usług",
260 "subscription.features.spellchecker" : "Wsparcie dla sprawdzania pisowni", 294 "subscription.features.spellchecker" : "Wsparcie dla sprawdzania pisowni",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "PÅ‚atne konto Franz Premium obejmuje", 296 "subscription.includedFeatures" : "PÅ‚atne konto Franz Premium obejmuje",
262 "subscription.paymentSessionError" : "Nie można wczytać formularza płatności\"", 297 "subscription.paymentSessionError" : "Nie można wczytać formularza płatności\"",
263 "subscription.submit.label" : "Chcę wspierać rozwój aplikacji Franz", 298 "subscription.submit.label" : "Chcę wspierać rozwój aplikacji Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "Pole {field} jest wymagane", 316 "validation.required" : "Pole {field} jest wymagane",
282 "validation.url" : "Pole {field} nie jest poprawnym ciÄ…giem URL.", 317 "validation.url" : "Pole {field} nie jest poprawnym ciÄ…giem URL.",
283 "welcome.loginButton" : "Zaloguj siÄ™ na swoje konto", 318 "welcome.loginButton" : "Zaloguj siÄ™ na swoje konto",
284 "welcome.signupButton" : "Stwórz darmowe konto" 319 "welcome.signupButton" : "Stwórz darmowe konto",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Wszystkie usługi",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index 490771c39..4ad2fac08 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Recarregar", 2 "app.errorHandler.action" : "Recarregar",
3 "app.errorHandler.headline" : "Alguma coisa deu errado", 3 "app.errorHandler.headline" : "Alguma coisa deu errado",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Adquira uma licença Franz Supporter", 5 "feature.delayApp.action" : "Adquira uma licença Franz Supporter",
5 "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 Franz Supporter para pular o tempo de espera",
6 "feature.delayApp.text" : "Franz continuará em {seconds} segundos.", 7 "feature.delayApp.text" : "Franz continuará em {seconds} segundos.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Compartilhar no Twitter", 10 "feature.shareFranz.action.twitter" : "Compartilhar no Twitter",
10 "feature.shareFranz.headline" : "Franz é melhor em grupo!", 11 "feature.shareFranz.headline" : "Franz é melhor em grupo!",
11 "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",
12 "feature.shareFranz.shareText.twitter" : "Adicionei o serviço de {count} ao Franz! Adquira o app grátis para usar WhatsApp, Messenger, Slack, Skype e mais em www.meetfranz.com \/cc @MeetFranz", 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.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 quão incrível Franz é e nos ajude a espalhar a mensagem. ",
14 "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.",
15 "global.notConnectedToTheInternet" : "Você não está conectado à internet", 16 "global.notConnectedToTheInternet" : "Você não está conectado à internet",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Entrar", 44 "login.submit.label" : "Entrar",
44 "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.", 45 "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.",
45 "menu.app.about" : "Sobre Franz", 46 "menu.app.about" : "Sobre Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Ocultar", 48 "menu.app.hide" : "Ocultar",
47 "menu.app.hideOthers" : "Ocultar Outros", 49 "menu.app.hideOthers" : "Ocultar Outros",
48 "menu.app.quit" : "Sair", 50 "menu.app.quit" : "Sair",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Suporte", 72 "menu.help.support" : "Suporte",
71 "menu.help.tos" : "Termos de Serviço", 73 "menu.help.tos" : "Termos de Serviço",
72 "menu.services" : "Serviços", 74 "menu.services" : "Serviços",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "Pular para serviço anterior",
74 "menu.services.addNewService" : "Adicionar Novo Serviço", 76 "menu.services.addNewService" : "Adicionar Novo Serviço",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "Pular para próximo serviço",
76 "menu.view" : "Visualizar ", 78 "menu.view" : "Visualizar ",
77 "menu.view.enterFullScreen" : "Modo Tela Cheia", 79 "menu.view.enterFullScreen" : "Modo Tela Cheia",
78 "menu.view.exitFullScreen" : "Sair da Tela Cheia", 80 "menu.view.exitFullScreen" : "Sair da Tela Cheia",
@@ -87,6 +89,11 @@
87 "menu.window" : "Modo Janela", 89 "menu.window" : "Modo Janela",
88 "menu.window.close" : "Fechar", 90 "menu.window.close" : "Fechar",
89 "menu.window.minimize" : "Minimizar", 91 "menu.window.minimize" : "Minimizar",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Todos os serviços",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "E-mail", 97 "password.email.label" : "E-mail",
91 "password.headline" : "Trocar senha", 98 "password.headline" : "Trocar senha",
92 "password.link.login" : "Fazer login na sua conta", 99 "password.link.login" : "Fazer login na sua conta",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Ah, não!", 117 "service.errorHandler.headline" : "Ah, não!",
111 "service.errorHandler.message" : "Erro", 118 "service.errorHandler.message" : "Erro",
112 "service.errorHandler.text" : "{name} não pôde ser carregado.", 119 "service.errorHandler.text" : "{name} não pôde ser carregado.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Iniciar", 121 "services.getStarted" : "Iniciar",
114 "services.welcome" : "Bem-vindo ao Franz!", 122 "services.welcome" : "Bem-vindo ao Franz!",
115 "settings.account.account.editButton" : "Editar conta", 123 "settings.account.account.editButton" : "Editar conta",
@@ -131,7 +139,7 @@
131 "settings.account.manageSubscription.label" : "Gerencie a sua assinatura", 139 "settings.account.manageSubscription.label" : "Gerencie a sua assinatura",
132 "settings.account.successInfo" : "Suas alterações foram gravadas", 140 "settings.account.successInfo" : "Suas alterações foram gravadas",
133 "settings.account.tryReloadServices" : "Tente novamente", 141 "settings.account.tryReloadServices" : "Tente novamente",
134 "settings.account.tryReloadUserInfoRequest" : "Tente novamente", 142 "settings.account.tryReloadUserInfoRequest" : "Tentar novamente",
135 "settings.account.userInfoRequestFailed" : "Não foi possível carregar as informações do usuário", 143 "settings.account.userInfoRequestFailed" : "Não foi possível carregar as informações do usuário",
136 "settings.app.buttonClearAllCache" : "Limpar cache", 144 "settings.app.buttonClearAllCache" : "Limpar cache",
137 "settings.app.buttonInstallUpdate" : "Reiniciar e instalar atualização", 145 "settings.app.buttonInstallUpdate" : "Reiniciar e instalar atualização",
@@ -156,8 +164,9 @@
156 "settings.app.headlineGeneral" : "Geral", 164 "settings.app.headlineGeneral" : "Geral",
157 "settings.app.headlineLanguage" : "Idioma", 165 "settings.app.headlineLanguage" : "Idioma",
158 "settings.app.headlineUpdates" : "Atualizações", 166 "settings.app.headlineUpdates" : "Atualizações",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "As atualizações exigem reiniciar o sistema", 168 "settings.app.restartRequired" : "As atualizações exigem reiniciar o sistema",
160 "settings.app.subheadlineCache" : "Cachê", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Ajude-nos a traduzir o Franz para seu idioma.", 170 "settings.app.translationHelp" : "Ajude-nos a traduzir o Franz para seu idioma.",
162 "settings.app.updateStatusAvailable" : "Atualização disponível, baixando...", 171 "settings.app.updateStatusAvailable" : "Atualização disponível, baixando...",
163 "settings.app.updateStatusSearching" : "Buscando atualizações", 172 "settings.app.updateStatusSearching" : "Buscando atualizações",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Convidar Amigos", 177 "settings.navigation.inviteFriends" : "Convidar Amigos",
169 "settings.navigation.logout" : "Sair", 178 "settings.navigation.logout" : "Sair",
170 "settings.navigation.settings" : "Ajustes", 179 "settings.navigation.settings" : "Ajustes",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Seus serviços", 181 "settings.navigation.yourServices" : "Seus serviços",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Todos os serviços", 183 "settings.recipes.all" : "Todos os serviços",
173 "settings.recipes.dev" : "Desenvolvimento", 184 "settings.recipes.dev" : "Desenvolvimento",
174 "settings.recipes.headline" : "Serviços disponíveis", 185 "settings.recipes.headline" : "Serviços disponíveis",
@@ -221,11 +232,17 @@
221 "settings.services.discoverServices" : "Descobrir serviços", 232 "settings.services.discoverServices" : "Descobrir serviços",
222 "settings.services.headline" : "Seus serviços", 233 "settings.services.headline" : "Seus serviços",
223 "settings.services.noServicesAdded" : "Você ainda não adicionou nenhum serviço.", 234 "settings.services.noServicesAdded" : "Você ainda não adicionou nenhum serviço.",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "Não foi possível carregar os seus serviços",
225 "settings.services.tooltip.isDisabled" : "O serviço está desativado", 236 "settings.services.tooltip.isDisabled" : "O serviço está desativado",
226 "settings.services.tooltip.isMuted" : "Sem som", 237 "settings.services.tooltip.isMuted" : "Sem som",
227 "settings.services.tooltip.notificationsDisabled" : "Notificações desativadas", 238 "settings.services.tooltip.notificationsDisabled" : "Notificações desativadas",
228 "settings.services.updatedInfo" : "Suas mudanças foram gravadas", 239 "settings.services.updatedInfo" : "Suas mudanças foram gravadas",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Equipe",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Empresa", 246 "settings.user.form.accountType.company" : "Empresa",
230 "settings.user.form.accountType.individual" : "Pessoal", 247 "settings.user.form.accountType.individual" : "Pessoal",
231 "settings.user.form.accountType.label" : "Tipo de conta", 248 "settings.user.form.accountType.label" : "Tipo de conta",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Nome", 252 "settings.user.form.firstname" : "Nome",
236 "settings.user.form.lastname" : "Sobrenome", 253 "settings.user.form.lastname" : "Sobrenome",
237 "settings.user.form.newPassword" : "Nova senha", 254 "settings.user.form.newPassword" : "Nova senha",
255 "settings.workspace.add.form.name" : "Nome",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Nome",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Try again",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Adicionar novo serviço", 270 "sidebar.addNewService" : "Adicionar novo serviço",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Desativar notificações e áudio", 272 "sidebar.muteApp" : "Desativar notificações e áudio",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Ajustes", 274 "sidebar.settings" : "Ajustes",
241 "sidebar.unmuteApp" : "Ativar notificações e áudio", 275 "sidebar.unmuteApp" : "Ativar notificações e áudio",
242 "signup.company.label" : "Empresa", 276 "signup.company.label" : "Empresa",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Adicionar serviços locais\/hospedados como o Mattermost", 292 "subscription.features.onpremise.mattermost" : "Adicionar serviços locais\/hospedados como o Mattermost",
259 "subscription.features.proxy" : "Suporte de proxy para serviços", 293 "subscription.features.proxy" : "Suporte de proxy para serviços",
260 "subscription.features.spellchecker" : "Suporte para corretor ortográfico", 294 "subscription.features.spellchecker" : "Suporte para corretor ortográfico",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "A conta Apoiador Franz Premium inclui", 296 "subscription.includedFeatures" : "A conta Apoiador Franz Premium inclui",
262 "subscription.paymentSessionError" : "Não foi possível abrir o formulário de pagamento", 297 "subscription.paymentSessionError" : "Não foi possível abrir o formulário de pagamento",
263 "subscription.submit.label" : "Eu quero apoiar o desenvolvimento do Franz", 298 "subscription.submit.label" : "Eu quero apoiar o desenvolvimento do Franz",
@@ -277,9 +312,20 @@
277 "tabs.item.reload" : "Recarregar", 312 "tabs.item.reload" : "Recarregar",
278 "validation.email" : "inválido", 313 "validation.email" : "inválido",
279 "validation.minLength" : "{campo} deve ter pelo menos {comprimento} mais caracteres ", 314 "validation.minLength" : "{campo} deve ter pelo menos {comprimento} mais caracteres ",
280 "validation.oneRequired" : "At least one is required", 315 "validation.oneRequired" : "Necessário pelo menos um",
281 "validation.required" : "{campo} obrigatório", 316 "validation.required" : "{campo} obrigatório",
282 "validation.url" : "{campo} essa URL não é válida", 317 "validation.url" : "{campo} essa URL não é válida",
283 "welcome.loginButton" : "Entrar na sua conta", 318 "welcome.loginButton" : "Entrar na sua conta",
284 "welcome.signupButton" : "Criar uma conta grátis" 319 "welcome.signupButton" : "Criar uma conta grátis",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Todos os serviços",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index 7e23aa0ba..302284ab8 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -1,15 +1,16 @@
1{ 1{
2 "app.errorHandler.action" : "Recarregar", 2 "app.errorHandler.action" : "Recarregar",
3 "app.errorHandler.headline" : "Alguma coisa correu mal", 3 "app.errorHandler.headline" : "Alguma coisa correu mal",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Faz parte do grupo de apoio do Franz", 5 "feature.delayApp.action" : "Faz parte do grupo de apoio do Franz",
5 "feature.delayApp.headline" : "Por favor compre uma licença Franz Supporter para saltar a fila de espera", 6 "feature.delayApp.headline" : "Por favor compre uma licença Franz Supporter para saltar a fila de espera",
6 "feature.delayApp.text" : "Franz irá continuar em {seconds} segundos.", 7 "feature.delayApp.text" : "Franz irá continuar em {seconds} segundos.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Enviar por e-mail",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "Compartilahr no Facebook",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Compartilhar no Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Não foi possível estabelecer ligação aos serviços do Franz", 15 "global.api.unhealthy" : "Não foi possível estabelecer ligação aos serviços do Franz",
15 "global.notConnectedToTheInternet" : "Não estás ligado à Internet", 16 "global.notConnectedToTheInternet" : "Não estás ligado à Internet",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Iniciar sessão", 44 "login.submit.label" : "Iniciar sessão",
44 "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.", 45 "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.",
45 "menu.app.about" : "Sobre o Franz", 46 "menu.app.about" : "Sobre o Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Ocultar", 48 "menu.app.hide" : "Ocultar",
47 "menu.app.hideOthers" : "Ocultar Outros", 49 "menu.app.hideOthers" : "Ocultar Outros",
48 "menu.app.quit" : "Sair", 50 "menu.app.quit" : "Sair",
@@ -87,6 +89,11 @@
87 "menu.window" : "Janela", 89 "menu.window" : "Janela",
88 "menu.window.close" : "Fechar", 90 "menu.window.close" : "Fechar",
89 "menu.window.minimize" : "Minimizar", 91 "menu.window.minimize" : "Minimizar",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Todos os serviços",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Endereço de e-mail", 97 "password.email.label" : "Endereço de e-mail",
91 "password.headline" : "Repor a minha palavra-passe", 98 "password.headline" : "Repor a minha palavra-passe",
92 "password.link.login" : "Iniciar sessão", 99 "password.link.login" : "Iniciar sessão",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Oh não!", 117 "service.errorHandler.headline" : "Oh não!",
111 "service.errorHandler.message" : "Erro", 118 "service.errorHandler.message" : "Erro",
112 "service.errorHandler.text" : "{name} falhou o carregamento", 119 "service.errorHandler.text" : "{name} falhou o carregamento",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Vamos começar", 121 "services.getStarted" : "Vamos começar",
114 "services.welcome" : "Bem-vindo ao Franz", 122 "services.welcome" : "Bem-vindo ao Franz",
115 "settings.account.account.editButton" : "Editar conta", 123 "settings.account.account.editButton" : "Editar conta",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Geral", 164 "settings.app.headlineGeneral" : "Geral",
157 "settings.app.headlineLanguage" : "Idioma", 165 "settings.app.headlineLanguage" : "Idioma",
158 "settings.app.headlineUpdates" : "Atualizações", 166 "settings.app.headlineUpdates" : "Atualizações",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Alterações requerem reinício", 168 "settings.app.restartRequired" : "Alterações requerem reinício",
160 "settings.app.subheadlineCache" : "Cache", 169 "settings.app.subheadlineCache" : "Cache",
161 "settings.app.translationHelp" : "Ajude-nos a traduzir a Franz para a sua língua.", 170 "settings.app.translationHelp" : "Ajude-nos a traduzir a Franz para a sua língua.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Convide Amigos", 177 "settings.navigation.inviteFriends" : "Convide Amigos",
169 "settings.navigation.logout" : "Terminar sessão", 178 "settings.navigation.logout" : "Terminar sessão",
170 "settings.navigation.settings" : "Definições", 179 "settings.navigation.settings" : "Definições",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Os seus serviços", 181 "settings.navigation.yourServices" : "Os seus serviços",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Todos os serviços", 183 "settings.recipes.all" : "Todos os serviços",
173 "settings.recipes.dev" : "Desenvolvimento", 184 "settings.recipes.dev" : "Desenvolvimento",
174 "settings.recipes.headline" : "Serviços disponíveis", 185 "settings.recipes.headline" : "Serviços disponíveis",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Todos os sons estão silenciados", 237 "settings.services.tooltip.isMuted" : "Todos os sons estão silenciados",
227 "settings.services.tooltip.notificationsDisabled" : "As notificações estão desativadas", 238 "settings.services.tooltip.notificationsDisabled" : "As notificações estão desativadas",
228 "settings.services.updatedInfo" : "As alterações foram guardadas", 239 "settings.services.updatedInfo" : "As alterações foram guardadas",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Equipa",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Empresa", 246 "settings.user.form.accountType.company" : "Empresa",
230 "settings.user.form.accountType.individual" : "Indivíduo", 247 "settings.user.form.accountType.individual" : "Indivíduo",
231 "settings.user.form.accountType.label" : "Tipo de conta", 248 "settings.user.form.accountType.label" : "Tipo de conta",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Primeiro Nome", 252 "settings.user.form.firstname" : "Primeiro Nome",
236 "settings.user.form.lastname" : "Último Nome", 253 "settings.user.form.lastname" : "Último Nome",
237 "settings.user.form.newPassword" : "Nova palavra-passe", 254 "settings.user.form.newPassword" : "Nova palavra-passe",
255 "settings.workspace.add.form.name" : "Nome",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Nome",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Tentar novamente",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Adicionar um novo serviço", 270 "sidebar.addNewService" : "Adicionar um novo serviço",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Desativar notificações e áudio", 272 "sidebar.muteApp" : "Desativar notificações e áudio",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Definições", 274 "sidebar.settings" : "Definições",
241 "sidebar.unmuteApp" : "Ativar notificações e áudio", 275 "sidebar.unmuteApp" : "Ativar notificações e áudio",
242 "signup.company.label" : "Empresa", 276 "signup.company.label" : "Empresa",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Adicione serviços como Mattermost no local ou online", 292 "subscription.features.onpremise.mattermost" : "Adicione serviços como Mattermost no local ou online",
259 "subscription.features.proxy" : "Suporte Proxy para os serviços", 293 "subscription.features.proxy" : "Suporte Proxy para os serviços",
260 "subscription.features.spellchecker" : "Suporte para correção ortográfica", 294 "subscription.features.spellchecker" : "Suporte para correção ortográfica",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Ao subscrever uma Conta Premium, tem acesso a", 296 "subscription.includedFeatures" : "Ao subscrever uma Conta Premium, tem acesso a",
262 "subscription.paymentSessionError" : "Erro no serviço de pagamento", 297 "subscription.paymentSessionError" : "Erro no serviço de pagamento",
263 "subscription.submit.label" : "Pretendo ajudar o desenvolvimento do Franz", 298 "subscription.submit.label" : "Pretendo ajudar o desenvolvimento do Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} é obrigatório", 316 "validation.required" : "{field} é obrigatório",
282 "validation.url" : "{field} não é uma hiperligação válida", 317 "validation.url" : "{field} não é uma hiperligação válida",
283 "welcome.loginButton" : "Iniciar sessão", 318 "welcome.loginButton" : "Iniciar sessão",
284 "welcome.signupButton" : "Criar uma conta gratuita" 319 "welcome.signupButton" : "Criar uma conta gratuita",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Todos os serviços",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index d8e02b7f3..97ad98361 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -1,21 +1,22 @@
1{ 1{
2 "app.errorHandler.action" : "Перезагрузить", 2 "app.errorHandler.action" : "Перезагрузить",
3 "app.errorHandler.headline" : "Что-то пошло не так", 3 "app.errorHandler.headline" : "Что-то пошло не так",
4 "feature.announcements.changelog.headline" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² верÑии Franz {version}",
4 "feature.delayApp.action" : "Получите лицензию Franz Supporter", 5 "feature.delayApp.action" : "Получите лицензию Franz Supporter",
5 "feature.delayApp.headline" : "ПожалуйÑта приобретите лицензию Franz Supporter чтобы отменить ожидание", 6 "feature.delayApp.headline" : "ПожалуйÑта приобретите лицензию Franz Supporter чтобы убрать ожидание",
6 "feature.delayApp.text" : "Franz продолжит работу через {seconds} Ñекунд.", 7 "feature.delayApp.text" : "Franz продолжит работу через {seconds} Ñекунд.",
7 "feature.shareFranz.action.email" : "Send as email", 8 "feature.shareFranz.action.email" : "Отправить email",
8 "feature.shareFranz.action.facebook" : "Share on Facebook", 9 "feature.shareFranz.action.facebook" : "ПоделитьÑÑ Ð½Ð° Facebook",
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "ПоделитьÑÑ Ð² Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Сделаем Franz лучше вмеÑте!",
11 "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" : "Я добавил {count} ÑервиÑов во Franz! Теперь доÑтупны такие меÑÑенджеры как WhatsApp, Messenger, Slack, Skype и другие. Полый ÑпиÑок вы найдете на www.meetfranz.com",
12 "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 @MeetFranz", 13 "feature.shareFranz.shareText.twitter" : "Я добавил {count} ÑервиÑ(ов) в Franz! Скачай беÑплатную аппку Ð´Ð»Ñ WhatsApp, Messenger, Slack, Skype и иже на www.meetfranz.com \/cc @FranzMessenger",
13 "feature.shareFranz.text" : "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 14 "feature.shareFranz.text" : "РаÑÑкажи Ñвоим друзьÑм и коллегам наÑколько прелеÑтен Franz и помоги нам развитьÑÑ",
14 "global.api.unhealthy" : "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Franz", 15 "global.api.unhealthy" : "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Franz",
15 "global.notConnectedToTheInternet" : "Ð’Ñ‹ не подключены к Ñети Интернет", 16 "global.notConnectedToTheInternet" : "Ð’Ñ‹ не подключены к Ñети Интернет",
16 "global.spellchecker.useDefault" : "ИÑпользовать ÑиÑтемные параметры по умолчанию ({default})", 17 "global.spellchecker.useDefault" : "ИÑпользовать ÑиÑтемные параметры по умолчанию ({default})",
17 "global.spellchecking.autodetect" : "Detect language automatically", 18 "global.spellchecking.autodetect" : "Ðайти Ñзык автоматичеÑки",
18 "global.spellchecking.autodetect.short" : "Automatic", 19 "global.spellchecking.autodetect.short" : "Ðвто",
19 "global.spellchecking.language" : "Проверка правопиÑаниÑ", 20 "global.spellchecking.language" : "Проверка правопиÑаниÑ",
20 "import.headline" : "Импортировать ваши ÑервиÑÑ‹ из Franz 4", 21 "import.headline" : "Импортировать ваши ÑервиÑÑ‹ из Franz 4",
21 "import.notSupportedHeadline" : "СервиÑÑ‹ пока ещё не поддерживаютÑÑ Ð² Franz 5", 22 "import.notSupportedHeadline" : "СервиÑÑ‹ пока ещё не поддерживаютÑÑ Ð² Franz 5",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Вход", 44 "login.submit.label" : "Вход",
44 "login.tokenExpired" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", 45 "login.tokenExpired" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.",
45 "menu.app.about" : "О Franz", 46 "menu.app.about" : "О Franz",
47 "menu.app.announcement" : "Что нового?",
46 "menu.app.hide" : "Скрыть", 48 "menu.app.hide" : "Скрыть",
47 "menu.app.hideOthers" : "Скрыть оÑтальные", 49 "menu.app.hideOthers" : "Скрыть оÑтальные",
48 "menu.app.quit" : "Выйти", 50 "menu.app.quit" : "Выйти",
@@ -70,9 +72,9 @@
70 "menu.help.support" : "Поддержка", 72 "menu.help.support" : "Поддержка",
71 "menu.help.tos" : "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ", 73 "menu.help.tos" : "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ",
72 "menu.services" : "СервиÑ", 74 "menu.services" : "СервиÑ",
73 "menu.services.activatePreviousService" : "Activate previous service", 75 "menu.services.activatePreviousService" : "Ðктивировать предыдущий Ñервич",
74 "menu.services.addNewService" : "Добавить новый ÑервиÑ...", 76 "menu.services.addNewService" : "Добавить новый ÑервиÑ...",
75 "menu.services.setNextServiceActive" : "Activate next service", 77 "menu.services.setNextServiceActive" : "Ðктивировать Ñледующий ÑервиÑ",
76 "menu.view" : "Вид", 78 "menu.view" : "Вид",
77 "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран", 79 "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран",
78 "menu.view.exitFullScreen" : "В окне", 80 "menu.view.exitFullScreen" : "В окне",
@@ -87,6 +89,11 @@
87 "menu.window" : "Окно", 89 "menu.window" : "Окно",
88 "menu.window.close" : "Закрыть", 90 "menu.window.close" : "Закрыть",
89 "menu.window.minimize" : "Свернуть", 91 "menu.window.minimize" : "Свернуть",
92 "menu.workspaces" : "Окружение",
93 "menu.workspaces.addNewWorkspace" : "Добавить Ðовое Окружение...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Закрыть меню окружений",
95 "menu.workspaces.defaultWorkspace" : "Ð’Ñе ÑервиÑÑ‹",
96 "menu.workspaces.openWorkspaceDrawer" : "Открыть меню окружений",
90 "password.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты", 97 "password.email.label" : "ÐÐ´Ñ€ÐµÑ Ñлектронной почты",
91 "password.headline" : "СброÑить пароль", 98 "password.headline" : "СброÑить пароль",
92 "password.link.login" : "Вход", 99 "password.link.login" : "Вход",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "О, нет!", 117 "service.errorHandler.headline" : "О, нет!",
111 "service.errorHandler.message" : "Ошибка", 118 "service.errorHandler.message" : "Ошибка",
112 "service.errorHandler.text" : "{name} не Ñмог загрузитьÑÑ.", 119 "service.errorHandler.text" : "{name} не Ñмог загрузитьÑÑ.",
120 "service.webviewLoader.loading" : "Загрузка",
113 "services.getStarted" : "Ðачать работу", 121 "services.getStarted" : "Ðачать работу",
114 "services.welcome" : "Добро пожаловать во Franz", 122 "services.welcome" : "Добро пожаловать во Franz",
115 "settings.account.account.editButton" : "Редактировать аккаунт", 123 "settings.account.account.editButton" : "Редактировать аккаунт",
@@ -121,7 +129,7 @@
121 "settings.account.deleteInfo" : "ЕÑли вам больше не нужна ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в Franz, вы можете удалить аккаунт и вÑÑŽ ÑвÑзанную Ñ Ð½ÐµÐ¹ информацию.", 129 "settings.account.deleteInfo" : "ЕÑли вам больше не нужна ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в Franz, вы можете удалить аккаунт и вÑÑŽ ÑвÑзанную Ñ Ð½ÐµÐ¹ информацию.",
122 "settings.account.headline" : "Ðккаунт", 130 "settings.account.headline" : "Ðккаунт",
123 "settings.account.headlineAccount" : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°", 131 "settings.account.headlineAccount" : "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°",
124 "settings.account.headlineDangerZone" : "ОпаÑÐ½Ð°Ñ Ð—Ð¾Ð½Ð°", 132 "settings.account.headlineDangerZone" : "ÐапреÑÐ½Ð°Ñ Ð—Ð¾Ð½Ð°",
125 "settings.account.headlineInvoices" : "Счета", 133 "settings.account.headlineInvoices" : "Счета",
126 "settings.account.headlinePassword" : "Сменить пароль", 134 "settings.account.headlinePassword" : "Сменить пароль",
127 "settings.account.headlineProfile" : "Обновить профиль", 135 "settings.account.headlineProfile" : "Обновить профиль",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Общие", 164 "settings.app.headlineGeneral" : "Общие",
157 "settings.app.headlineLanguage" : "Язык", 165 "settings.app.headlineLanguage" : "Язык",
158 "settings.app.headlineUpdates" : "ОбновлениÑ", 166 "settings.app.headlineUpdates" : "ОбновлениÑ",
167 "settings.app.languageDisclaimer" : "ÐžÑ„Ð¸Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° только Ð´Ð»Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкого и немецкого Ñзыков. ОÑтальные Ñзыки переведены ÑообщеÑтвом.",
159 "settings.app.restartRequired" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ перезагрузки приложениÑ", 168 "settings.app.restartRequired" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ перезагрузки приложениÑ",
160 "settings.app.subheadlineCache" : "КÑш", 169 "settings.app.subheadlineCache" : "КÑш",
161 "settings.app.translationHelp" : "Помогите нам перевеÑти Franz на ваш Ñзык.", 170 "settings.app.translationHelp" : "Помогите нам перевеÑти Franz на ваш Ñзык.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "ПриглаÑить друзей", 177 "settings.navigation.inviteFriends" : "ПриглаÑить друзей",
169 "settings.navigation.logout" : "Выход", 178 "settings.navigation.logout" : "Выход",
170 "settings.navigation.settings" : "ÐаÑтройки", 179 "settings.navigation.settings" : "ÐаÑтройки",
180 "settings.navigation.team" : "Управление Командой",
171 "settings.navigation.yourServices" : "Ваши ÑервиÑÑ‹", 181 "settings.navigation.yourServices" : "Ваши ÑервиÑÑ‹",
182 "settings.navigation.yourWorkspaces" : "Ваши окружениÑ",
172 "settings.recipes.all" : "Ð’Ñе ÑервиÑÑ‹", 183 "settings.recipes.all" : "Ð’Ñе ÑервиÑÑ‹",
173 "settings.recipes.dev" : "Разработка", 184 "settings.recipes.dev" : "Разработка",
174 "settings.recipes.headline" : "ДоÑтупные ÑервиÑÑ‹", 185 "settings.recipes.headline" : "ДоÑтупные ÑервиÑÑ‹",
@@ -221,11 +232,17 @@
221 "settings.services.discoverServices" : "Ðайти ÑервиÑÑ‹", 232 "settings.services.discoverServices" : "Ðайти ÑервиÑÑ‹",
222 "settings.services.headline" : "Ваши ÑервиÑÑ‹", 233 "settings.services.headline" : "Ваши ÑервиÑÑ‹",
223 "settings.services.noServicesAdded" : "Ð’Ñ‹ пока не добавили никаких ÑервиÑов.", 234 "settings.services.noServicesAdded" : "Ð’Ñ‹ пока не добавили никаких ÑервиÑов.",
224 "settings.services.servicesRequestFailed" : "Could not load your services", 235 "settings.services.servicesRequestFailed" : "Ошибка загрузки ÑервиÑов",
225 "settings.services.tooltip.isDisabled" : "Ð¡ÐµÑ€Ð²Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½", 236 "settings.services.tooltip.isDisabled" : "Ð¡ÐµÑ€Ð²Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½",
226 "settings.services.tooltip.isMuted" : "Ð’Ñе звуки отключены", 237 "settings.services.tooltip.isMuted" : "Ð’Ñе звуки отключены",
227 "settings.services.tooltip.notificationsDisabled" : "Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹", 238 "settings.services.tooltip.notificationsDisabled" : "Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹",
228 "settings.services.updatedInfo" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñохранены", 239 "settings.services.updatedInfo" : "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñохранены",
240 "settings.team.contentHeadline" : "Franz Ð´Ð»Ñ ÐšÐ¾Ð¼Ð°Ð½Ð´",
241 "settings.team.copy" : "Franz Ð´Ð»Ñ ÐšÐ¾Ð¼Ð°Ð½Ð´ позволÑет приглаÑить коллег в вашу команду, отправив им емайл Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸ÐµÐ¼, а также управлÑÑ‚ÑŒ их подпиÑками в наÑтройках вашего аккаунта. Ðе тратьте Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° наÑтройку подпиÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ члена команды индивидуально, забудьте о многочиÑленных платежках и разных циклах оплаты - одна команда Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñеми!",
242 "settings.team.headline" : "Команда",
243 "settings.team.intro" : "Ð’Ñ‹ и ваша команда иÑпльзуете Franz? Ð’Ñ‹ теперь можете управлÑÑ‚ÑŒ Премиум подпиÑками любого количеÑтва коллег, друзей и членов Ñемьи, из одного и того же аккаунта.",
244 "settings.team.manageAction" : "УправлÑйте вашей Командой на meetfranz.com",
245 "settings.team.upgradeAction" : "Улучшить ваш аккаунт",
229 "settings.user.form.accountType.company" : "КомпаниÑ", 246 "settings.user.form.accountType.company" : "КомпаниÑ",
230 "settings.user.form.accountType.individual" : "Индивидуальный", 247 "settings.user.form.accountType.individual" : "Индивидуальный",
231 "settings.user.form.accountType.label" : "Тип аккаунта", 248 "settings.user.form.accountType.label" : "Тип аккаунта",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "ИмÑ", 252 "settings.user.form.firstname" : "ИмÑ",
236 "settings.user.form.lastname" : "ФамилиÑ", 253 "settings.user.form.lastname" : "ФамилиÑ",
237 "settings.user.form.newPassword" : "Ðовый пароль", 254 "settings.user.form.newPassword" : "Ðовый пароль",
255 "settings.workspace.add.form.name" : "ИмÑ",
256 "settings.workspace.add.form.submitButton" : "Создать окружение",
257 "settings.workspace.form.buttonDelete" : "Удалить окружение",
258 "settings.workspace.form.buttonSave" : "Сохранить окружение",
259 "settings.workspace.form.name" : "ИмÑ",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Ваши окружениÑ",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Ваши окружениÑ",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Попробовать Ñнова",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Добавить новый ÑервиÑ", 270 "sidebar.addNewService" : "Добавить новый ÑервиÑ",
271 "sidebar.closeWorkspaceDrawer" : "Закрыть меню окружений",
239 "sidebar.muteApp" : "Отключить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук", 272 "sidebar.muteApp" : "Отключить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук",
273 "sidebar.openWorkspaceDrawer" : "Открыть меню окружений",
240 "sidebar.settings" : "ÐаÑтройки", 274 "sidebar.settings" : "ÐаÑтройки",
241 "sidebar.unmuteApp" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук", 275 "sidebar.unmuteApp" : "Включить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ звук",
242 "signup.company.label" : "ОрганизациÑ", 276 "signup.company.label" : "ОрганизациÑ",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Локальные\/размещенные на хоÑтинге ÑервиÑÑ‹, такие как Mattermost", 292 "subscription.features.onpremise.mattermost" : "Локальные\/размещенные на хоÑтинге ÑервиÑÑ‹, такие как Mattermost",
259 "subscription.features.proxy" : "Подержка прокÑи Ð´Ð»Ñ ÑервиÑов", 293 "subscription.features.proxy" : "Подержка прокÑи Ð´Ð»Ñ ÑервиÑов",
260 "subscription.features.spellchecker" : "Поддержка проверки правопиÑаниÑ", 294 "subscription.features.spellchecker" : "Поддержка проверки правопиÑаниÑ",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Платный премиум аккаунт Franz включает", 296 "subscription.includedFeatures" : "Платный премиум аккаунт Franz включает",
262 "subscription.paymentSessionError" : "Ðевозможно загрузить форму оплаты", 297 "subscription.paymentSessionError" : "Ðевозможно загрузить форму оплаты",
263 "subscription.submit.label" : "Я хочу поддержать разработку Franz", 298 "subscription.submit.label" : "Я хочу поддержать разработку Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} обÑзательно", 316 "validation.required" : "{field} обÑзательно",
282 "validation.url" : "{field} ÑвлÑетÑÑ Ð½ÐµÐ´ÐµÐ¹Ñтвительной ÑÑылкой", 317 "validation.url" : "{field} ÑвлÑетÑÑ Ð½ÐµÐ´ÐµÐ¹Ñтвительной ÑÑылкой",
283 "welcome.loginButton" : "Вход", 318 "welcome.loginButton" : "Вход",
284 "welcome.signupButton" : "Создать беÑплатный аккаунт" 319 "welcome.signupButton" : "Создать беÑплатный аккаунт",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Ð’Ñе ÑервиÑÑ‹",
322 "workspaceDrawer.headline" : "Окружение",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "ВоÑÑтановить премиум аккаунт",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json
index 688490b58..7af29ef1c 100644
--- a/src/i18n/locales/sk.json
+++ b/src/i18n/locales/sk.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Obnoviť", 2 "app.errorHandler.action" : "Obnoviť",
3 "app.errorHandler.headline" : "Something went wrong", 3 "app.errorHandler.headline" : "Something went wrong",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Get a Franz Supporter License", 5 "feature.delayApp.action" : "Get a Franz Supporter License",
5 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", 7 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Nedá sa pripojiť k online službám Franz", 15 "global.api.unhealthy" : "Nedá sa pripojiť k online službám Franz",
15 "global.notConnectedToTheInternet" : "Nie ste pripojení k internetu.", 16 "global.notConnectedToTheInternet" : "Nie ste pripojení k internetu.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Prihlásiť sa", 44 "login.submit.label" : "Prihlásiť sa",
44 "login.tokenExpired" : "Vaša relácia vypršala, prihláste sa prosím znovu.", 45 "login.tokenExpired" : "Vaša relácia vypršala, prihláste sa prosím znovu.",
45 "menu.app.about" : "O aplikácii", 46 "menu.app.about" : "O aplikácii",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Skryť", 48 "menu.app.hide" : "Skryť",
47 "menu.app.hideOthers" : "Skryť ostatné", 49 "menu.app.hideOthers" : "Skryť ostatné",
48 "menu.app.quit" : "UkonÄiÅ¥", 50 "menu.app.quit" : "UkonÄiÅ¥",
@@ -87,6 +89,11 @@
87 "menu.window" : "Okno", 89 "menu.window" : "Okno",
88 "menu.window.close" : "Zatvoriť", 90 "menu.window.close" : "Zatvoriť",
89 "menu.window.minimize" : "Minimalizovať", 91 "menu.window.minimize" : "Minimalizovať",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Všetky služby",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "E-mailová adresa", 97 "password.email.label" : "E-mailová adresa",
91 "password.headline" : "Obnoviť heslo", 98 "password.headline" : "Obnoviť heslo",
92 "password.link.login" : "PrihlásiÅ¥ sa do vášho úÄtu", 99 "password.link.login" : "PrihlásiÅ¥ sa do vášho úÄtu",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Ale nie!", 117 "service.errorHandler.headline" : "Ale nie!",
111 "service.errorHandler.message" : "Chyba", 118 "service.errorHandler.message" : "Chyba",
112 "service.errorHandler.text" : "{name} has failed to load.", 119 "service.errorHandler.text" : "{name} has failed to load.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "ZaÄíname", 121 "services.getStarted" : "ZaÄíname",
114 "services.welcome" : "Vítajte v aplikácii Franz", 122 "services.welcome" : "Vítajte v aplikácii Franz",
115 "settings.account.account.editButton" : "UpraviÅ¥ úÄet", 123 "settings.account.account.editButton" : "UpraviÅ¥ úÄet",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Všeobecné", 164 "settings.app.headlineGeneral" : "Všeobecné",
157 "settings.app.headlineLanguage" : "Jazyk", 165 "settings.app.headlineLanguage" : "Jazyk",
158 "settings.app.headlineUpdates" : "Aktualizácie", 166 "settings.app.headlineUpdates" : "Aktualizácie",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Zmeny vyžadujú reštart", 168 "settings.app.restartRequired" : "Zmeny vyžadujú reštart",
160 "settings.app.subheadlineCache" : "Vyrovnávacia pamäť", 169 "settings.app.subheadlineCache" : "Vyrovnávacia pamäť",
161 "settings.app.translationHelp" : "Pomôžte nám preložiť Franz do svojho jazyka.", 170 "settings.app.translationHelp" : "Pomôžte nám preložiť Franz do svojho jazyka.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Pozvať priateľov", 177 "settings.navigation.inviteFriends" : "Pozvať priateľov",
169 "settings.navigation.logout" : "Odhlásiť sa", 178 "settings.navigation.logout" : "Odhlásiť sa",
170 "settings.navigation.settings" : "Nastavenia", 179 "settings.navigation.settings" : "Nastavenia",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Vaše služby", 181 "settings.navigation.yourServices" : "Vaše služby",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Všetky služby", 183 "settings.recipes.all" : "Všetky služby",
173 "settings.recipes.dev" : "Vývoj", 184 "settings.recipes.dev" : "Vývoj",
174 "settings.recipes.headline" : "Dostupné služby", 185 "settings.recipes.headline" : "Dostupné služby",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Všetky zvuky sú stíšené", 237 "settings.services.tooltip.isMuted" : "Všetky zvuky sú stíšené",
227 "settings.services.tooltip.notificationsDisabled" : "Oznámenia sú vypnuté", 238 "settings.services.tooltip.notificationsDisabled" : "Oznámenia sú vypnuté",
228 "settings.services.updatedInfo" : "Vaše zmeny boli uložené", 239 "settings.services.updatedInfo" : "Vaše zmeny boli uložené",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Tím",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "SpoloÄnosÅ¥", 246 "settings.user.form.accountType.company" : "SpoloÄnosÅ¥",
230 "settings.user.form.accountType.individual" : "Osoba", 247 "settings.user.form.accountType.individual" : "Osoba",
231 "settings.user.form.accountType.label" : "Typ úÄtu", 248 "settings.user.form.accountType.label" : "Typ úÄtu",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Krstné meno", 252 "settings.user.form.firstname" : "Krstné meno",
236 "settings.user.form.lastname" : "Priezvisko", 253 "settings.user.form.lastname" : "Priezvisko",
237 "settings.user.form.newPassword" : "Nové heslo", 254 "settings.user.form.newPassword" : "Nové heslo",
255 "settings.workspace.add.form.name" : "Meno",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Meno",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Skúsiť znova",
266 "settings.workspaces.updatedInfo" : "Vaše zmeny boli uložené",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Pridať novú službu", 270 "sidebar.addNewService" : "Pridať novú službu",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Vypnúť upozornenia a zvuky", 272 "sidebar.muteApp" : "Vypnúť upozornenia a zvuky",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Nastavenia", 274 "sidebar.settings" : "Nastavenia",
241 "sidebar.unmuteApp" : "Povoliť oznámenia a zvuky", 275 "sidebar.unmuteApp" : "Povoliť oznámenia a zvuky",
242 "signup.company.label" : "SpoloÄnosÅ¥", 276 "signup.company.label" : "SpoloÄnosÅ¥",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Platený úÄet Premium Supporter Franz zahŕňa", 296 "subscription.includedFeatures" : "Platený úÄet Premium Supporter Franz zahŕňa",
262 "subscription.paymentSessionError" : "Nepodarilo sa inicializovať platbu od", 297 "subscription.paymentSessionError" : "Nepodarilo sa inicializovať platbu od",
263 "subscription.submit.label" : "Chcem podporiť vývoj aplikácie Franz", 298 "subscription.submit.label" : "Chcem podporiť vývoj aplikácie Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} je povinné", 316 "validation.required" : "{field} je povinné",
282 "validation.url" : "{field} nie je platné URL", 317 "validation.url" : "{field} nie je platné URL",
283 "welcome.loginButton" : "PrihlásiÅ¥ sa do vášho úÄtu", 318 "welcome.loginButton" : "PrihlásiÅ¥ sa do vášho úÄtu",
284 "welcome.signupButton" : "VytvoriÅ¥ úÄet zdarma" 319 "welcome.signupButton" : "VytvoriÅ¥ úÄet zdarma",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Všetky služby",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json
index a3a80925d..e5962566b 100644
--- a/src/i18n/locales/sr.json
+++ b/src/i18n/locales/sr.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Ponovno uÄitavanje", 2 "app.errorHandler.action" : "Ponovno uÄitavanje",
3 "app.errorHandler.headline" : "Something went wrong", 3 "app.errorHandler.headline" : "Something went wrong",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Get a Franz Supporter License", 5 "feature.delayApp.action" : "Get a Franz Supporter License",
5 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting", 6 "feature.delayApp.headline" : "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.", 7 "feature.delayApp.text" : "Franz will continue in {seconds} seconds.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Nije moguće pristupiti Franz-ovim on-line servisima. ", 15 "global.api.unhealthy" : "Nije moguće pristupiti Franz-ovim on-line servisima. ",
15 "global.notConnectedToTheInternet" : "Niste povezani sa serverom.", 16 "global.notConnectedToTheInternet" : "Niste povezani sa serverom.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Prijavite se", 44 "login.submit.label" : "Prijavite se",
44 "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.", 45 "login.tokenExpired" : "Vaša sesija je istekla, prijavite se ponovo.",
45 "menu.app.about" : "O Francu", 46 "menu.app.about" : "O Francu",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Sakrij", 48 "menu.app.hide" : "Sakrij",
47 "menu.app.hideOthers" : "Sakrij ostale", 49 "menu.app.hideOthers" : "Sakrij ostale",
48 "menu.app.quit" : "Izađi", 50 "menu.app.quit" : "Izađi",
@@ -87,6 +89,11 @@
87 "menu.window" : "У прозору", 89 "menu.window" : "У прозору",
88 "menu.window.close" : "Затвори", 90 "menu.window.close" : "Затвори",
89 "menu.window.minimize" : "Умањи", 91 "menu.window.minimize" : "Умањи",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Sve usluge",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Vaša e-adresa", 97 "password.email.label" : "Vaša e-adresa",
91 "password.headline" : "Stvorite novu zaporku", 98 "password.headline" : "Stvorite novu zaporku",
92 "password.link.login" : "Prijavite se na VaÅ¡ raÄun", 99 "password.link.login" : "Prijavite se na VaÅ¡ raÄun",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "O, ne! ", 117 "service.errorHandler.headline" : "O, ne! ",
111 "service.errorHandler.message" : "Greška ", 118 "service.errorHandler.message" : "Greška ",
112 "service.errorHandler.text" : "{name} has failed to load.", 119 "service.errorHandler.text" : "{name} has failed to load.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "ZapoÄnimo! ", 121 "services.getStarted" : "ZapoÄnimo! ",
114 "services.welcome" : "Dobrodošli u Franz", 122 "services.welcome" : "Dobrodošli u Franz",
115 "settings.account.account.editButton" : "Uredi raÄun", 123 "settings.account.account.editButton" : "Uredi raÄun",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Općenito", 164 "settings.app.headlineGeneral" : "Općenito",
157 "settings.app.headlineLanguage" : "Jezik", 165 "settings.app.headlineLanguage" : "Jezik",
158 "settings.app.headlineUpdates" : "Nadogradnje", 166 "settings.app.headlineUpdates" : "Nadogradnje",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Promjene postavki zahtijevaju ponovni pogon", 168 "settings.app.restartRequired" : "Promjene postavki zahtijevaju ponovni pogon",
160 "settings.app.subheadlineCache" : "Кеш", 169 "settings.app.subheadlineCache" : "Кеш",
161 "settings.app.translationHelp" : "Pomozite nam prevesti aplikaciju na Vaš jezik. ", 170 "settings.app.translationHelp" : "Pomozite nam prevesti aplikaciju na Vaš jezik. ",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Позови пријатеље", 177 "settings.navigation.inviteFriends" : "Позови пријатеље",
169 "settings.navigation.logout" : "Odjava", 178 "settings.navigation.logout" : "Odjava",
170 "settings.navigation.settings" : "Postavke", 179 "settings.navigation.settings" : "Postavke",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Vaše usluge", 181 "settings.navigation.yourServices" : "Vaše usluge",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Sve usluge", 183 "settings.recipes.all" : "Sve usluge",
173 "settings.recipes.dev" : "Razvoj", 184 "settings.recipes.dev" : "Razvoj",
174 "settings.recipes.headline" : "Dostupne usluge", 185 "settings.recipes.headline" : "Dostupne usluge",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Svi zvukovi su onemogućeni.", 237 "settings.services.tooltip.isMuted" : "Svi zvukovi su onemogućeni.",
227 "settings.services.tooltip.notificationsDisabled" : "Obavijesti su onemogućene.", 238 "settings.services.tooltip.notificationsDisabled" : "Obavijesti su onemogućene.",
228 "settings.services.updatedInfo" : "Vaše promjene su pohranjene.", 239 "settings.services.updatedInfo" : "Vaše promjene su pohranjene.",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Tim",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Tvrtka", 246 "settings.user.form.accountType.company" : "Tvrtka",
230 "settings.user.form.accountType.individual" : "Pojedinac", 247 "settings.user.form.accountType.individual" : "Pojedinac",
231 "settings.user.form.accountType.label" : "Tip raÄuna", 248 "settings.user.form.accountType.label" : "Tip raÄuna",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Ime", 252 "settings.user.form.firstname" : "Ime",
236 "settings.user.form.lastname" : "Prezime", 253 "settings.user.form.lastname" : "Prezime",
237 "settings.user.form.newPassword" : "Nova lozinka", 254 "settings.user.form.newPassword" : "Nova lozinka",
255 "settings.workspace.add.form.name" : "Ime",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Ime",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Pokušajte ponovno",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Dodajte novu uslugu", 270 "sidebar.addNewService" : "Dodajte novu uslugu",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Онемогући обавештења и звукове", 272 "sidebar.muteApp" : "Онемогући обавештења и звукове",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Postavke", 274 "sidebar.settings" : "Postavke",
241 "sidebar.unmuteApp" : "ИÑкључи обавештења и звукове", 275 "sidebar.unmuteApp" : "ИÑкључи обавештења и звукове",
242 "signup.company.label" : "Tvrtka", 276 "signup.company.label" : "Tvrtka",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost", 292 "subscription.features.onpremise.mattermost" : "Add on-premise\/hosted services like Mattermost",
259 "subscription.features.proxy" : "Proxy support for services", 293 "subscription.features.proxy" : "Proxy support for services",
260 "subscription.features.spellchecker" : "Support for spellchecker", 294 "subscription.features.spellchecker" : "Support for spellchecker",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće:", 296 "subscription.includedFeatures" : "Plaćeni\/Premium raÄun ukljuÄuje sljedeće:",
262 "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu", 297 "subscription.paymentSessionError" : "Nemoguće inicijalizirati obrazac za uplatu",
263 "subscription.submit.label" : "Želim da podržim razvoj Franca.", 298 "subscription.submit.label" : "Želim da podržim razvoj Franca.",
@@ -281,5 +316,16 @@
281 "validation.required" : "{поље} је неопходно", 316 "validation.required" : "{поље} је неопходно",
282 "validation.url" : "{field} није валидан УРЛ", 317 "validation.url" : "{field} није валидан УРЛ",
283 "welcome.loginButton" : "Prijavite se na raÄun", 318 "welcome.loginButton" : "Prijavite se na raÄun",
284 "welcome.signupButton" : "Stvorite novi korisniÄki raÄun" 319 "welcome.signupButton" : "Stvorite novi korisniÄki raÄun",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Sve usluge",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json
index 9f8313c2e..69c5ede37 100644
--- a/src/i18n/locales/tr.json
+++ b/src/i18n/locales/tr.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Tekrar Yükle", 2 "app.errorHandler.action" : "Tekrar Yükle",
3 "app.errorHandler.headline" : "Bir terslik çıktı", 3 "app.errorHandler.headline" : "Bir terslik çıktı",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Franz Destek Lisansı'nı alın", 5 "feature.delayApp.action" : "Franz Destek Lisansı'nı alın",
5 "feature.delayApp.headline" : "Beklememek için Franz Destek Lisansı'nı satın alın", 6 "feature.delayApp.headline" : "Beklememek için Franz Destek Lisansı'nı satın alın",
6 "feature.delayApp.text" : "Franz {seconds} saniye sonra devam edecek.", 7 "feature.delayApp.text" : "Franz {seconds} saniye sonra devam edecek.",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Twitter'da PaylaÅŸ", 10 "feature.shareFranz.action.twitter" : "Twitter'da PaylaÅŸ",
10 "feature.shareFranz.headline" : "Franz birlikte daha iyi!", 11 "feature.shareFranz.headline" : "Franz birlikte daha iyi!",
11 "feature.shareFranz.shareText.email" : "Franz'a {count} tane servis ekledim! WhatsApp, Messenger, Slack ve fazlasını içeren ücretsiz uygulamayı www.meetfranz.com adresinden edinin.", 12 "feature.shareFranz.shareText.email" : "Franz'a {count} tane servis ekledim! WhatsApp, Messenger, Slack ve fazlasını içeren ücretsiz uygulamayı www.meetfranz.com adresinden edinin.",
12 "feature.shareFranz.shareText.twitter" : "Franz'a {count} tane servis ekledim! WhatsApp, Messenger, Slack ve fazlasını içeren ücretsiz uygulamayı www.meetfranz.com adresinden edinin. \/cc @MeetFranz", 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.text" : "Arkadaşlarına ve meslektaşlarına Franz'ın ne kadar harika olduğunu söyle ve bize bu kelimeyi yaymamızda yardım et.", 14 "feature.shareFranz.text" : "Arkadaşlarına ve meslektaşlarına Franz'ın ne kadar harika olduğunu söyle ve bize bu kelimeyi yaymamızda yardım et.",
14 "global.api.unhealthy" : "Franz hizmetlerine ÅŸu anda eriÅŸilemiyor", 15 "global.api.unhealthy" : "Franz hizmetlerine ÅŸu anda eriÅŸilemiyor",
15 "global.notConnectedToTheInternet" : "İnternete bağlı değilsiniz.", 16 "global.notConnectedToTheInternet" : "İnternete bağlı değilsiniz.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Oturum Aç", 44 "login.submit.label" : "Oturum Aç",
44 "login.tokenExpired" : "Oturum zaman aşımına uğradı, lütfen tekrar giriş yapın.", 45 "login.tokenExpired" : "Oturum zaman aşımına uğradı, lütfen tekrar giriş yapın.",
45 "menu.app.about" : "Franz Hakkında", 46 "menu.app.about" : "Franz Hakkında",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Gizle", 48 "menu.app.hide" : "Gizle",
47 "menu.app.hideOthers" : "DiÄŸerlerini Gizle", 49 "menu.app.hideOthers" : "DiÄŸerlerini Gizle",
48 "menu.app.quit" : "Çıkış", 50 "menu.app.quit" : "Çıkış",
@@ -87,6 +89,11 @@
87 "menu.window" : "Pencere", 89 "menu.window" : "Pencere",
88 "menu.window.close" : "Kapat", 90 "menu.window.close" : "Kapat",
89 "menu.window.minimize" : "Simge Durumuna Küçült", 91 "menu.window.minimize" : "Simge Durumuna Küçült",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Tüm servisler",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "E-posta adresi", 97 "password.email.label" : "E-posta adresi",
91 "password.headline" : "Parola sıfırla", 98 "password.headline" : "Parola sıfırla",
92 "password.link.login" : "Hesabına giriş yap", 99 "password.link.login" : "Hesabına giriş yap",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "Hayııırrr!", 117 "service.errorHandler.headline" : "Hayııırrr!",
111 "service.errorHandler.message" : "Hata", 118 "service.errorHandler.message" : "Hata",
112 "service.errorHandler.text" : "{name} yüklenemedi.", 119 "service.errorHandler.text" : "{name} yüklenemedi.",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Haydi başlayalım", 121 "services.getStarted" : "Haydi başlayalım",
114 "services.welcome" : "Franz'a HoÅŸgeldiniz", 122 "services.welcome" : "Franz'a HoÅŸgeldiniz",
115 "settings.account.account.editButton" : "Hesabı düzenle", 123 "settings.account.account.editButton" : "Hesabı düzenle",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Genel", 164 "settings.app.headlineGeneral" : "Genel",
157 "settings.app.headlineLanguage" : "Dil", 165 "settings.app.headlineLanguage" : "Dil",
158 "settings.app.headlineUpdates" : "Güncellemeler", 166 "settings.app.headlineUpdates" : "Güncellemeler",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Değişiklikler yeniden başlatmayı gerektiriyor", 168 "settings.app.restartRequired" : "Değişiklikler yeniden başlatmayı gerektiriyor",
160 "settings.app.subheadlineCache" : "Önbellek", 169 "settings.app.subheadlineCache" : "Önbellek",
161 "settings.app.translationHelp" : "Franz'ı senin diline tercüme etmemiz için yardım et.", 170 "settings.app.translationHelp" : "Franz'ı senin diline tercüme etmemiz için yardım et.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "Arkadaşlarını Davet Et", 177 "settings.navigation.inviteFriends" : "Arkadaşlarını Davet Et",
169 "settings.navigation.logout" : "Çıkış", 178 "settings.navigation.logout" : "Çıkış",
170 "settings.navigation.settings" : "Ayarlar", 179 "settings.navigation.settings" : "Ayarlar",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Servislerin", 181 "settings.navigation.yourServices" : "Servislerin",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Tüm servisler", 183 "settings.recipes.all" : "Tüm servisler",
173 "settings.recipes.dev" : "GeliÅŸtirme", 184 "settings.recipes.dev" : "GeliÅŸtirme",
174 "settings.recipes.headline" : "Mevcut servisler", 185 "settings.recipes.headline" : "Mevcut servisler",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Tüm sesler kapalı", 237 "settings.services.tooltip.isMuted" : "Tüm sesler kapalı",
227 "settings.services.tooltip.notificationsDisabled" : "Bildirimler devre dışı", 238 "settings.services.tooltip.notificationsDisabled" : "Bildirimler devre dışı",
228 "settings.services.updatedInfo" : "DeÄŸiÅŸikliklerin kaydedildi", 239 "settings.services.updatedInfo" : "DeÄŸiÅŸikliklerin kaydedildi",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Takım",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "Kurum", 246 "settings.user.form.accountType.company" : "Kurum",
230 "settings.user.form.accountType.individual" : "Bireysel", 247 "settings.user.form.accountType.individual" : "Bireysel",
231 "settings.user.form.accountType.label" : "Hesap tipi", 248 "settings.user.form.accountType.label" : "Hesap tipi",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Ad", 252 "settings.user.form.firstname" : "Ad",
236 "settings.user.form.lastname" : "Soyad", 253 "settings.user.form.lastname" : "Soyad",
237 "settings.user.form.newPassword" : "Yeni ÅŸifre", 254 "settings.user.form.newPassword" : "Yeni ÅŸifre",
255 "settings.workspace.add.form.name" : "Name",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Name",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Tekrar deneyin",
266 "settings.workspaces.updatedInfo" : "DeÄŸiÅŸikliklerin kaydedildi",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Yeni servis ekle", 270 "sidebar.addNewService" : "Yeni servis ekle",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Bildirimleri ve sesli uyarıları kapat", 272 "sidebar.muteApp" : "Bildirimleri ve sesli uyarıları kapat",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "Ayarlar", 274 "sidebar.settings" : "Ayarlar",
241 "sidebar.unmuteApp" : "Bildirimleri ve sesli uyarıları etkinleştir", 275 "sidebar.unmuteApp" : "Bildirimleri ve sesli uyarıları etkinleştir",
242 "signup.company.label" : "Kurum", 276 "signup.company.label" : "Kurum",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "Mattermost gibi şirket-içi\/barındırılan servisler ekleyin", 292 "subscription.features.onpremise.mattermost" : "Mattermost gibi şirket-içi\/barındırılan servisler ekleyin",
259 "subscription.features.proxy" : "Servisler için proxy desteği", 293 "subscription.features.proxy" : "Servisler için proxy desteği",
260 "subscription.features.spellchecker" : "Yazım denetleyicisi desteği", 294 "subscription.features.spellchecker" : "Yazım denetleyicisi desteği",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Ücretli Franz Premium Destekçi Hesabına dahil", 296 "subscription.includedFeatures" : "Ücretli Franz Premium Destekçi Hesabına dahil",
262 "subscription.paymentSessionError" : "Ödeme formu başlatılamadı", 297 "subscription.paymentSessionError" : "Ödeme formu başlatılamadı",
263 "subscription.submit.label" : "Franz'ın gelişimini desteklemek istiyorum", 298 "subscription.submit.label" : "Franz'ın gelişimini desteklemek istiyorum",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} gereklidir", 316 "validation.required" : "{field} gereklidir",
282 "validation.url" : "{field} geçerli bir URL değil", 317 "validation.url" : "{field} geçerli bir URL değil",
283 "welcome.loginButton" : "Hesabına giriş yap", 318 "welcome.loginButton" : "Hesabına giriş yap",
284 "welcome.signupButton" : "Ãœcretsiz hesap oluÅŸtur" 319 "welcome.signupButton" : "Ãœcretsiz hesap oluÅŸtur",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Tüm servisler",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json
index 56dda09d5..113665f5f 100644
--- a/src/i18n/locales/uk.json
+++ b/src/i18n/locales/uk.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "Перезавантажити", 2 "app.errorHandler.action" : "Перезавантажити",
3 "app.errorHandler.headline" : "ЩоÑÑŒ пішло не так", 3 "app.errorHandler.headline" : "ЩоÑÑŒ пішло не так",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "Отримати ліцензію Franz Supporter ", 5 "feature.delayApp.action" : "Отримати ліцензію Franz Supporter ",
5 "feature.delayApp.headline" : "Будь лаÑка, придбайте ліцензію Franz Supporter аби пропуÑтити очікуваннÑ", 6 "feature.delayApp.headline" : "Будь лаÑка, придбайте ліцензію Franz Supporter аби пропуÑтити очікуваннÑ",
6 "feature.delayApp.text" : "Franz відновить роботу за {seconds} Ñекунд", 7 "feature.delayApp.text" : "Franz відновить роботу за {seconds} Ñекунд",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "Ðе можливо підключитиÑÑŒ до онлайн ÑервіÑів Franz", 15 "global.api.unhealthy" : "Ðе можливо підключитиÑÑŒ до онлайн ÑервіÑів Franz",
15 "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.", 16 "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "Увійти", 44 "login.submit.label" : "Увійти",
44 "login.tokenExpired" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, увійдіть знову.", 45 "login.tokenExpired" : "Ваша ÑеÑÑ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ, будь лаÑка, увійдіть знову.",
45 "menu.app.about" : "Про Franz", 46 "menu.app.about" : "Про Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "Приховати", 48 "menu.app.hide" : "Приховати",
47 "menu.app.hideOthers" : "Приховати інші", 49 "menu.app.hideOthers" : "Приховати інші",
48 "menu.app.quit" : "Вийти", 50 "menu.app.quit" : "Вийти",
@@ -87,6 +89,11 @@
87 "menu.window" : "Вікно", 89 "menu.window" : "Вікно",
88 "menu.window.close" : "Закрити", 90 "menu.window.close" : "Закрити",
89 "menu.window.minimize" : "Згорнути", 91 "menu.window.minimize" : "Згорнути",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "Ð’ÑÑ– ÑервіÑи",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "Email адреÑа", 97 "password.email.label" : "Email адреÑа",
91 "password.headline" : "Скинути пароль", 98 "password.headline" : "Скинути пароль",
92 "password.link.login" : "Увійти до вашого акаунту", 99 "password.link.login" : "Увійти до вашого акаунту",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "О, ні!", 117 "service.errorHandler.headline" : "О, ні!",
111 "service.errorHandler.message" : "Помилка", 118 "service.errorHandler.message" : "Помилка",
112 "service.errorHandler.text" : "{name} не завантажено", 119 "service.errorHandler.text" : "{name} не завантажено",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "Почати", 121 "services.getStarted" : "Почати",
114 "services.welcome" : "ЛаÑкаво проÑимо в Franz", 122 "services.welcome" : "ЛаÑкаво проÑимо в Franz",
115 "settings.account.account.editButton" : "Редагувати акаунт", 123 "settings.account.account.editButton" : "Редагувати акаунт",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "Загальні", 164 "settings.app.headlineGeneral" : "Загальні",
157 "settings.app.headlineLanguage" : "Мова", 165 "settings.app.headlineLanguage" : "Мова",
158 "settings.app.headlineUpdates" : "ОновленнÑ", 166 "settings.app.headlineUpdates" : "ОновленнÑ",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "Зміни потребують перезапуÑку", 168 "settings.app.restartRequired" : "Зміни потребують перезапуÑку",
160 "settings.app.subheadlineCache" : "Кеш", 169 "settings.app.subheadlineCache" : "Кеш",
161 "settings.app.translationHelp" : "Допоможіть переклаÑти Franz на Вашу мову.", 170 "settings.app.translationHelp" : "Допоможіть переклаÑти Franz на Вашу мову.",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "ЗапроÑити друзів", 177 "settings.navigation.inviteFriends" : "ЗапроÑити друзів",
169 "settings.navigation.logout" : "Вийти", 178 "settings.navigation.logout" : "Вийти",
170 "settings.navigation.settings" : "ÐалаштуваннÑ", 179 "settings.navigation.settings" : "ÐалаштуваннÑ",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "Ваші ÑервіÑи", 181 "settings.navigation.yourServices" : "Ваші ÑервіÑи",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "Ð’ÑÑ– ÑервіÑи", 183 "settings.recipes.all" : "Ð’ÑÑ– ÑервіÑи",
173 "settings.recipes.dev" : "Розробка", 184 "settings.recipes.dev" : "Розробка",
174 "settings.recipes.headline" : "ДоÑтупні ÑервіÑи", 185 "settings.recipes.headline" : "ДоÑтупні ÑервіÑи",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "Ð’ÑÑ– звуки вимкнено", 237 "settings.services.tooltip.isMuted" : "Ð’ÑÑ– звуки вимкнено",
227 "settings.services.tooltip.notificationsDisabled" : "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ–", 238 "settings.services.tooltip.notificationsDisabled" : "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ–",
228 "settings.services.updatedInfo" : "Ваші зміни були збережені", 239 "settings.services.updatedInfo" : "Ваші зміни були збережені",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "Команда",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "КомпаніÑ", 246 "settings.user.form.accountType.company" : "КомпаніÑ",
230 "settings.user.form.accountType.individual" : "Індивідуальний", 247 "settings.user.form.accountType.individual" : "Індивідуальний",
231 "settings.user.form.accountType.label" : "Тип акаунту", 248 "settings.user.form.accountType.label" : "Тип акаунту",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "Ім`Ñ", 252 "settings.user.form.firstname" : "Ім`Ñ",
236 "settings.user.form.lastname" : "Прізвище", 253 "settings.user.form.lastname" : "Прізвище",
237 "settings.user.form.newPassword" : "Ðовий пароль", 254 "settings.user.form.newPassword" : "Ðовий пароль",
255 "settings.workspace.add.form.name" : "Ім'Ñ",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "Ім'Ñ",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "Спробуйте ще раз",
266 "settings.workspaces.updatedInfo" : "Ваші зміни були збережені",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "Додати новий ÑервіÑ", 270 "sidebar.addNewService" : "Додати новий ÑервіÑ",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "Вимкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° звуки", 272 "sidebar.muteApp" : "Вимкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° звуки",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "ÐалаштуваннÑ", 274 "sidebar.settings" : "ÐалаштуваннÑ",
241 "sidebar.unmuteApp" : "Увімкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° звуки", 275 "sidebar.unmuteApp" : "Увімкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð° звуки",
242 "signup.company.label" : "КомпаніÑ", 276 "signup.company.label" : "КомпаніÑ",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "СервіÑи, що виконуютьÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾\/вимагають хоÑтингу, приміром Mattermost", 292 "subscription.features.onpremise.mattermost" : "СервіÑи, що виконуютьÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾\/вимагають хоÑтингу, приміром Mattermost",
259 "subscription.features.proxy" : "Підтримка прокÑÑ– ", 293 "subscription.features.proxy" : "Підтримка прокÑÑ– ",
260 "subscription.features.spellchecker" : "Підтримка перевірки правопиÑу", 294 "subscription.features.spellchecker" : "Підтримка перевірки правопиÑу",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Платний Преміальний Ðкаунт Прихильника Franz включає", 296 "subscription.includedFeatures" : "Платний Преміальний Ðкаунт Прихильника Franz включає",
262 "subscription.paymentSessionError" : "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ форму платежу", 297 "subscription.paymentSessionError" : "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ форму платежу",
263 "subscription.submit.label" : "Я хочу підтримати розробку Franz", 298 "subscription.submit.label" : "Я хочу підтримати розробку Franz",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field} обов'Ñзвоке", 316 "validation.required" : "{field} обов'Ñзвоке",
282 "validation.url" : "{field} не валідний URL", 317 "validation.url" : "{field} не валідний URL",
283 "welcome.loginButton" : "Увійдіть до Ñвого акаунту", 318 "welcome.loginButton" : "Увійдіть до Ñвого акаунту",
284 "welcome.signupButton" : "Створити безплатний акаунт" 319 "welcome.signupButton" : "Створити безплатний акаунт",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "Ð’ÑÑ– ÑервіÑи",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json
index 54245ba57..34bd2158c 100644
--- a/src/i18n/locales/zh-TW.json
+++ b/src/i18n/locales/zh-TW.json
@@ -1,6 +1,7 @@
1{ 1{
2 "app.errorHandler.action" : "é‡æ–°è¼‰å…¥", 2 "app.errorHandler.action" : "é‡æ–°è¼‰å…¥",
3 "app.errorHandler.headline" : "有些æ±è¥¿å‡ºéŒ¯äº†", 3 "app.errorHandler.headline" : "有些æ±è¥¿å‡ºéŒ¯äº†",
4 "feature.announcements.changelog.headline" : "Changes in Franz {version}",
4 "feature.delayApp.action" : "å–å¾— Franz 支æ´æŽˆæ¬Š", 5 "feature.delayApp.action" : "å–å¾— Franz 支æ´æŽˆæ¬Š",
5 "feature.delayApp.headline" : "請購買 Franz 支æ´æŽˆæ¬Šä»¥è·³éŽç­‰å€™", 6 "feature.delayApp.headline" : "請購買 Franz 支æ´æŽˆæ¬Šä»¥è·³éŽç­‰å€™",
6 "feature.delayApp.text" : "Franz 會在 {seconds} 秒後繼續。", 7 "feature.delayApp.text" : "Franz 會在 {seconds} 秒後繼續。",
@@ -9,7 +10,7 @@
9 "feature.shareFranz.action.twitter" : "Share on Twitter", 10 "feature.shareFranz.action.twitter" : "Share on Twitter",
10 "feature.shareFranz.headline" : "Franz is better together!", 11 "feature.shareFranz.headline" : "Franz is better together!",
11 "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",
12 "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 @MeetFranz", 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.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.",
14 "global.api.unhealthy" : "無法連線至 Franz 的伺æœå™¨", 15 "global.api.unhealthy" : "無法連線至 Franz 的伺æœå™¨",
15 "global.notConnectedToTheInternet" : "你沒有連上網路。", 16 "global.notConnectedToTheInternet" : "你沒有連上網路。",
@@ -43,6 +44,7 @@
43 "login.submit.label" : "登入", 44 "login.submit.label" : "登入",
44 "login.tokenExpired" : "您的登入已éŽæœŸï¼Œè«‹é‡æ–°ç™»å…¥ã€‚", 45 "login.tokenExpired" : "您的登入已éŽæœŸï¼Œè«‹é‡æ–°ç™»å…¥ã€‚",
45 "menu.app.about" : "關於 Franz", 46 "menu.app.about" : "關於 Franz",
47 "menu.app.announcement" : "What's new?",
46 "menu.app.hide" : "éš±è—", 48 "menu.app.hide" : "éš±è—",
47 "menu.app.hideOthers" : "éš±è—其他", 49 "menu.app.hideOthers" : "éš±è—其他",
48 "menu.app.quit" : "çµæŸ", 50 "menu.app.quit" : "çµæŸ",
@@ -87,6 +89,11 @@
87 "menu.window" : "視窗", 89 "menu.window" : "視窗",
88 "menu.window.close" : "關閉", 90 "menu.window.close" : "關閉",
89 "menu.window.minimize" : "最å°åŒ–", 91 "menu.window.minimize" : "最å°åŒ–",
92 "menu.workspaces" : "Workspaces",
93 "menu.workspaces.addNewWorkspace" : "Add New Workspace...",
94 "menu.workspaces.closeWorkspaceDrawer" : "Close workspace drawer",
95 "menu.workspaces.defaultWorkspace" : "所有æœå‹™",
96 "menu.workspaces.openWorkspaceDrawer" : "Open workspace drawer",
90 "password.email.label" : "é›»å­éƒµä»¶åœ°å€", 97 "password.email.label" : "é›»å­éƒµä»¶åœ°å€",
91 "password.headline" : "é‡è¨­å¯†ç¢¼", 98 "password.headline" : "é‡è¨­å¯†ç¢¼",
92 "password.link.login" : "登入您的帳號", 99 "password.link.login" : "登入您的帳號",
@@ -110,6 +117,7 @@
110 "service.errorHandler.headline" : "噢ä¸ï¼", 117 "service.errorHandler.headline" : "噢ä¸ï¼",
111 "service.errorHandler.message" : "錯誤", 118 "service.errorHandler.message" : "錯誤",
112 "service.errorHandler.text" : "{name} 載入失敗。", 119 "service.errorHandler.text" : "{name} 載入失敗。",
120 "service.webviewLoader.loading" : "Loading",
113 "services.getStarted" : "開始", 121 "services.getStarted" : "開始",
114 "services.welcome" : "歡迎使用 Franz", 122 "services.welcome" : "歡迎使用 Franz",
115 "settings.account.account.editButton" : "編輯帳號", 123 "settings.account.account.editButton" : "編輯帳號",
@@ -156,6 +164,7 @@
156 "settings.app.headlineGeneral" : "一般", 164 "settings.app.headlineGeneral" : "一般",
157 "settings.app.headlineLanguage" : "語言", 165 "settings.app.headlineLanguage" : "語言",
158 "settings.app.headlineUpdates" : "æ›´æ–°", 166 "settings.app.headlineUpdates" : "æ›´æ–°",
167 "settings.app.languageDisclaimer" : "Official translations are English & German. All other languages are community based translations.",
159 "settings.app.restartRequired" : "需è¦é‡å•Ÿä»¥æ›´è®Š", 168 "settings.app.restartRequired" : "需è¦é‡å•Ÿä»¥æ›´è®Š",
160 "settings.app.subheadlineCache" : "å¿«å–", 169 "settings.app.subheadlineCache" : "å¿«å–",
161 "settings.app.translationHelp" : "幫助我們將 Franz 翻譯æˆæ‚¨çš„語言。", 170 "settings.app.translationHelp" : "幫助我們將 Franz 翻譯æˆæ‚¨çš„語言。",
@@ -168,7 +177,9 @@
168 "settings.navigation.inviteFriends" : "邀請朋å‹", 177 "settings.navigation.inviteFriends" : "邀請朋å‹",
169 "settings.navigation.logout" : "登出", 178 "settings.navigation.logout" : "登出",
170 "settings.navigation.settings" : "設定", 179 "settings.navigation.settings" : "設定",
180 "settings.navigation.team" : "Manage Team",
171 "settings.navigation.yourServices" : "您的æœå‹™", 181 "settings.navigation.yourServices" : "您的æœå‹™",
182 "settings.navigation.yourWorkspaces" : "Your workspaces",
172 "settings.recipes.all" : "所有æœå‹™", 183 "settings.recipes.all" : "所有æœå‹™",
173 "settings.recipes.dev" : "開發", 184 "settings.recipes.dev" : "開發",
174 "settings.recipes.headline" : "å¯ä½¿ç”¨çš„æœå‹™", 185 "settings.recipes.headline" : "å¯ä½¿ç”¨çš„æœå‹™",
@@ -226,6 +237,12 @@
226 "settings.services.tooltip.isMuted" : "所有的è²éŸ³éƒ½æ˜¯éœéŸ³", 237 "settings.services.tooltip.isMuted" : "所有的è²éŸ³éƒ½æ˜¯éœéŸ³",
227 "settings.services.tooltip.notificationsDisabled" : "通知已åœç”¨", 238 "settings.services.tooltip.notificationsDisabled" : "通知已åœç”¨",
228 "settings.services.updatedInfo" : "已儲存你的變更", 239 "settings.services.updatedInfo" : "已儲存你的變更",
240 "settings.team.contentHeadline" : "Franz for Teams",
241 "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.headline" : "團隊",
243 "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.manageAction" : "Manage your Team on meetfranz.com",
245 "settings.team.upgradeAction" : "Upgrade your Account",
229 "settings.user.form.accountType.company" : "å…¬å¸", 246 "settings.user.form.accountType.company" : "å…¬å¸",
230 "settings.user.form.accountType.individual" : "個人", 247 "settings.user.form.accountType.individual" : "個人",
231 "settings.user.form.accountType.label" : "帳戶類型", 248 "settings.user.form.accountType.label" : "帳戶類型",
@@ -235,8 +252,25 @@
235 "settings.user.form.firstname" : "å", 252 "settings.user.form.firstname" : "å",
236 "settings.user.form.lastname" : "姓", 253 "settings.user.form.lastname" : "姓",
237 "settings.user.form.newPassword" : "新密碼", 254 "settings.user.form.newPassword" : "新密碼",
255 "settings.workspace.add.form.name" : "å稱",
256 "settings.workspace.add.form.submitButton" : "Create workspace",
257 "settings.workspace.form.buttonDelete" : "Delete workspace",
258 "settings.workspace.form.buttonSave" : "Save workspace",
259 "settings.workspace.form.name" : "å稱",
260 "settings.workspace.form.servicesInWorkspaceHeadline" : "Services in this Workspace",
261 "settings.workspace.form.yourWorkspaces" : "Your workspaces",
262 "settings.workspaces.deletedInfo" : "Workspace has been deleted",
263 "settings.workspaces.headline" : "Your workspaces",
264 "settings.workspaces.noWorkspacesAdded" : "You haven't added any workspaces yet.",
265 "settings.workspaces.tryReloadWorkspaces" : "å†è©¦ä¸€æ¬¡",
266 "settings.workspaces.updatedInfo" : "Your changes have been saved",
267 "settings.workspaces.workspaceFeatureHeadline" : "Less is More: Introducing Franz Workspaces",
268 "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.workspacesRequestFailed" : "Could not load your workspaces",
238 "sidebar.addNewService" : "新增新的æœå‹™", 270 "sidebar.addNewService" : "新增新的æœå‹™",
271 "sidebar.closeWorkspaceDrawer" : "Close workspace drawer",
239 "sidebar.muteApp" : "關閉通知和通知音效", 272 "sidebar.muteApp" : "關閉通知和通知音效",
273 "sidebar.openWorkspaceDrawer" : "Open workspace drawer",
240 "sidebar.settings" : "設定", 274 "sidebar.settings" : "設定",
241 "sidebar.unmuteApp" : "開啟通知和通知音效", 275 "sidebar.unmuteApp" : "開啟通知和通知音效",
242 "signup.company.label" : "å…¬å¸", 276 "signup.company.label" : "å…¬å¸",
@@ -258,6 +292,7 @@
258 "subscription.features.onpremise.mattermost" : "加入如 Mattermost 等已é å®š \/ 託管的æœå‹™", 292 "subscription.features.onpremise.mattermost" : "加入如 Mattermost 等已é å®š \/ 託管的æœå‹™",
259 "subscription.features.proxy" : "æœå‹™çš„代ç†ä¼ºæœå™¨æ”¯æ´", 293 "subscription.features.proxy" : "æœå‹™çš„代ç†ä¼ºæœå™¨æ”¯æ´",
260 "subscription.features.spellchecker" : "支æ´æ‹¼å­—檢查", 294 "subscription.features.spellchecker" : "支æ´æ‹¼å­—檢查",
295 "subscription.features.workspaces" : "Organize your services in workspaces",
261 "subscription.includedFeatures" : "Franz 高級支æ´å¸³æˆ¶åŒ…å«", 296 "subscription.includedFeatures" : "Franz 高級支æ´å¸³æˆ¶åŒ…å«",
262 "subscription.paymentSessionError" : "無法åˆå§‹åŒ–付款表單", 297 "subscription.paymentSessionError" : "無法åˆå§‹åŒ–付款表單",
263 "subscription.submit.label" : "æˆ‘æƒ³æ”¯æŒ Franz 開發", 298 "subscription.submit.label" : "æˆ‘æƒ³æ”¯æŒ Franz 開發",
@@ -281,5 +316,16 @@
281 "validation.required" : "{field}為必填", 316 "validation.required" : "{field}為必填",
282 "validation.url" : "{field}ä¸æ˜¯å€‹æœ‰æ•ˆçš„網å€", 317 "validation.url" : "{field}ä¸æ˜¯å€‹æœ‰æ•ˆçš„網å€",
283 "welcome.loginButton" : "登入您的帳戶", 318 "welcome.loginButton" : "登入您的帳戶",
284 "welcome.signupButton" : "建立å…費帳號" 319 "welcome.signupButton" : "建立å…費帳號",
320 "workspaceDrawer.addNewWorkspaceLabel" : "Add new workspace",
321 "workspaceDrawer.allServices" : "所有æœå‹™",
322 "workspaceDrawer.headline" : "Workspaces",
323 "workspaceDrawer.item.contextMenuEdit" : "edit",
324 "workspaceDrawer.item.noServicesAddedYet" : "No services added yet",
325 "workspaceDrawer.premiumCtaButtonLabel" : "Create your first workspace",
326 "workspaceDrawer.proFeatureBadge" : "Premium feature",
327 "workspaceDrawer.reactivatePremiumAccountLabel" : "Reactivate premium account",
328 "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.workspacesSettingsTooltip" : "Edit workspaces settings",
330 "workspaces.switchingIndicator.switchingTo" : "Switching to"
285} 331}
diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json
index 92593ed5c..4dd354afc 100644
--- a/src/i18n/messages/src/components/layout/AppLayout.json
+++ b/src/i18n/messages/src/components/layout/AppLayout.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Your services have been updated.", 4 "defaultMessage": "!!!Your services have been updated.",
5 "file": "src/components/layout/AppLayout.js", 5 "file": "src/components/layout/AppLayout.js",
6 "start": { 6 "start": {
7 "line": 25, 7 "line": 26,
8 "column": 19 8 "column": 19
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 28, 11 "line": 29,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!A new update for Franz is available.", 17 "defaultMessage": "!!!A new update for Franz is available.",
18 "file": "src/components/layout/AppLayout.js", 18 "file": "src/components/layout/AppLayout.js",
19 "start": { 19 "start": {
20 "line": 29, 20 "line": 30,
21 "column": 19 21 "column": 19
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 32, 24 "line": 33,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Reload services", 30 "defaultMessage": "!!!Reload services",
31 "file": "src/components/layout/AppLayout.js", 31 "file": "src/components/layout/AppLayout.js",
32 "start": { 32 "start": {
33 "line": 33, 33 "line": 34,
34 "column": 24 34 "column": 24
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 36, 37 "line": 37,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Changelog", 43 "defaultMessage": "!!!Changelog",
44 "file": "src/components/layout/AppLayout.js", 44 "file": "src/components/layout/AppLayout.js",
45 "start": { 45 "start": {
46 "line": 37, 46 "line": 38,
47 "column": 13 47 "column": 13
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 40, 50 "line": 41,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Restart & install update", 56 "defaultMessage": "!!!Restart & install update",
57 "file": "src/components/layout/AppLayout.js", 57 "file": "src/components/layout/AppLayout.js",
58 "start": { 58 "start": {
59 "line": 41, 59 "line": 42,
60 "column": 23 60 "column": 23
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 44, 63 "line": 45,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Could not load services and user information", 69 "defaultMessage": "!!!Could not load services and user information",
70 "file": "src/components/layout/AppLayout.js", 70 "file": "src/components/layout/AppLayout.js",
71 "start": { 71 "start": {
72 "line": 45, 72 "line": 46,
73 "column": 26 73 "column": 26
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 48, 76 "line": 49,
77 "column": 3 77 "column": 3
78 } 78 }
79 } 79 }
diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json
index 603950395..4969db910 100644
--- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json
+++ b/src/i18n/messages/src/components/settings/account/AccountDashboard.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Account", 4 "defaultMessage": "!!!Account",
5 "file": "src/components/settings/account/AccountDashboard.js", 5 "file": "src/components/settings/account/AccountDashboard.js",
6 "start": { 6 "start": {
7 "line": 15, 7 "line": 14,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 18, 11 "line": 17,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Your Subscription", 17 "defaultMessage": "!!!Your Subscription",
18 "file": "src/components/settings/account/AccountDashboard.js", 18 "file": "src/components/settings/account/AccountDashboard.js",
19 "start": { 19 "start": {
20 "line": 19, 20 "line": 18,
21 "column": 24 21 "column": 24
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 22, 24 "line": 21,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,24 +30,11 @@
30 "defaultMessage": "!!!Upgrade your Account", 30 "defaultMessage": "!!!Upgrade your Account",
31 "file": "src/components/settings/account/AccountDashboard.js", 31 "file": "src/components/settings/account/AccountDashboard.js",
32 "start": { 32 "start": {
33 "line": 23, 33 "line": 22,
34 "column": 19 34 "column": 19
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 26, 37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.account.headlineInvoices",
43 "defaultMessage": "!!Invoices",
44 "file": "src/components/settings/account/AccountDashboard.js",
45 "start": {
46 "line": 27,
47 "column": 20
48 },
49 "end": {
50 "line": 30,
51 "column": 3 38 "column": 3
52 } 39 }
53 }, 40 },
@@ -56,11 +43,11 @@
56 "defaultMessage": "!!Danger Zone", 43 "defaultMessage": "!!Danger Zone",
57 "file": "src/components/settings/account/AccountDashboard.js", 44 "file": "src/components/settings/account/AccountDashboard.js",
58 "start": { 45 "start": {
59 "line": 31, 46 "line": 26,
60 "column": 22 47 "column": 22
61 }, 48 },
62 "end": { 49 "end": {
63 "line": 34, 50 "line": 29,
64 "column": 3 51 "column": 3
65 } 52 }
66 }, 53 },
@@ -69,11 +56,11 @@
69 "defaultMessage": "!!!Manage your subscription", 56 "defaultMessage": "!!!Manage your subscription",
70 "file": "src/components/settings/account/AccountDashboard.js", 57 "file": "src/components/settings/account/AccountDashboard.js",
71 "start": { 58 "start": {
72 "line": 35, 59 "line": 30,
73 "column": 33 60 "column": 33
74 }, 61 },
75 "end": { 62 "end": {
76 "line": 38, 63 "line": 33,
77 "column": 3 64 "column": 3
78 } 65 }
79 }, 66 },
@@ -82,11 +69,11 @@
82 "defaultMessage": "!!!Basic Account", 69 "defaultMessage": "!!!Basic Account",
83 "file": "src/components/settings/account/AccountDashboard.js", 70 "file": "src/components/settings/account/AccountDashboard.js",
84 "start": { 71 "start": {
85 "line": 39, 72 "line": 34,
86 "column": 20 73 "column": 20
87 }, 74 },
88 "end": { 75 "end": {
89 "line": 42, 76 "line": 37,
90 "column": 3 77 "column": 3
91 } 78 }
92 }, 79 },
@@ -95,11 +82,11 @@
95 "defaultMessage": "!!!Premium Supporter Account", 82 "defaultMessage": "!!!Premium Supporter Account",
96 "file": "src/components/settings/account/AccountDashboard.js", 83 "file": "src/components/settings/account/AccountDashboard.js",
97 "start": { 84 "start": {
98 "line": 43, 85 "line": 38,
99 "column": 22 86 "column": 22
100 }, 87 },
101 "end": { 88 "end": {
102 "line": 46, 89 "line": 41,
103 "column": 3 90 "column": 3
104 } 91 }
105 }, 92 },
@@ -108,11 +95,24 @@
108 "defaultMessage": "!!!Edit Account", 95 "defaultMessage": "!!!Edit Account",
109 "file": "src/components/settings/account/AccountDashboard.js", 96 "file": "src/components/settings/account/AccountDashboard.js",
110 "start": { 97 "start": {
111 "line": 47, 98 "line": 42,
112 "column": 21 99 "column": 21
113 }, 100 },
114 "end": { 101 "end": {
115 "line": 50, 102 "line": 45,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.account.headlineInvoices",
108 "defaultMessage": "!!Invoices",
109 "file": "src/components/settings/account/AccountDashboard.js",
110 "start": {
111 "line": 46,
112 "column": 18
113 },
114 "end": {
115 "line": 49,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!Download", 121 "defaultMessage": "!!!Download",
122 "file": "src/components/settings/account/AccountDashboard.js", 122 "file": "src/components/settings/account/AccountDashboard.js",
123 "start": { 123 "start": {
124 "line": 51, 124 "line": 50,
125 "column": 19 125 "column": 19
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 54, 128 "line": 53,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Could not load user information", 134 "defaultMessage": "!!!Could not load user information",
135 "file": "src/components/settings/account/AccountDashboard.js", 135 "file": "src/components/settings/account/AccountDashboard.js",
136 "start": { 136 "start": {
137 "line": 55, 137 "line": 54,
138 "column": 25 138 "column": 25
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 58, 141 "line": 57,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Try again", 147 "defaultMessage": "!!!Try again",
148 "file": "src/components/settings/account/AccountDashboard.js", 148 "file": "src/components/settings/account/AccountDashboard.js",
149 "start": { 149 "start": {
150 "line": 59, 150 "line": 58,
151 "column": 28 151 "column": 28
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 62, 154 "line": 61,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Delete account", 160 "defaultMessage": "!!!Delete account",
161 "file": "src/components/settings/account/AccountDashboard.js", 161 "file": "src/components/settings/account/AccountDashboard.js",
162 "start": { 162 "start": {
163 "line": 63, 163 "line": 62,
164 "column": 17 164 "column": 17
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 66, 167 "line": 65,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", 173 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.",
174 "file": "src/components/settings/account/AccountDashboard.js", 174 "file": "src/components/settings/account/AccountDashboard.js",
175 "start": { 175 "start": {
176 "line": 67, 176 "line": 66,
177 "column": 14 177 "column": 14
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 70, 180 "line": 69,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,11 @@
186 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 186 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
187 "file": "src/components/settings/account/AccountDashboard.js", 187 "file": "src/components/settings/account/AccountDashboard.js",
188 "start": { 188 "start": {
189 "line": 71, 189 "line": 70,
190 "column": 19 190 "column": 19
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 74, 193 "line": 73,
194 "column": 3 194 "column": 3
195 } 195 }
196 } 196 }
diff --git a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json
index 77b0ed8a4..70a989211 100644
--- a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json
+++ b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Available services", 4 "defaultMessage": "!!!Available services",
5 "file": "src/components/settings/navigation/SettingsNavigation.js", 5 "file": "src/components/settings/navigation/SettingsNavigation.js",
6 "start": { 6 "start": {
7 "line": 12, 7 "line": 13,
8 "column": 21 8 "column": 21
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 15, 11 "line": 16,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Your services", 17 "defaultMessage": "!!!Your services",
18 "file": "src/components/settings/navigation/SettingsNavigation.js", 18 "file": "src/components/settings/navigation/SettingsNavigation.js",
19 "start": { 19 "start": {
20 "line": 16, 20 "line": 17,
21 "column": 16 21 "column": 16
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 19, 24 "line": 20,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Your workspaces", 30 "defaultMessage": "!!!Your workspaces",
31 "file": "src/components/settings/navigation/SettingsNavigation.js", 31 "file": "src/components/settings/navigation/SettingsNavigation.js",
32 "start": { 32 "start": {
33 "line": 20, 33 "line": 21,
34 "column": 18 34 "column": 18
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 23, 37 "line": 24,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,24 @@
43 "defaultMessage": "!!!Account", 43 "defaultMessage": "!!!Account",
44 "file": "src/components/settings/navigation/SettingsNavigation.js", 44 "file": "src/components/settings/navigation/SettingsNavigation.js",
45 "start": { 45 "start": {
46 "line": 24, 46 "line": 25,
47 "column": 11 47 "column": 11
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 27, 50 "line": 28,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.navigation.team",
56 "defaultMessage": "!!!Manage Team",
57 "file": "src/components/settings/navigation/SettingsNavigation.js",
58 "start": {
59 "line": 29,
60 "column": 8
61 },
62 "end": {
63 "line": 32,
51 "column": 3 64 "column": 3
52 } 65 }
53 }, 66 },
@@ -56,11 +69,11 @@
56 "defaultMessage": "!!!Settings", 69 "defaultMessage": "!!!Settings",
57 "file": "src/components/settings/navigation/SettingsNavigation.js", 70 "file": "src/components/settings/navigation/SettingsNavigation.js",
58 "start": { 71 "start": {
59 "line": 28, 72 "line": 33,
60 "column": 12 73 "column": 12
61 }, 74 },
62 "end": { 75 "end": {
63 "line": 31, 76 "line": 36,
64 "column": 3 77 "column": 3
65 } 78 }
66 }, 79 },
@@ -69,11 +82,11 @@
69 "defaultMessage": "!!!Invite Friends", 82 "defaultMessage": "!!!Invite Friends",
70 "file": "src/components/settings/navigation/SettingsNavigation.js", 83 "file": "src/components/settings/navigation/SettingsNavigation.js",
71 "start": { 84 "start": {
72 "line": 32, 85 "line": 37,
73 "column": 17 86 "column": 17
74 }, 87 },
75 "end": { 88 "end": {
76 "line": 35, 89 "line": 40,
77 "column": 3 90 "column": 3
78 } 91 }
79 }, 92 },
@@ -82,11 +95,11 @@
82 "defaultMessage": "!!!Logout", 95 "defaultMessage": "!!!Logout",
83 "file": "src/components/settings/navigation/SettingsNavigation.js", 96 "file": "src/components/settings/navigation/SettingsNavigation.js",
84 "start": { 97 "start": {
85 "line": 36, 98 "line": 41,
86 "column": 10 99 "column": 10
87 }, 100 },
88 "end": { 101 "end": {
89 "line": 39, 102 "line": 44,
90 "column": 3 103 "column": 3
91 } 104 }
92 } 105 }
diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
index c64f477be..fa21db10a 100644
--- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
+++ b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
@@ -219,5 +219,18 @@
219 "line": 83, 219 "line": 83,
220 "column": 3 220 "column": 3
221 } 221 }
222 },
223 {
224 "id": "settings.app.languageDisclaimer",
225 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
226 "file": "src/components/settings/settings/EditSettingsForm.js",
227 "start": {
228 "line": 84,
229 "column": 22
230 },
231 "end": {
232 "line": 87,
233 "column": 3
234 }
222 } 235 }
223] \ No newline at end of file 236] \ No newline at end of file
diff --git a/src/i18n/messages/src/components/settings/team/TeamDashboard.json b/src/i18n/messages/src/components/settings/team/TeamDashboard.json
new file mode 100644
index 000000000..6bccc25ff
--- /dev/null
+++ b/src/i18n/messages/src/components/settings/team/TeamDashboard.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "settings.team.headline",
4 "defaultMessage": "!!!Team",
5 "file": "src/components/settings/team/TeamDashboard.js",
6 "start": {
7 "line": 14,
8 "column": 12
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.team.contentHeadline",
17 "defaultMessage": "!!!Franz for Teams",
18 "file": "src/components/settings/team/TeamDashboard.js",
19 "start": {
20 "line": 18,
21 "column": 19
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.team.intro",
30 "defaultMessage": "!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.",
31 "file": "src/components/settings/team/TeamDashboard.js",
32 "start": {
33 "line": 22,
34 "column": 9
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.team.copy",
43 "defaultMessage": "!!!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!",
44 "file": "src/components/settings/team/TeamDashboard.js",
45 "start": {
46 "line": 26,
47 "column": 8
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.team.manageAction",
56 "defaultMessage": "!!!Manage your Team on meetfranz.com",
57 "file": "src/components/settings/team/TeamDashboard.js",
58 "start": {
59 "line": 30,
60 "column": 16
61 },
62 "end": {
63 "line": 33,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.team.upgradeAction",
69 "defaultMessage": "!!!Upgrade your Account",
70 "file": "src/components/settings/team/TeamDashboard.js",
71 "start": {
72 "line": 34,
73 "column": 17
74 },
75 "end": {
76 "line": 37,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/src/i18n/messages/src/components/subscription/SubscriptionForm.json b/src/i18n/messages/src/components/subscription/SubscriptionForm.json
index cc7470358..f98eb986f 100644
--- a/src/i18n/messages/src/components/subscription/SubscriptionForm.json
+++ b/src/i18n/messages/src/components/subscription/SubscriptionForm.json
@@ -130,15 +130,28 @@
130 } 130 }
131 }, 131 },
132 { 132 {
133 "id": "subscription.features.workspaces",
134 "defaultMessage": "!!!Organize your services in workspaces",
135 "file": "src/components/subscription/SubscriptionForm.js",
136 "start": {
137 "line": 54,
138 "column": 14
139 },
140 "end": {
141 "line": 57,
142 "column": 3
143 }
144 },
145 {
133 "id": "subscription.features.ads", 146 "id": "subscription.features.ads",
134 "defaultMessage": "!!!No ads, ever!", 147 "defaultMessage": "!!!No ads, ever!",
135 "file": "src/components/subscription/SubscriptionForm.js", 148 "file": "src/components/subscription/SubscriptionForm.js",
136 "start": { 149 "start": {
137 "line": 54, 150 "line": 58,
138 "column": 7 151 "column": 7
139 }, 152 },
140 "end": { 153 "end": {
141 "line": 57, 154 "line": 61,
142 "column": 3 155 "column": 3
143 } 156 }
144 }, 157 },
@@ -147,11 +160,11 @@
147 "defaultMessage": "!!!coming soon", 160 "defaultMessage": "!!!coming soon",
148 "file": "src/components/subscription/SubscriptionForm.js", 161 "file": "src/components/subscription/SubscriptionForm.js",
149 "start": { 162 "start": {
150 "line": 58, 163 "line": 62,
151 "column": 14 164 "column": 14
152 }, 165 },
153 "end": { 166 "end": {
154 "line": 61, 167 "line": 65,
155 "column": 3 168 "column": 3
156 } 169 }
157 }, 170 },
@@ -160,11 +173,11 @@
160 "defaultMessage": "!!!EU residents: local sales tax may apply", 173 "defaultMessage": "!!!EU residents: local sales tax may apply",
161 "file": "src/components/subscription/SubscriptionForm.js", 174 "file": "src/components/subscription/SubscriptionForm.js",
162 "start": { 175 "start": {
163 "line": 62, 176 "line": 66,
164 "column": 13 177 "column": 13
165 }, 178 },
166 "end": { 179 "end": {
167 "line": 65, 180 "line": 69,
168 "column": 3 181 "column": 3
169 } 182 }
170 } 183 }
diff --git a/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json b/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json
new file mode 100644
index 000000000..eb1b66916
--- /dev/null
+++ b/src/i18n/messages/src/features/announcements/components/AnnouncementScreen.json
@@ -0,0 +1,15 @@
1[
2 {
3 "id": "feature.announcements.changelog.headline",
4 "defaultMessage": "!!!Changes in Franz {version}",
5 "file": "src/features/announcements/components/AnnouncementScreen.js",
6 "start": {
7 "line": 20,
8 "column": 12
9 },
10 "end": {
11 "line": 23,
12 "column": 3
13 }
14 }
15] \ No newline at end of file
diff --git a/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json b/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json
index 7b0c3e1ce..20ed99f8d 100644
--- a/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json
+++ b/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json
@@ -63,5 +63,31 @@
63 "line": 38, 63 "line": 38,
64 "column": 3 64 "column": 3
65 } 65 }
66 },
67 {
68 "id": "settings.services.noServicesAdded",
69 "defaultMessage": "!!!You haven't added any services yet.",
70 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
71 "start": {
72 "line": 39,
73 "column": 19
74 },
75 "end": {
76 "line": 42,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.services.discoverServices",
82 "defaultMessage": "!!!Discover services",
83 "file": "src/features/workspaces/components/EditWorkspaceForm.js",
84 "start": {
85 "line": 43,
86 "column": 20
87 },
88 "end": {
89 "line": 46,
90 "column": 3
91 }
66 } 92 }
67] \ No newline at end of file 93] \ No newline at end of file
diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json
index 3889d39e0..2adf5b787 100644
--- a/src/i18n/messages/src/lib/Menu.json
+++ b/src/i18n/messages/src/lib/Menu.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Edit", 4 "defaultMessage": "!!!Edit",
5 "file": "src/lib/Menu.js", 5 "file": "src/lib/Menu.js",
6 "start": { 6 "start": {
7 "line": 13, 7 "line": 15,
8 "column": 8 8 "column": 8
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 16, 11 "line": 18,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Undo", 17 "defaultMessage": "!!!Undo",
18 "file": "src/lib/Menu.js", 18 "file": "src/lib/Menu.js",
19 "start": { 19 "start": {
20 "line": 17, 20 "line": 19,
21 "column": 8 21 "column": 8
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 20, 24 "line": 22,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Redo", 30 "defaultMessage": "!!!Redo",
31 "file": "src/lib/Menu.js", 31 "file": "src/lib/Menu.js",
32 "start": { 32 "start": {
33 "line": 21, 33 "line": 23,
34 "column": 8 34 "column": 8
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 24, 37 "line": 26,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Cut", 43 "defaultMessage": "!!!Cut",
44 "file": "src/lib/Menu.js", 44 "file": "src/lib/Menu.js",
45 "start": { 45 "start": {
46 "line": 25, 46 "line": 27,
47 "column": 7 47 "column": 7
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 28, 50 "line": 30,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Copy", 56 "defaultMessage": "!!!Copy",
57 "file": "src/lib/Menu.js", 57 "file": "src/lib/Menu.js",
58 "start": { 58 "start": {
59 "line": 29, 59 "line": 31,
60 "column": 8 60 "column": 8
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 32, 63 "line": 34,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Paste", 69 "defaultMessage": "!!!Paste",
70 "file": "src/lib/Menu.js", 70 "file": "src/lib/Menu.js",
71 "start": { 71 "start": {
72 "line": 33, 72 "line": 35,
73 "column": 9 73 "column": 9
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 36, 76 "line": 38,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Paste And Match Style", 82 "defaultMessage": "!!!Paste And Match Style",
83 "file": "src/lib/Menu.js", 83 "file": "src/lib/Menu.js",
84 "start": { 84 "start": {
85 "line": 37, 85 "line": 39,
86 "column": 22 86 "column": 22
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 40, 89 "line": 42,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Delete", 95 "defaultMessage": "!!!Delete",
96 "file": "src/lib/Menu.js", 96 "file": "src/lib/Menu.js",
97 "start": { 97 "start": {
98 "line": 41, 98 "line": 43,
99 "column": 10 99 "column": 10
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 44, 102 "line": 46,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Select All", 108 "defaultMessage": "!!!Select All",
109 "file": "src/lib/Menu.js", 109 "file": "src/lib/Menu.js",
110 "start": { 110 "start": {
111 "line": 45, 111 "line": 47,
112 "column": 13 112 "column": 13
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 48, 115 "line": 50,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!Speech", 121 "defaultMessage": "!!!Speech",
122 "file": "src/lib/Menu.js", 122 "file": "src/lib/Menu.js",
123 "start": { 123 "start": {
124 "line": 49, 124 "line": 51,
125 "column": 10 125 "column": 10
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 52, 128 "line": 54,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Start Speaking", 134 "defaultMessage": "!!!Start Speaking",
135 "file": "src/lib/Menu.js", 135 "file": "src/lib/Menu.js",
136 "start": { 136 "start": {
137 "line": 53, 137 "line": 55,
138 "column": 17 138 "column": 17
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 56, 141 "line": 58,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Stop Speaking", 147 "defaultMessage": "!!!Stop Speaking",
148 "file": "src/lib/Menu.js", 148 "file": "src/lib/Menu.js",
149 "start": { 149 "start": {
150 "line": 57, 150 "line": 59,
151 "column": 16 151 "column": 16
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 60, 154 "line": 62,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Start Dictation", 160 "defaultMessage": "!!!Start Dictation",
161 "file": "src/lib/Menu.js", 161 "file": "src/lib/Menu.js",
162 "start": { 162 "start": {
163 "line": 61, 163 "line": 63,
164 "column": 18 164 "column": 18
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 64, 167 "line": 66,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!Emoji & Symbols", 173 "defaultMessage": "!!!Emoji & Symbols",
174 "file": "src/lib/Menu.js", 174 "file": "src/lib/Menu.js",
175 "start": { 175 "start": {
176 "line": 65, 176 "line": 67,
177 "column": 16 177 "column": 16
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 68, 180 "line": 70,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,11 @@
186 "defaultMessage": "!!!Actual Size", 186 "defaultMessage": "!!!Actual Size",
187 "file": "src/lib/Menu.js", 187 "file": "src/lib/Menu.js",
188 "start": { 188 "start": {
189 "line": 69, 189 "line": 71,
190 "column": 13 190 "column": 13
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 72, 193 "line": 74,
194 "column": 3 194 "column": 3
195 } 195 }
196 }, 196 },
@@ -199,11 +199,11 @@
199 "defaultMessage": "!!!Zoom In", 199 "defaultMessage": "!!!Zoom In",
200 "file": "src/lib/Menu.js", 200 "file": "src/lib/Menu.js",
201 "start": { 201 "start": {
202 "line": 73, 202 "line": 75,
203 "column": 10 203 "column": 10
204 }, 204 },
205 "end": { 205 "end": {
206 "line": 76, 206 "line": 78,
207 "column": 3 207 "column": 3
208 } 208 }
209 }, 209 },
@@ -212,11 +212,11 @@
212 "defaultMessage": "!!!Zoom Out", 212 "defaultMessage": "!!!Zoom Out",
213 "file": "src/lib/Menu.js", 213 "file": "src/lib/Menu.js",
214 "start": { 214 "start": {
215 "line": 77, 215 "line": 79,
216 "column": 11 216 "column": 11
217 }, 217 },
218 "end": { 218 "end": {
219 "line": 80, 219 "line": 82,
220 "column": 3 220 "column": 3
221 } 221 }
222 }, 222 },
@@ -225,11 +225,11 @@
225 "defaultMessage": "!!!Enter Full Screen", 225 "defaultMessage": "!!!Enter Full Screen",
226 "file": "src/lib/Menu.js", 226 "file": "src/lib/Menu.js",
227 "start": { 227 "start": {
228 "line": 81, 228 "line": 83,
229 "column": 19 229 "column": 19
230 }, 230 },
231 "end": { 231 "end": {
232 "line": 84, 232 "line": 86,
233 "column": 3 233 "column": 3
234 } 234 }
235 }, 235 },
@@ -238,11 +238,11 @@
238 "defaultMessage": "!!!Exit Full Screen", 238 "defaultMessage": "!!!Exit Full Screen",
239 "file": "src/lib/Menu.js", 239 "file": "src/lib/Menu.js",
240 "start": { 240 "start": {
241 "line": 85, 241 "line": 87,
242 "column": 18 242 "column": 18
243 }, 243 },
244 "end": { 244 "end": {
245 "line": 88, 245 "line": 90,
246 "column": 3 246 "column": 3
247 } 247 }
248 }, 248 },
@@ -251,11 +251,11 @@
251 "defaultMessage": "!!!Toggle Full Screen", 251 "defaultMessage": "!!!Toggle Full Screen",
252 "file": "src/lib/Menu.js", 252 "file": "src/lib/Menu.js",
253 "start": { 253 "start": {
254 "line": 89, 254 "line": 91,
255 "column": 20 255 "column": 20
256 }, 256 },
257 "end": { 257 "end": {
258 "line": 92, 258 "line": 94,
259 "column": 3 259 "column": 3
260 } 260 }
261 }, 261 },
@@ -264,11 +264,11 @@
264 "defaultMessage": "!!!Toggle Developer Tools", 264 "defaultMessage": "!!!Toggle Developer Tools",
265 "file": "src/lib/Menu.js", 265 "file": "src/lib/Menu.js",
266 "start": { 266 "start": {
267 "line": 93, 267 "line": 95,
268 "column": 18 268 "column": 18
269 }, 269 },
270 "end": { 270 "end": {
271 "line": 96, 271 "line": 98,
272 "column": 3 272 "column": 3
273 } 273 }
274 }, 274 },
@@ -277,11 +277,11 @@
277 "defaultMessage": "!!!Toggle Service Developer Tools", 277 "defaultMessage": "!!!Toggle Service Developer Tools",
278 "file": "src/lib/Menu.js", 278 "file": "src/lib/Menu.js",
279 "start": { 279 "start": {
280 "line": 97, 280 "line": 99,
281 "column": 25 281 "column": 25
282 }, 282 },
283 "end": { 283 "end": {
284 "line": 100, 284 "line": 102,
285 "column": 3 285 "column": 3
286 } 286 }
287 }, 287 },
@@ -290,11 +290,11 @@
290 "defaultMessage": "!!!Reload Service", 290 "defaultMessage": "!!!Reload Service",
291 "file": "src/lib/Menu.js", 291 "file": "src/lib/Menu.js",
292 "start": { 292 "start": {
293 "line": 101, 293 "line": 103,
294 "column": 17 294 "column": 17
295 }, 295 },
296 "end": { 296 "end": {
297 "line": 104, 297 "line": 106,
298 "column": 3 298 "column": 3
299 } 299 }
300 }, 300 },
@@ -303,11 +303,11 @@
303 "defaultMessage": "!!!Reload Franz", 303 "defaultMessage": "!!!Reload Franz",
304 "file": "src/lib/Menu.js", 304 "file": "src/lib/Menu.js",
305 "start": { 305 "start": {
306 "line": 105, 306 "line": 107,
307 "column": 15 307 "column": 15
308 }, 308 },
309 "end": { 309 "end": {
310 "line": 108, 310 "line": 110,
311 "column": 3 311 "column": 3
312 } 312 }
313 }, 313 },
@@ -316,11 +316,11 @@
316 "defaultMessage": "!!!Minimize", 316 "defaultMessage": "!!!Minimize",
317 "file": "src/lib/Menu.js", 317 "file": "src/lib/Menu.js",
318 "start": { 318 "start": {
319 "line": 109, 319 "line": 111,
320 "column": 12 320 "column": 12
321 }, 321 },
322 "end": { 322 "end": {
323 "line": 112, 323 "line": 114,
324 "column": 3 324 "column": 3
325 } 325 }
326 }, 326 },
@@ -329,11 +329,11 @@
329 "defaultMessage": "!!!Close", 329 "defaultMessage": "!!!Close",
330 "file": "src/lib/Menu.js", 330 "file": "src/lib/Menu.js",
331 "start": { 331 "start": {
332 "line": 113, 332 "line": 115,
333 "column": 9 333 "column": 9
334 }, 334 },
335 "end": { 335 "end": {
336 "line": 116, 336 "line": 118,
337 "column": 3 337 "column": 3
338 } 338 }
339 }, 339 },
@@ -342,11 +342,11 @@
342 "defaultMessage": "!!!Learn More", 342 "defaultMessage": "!!!Learn More",
343 "file": "src/lib/Menu.js", 343 "file": "src/lib/Menu.js",
344 "start": { 344 "start": {
345 "line": 117, 345 "line": 119,
346 "column": 13 346 "column": 13
347 }, 347 },
348 "end": { 348 "end": {
349 "line": 120, 349 "line": 122,
350 "column": 3 350 "column": 3
351 } 351 }
352 }, 352 },
@@ -355,11 +355,11 @@
355 "defaultMessage": "!!!Changelog", 355 "defaultMessage": "!!!Changelog",
356 "file": "src/lib/Menu.js", 356 "file": "src/lib/Menu.js",
357 "start": { 357 "start": {
358 "line": 121, 358 "line": 123,
359 "column": 13 359 "column": 13
360 }, 360 },
361 "end": { 361 "end": {
362 "line": 124, 362 "line": 126,
363 "column": 3 363 "column": 3
364 } 364 }
365 }, 365 },
@@ -368,11 +368,11 @@
368 "defaultMessage": "!!!Support", 368 "defaultMessage": "!!!Support",
369 "file": "src/lib/Menu.js", 369 "file": "src/lib/Menu.js",
370 "start": { 370 "start": {
371 "line": 125, 371 "line": 127,
372 "column": 11 372 "column": 11
373 }, 373 },
374 "end": { 374 "end": {
375 "line": 128, 375 "line": 130,
376 "column": 3 376 "column": 3
377 } 377 }
378 }, 378 },
@@ -381,11 +381,11 @@
381 "defaultMessage": "!!!Terms of Service", 381 "defaultMessage": "!!!Terms of Service",
382 "file": "src/lib/Menu.js", 382 "file": "src/lib/Menu.js",
383 "start": { 383 "start": {
384 "line": 129, 384 "line": 131,
385 "column": 7 385 "column": 7
386 }, 386 },
387 "end": { 387 "end": {
388 "line": 132, 388 "line": 134,
389 "column": 3 389 "column": 3
390 } 390 }
391 }, 391 },
@@ -394,11 +394,11 @@
394 "defaultMessage": "!!!Privacy Statement", 394 "defaultMessage": "!!!Privacy Statement",
395 "file": "src/lib/Menu.js", 395 "file": "src/lib/Menu.js",
396 "start": { 396 "start": {
397 "line": 133, 397 "line": 135,
398 "column": 11 398 "column": 11
399 }, 399 },
400 "end": { 400 "end": {
401 "line": 136, 401 "line": 138,
402 "column": 3 402 "column": 3
403 } 403 }
404 }, 404 },
@@ -407,11 +407,11 @@
407 "defaultMessage": "!!!File", 407 "defaultMessage": "!!!File",
408 "file": "src/lib/Menu.js", 408 "file": "src/lib/Menu.js",
409 "start": { 409 "start": {
410 "line": 137, 410 "line": 139,
411 "column": 8 411 "column": 8
412 }, 412 },
413 "end": { 413 "end": {
414 "line": 140, 414 "line": 142,
415 "column": 3 415 "column": 3
416 } 416 }
417 }, 417 },
@@ -420,11 +420,11 @@
420 "defaultMessage": "!!!View", 420 "defaultMessage": "!!!View",
421 "file": "src/lib/Menu.js", 421 "file": "src/lib/Menu.js",
422 "start": { 422 "start": {
423 "line": 141, 423 "line": 143,
424 "column": 8 424 "column": 8
425 }, 425 },
426 "end": { 426 "end": {
427 "line": 144, 427 "line": 146,
428 "column": 3 428 "column": 3
429 } 429 }
430 }, 430 },
@@ -433,11 +433,11 @@
433 "defaultMessage": "!!!Services", 433 "defaultMessage": "!!!Services",
434 "file": "src/lib/Menu.js", 434 "file": "src/lib/Menu.js",
435 "start": { 435 "start": {
436 "line": 145, 436 "line": 147,
437 "column": 12 437 "column": 12
438 }, 438 },
439 "end": { 439 "end": {
440 "line": 148, 440 "line": 150,
441 "column": 3 441 "column": 3
442 } 442 }
443 }, 443 },
@@ -446,11 +446,11 @@
446 "defaultMessage": "!!!Window", 446 "defaultMessage": "!!!Window",
447 "file": "src/lib/Menu.js", 447 "file": "src/lib/Menu.js",
448 "start": { 448 "start": {
449 "line": 149, 449 "line": 151,
450 "column": 10 450 "column": 10
451 }, 451 },
452 "end": { 452 "end": {
453 "line": 152, 453 "line": 154,
454 "column": 3 454 "column": 3
455 } 455 }
456 }, 456 },
@@ -459,11 +459,11 @@
459 "defaultMessage": "!!!Help", 459 "defaultMessage": "!!!Help",
460 "file": "src/lib/Menu.js", 460 "file": "src/lib/Menu.js",
461 "start": { 461 "start": {
462 "line": 153, 462 "line": 155,
463 "column": 8 463 "column": 8
464 }, 464 },
465 "end": { 465 "end": {
466 "line": 156, 466 "line": 158,
467 "column": 3 467 "column": 3
468 } 468 }
469 }, 469 },
@@ -472,11 +472,24 @@
472 "defaultMessage": "!!!About Franz", 472 "defaultMessage": "!!!About Franz",
473 "file": "src/lib/Menu.js", 473 "file": "src/lib/Menu.js",
474 "start": { 474 "start": {
475 "line": 157, 475 "line": 159,
476 "column": 9 476 "column": 9
477 }, 477 },
478 "end": { 478 "end": {
479 "line": 160, 479 "line": 162,
480 "column": 3
481 }
482 },
483 {
484 "id": "menu.app.announcement",
485 "defaultMessage": "!!!What's new?",
486 "file": "src/lib/Menu.js",
487 "start": {
488 "line": 163,
489 "column": 16
490 },
491 "end": {
492 "line": 166,
480 "column": 3 493 "column": 3
481 } 494 }
482 }, 495 },
@@ -485,11 +498,11 @@
485 "defaultMessage": "!!!Settings", 498 "defaultMessage": "!!!Settings",
486 "file": "src/lib/Menu.js", 499 "file": "src/lib/Menu.js",
487 "start": { 500 "start": {
488 "line": 161, 501 "line": 167,
489 "column": 12 502 "column": 12
490 }, 503 },
491 "end": { 504 "end": {
492 "line": 164, 505 "line": 170,
493 "column": 3 506 "column": 3
494 } 507 }
495 }, 508 },
@@ -498,11 +511,11 @@
498 "defaultMessage": "!!!Hide", 511 "defaultMessage": "!!!Hide",
499 "file": "src/lib/Menu.js", 512 "file": "src/lib/Menu.js",
500 "start": { 513 "start": {
501 "line": 165, 514 "line": 171,
502 "column": 8 515 "column": 8
503 }, 516 },
504 "end": { 517 "end": {
505 "line": 168, 518 "line": 174,
506 "column": 3 519 "column": 3
507 } 520 }
508 }, 521 },
@@ -511,11 +524,11 @@
511 "defaultMessage": "!!!Hide Others", 524 "defaultMessage": "!!!Hide Others",
512 "file": "src/lib/Menu.js", 525 "file": "src/lib/Menu.js",
513 "start": { 526 "start": {
514 "line": 169, 527 "line": 175,
515 "column": 14 528 "column": 14
516 }, 529 },
517 "end": { 530 "end": {
518 "line": 172, 531 "line": 178,
519 "column": 3 532 "column": 3
520 } 533 }
521 }, 534 },
@@ -524,11 +537,11 @@
524 "defaultMessage": "!!!Unhide", 537 "defaultMessage": "!!!Unhide",
525 "file": "src/lib/Menu.js", 538 "file": "src/lib/Menu.js",
526 "start": { 539 "start": {
527 "line": 173, 540 "line": 179,
528 "column": 10 541 "column": 10
529 }, 542 },
530 "end": { 543 "end": {
531 "line": 176, 544 "line": 182,
532 "column": 3 545 "column": 3
533 } 546 }
534 }, 547 },
@@ -537,11 +550,11 @@
537 "defaultMessage": "!!!Quit", 550 "defaultMessage": "!!!Quit",
538 "file": "src/lib/Menu.js", 551 "file": "src/lib/Menu.js",
539 "start": { 552 "start": {
540 "line": 177, 553 "line": 183,
541 "column": 8 554 "column": 8
542 }, 555 },
543 "end": { 556 "end": {
544 "line": 180, 557 "line": 186,
545 "column": 3 558 "column": 3
546 } 559 }
547 }, 560 },
@@ -550,11 +563,11 @@
550 "defaultMessage": "!!!Add New Service...", 563 "defaultMessage": "!!!Add New Service...",
551 "file": "src/lib/Menu.js", 564 "file": "src/lib/Menu.js",
552 "start": { 565 "start": {
553 "line": 181, 566 "line": 187,
554 "column": 17 567 "column": 17
555 }, 568 },
556 "end": { 569 "end": {
557 "line": 184, 570 "line": 190,
558 "column": 3 571 "column": 3
559 } 572 }
560 }, 573 },
@@ -563,11 +576,11 @@
563 "defaultMessage": "!!!Add New Workspace...", 576 "defaultMessage": "!!!Add New Workspace...",
564 "file": "src/lib/Menu.js", 577 "file": "src/lib/Menu.js",
565 "start": { 578 "start": {
566 "line": 185, 579 "line": 191,
567 "column": 19 580 "column": 19
568 }, 581 },
569 "end": { 582 "end": {
570 "line": 188, 583 "line": 194,
571 "column": 3 584 "column": 3
572 } 585 }
573 }, 586 },
@@ -576,11 +589,11 @@
576 "defaultMessage": "!!!Open workspace drawer", 589 "defaultMessage": "!!!Open workspace drawer",
577 "file": "src/lib/Menu.js", 590 "file": "src/lib/Menu.js",
578 "start": { 591 "start": {
579 "line": 189, 592 "line": 195,
580 "column": 23 593 "column": 23
581 }, 594 },
582 "end": { 595 "end": {
583 "line": 192, 596 "line": 198,
584 "column": 3 597 "column": 3
585 } 598 }
586 }, 599 },
@@ -589,11 +602,11 @@
589 "defaultMessage": "!!!Close workspace drawer", 602 "defaultMessage": "!!!Close workspace drawer",
590 "file": "src/lib/Menu.js", 603 "file": "src/lib/Menu.js",
591 "start": { 604 "start": {
592 "line": 193, 605 "line": 199,
593 "column": 24 606 "column": 24
594 }, 607 },
595 "end": { 608 "end": {
596 "line": 196, 609 "line": 202,
597 "column": 3 610 "column": 3
598 } 611 }
599 }, 612 },
@@ -602,11 +615,11 @@
602 "defaultMessage": "!!!Activate next service...", 615 "defaultMessage": "!!!Activate next service...",
603 "file": "src/lib/Menu.js", 616 "file": "src/lib/Menu.js",
604 "start": { 617 "start": {
605 "line": 197, 618 "line": 203,
606 "column": 23 619 "column": 23
607 }, 620 },
608 "end": { 621 "end": {
609 "line": 200, 622 "line": 206,
610 "column": 3 623 "column": 3
611 } 624 }
612 }, 625 },
@@ -615,11 +628,11 @@
615 "defaultMessage": "!!!Activate previous service...", 628 "defaultMessage": "!!!Activate previous service...",
616 "file": "src/lib/Menu.js", 629 "file": "src/lib/Menu.js",
617 "start": { 630 "start": {
618 "line": 201, 631 "line": 207,
619 "column": 27 632 "column": 27
620 }, 633 },
621 "end": { 634 "end": {
622 "line": 204, 635 "line": 210,
623 "column": 3 636 "column": 3
624 } 637 }
625 }, 638 },
@@ -628,11 +641,11 @@
628 "defaultMessage": "!!!Disable notifications & audio", 641 "defaultMessage": "!!!Disable notifications & audio",
629 "file": "src/lib/Menu.js", 642 "file": "src/lib/Menu.js",
630 "start": { 643 "start": {
631 "line": 205, 644 "line": 211,
632 "column": 11 645 "column": 11
633 }, 646 },
634 "end": { 647 "end": {
635 "line": 208, 648 "line": 214,
636 "column": 3 649 "column": 3
637 } 650 }
638 }, 651 },
@@ -641,11 +654,11 @@
641 "defaultMessage": "!!!Enable notifications & audio", 654 "defaultMessage": "!!!Enable notifications & audio",
642 "file": "src/lib/Menu.js", 655 "file": "src/lib/Menu.js",
643 "start": { 656 "start": {
644 "line": 209, 657 "line": 215,
645 "column": 13 658 "column": 13
646 }, 659 },
647 "end": { 660 "end": {
648 "line": 212, 661 "line": 218,
649 "column": 3 662 "column": 3
650 } 663 }
651 }, 664 },
@@ -654,11 +667,11 @@
654 "defaultMessage": "!!!Workspaces", 667 "defaultMessage": "!!!Workspaces",
655 "file": "src/lib/Menu.js", 668 "file": "src/lib/Menu.js",
656 "start": { 669 "start": {
657 "line": 213, 670 "line": 219,
658 "column": 14 671 "column": 14
659 }, 672 },
660 "end": { 673 "end": {
661 "line": 216, 674 "line": 222,
662 "column": 3 675 "column": 3
663 } 676 }
664 }, 677 },
@@ -667,11 +680,11 @@
667 "defaultMessage": "!!!Default", 680 "defaultMessage": "!!!Default",
668 "file": "src/lib/Menu.js", 681 "file": "src/lib/Menu.js",
669 "start": { 682 "start": {
670 "line": 217, 683 "line": 223,
671 "column": 20 684 "column": 20
672 }, 685 },
673 "end": { 686 "end": {
674 "line": 220, 687 "line": 226,
675 "column": 3 688 "column": 3
676 } 689 }
677 } 690 }
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index a4e41c17c..da2540274 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -6,6 +6,8 @@ import { isMac, ctrlKey, cmdKey } from '../environment';
6import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../features/workspaces/index'; 6import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../features/workspaces/index';
7import { workspaceActions } from '../features/workspaces/actions'; 7import { workspaceActions } from '../features/workspaces/actions';
8import { gaEvent } from './analytics'; 8import { gaEvent } from './analytics';
9import { announcementActions } from '../features/announcements/actions';
10import { announcementsStore } from '../features/announcements';
9 11
10const { app, Menu, dialog } = remote; 12const { app, Menu, dialog } = remote;
11 13
@@ -158,6 +160,10 @@ const menuItems = defineMessages({
158 id: 'menu.app.about', 160 id: 'menu.app.about',
159 defaultMessage: '!!!About Franz', 161 defaultMessage: '!!!About Franz',
160 }, 162 },
163 announcement: {
164 id: 'menu.app.announcement',
165 defaultMessage: '!!!What\'s new?',
166 },
161 settings: { 167 settings: {
162 id: 'menu.app.settings', 168 id: 'menu.app.settings',
163 defaultMessage: '!!!Settings', 169 defaultMessage: '!!!Settings',
@@ -348,8 +354,11 @@ const _templateFactory = intl => [
348 click() { shell.openExternal('https://meetfranz.com'); }, 354 click() { shell.openExternal('https://meetfranz.com'); },
349 }, 355 },
350 { 356 {
351 label: intl.formatMessage(menuItems.changelog), 357 label: intl.formatMessage(menuItems.announcement),
352 click() { shell.openExternal('https://github.com/meetfranz/franz/blob/master/CHANGELOG.md'); }, 358 click: () => {
359 announcementActions.show();
360 },
361 visible: window.franz.stores.user.isLoggedIn && announcementsStore.areNewsAvailable,
353 }, 362 },
354 { 363 {
355 type: 'separator', 364 type: 'separator',
diff --git a/src/lib/analytics.js b/src/lib/analytics.js
index e7daa9d06..c305fdb00 100644
--- a/src/lib/analytics.js
+++ b/src/lib/analytics.js
@@ -1,5 +1,8 @@
1import { remote } from 'electron'; 1import { remote } from 'electron';
2import { GA_ID } from '../config'; 2import querystring from 'querystring';
3
4import { GA_ID, STATS_API } from '../config';
5import { isDevMode } from '../environment';
3 6
4const debug = require('debug')('Franz:Analytics'); 7const debug = require('debug')('Franz:Analytics');
5 8
@@ -35,3 +38,18 @@ export function gaEvent(category, action, label) {
35 ga('send', 'event', category, action, label); 38 ga('send', 'event', category, action, label);
36 debug('GA track event', category, action, label); 39 debug('GA track event', category, action, label);
37} 40}
41
42export function statsEvent(key, value) {
43 const params = {
44 key,
45 value: value || key,
46 platform: process.platform,
47 version: remote.app.getVersion(),
48 };
49
50 debug('Send Franz stats event', params);
51
52 if (!isDevMode) {
53 window.fetch(`${STATS_API}/event/?${querystring.stringify(params)}`);
54 }
55}
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 351ad6422..72c4b4d0b 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -14,7 +14,7 @@ import Request from './lib/Request';
14import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config'; 14import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config';
15import { isMac } from '../environment'; 15import { isMac } from '../environment';
16import locales from '../i18n/translations'; 16import locales from '../i18n/translations';
17import { gaEvent, gaPage } from '../lib/analytics'; 17import { gaEvent, gaPage, statsEvent } from '../lib/analytics';
18import { onVisibilityChange } from '../helpers/visibility-helper'; 18import { onVisibilityChange } from '../helpers/visibility-helper';
19import { getLocale } from '../helpers/i18n-helpers'; 19import { getLocale } from '../helpers/i18n-helpers';
20 20
@@ -67,6 +67,8 @@ export default class AppStore extends Store {
67 67
68 @observable isFocused = true; 68 @observable isFocused = true;
69 69
70 @observable nextAppReleaseVersion = null;
71
70 dictionaries = []; 72 dictionaries = [];
71 73
72 constructor(...args) { 74 constructor(...args) {
@@ -123,7 +125,7 @@ export default class AppStore extends Store {
123 ipcRenderer.on('autoUpdate', (event, data) => { 125 ipcRenderer.on('autoUpdate', (event, data) => {
124 if (data.available) { 126 if (data.available) {
125 this.updateStatus = this.updateStatusTypes.AVAILABLE; 127 this.updateStatus = this.updateStatusTypes.AVAILABLE;
126 128 this.nextAppReleaseVersion = data.version;
127 if (isMac) { 129 if (isMac) {
128 app.dock.bounce(); 130 app.dock.bounce();
129 } 131 }
@@ -172,7 +174,8 @@ export default class AppStore extends Store {
172 reaction(() => this.stores.router.location.pathname, (pathname) => { 174 reaction(() => this.stores.router.location.pathname, (pathname) => {
173 gaPage(pathname); 175 gaPage(pathname);
174 }); 176 });
175 console.log('router location', this.stores.router.location); 177
178 statsEvent('app-start');
176 } 179 }
177 180
178 @computed get cacheSize() { 181 @computed get cacheSize() {
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index 8fe576813..e7832088b 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -14,6 +14,8 @@ import serviceProxy from '../features/serviceProxy';
14import basicAuth from '../features/basicAuth'; 14import basicAuth from '../features/basicAuth';
15import workspaces from '../features/workspaces'; 15import workspaces from '../features/workspaces';
16import shareFranz from '../features/shareFranz'; 16import shareFranz from '../features/shareFranz';
17import announcements from '../features/announcements';
18import settingsWS from '../features/settingsWS';
17 19
18import { DEFAULT_FEATURES_CONFIG } from '../config'; 20import { DEFAULT_FEATURES_CONFIG } from '../config';
19 21
@@ -71,5 +73,7 @@ export default class FeaturesStore extends Store {
71 basicAuth(this.stores, this.actions); 73 basicAuth(this.stores, this.actions);
72 workspaces(this.stores, this.actions); 74 workspaces(this.stores, this.actions);
73 shareFranz(this.stores, this.actions); 75 shareFranz(this.stores, this.actions);
76 announcements(this.stores, this.actions);
77 settingsWS(this.stores, this.actions);
74 } 78 }
75} 79}
diff --git a/src/stores/PaymentStore.js b/src/stores/PaymentStore.js
index 4cabee194..d4de476c8 100644
--- a/src/stores/PaymentStore.js
+++ b/src/stores/PaymentStore.js
@@ -10,15 +10,10 @@ export default class PaymentStore extends Store {
10 10
11 @observable createHostedPageRequest = new Request(this.api.payment, 'getHostedPage'); 11 @observable createHostedPageRequest = new Request(this.api.payment, 'getHostedPage');
12 12
13 @observable createDashboardUrlRequest = new Request(this.api.payment, 'getDashboardUrl');
14
15 @observable ordersDataRequest = new CachedRequest(this.api.payment, 'getOrders');
16
17 constructor(...args) { 13 constructor(...args) {
18 super(...args); 14 super(...args);
19 15
20 this.actions.payment.createHostedPage.listen(this._createHostedPage.bind(this)); 16 this.actions.payment.createHostedPage.listen(this._createHostedPage.bind(this));
21 this.actions.payment.createDashboardUrl.listen(this._createDashboardUrl.bind(this));
22 } 17 }
23 18
24 @computed get plan() { 19 @computed get plan() {
@@ -28,10 +23,6 @@ export default class PaymentStore extends Store {
28 return this.plansRequest.execute().result || {}; 23 return this.plansRequest.execute().result || {};
29 } 24 }
30 25
31 @computed get orders() {
32 return this.ordersDataRequest.execute().result || [];
33 }
34
35 @action _createHostedPage({ planId }) { 26 @action _createHostedPage({ planId }) {
36 const request = this.createHostedPageRequest.execute(planId); 27 const request = this.createHostedPageRequest.execute(planId);
37 28
@@ -39,12 +30,4 @@ export default class PaymentStore extends Store {
39 30
40 return request; 31 return request;
41 } 32 }
42
43 @action _createDashboardUrl() {
44 const request = this.createDashboardUrlRequest.execute();
45
46 gaEvent('Payment', 'createDashboardUrl');
47
48 return request;
49 }
50} 33}
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 0ec6bf550..d63302fce 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -11,7 +11,7 @@ import Store from './lib/Store';
11import Request from './lib/Request'; 11import Request from './lib/Request';
12import CachedRequest from './lib/CachedRequest'; 12import CachedRequest from './lib/CachedRequest';
13import { matchRoute } from '../helpers/routing-helpers'; 13import { matchRoute } from '../helpers/routing-helpers';
14import { gaEvent } from '../lib/analytics'; 14import { gaEvent, statsEvent } from '../lib/analytics';
15import { workspaceStore } from '../features/workspaces'; 15import { workspaceStore } from '../features/workspaces';
16 16
17const debug = require('debug')('Franz:ServiceStore'); 17const debug = require('debug')('Franz:ServiceStore');
@@ -36,6 +36,7 @@ export default class ServicesStore extends Store {
36 36
37 // Register action handlers 37 // Register action handlers
38 this.actions.service.setActive.listen(this._setActive.bind(this)); 38 this.actions.service.setActive.listen(this._setActive.bind(this));
39 this.actions.service.blurActive.listen(this._blurActive.bind(this));
39 this.actions.service.setActiveNext.listen(this._setActiveNext.bind(this)); 40 this.actions.service.setActiveNext.listen(this._setActiveNext.bind(this));
40 this.actions.service.setActivePrev.listen(this._setActivePrev.bind(this)); 41 this.actions.service.setActivePrev.listen(this._setActivePrev.bind(this));
41 this.actions.service.showAddServiceInterface.listen(this._showAddServiceInterface.bind(this)); 42 this.actions.service.showAddServiceInterface.listen(this._showAddServiceInterface.bind(this));
@@ -290,7 +291,8 @@ export default class ServicesStore extends Store {
290 gaEvent('Service', 'clear cache'); 291 gaEvent('Service', 'clear cache');
291 } 292 }
292 293
293 @action _setActive({ serviceId }) { 294 @action _setActive({ serviceId, keepActiveRoute }) {
295 if (!keepActiveRoute) this.stores.router.push('/');
294 const service = this.one(serviceId); 296 const service = this.one(serviceId);
295 297
296 this.all.forEach((s, index) => { 298 this.all.forEach((s, index) => {
@@ -298,9 +300,16 @@ export default class ServicesStore extends Store {
298 }); 300 });
299 service.isActive = true; 301 service.isActive = true;
300 302
303 statsEvent('activate-service', service.recipe.id);
304
301 this._focusActiveService(); 305 this._focusActiveService();
302 } 306 }
303 307
308 @action _blurActive() {
309 if (!this.active) return;
310 this.active.isActive = false;
311 }
312
304 @action _setActiveNext() { 313 @action _setActiveNext() {
305 const nextIndex = this._wrapIndex(this.allDisplayed.findIndex(service => service.isActive), 1, this.allDisplayed.length); 314 const nextIndex = this._wrapIndex(this.allDisplayed.findIndex(service => service.isActive), 1, this.allDisplayed.length);
306 315
@@ -509,7 +518,16 @@ export default class ServicesStore extends Store {
509 this.actions.ui.toggleServiceUpdatedInfoBar({ visible: false }); 518 this.actions.ui.toggleServiceUpdatedInfoBar({ visible: false });
510 } 519 }
511 520
512 @action _reorder({ oldIndex, newIndex }) { 521 @action _reorder(params) {
522 const { workspaces } = this.stores;
523 if (workspaces.isAnyWorkspaceActive) {
524 workspaces.reorderServicesOfActiveWorkspace(params);
525 } else {
526 this._reorderService(params);
527 }
528 }
529
530 @action _reorderService({ oldIndex, newIndex }) {
513 const showDisabledServices = this.stores.settings.all.app.showDisabledServices; 531 const showDisabledServices = this.stores.settings.all.app.showDisabledServices;
514 const oldEnabledSortIndex = showDisabledServices ? oldIndex : this.all.indexOf(this.enabled[oldIndex]); 532 const oldEnabledSortIndex = showDisabledServices ? oldIndex : this.all.indexOf(this.enabled[oldIndex]);
515 const newEnabledSortIndex = showDisabledServices ? newIndex : this.all.indexOf(this.enabled[newIndex]); 533 const newEnabledSortIndex = showDisabledServices ? newIndex : this.all.indexOf(this.enabled[newIndex]);
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index 534690fbb..31555dd5c 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -178,6 +178,7 @@ export default class UserStore extends Store {
178 password, 178 password,
179 accountType, 179 accountType,
180 company, 180 company,
181 locale: this.stores.app.locale,
181 }); 182 });
182 183
183 this.hasCompletedSignup = false; 184 this.hasCompletedSignup = false;
diff --git a/src/stores/index.js b/src/stores/index.js
index 96b844c95..1912418a2 100644
--- a/src/stores/index.js
+++ b/src/stores/index.js
@@ -10,6 +10,8 @@ import PaymentStore from './PaymentStore';
10import NewsStore from './NewsStore'; 10import NewsStore from './NewsStore';
11import RequestStore from './RequestStore'; 11import RequestStore from './RequestStore';
12import GlobalErrorStore from './GlobalErrorStore'; 12import GlobalErrorStore from './GlobalErrorStore';
13import { workspaceStore } from '../features/workspaces';
14import { announcementsStore } from '../features/announcements';
13 15
14export default (api, actions, router) => { 16export default (api, actions, router) => {
15 const stores = {}; 17 const stores = {};
@@ -27,6 +29,8 @@ export default (api, actions, router) => {
27 news: new NewsStore(stores, api, actions), 29 news: new NewsStore(stores, api, actions),
28 requests: new RequestStore(stores, api, actions), 30 requests: new RequestStore(stores, api, actions),
29 globalError: new GlobalErrorStore(stores, api, actions), 31 globalError: new GlobalErrorStore(stores, api, actions),
32 workspaces: workspaceStore,
33 announcements: announcementsStore,
30 }); 34 });
31 // Initialize all stores 35 // Initialize all stores
32 Object.keys(stores).forEach((name) => { 36 Object.keys(stores).forEach((name) => {
diff --git a/src/stores/lib/Reaction.js b/src/stores/lib/Reaction.js
index 46aa4dae6..f2642908f 100644
--- a/src/stores/lib/Reaction.js
+++ b/src/stores/lib/Reaction.js
@@ -1,24 +1,31 @@
1// @flow
2import { autorun } from 'mobx'; 1import { autorun } from 'mobx';
3 2
4export default class Reaction { 3export default class Reaction {
5 reaction; 4 reaction;
6 5
7 hasBeenStarted; 6 isRunning = false;
8 7
9 dispose; 8 dispose;
10 9
11 constructor(reaction) { 10 constructor(reaction) {
12 this.reaction = reaction; 11 this.reaction = reaction;
13 this.hasBeenStarted = false;
14 } 12 }
15 13
16 start() { 14 start() {
17 this.dispose = autorun(() => this.reaction()); 15 if (!this.isRunning) {
18 this.hasBeenStarted = true; 16 this.dispose = autorun(() => this.reaction());
17 this.isActive = true;
18 }
19 } 19 }
20 20
21 stop() { 21 stop() {
22 if (this.hasBeenStarted) this.dispose(); 22 if (this.isRunning) {
23 this.dispose();
24 this.isActive = false;
25 }
23 } 26 }
24} 27}
28
29export const createReactions = reactions => (
30 reactions.map(r => new Reaction(r))
31);
diff --git a/src/styles/badge.scss b/src/styles/badge.scss
index f9fac039a..69879de31 100644
--- a/src/styles/badge.scss
+++ b/src/styles/badge.scss
@@ -8,7 +8,7 @@
8 &.badge--primary, 8 &.badge--primary,
9 &.badge--premium { 9 &.badge--premium {
10 background: $theme-brand-primary; 10 background: $theme-brand-primary;
11 color: $dark-theme-gray-smoke; 11 color: $dark-theme-gray-lightest;
12 } 12 }
13} 13}
14 14
@@ -19,6 +19,7 @@
19 display: inline-block; 19 display: inline-block;
20 font-size: 14px; 20 font-size: 14px;
21 padding: 5px 10px; 21 padding: 5px 10px;
22 letter-spacing: 0;
22 23
23 &.badge--primary, 24 &.badge--primary,
24 &.badge--premium { 25 &.badge--premium {
diff --git a/src/styles/info-bar.scss b/src/styles/info-bar.scss
index fb4917358..d3010942f 100644
--- a/src/styles/info-bar.scss
+++ b/src/styles/info-bar.scss
@@ -43,6 +43,10 @@
43 } 43 }
44 } 44 }
45 45
46 .info-bar__inline-button {
47 color: white;
48 }
49
46 &.info-bar--bottom { order: 10; } 50 &.info-bar--bottom { order: 10; }
47 51
48 &.info-bar--primary { 52 &.info-bar--primary {
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index dd6f56d2b..1baff8b54 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -61,11 +61,6 @@
61 61
62 .account { 62 .account {
63 .account__box { background: $dark-theme-gray-darker; } 63 .account__box { background: $dark-theme-gray-darker; }
64
65 .invoices {
66 td { border-bottom: 1px solid $dark-theme-gray-darker; }
67 .invoices__action button { color: $theme-brand-primary; }
68 }
69 } 64 }
70 65
71 .premium-info { 66 .premium-info {
@@ -329,15 +324,6 @@
329 .account__avatar { 324 .account__avatar {
330 margin-right: 20px; 325 margin-right: 20px;
331 position: relative; 326 position: relative;
332
333 .emoji img { width: 30px; }
334 }
335
336 .account__avatar-premium {
337 font-size: 26px;
338 position: absolute;
339 right: 2px;
340 top: 2px;
341 } 327 }
342 328
343 .account__info { 329 .account__info {
@@ -345,6 +331,7 @@
345 331
346 h2 { margin-bottom: 5px; } 332 h2 { margin-bottom: 5px; }
347 .badge { margin-top: 5px; } 333 .badge { margin-top: 5px; }
334 .username { margin-right: 10 }
348 } 335 }
349 336
350 .account__subscription { 337 .account__subscription {
@@ -354,6 +341,22 @@
354 .badge { margin-left: 10px; } 341 .badge { margin-left: 10px; }
355 } 342 }
356 343
344 .badge--premium {
345 margin-left: 1px;
346 position: relative;
347 top: -3px;
348 padding-top: 4px;
349 color: #FFF;
350 border-radius: 3px;
351 }
352
353
354 .manage-user-links {
355 margin-top: 20px;
356 display: flex;
357 justify-content: space-between;
358 }
359
357 .account__subscription-button { margin-left: auto; } 360 .account__subscription-button { margin-left: auto; }
358 .franz-form__button { white-space: nowrap; } 361 .franz-form__button { white-space: nowrap; }
359 div { height: auto; } 362 div { height: auto; }