aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE.md2
-rw-r--r--.travis.yml4
-rw-r--r--.vscode/launch.json11
-rw-r--r--CHANGELOG.md30
-rw-r--r--README.md6
-rw-r--r--appveyor.yml5
-rw-r--r--build-helpers/images/icon.pngbin547480 -> 126364 bytes
-rw-r--r--build-helpers/images/icons/1024x1024.pngbin547480 -> 126364 bytes
-rw-r--r--build-helpers/images/icons/128x128.pngbin0 -> 5538 bytes
-rw-r--r--build-helpers/images/icons/16x16.pngbin0 -> 682 bytes
-rw-r--r--build-helpers/images/icons/24x24.pngbin0 -> 1143 bytes
-rw-r--r--build-helpers/images/icons/256x256.pngbin0 -> 13267 bytes
-rw-r--r--build-helpers/images/icons/32x32.pngbin0 -> 1526 bytes
-rw-r--r--build-helpers/images/icons/48x48.pngbin0 -> 2262 bytes
-rw-r--r--build-helpers/images/icons/512x512.pngbin0 -> 38356 bytes
-rw-r--r--build-helpers/images/icons/64x64.pngbin0 -> 2885 bytes
-rw-r--r--build-helpers/images/icons/96x96.pngbin0 -> 4422 bytes
-rw-r--r--electron-builder.yml9
-rw-r--r--gulpfile.babel.js6
-rw-r--r--package.json5
-rw-r--r--src/actions/app.js1
-rw-r--r--src/actions/service.js4
-rw-r--r--src/actions/user.js1
-rw-r--r--src/api/UserApi.js4
-rw-r--r--src/api/server/ServerApi.js30
-rw-r--r--src/components/auth/Import.js2
-rw-r--r--src/components/auth/Welcome.js12
-rw-r--r--src/components/layout/AppLayout.js8
-rw-r--r--src/components/layout/Sidebar.js10
-rw-r--r--src/components/services/content/ServiceDisabled.js2
-rw-r--r--src/components/services/content/ServiceWebview.js35
-rw-r--r--src/components/services/content/WebviewCrashHandler.js2
-rw-r--r--src/components/services/tabs/TabBarSortableList.js6
-rw-r--r--src/components/services/tabs/TabItem.js37
-rw-r--r--src/components/services/tabs/Tabbar.js9
-rw-r--r--src/components/settings/account/AccountDashboard.js49
-rw-r--r--src/components/settings/navigation/SettingsNavigation.js1
-rw-r--r--src/components/settings/recipes/RecipesDashboard.js57
-rw-r--r--src/components/settings/services/EditServiceForm.js79
-rw-r--r--src/components/settings/settings/EditSettingsForm.js38
-rw-r--r--src/components/ui/AppLoader.js2
-rw-r--r--src/components/ui/Button.js2
-rw-r--r--src/components/ui/InfoBar.js7
-rw-r--r--src/components/ui/Loader.js5
-rw-r--r--src/components/ui/Subscription.js19
-rw-r--r--src/components/ui/SubscriptionPopup.js1
-rw-r--r--src/config.js11
-rw-r--r--src/containers/layout/AppLayoutContainer.js9
-rw-r--r--src/containers/settings/AccountScreen.js5
-rw-r--r--src/containers/settings/EditServiceScreen.js20
-rw-r--r--src/containers/settings/EditSettingsScreen.js58
-rw-r--r--src/electron/deepLinking.js7
-rw-r--r--src/helpers/async-helpers.js5
-rw-r--r--src/helpers/webview-ime-focus-helpers.js38
-rw-r--r--src/i18n/languages.js73
-rw-r--r--src/i18n/locales/ca.json192
-rw-r--r--src/i18n/locales/cs.json192
-rw-r--r--src/i18n/locales/de.json358
-rw-r--r--src/i18n/locales/el-GR.json169
-rw-r--r--src/i18n/locales/el.json192
-rw-r--r--src/i18n/locales/en-US.json33
-rw-r--r--src/i18n/locales/es-ES.json168
-rw-r--r--src/i18n/locales/es.json192
-rw-r--r--src/i18n/locales/fr.json358
-rw-r--r--src/i18n/locales/ga.json192
-rw-r--r--src/i18n/locales/hu.json192
-rw-r--r--src/i18n/locales/id.json192
-rw-r--r--src/i18n/locales/it.json358
-rw-r--r--src/i18n/locales/ja.json359
-rw-r--r--src/i18n/locales/ka.json192
-rw-r--r--src/i18n/locales/nl-BE.json358
-rw-r--r--src/i18n/locales/nl.json359
-rw-r--r--src/i18n/locales/pl.json358
-rw-r--r--src/i18n/locales/pt-BR.json359
-rw-r--r--src/i18n/locales/pt.json192
-rw-r--r--src/i18n/locales/ru.json359
-rw-r--r--src/i18n/locales/sk.json192
-rw-r--r--src/i18n/locales/uk.json192
-rw-r--r--src/i18n/translations.js4
-rw-r--r--src/index.js34
-rw-r--r--src/lib/Menu.js46
-rw-r--r--src/lib/Miner.js4
-rw-r--r--src/lib/TouchBar.js18
-rw-r--r--src/models/News.js2
-rw-r--r--src/models/Plan.js2
-rw-r--r--src/models/Recipe.js9
-rw-r--r--src/models/RecipePreview.js2
-rw-r--r--src/models/Service.js17
-rw-r--r--src/models/Settings.js24
-rw-r--r--src/models/User.js2
-rw-r--r--src/stores/AppStore.js60
-rw-r--r--src/stores/ServicesStore.js53
-rw-r--r--src/stores/SettingsStore.js18
-rw-r--r--src/stores/UIStore.js8
-rw-r--r--src/stores/UserStore.js6
-rw-r--r--src/styles/content-tabs.scss12
-rw-r--r--src/styles/info-bar.scss4
-rw-r--r--src/styles/input.scss4
-rw-r--r--src/styles/recipes.scss4
-rw-r--r--src/styles/services.scss7
-rw-r--r--src/styles/settings.scss40
-rw-r--r--src/styles/subscription.scss5
-rw-r--r--src/styles/tabs.scss24
-rw-r--r--src/styles/welcome.scss25
-rw-r--r--src/webview/ime.js10
-rw-r--r--src/webview/lib/RecipeWebview.js6
-rw-r--r--src/webview/notifications.js4
-rw-r--r--src/webview/plugin.js29
-rw-r--r--src/webview/spellchecker.js71
-rw-r--r--yarn.lock25
110 files changed, 4843 insertions, 2171 deletions
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index c11a2994f..5317684cf 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,6 +1,6 @@
1<!--- Provide a general summary of the issue in the Title above --> 1<!--- Provide a general summary of the issue in the Title above -->
2 2
3<!-- This repository is only for the Franz client. Please use this form ( https://adlk.typeform.com/to/Bj7vGq ) for service requests or check out the guide ( https://github.com/meetfranz/plugins ) to create your own service integration. --> 3<!-- This repository is only for the Franz client. Please use this form ( https://goo.gl/forms/zbwlx3VFvAo2oink2q ) for service requests or check out the guide ( https://github.com/meetfranz/plugins ) to create your own service integration. -->
4 4
5<!--- If you want to propose a feature, use this template: https://raw.githubusercontent.com/meetfranz/franz/master/.github/FEATURE_PROPOSAL_TEMPLATE.md --> 5<!--- If you want to propose a feature, use this template: https://raw.githubusercontent.com/meetfranz/franz/master/.github/FEATURE_PROPOSAL_TEMPLATE.md -->
6 6
diff --git a/.travis.yml b/.travis.yml
index b3ebc4f25..78c1e3693 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,8 +9,6 @@ matrix:
9language: node_js 9language: node_js
10 10
11before_script: 11before_script:
12- yarn add global gulp-cli@1.2.2
13- yarn add global gulpjs/gulp#4.0
14- yarn add global node-sass 12- yarn add global node-sass
15- yarn install 13- yarn install
16 14
@@ -19,7 +17,7 @@ script:
19- travis_wait yarn build 17- travis_wait yarn build
20 18
21node_js: 19node_js:
22- '7' 20- '8'
23 21
24before_install: 22before_install:
25- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt install libx11-dev libxext-dev libxss-dev libxkbfile-dev; fi 23- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt install libx11-dev libxext-dev libxss-dev libxkbfile-dev; fi
diff --git a/.vscode/launch.json b/.vscode/launch.json
index abbbdd64b..a8300f84f 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -22,6 +22,17 @@
22 "env": { 22 "env": {
23 "LIVE_API": "1" 23 "LIVE_API": "1"
24 } 24 }
25 },
26 {
27 "type": "node",
28 "request": "launch",
29 "name": "Franz – Local API",
30 "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
31 "program": "${workspaceFolder}/build/index.js",
32 "protocol": "inspector",
33 "env": {
34 "LOCAL_API": "1"
35 }
25 } 36 }
26 ] 37 ]
27} \ No newline at end of file 38} \ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 024afe93c..ef7e1c586 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,33 @@
1<a name="5.0.0-beta.14"></a>
2# [5.0.0-beta.14](https://github.com/meetfranz/franz/compare/v5.0.0-beta.13...v5.0.0-beta.14) (2017-11-23)
3
4
5### Features
6
7* **App:** Add link to changelog in app update notification ([2cbd938](https://github.com/meetfranz/franz/commit/2cbd938))
8* **App:** Add option to enable/disable spell checker ([dcab45a](https://github.com/meetfranz/franz/commit/dcab45a))
9* **App:** Add option to mute all services in sidebar ([f5a9aa2](https://github.com/meetfranz/franz/commit/f5a9aa2)), closes [#8](https://github.com/meetfranz/franz/issues/8) [#162](https://github.com/meetfranz/franz/issues/162)
10* **App:** Decrease minimum window size to 600px width ([2521621](https://github.com/meetfranz/franz/commit/2521621)), closes [#239](https://github.com/meetfranz/franz/issues/239)
11* **App:** Respect System DoNotDisturb mode for service audio ([7d41227](https://github.com/meetfranz/franz/commit/7d41227)), closes [#162](https://github.com/meetfranz/franz/issues/162)
12* **Service:** Add option to display disabled services in tabs ([1839eff](https://github.com/meetfranz/franz/commit/1839eff))
13* **Service:** Add option to mute service ([b405ba1](https://github.com/meetfranz/franz/commit/b405ba1))
14* **Service:** Add dialog to reload crashed services ([259d40c](https://github.com/meetfranz/franz/commit/259d40c)) ([dannyqiu](https://github.com/dannyqiu))
15* **Translations:** Added new translations and improved existing ones. **[A million thanks to the amazing community.](http://i18n.meetfranz.com/)**
16
17
18### Bug Fixes
19
20* **Windows:** Fix notifications on Windows 10 (Fall Creators Update) ([eea4801](https://github.com/meetfranz/franz/commit/eea4801)), closes [#173](https://github.com/meetfranz/franz/issues/173)
21* **macOS:** Fix TouchBar related crash on macOS 10.12.1 and lower ([9e9a2ed](https://github.com/meetfranz/franz/commit/9e9a2ed)), closes [#70](https://github.com/meetfranz/franz/issues/70)
22* **App:** Add fallback to service menu when service name is empty ([42ed24d](https://github.com/meetfranz/franz/commit/42ed24d)), closes [#250](https://github.com/meetfranz/franz/issues/250)
23* **App:** Prevent app from redirecting when dropping link ([811a527](https://github.com/meetfranz/franz/commit/811a527)) ([dannyqiu](https://github.com/dannyqiu))
24* **Support with CPU:** Reduce maximum CPU usage ([64ad918](https://github.com/meetfranz/franz/commit/64ad918)), closes [#314](https://github.com/meetfranz/franz/issues/314)
25* **Hosted Services:** Do not strip www from custom service Url ([a764321](https://github.com/meetfranz/franz/commit/a764321)) ([BeneStem](https://github.com/BeneStem))
26* **Services:** Fix onNotify in service API ([b15421b](https://github.com/meetfranz/franz/commit/b15421b)) ([dannyqiu](https://github.com/dannyqiu))
27* **Sidebar:** Fix tabs reordering ([86413ba](https://github.com/meetfranz/franz/commit/86413ba)) ([josescgar](https://github.com/josescgar))
28
29
30
1<a name="5.0.0-beta.13"></a> 31<a name="5.0.0-beta.13"></a>
2# [5.0.0-beta.13](https://github.com/meetfranz/franz/compare/v5.0.0-beta.12...v5.0.0-beta.13) (2017-11-06) 32# [5.0.0-beta.13](https://github.com/meetfranz/franz/compare/v5.0.0-beta.12...v5.0.0-beta.13) (2017-11-06)
3 33
diff --git a/README.md b/README.md
index 6110573a8..099100284 100644
--- a/README.md
+++ b/README.md
@@ -31,12 +31,6 @@ $ brew install yarn
31##### Linux 31##### Linux
32[Install Yarn on Linux](https://yarnpkg.com/lang/en/docs/install/) 32[Install Yarn on Linux](https://yarnpkg.com/lang/en/docs/install/)
33 33
34#### Install Gulp 4
35```bash
36$ yarn add global gulp-cli@1.2.2
37$ yarn add global gulpjs/gulp#4.0
38```
39
40#### Fix native modules to match current electron node version 34#### Fix native modules to match current electron node version
41```bash 35```bash
42$ yarn run rebuild 36$ yarn run rebuild
diff --git a/appveyor.yml b/appveyor.yml
index 4b2796f4b..d9296b1f6 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -11,8 +11,6 @@ version: 5.0.0.{build}
11install: 11install:
12 - ps: Install-Product node 8 12 - ps: Install-Product node 8
13 - yarn cache clean 13 - yarn cache clean
14 - yarn add global gulp-cli@1.2.2
15 - yarn add global gulpjs/gulp#4.0
16 - yarn install 14 - yarn install
17 15
18# cache: 16# cache:
@@ -22,7 +20,7 @@ before_build:
22 - yarn lint 20 - yarn lint
23 21
24build_script: 22build_script:
25 - yarn build 23 - yarn build --x64 --ia32
26 24
27notifications: 25notifications:
28 - provider: Slack 26 - provider: Slack
@@ -31,3 +29,4 @@ notifications:
31 29
32artifacts: 30artifacts:
33 - path: out\*.exe 31 - path: out\*.exe
32 - path: out\*.yml
diff --git a/build-helpers/images/icon.png b/build-helpers/images/icon.png
index e0b4935b5..9c39f06e0 100644
--- a/build-helpers/images/icon.png
+++ b/build-helpers/images/icon.png
Binary files differ
diff --git a/build-helpers/images/icons/1024x1024.png b/build-helpers/images/icons/1024x1024.png
index e0b4935b5..9c39f06e0 100644
--- a/build-helpers/images/icons/1024x1024.png
+++ b/build-helpers/images/icons/1024x1024.png
Binary files differ
diff --git a/build-helpers/images/icons/128x128.png b/build-helpers/images/icons/128x128.png
new file mode 100644
index 000000000..8eb811283
--- /dev/null
+++ b/build-helpers/images/icons/128x128.png
Binary files differ
diff --git a/build-helpers/images/icons/16x16.png b/build-helpers/images/icons/16x16.png
new file mode 100644
index 000000000..2523dd8a7
--- /dev/null
+++ b/build-helpers/images/icons/16x16.png
Binary files differ
diff --git a/build-helpers/images/icons/24x24.png b/build-helpers/images/icons/24x24.png
new file mode 100644
index 000000000..9cb17a0b1
--- /dev/null
+++ b/build-helpers/images/icons/24x24.png
Binary files differ
diff --git a/build-helpers/images/icons/256x256.png b/build-helpers/images/icons/256x256.png
new file mode 100644
index 000000000..5742147b8
--- /dev/null
+++ b/build-helpers/images/icons/256x256.png
Binary files differ
diff --git a/build-helpers/images/icons/32x32.png b/build-helpers/images/icons/32x32.png
new file mode 100644
index 000000000..09b88a805
--- /dev/null
+++ b/build-helpers/images/icons/32x32.png
Binary files differ
diff --git a/build-helpers/images/icons/48x48.png b/build-helpers/images/icons/48x48.png
new file mode 100644
index 000000000..c9d2f331c
--- /dev/null
+++ b/build-helpers/images/icons/48x48.png
Binary files differ
diff --git a/build-helpers/images/icons/512x512.png b/build-helpers/images/icons/512x512.png
new file mode 100644
index 000000000..9d5f1c658
--- /dev/null
+++ b/build-helpers/images/icons/512x512.png
Binary files differ
diff --git a/build-helpers/images/icons/64x64.png b/build-helpers/images/icons/64x64.png
new file mode 100644
index 000000000..7842217ed
--- /dev/null
+++ b/build-helpers/images/icons/64x64.png
Binary files differ
diff --git a/build-helpers/images/icons/96x96.png b/build-helpers/images/icons/96x96.png
new file mode 100644
index 000000000..bbae07f45
--- /dev/null
+++ b/build-helpers/images/icons/96x96.png
Binary files differ
diff --git a/electron-builder.yml b/electron-builder.yml
index 3f7ad1e85..96bd63cc2 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -2,7 +2,7 @@ directories:
2 app: ./build 2 app: ./build
3 output: ./out 3 output: ./out
4 4
5# forceCodeSigning: true 5appId: "com.meetfranz.franz"
6 6
7compression: maximum 7compression: maximum
8 8
@@ -24,10 +24,17 @@ linux:
24 icon: ./build-helpers/images/icons 24 icon: ./build-helpers/images/icons
25 category: Network;InstantMessaging; 25 category: Network;InstantMessaging;
26 executableName: franz 26 executableName: franz
27 synopsis: "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more."
28 description: "Franz is your messaging app / former Emperor of Austria and combines chat & messaging services into one application. Franz currently supports Slack, WhatsApp, WeChat, HipChat, Facebook Messenger, Telegram, Google Hangouts, GroupMe, Skype and many more. You can download Franz for free for Mac & Windows."
27 target: 29 target:
28 - target: AppImage 30 - target: AppImage
29 - target: deb 31 - target: deb
32 - target: tar.gz
30 33
31nsis: 34nsis:
32 perMachine: false 35 perMachine: false
33 oneClick: true 36 oneClick: true
37
38protocols:
39 name: Franz
40 schemes: [franz]
diff --git a/gulpfile.babel.js b/gulpfile.babel.js
index d947974b3..b50001b2d 100644
--- a/gulpfile.babel.js
+++ b/gulpfile.babel.js
@@ -110,7 +110,11 @@ export function watch() {
110} 110}
111 111
112export function webserver() { 112export function webserver() {
113 gulp.src(paths.dest) 113 gulp.src([
114 paths.dest,
115 `!${paths.dest}/electron/**`,
116 `!${paths.dest}/webview/**`,
117 ])
114 .pipe(server({ 118 .pipe(server({
115 livereload: true, 119 livereload: true,
116 })); 120 }));
diff --git a/package.json b/package.json
index 0cf18bfb1..6c4c65cb8 100644
--- a/package.json
+++ b/package.json
@@ -2,10 +2,11 @@
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.0-beta.13", 5 "version": "5.0.0-beta.14",
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",
9 "homepage": "https://meetfranz.com",
9 "repository": "https://github.com/meetfranz/franz.git", 10 "repository": "https://github.com/meetfranz/franz.git",
10 "private": true, 11 "private": true,
11 "scripts": { 12 "scripts": {
@@ -38,6 +39,7 @@
38 "electron-updater": "^2.4.3", 39 "electron-updater": "^2.4.3",
39 "electron-window-state": "^4.1.0", 40 "electron-window-state": "^4.1.0",
40 "fs-extra": "^3.0.1", 41 "fs-extra": "^3.0.1",
42 "gulp-cli": "1.2.2",
41 "ini": "^1.3.4", 43 "ini": "^1.3.4",
42 "jshashes": "^1.0.6", 44 "jshashes": "^1.0.6",
43 "jsonwebtoken": "^7.4.1", 45 "jsonwebtoken": "^7.4.1",
@@ -66,6 +68,7 @@
66 "react-sortable-hoc": "^0.6.7", 68 "react-sortable-hoc": "^0.6.7",
67 "react-tooltip": "^3.2.7", 69 "react-tooltip": "^3.2.7",
68 "route-parser": "^0.0.5", 70 "route-parser": "^0.0.5",
71 "semver": "^5.4.1",
69 "smoothscroll-polyfill": "^0.3.4", 72 "smoothscroll-polyfill": "^0.3.4",
70 "tar": "^4.0.2", 73 "tar": "^4.0.2",
71 "uuid": "^3.0.1" 74 "uuid": "^3.0.1"
diff --git a/src/actions/app.js b/src/actions/app.js
index 25ff9344d..e4f648fc9 100644
--- a/src/actions/app.js
+++ b/src/actions/app.js
@@ -22,6 +22,7 @@ export default {
22 healthCheck: {}, 22 healthCheck: {},
23 muteApp: { 23 muteApp: {
24 isMuted: PropTypes.bool.isRequired, 24 isMuted: PropTypes.bool.isRequired,
25 overrideSystemMute: PropTypes.bool,
25 }, 26 },
26 toggleMuteApp: {}, 27 toggleMuteApp: {},
27}; 28};
diff --git a/src/actions/service.js b/src/actions/service.js
index 1b918251b..e3100e986 100644
--- a/src/actions/service.js
+++ b/src/actions/service.js
@@ -50,6 +50,10 @@ export default {
50 channel: PropTypes.string.isRequired, 50 channel: PropTypes.string.isRequired,
51 args: PropTypes.object.isRequired, 51 args: PropTypes.object.isRequired,
52 }, 52 },
53 sendIPCMessageToAllServices: {
54 channel: PropTypes.string.isRequired,
55 args: PropTypes.object.isRequired,
56 },
53 openWindow: { 57 openWindow: {
54 event: PropTypes.object.isRequired, 58 event: PropTypes.object.isRequired,
55 }, 59 },
diff --git a/src/actions/user.js b/src/actions/user.js
index fe32b8a05..ccf1fa56a 100644
--- a/src/actions/user.js
+++ b/src/actions/user.js
@@ -27,4 +27,5 @@ export default {
27 importLegacyServices: PropTypes.arrayOf(PropTypes.shape({ 27 importLegacyServices: PropTypes.arrayOf(PropTypes.shape({
28 recipe: PropTypes.string.isRequired, 28 recipe: PropTypes.string.isRequired,
29 })).isRequired, 29 })).isRequired,
30 delete: {},
30}; 31};
diff --git a/src/api/UserApi.js b/src/api/UserApi.js
index e8fd75bed..edfb88988 100644
--- a/src/api/UserApi.js
+++ b/src/api/UserApi.js
@@ -46,4 +46,8 @@ export default class UserApi {
46 getLegacyServices() { 46 getLegacyServices() {
47 return this.server.getLegacyServices(); 47 return this.server.getLegacyServices();
48 } 48 }
49
50 delete() {
51 return this.server.deleteAccount();
52 }
49} 53}
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js
index 932b70cdc..8b3136d27 100644
--- a/src/api/server/ServerApi.js
+++ b/src/api/server/ServerApi.js
@@ -12,6 +12,8 @@ import NewsModel from '../../models/News';
12import UserModel from '../../models/User'; 12import UserModel from '../../models/User';
13import OrderModel from '../../models/Order'; 13import OrderModel from '../../models/Order';
14 14
15import { sleep } from '../../helpers/async-helpers';
16
15import { API } from '../../environment'; 17import { API } from '../../environment';
16 18
17import { 19import {
@@ -125,6 +127,19 @@ export default class ServerApi {
125 return user; 127 return user;
126 } 128 }
127 129
130 async deleteAccount() {
131 const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/me`, this._prepareAuthRequest({
132 method: 'DELETE',
133 }));
134 if (!request.ok) {
135 throw request;
136 }
137 const data = await request.json();
138
139 console.debug('ServerApi::deleteAccount resolves', data);
140 return data;
141 }
142
128 // Services 143 // Services
129 async getServices() { 144 async getServices() {
130 const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/me/services`, this._prepareAuthRequest({ 145 const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/me/services`, this._prepareAuthRequest({
@@ -290,18 +305,25 @@ export default class ServerApi {
290 305
291 fs.ensureDirSync(recipeTempDirectory); 306 fs.ensureDirSync(recipeTempDirectory);
292 const res = await fetch(packageUrl); 307 const res = await fetch(packageUrl);
308 console.debug('Recipe downloaded', recipeId);
293 const buffer = await res.buffer(); 309 const buffer = await res.buffer();
294 fs.writeFileSync(archivePath, buffer); 310 fs.writeFileSync(archivePath, buffer);
295 311
296 tar.x({ 312 await sleep(10);
313
314 await tar.x({
297 file: archivePath, 315 file: archivePath,
298 cwd: recipeTempDirectory, 316 cwd: recipeTempDirectory,
299 sync: true, 317 preservePaths: true,
318 unlink: true,
319 preserveOwner: false,
320 onwarn: x => console.log('warn', recipeId, x),
300 }); 321 });
301 322
323 await sleep(10);
324
302 const { id } = fs.readJsonSync(path.join(recipeTempDirectory, 'package.json')); 325 const { id } = fs.readJsonSync(path.join(recipeTempDirectory, 'package.json'));
303 const recipeDirectory = path.join(recipesDirectory, id); 326 const recipeDirectory = path.join(recipesDirectory, id);
304
305 fs.copySync(recipeTempDirectory, recipeDirectory); 327 fs.copySync(recipeTempDirectory, recipeDirectory);
306 fs.remove(recipeTempDirectory); 328 fs.remove(recipeTempDirectory);
307 fs.remove(path.join(recipesDirectory, recipeId, 'recipe.tar.gz')); 329 fs.remove(path.join(recipesDirectory, recipeId, 'recipe.tar.gz'));
@@ -374,7 +396,7 @@ export default class ServerApi {
374 // News 396 // News
375 async getLatestNews() { 397 async getLatestNews() {
376 // eslint-disable-next-line 398 // eslint-disable-next-line
377 const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/news?platform=${os.platform()}&arch=${os.arch()}version=${app.getVersion()}`, 399 const request = await window.fetch(`${SERVER_URL}/${API_VERSION}/news?platform=${os.platform()}&arch=${os.arch()}&version=${app.getVersion()}`,
378 this._prepareAuthRequest({ 400 this._prepareAuthRequest({
379 method: 'GET', 401 method: 'GET',
380 })); 402 }));
diff --git a/src/components/auth/Import.js b/src/components/auth/Import.js
index 06493a0fd..078244434 100644
--- a/src/components/auth/Import.js
+++ b/src/components/auth/Import.js
@@ -24,7 +24,7 @@ const messages = defineMessages({
24 }, 24 },
25 skipButtonLabel: { 25 skipButtonLabel: {
26 id: 'import.skip.label', 26 id: 'import.skip.label',
27 defaultMessage: '!!!I want add services manually', 27 defaultMessage: '!!!I want to add services manually',
28 }, 28 },
29}); 29});
30 30
diff --git a/src/components/auth/Welcome.js b/src/components/auth/Welcome.js
index 06b10ecfe..eb9fbb847 100644
--- a/src/components/auth/Welcome.js
+++ b/src/components/auth/Welcome.js
@@ -55,12 +55,16 @@ export default class Login extends Component {
55 </div> 55 </div>
56 <div className="welcome__featured-services"> 56 <div className="welcome__featured-services">
57 {recipes.map(recipe => ( 57 {recipes.map(recipe => (
58 <img 58 <div
59 key={recipe.id} 59 key={recipe.id}
60 src={recipe.icons.svg}
61 className="welcome__featured-service" 60 className="welcome__featured-service"
62 alt="" 61 >
63 /> 62 <img
63 key={recipe.id}
64 src={recipe.icons.svg}
65 alt=""
66 />
67 </div>
64 ))} 68 ))}
65 </div> 69 </div>
66 </div> 70 </div>
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index f60c170a8..20dc2f764 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -23,6 +23,10 @@ const messages = defineMessages({
23 id: 'infobar.buttonReloadServices', 23 id: 'infobar.buttonReloadServices',
24 defaultMessage: '!!!Reload services', 24 defaultMessage: '!!!Reload services',
25 }, 25 },
26 changelog: {
27 id: 'infobar.buttonChangelog',
28 defaultMessage: '!!!Changelog',
29 },
26 buttonInstallUpdate: { 30 buttonInstallUpdate: {
27 id: 'infobar.buttonInstallUpdate', 31 id: 'infobar.buttonInstallUpdate',
28 defaultMessage: '!!!Restart & install update', 32 defaultMessage: '!!!Restart & install update',
@@ -135,7 +139,9 @@ export default class AppLayout extends Component {
135 sticky 139 sticky
136 > 140 >
137 <span className="mdi mdi-information" /> 141 <span className="mdi mdi-information" />
138 {intl.formatMessage(messages.updateAvailable)} 142 {intl.formatMessage(messages.updateAvailable)} <a href="https://meetfranz.com/changelog" target="_blank">
143 <u>{intl.formatMessage(messages.changelog)}</u>
144 </a>
139 </InfoBar> 145 </InfoBar>
140 )} 146 )}
141 {services} 147 {services}
diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js
index ea34e8702..915ebeace 100644
--- a/src/components/layout/Sidebar.js
+++ b/src/components/layout/Sidebar.js
@@ -2,6 +2,7 @@ import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import ReactTooltip from 'react-tooltip'; 3import ReactTooltip from 'react-tooltip';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5import { observer } from 'mobx-react';
5 6
6import Tabbar from '../services/tabs/Tabbar'; 7import Tabbar from '../services/tabs/Tabbar';
7import { ctrlKey } from '../../environment'; 8import { ctrlKey } from '../../environment';
@@ -16,15 +17,16 @@ const messages = defineMessages({
16 defaultMessage: '!!!Add new service', 17 defaultMessage: '!!!Add new service',
17 }, 18 },
18 mute: { 19 mute: {
19 id: 'sidebar.mute', 20 id: 'sidebar.muteApp',
20 defaultMessage: '!!!Disable audio', 21 defaultMessage: '!!!Disable notifications & audio',
21 }, 22 },
22 unmute: { 23 unmute: {
23 id: 'sidebar.unmute', 24 id: 'sidebar.unmuteApp',
24 defaultMessage: '!!!Enable audio', 25 defaultMessage: '!!!Enable notifications & audio',
25 }, 26 },
26}); 27});
27 28
29@observer
28export default class Sidebar extends Component { 30export default class Sidebar extends Component {
29 static propTypes = { 31 static propTypes = {
30 openSettings: PropTypes.func.isRequired, 32 openSettings: PropTypes.func.isRequired,
diff --git a/src/components/services/content/ServiceDisabled.js b/src/components/services/content/ServiceDisabled.js
index 732b6c003..b5af3743d 100644
--- a/src/components/services/content/ServiceDisabled.js
+++ b/src/components/services/content/ServiceDisabled.js
@@ -35,7 +35,7 @@ export default class ServiceDisabled extends Component {
35 const { intl } = this.context; 35 const { intl } = this.context;
36 36
37 return ( 37 return (
38 <div className="services__crash-handler"> 38 <div className="services__info-layer">
39 <h1>{intl.formatMessage(messages.headline, { name })}</h1> 39 <h1>{intl.formatMessage(messages.headline, { name })}</h1>
40 <Button 40 <Button
41 label={intl.formatMessage(messages.action, { name })} 41 label={intl.formatMessage(messages.action, { name })}
diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js
index abbf21dee..c146abf4e 100644
--- a/src/components/services/content/ServiceWebview.js
+++ b/src/components/services/content/ServiceWebview.js
@@ -65,6 +65,7 @@ export default class ServiceWebview extends Component {
65 65
66 const webviewClasses = classnames({ 66 const webviewClasses = classnames({
67 services__webview: true, 67 services__webview: true,
68 'services__webview-wrapper': true,
68 'is-active': service.isActive, 69 'is-active': service.isActive,
69 'services__webview--force-repaint': this.state.forceRepaint, 70 'services__webview--force-repaint': this.state.forceRepaint,
70 }); 71 });
@@ -85,29 +86,29 @@ export default class ServiceWebview extends Component {
85 reload={reload} 86 reload={reload}
86 /> 87 />
87 )} 88 )}
88 {!service.isEnabled && ( 89 {!service.isEnabled ? (
89 <ServiceDisabled 90 <ServiceDisabled
90 name={service.recipe.name} 91 name={service.recipe.name}
91 webview={service.webview} 92 webview={service.webview}
92 enable={enable} 93 enable={enable}
93 /> 94 />
95 ) : (
96 <Webview
97 ref={(element) => { this.webview = element; }}
98 autosize
99 src={service.url}
100 preload="./webview/plugin.js"
101 partition={`persist:service-${service.id}`}
102 onDidAttach={() => setWebviewReference({
103 serviceId: service.id,
104 webview: this.webview.view,
105 })}
106 onUpdateTargetUrl={this.updateTargetUrl}
107 useragent={service.userAgent}
108 muted={isAppMuted || service.isMuted}
109 allowpopups
110 />
94 )} 111 )}
95 <Webview
96 ref={(element) => { this.webview = element; }}
97 autosize
98 src={service.url}
99 preload="./webview/plugin.js"
100 partition={`persist:service-${service.id}`}
101 onDidAttach={() => setWebviewReference({
102 serviceId: service.id,
103 webview: this.webview.view,
104 })}
105 onUpdateTargetUrl={this.updateTargetUrl}
106 useragent={service.userAgent}
107 muted={isAppMuted || service.isMuted}
108 disablewebsecurity
109 allowpopups
110 />
111 {statusBar} 112 {statusBar}
112 </div> 113 </div>
113 ); 114 );
diff --git a/src/components/services/content/WebviewCrashHandler.js b/src/components/services/content/WebviewCrashHandler.js
index d48152c18..d3e6951f3 100644
--- a/src/components/services/content/WebviewCrashHandler.js
+++ b/src/components/services/content/WebviewCrashHandler.js
@@ -62,7 +62,7 @@ export default class WebviewCrashHandler extends Component {
62 const { intl } = this.context; 62 const { intl } = this.context;
63 63
64 return ( 64 return (
65 <div className="services__crash-handler"> 65 <div className="services__info-layer">
66 <h1>{intl.formatMessage(messages.headline)}</h1> 66 <h1>{intl.formatMessage(messages.headline)}</h1>
67 <p>{intl.formatMessage(messages.text, { name })}</p> 67 <p>{intl.formatMessage(messages.text, { name })}</p>
68 <Button 68 <Button
diff --git a/src/components/services/tabs/TabBarSortableList.js b/src/components/services/tabs/TabBarSortableList.js
index 2daf55676..489027d57 100644
--- a/src/components/services/tabs/TabBarSortableList.js
+++ b/src/components/services/tabs/TabBarSortableList.js
@@ -17,6 +17,8 @@ class TabBarSortableList extends Component {
17 deleteService: PropTypes.func.isRequired, 17 deleteService: PropTypes.func.isRequired,
18 disableService: PropTypes.func.isRequired, 18 disableService: PropTypes.func.isRequired,
19 enableService: PropTypes.func.isRequired, 19 enableService: PropTypes.func.isRequired,
20 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
21 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
20 } 22 }
21 23
22 render() { 24 render() {
@@ -30,6 +32,8 @@ class TabBarSortableList extends Component {
30 disableService, 32 disableService,
31 enableService, 33 enableService,
32 openSettings, 34 openSettings,
35 showMessageBadgeWhenMutedSetting,
36 showMessageBadgesEvenWhenMuted,
33 } = this.props; 37 } = this.props;
34 38
35 return ( 39 return (
@@ -50,6 +54,8 @@ class TabBarSortableList extends Component {
50 disableService={() => disableService({ serviceId: service.id })} 54 disableService={() => disableService({ serviceId: service.id })}
51 enableService={() => enableService({ serviceId: service.id })} 55 enableService={() => enableService({ serviceId: service.id })}
52 openSettings={openSettings} 56 openSettings={openSettings}
57 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
58 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
53 /> 59 />
54 ))} 60 ))}
55 {/* <li> 61 {/* <li>
diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js
index a7136c43f..7aed8fda7 100644
--- a/src/components/services/tabs/TabItem.js
+++ b/src/components/services/tabs/TabItem.js
@@ -63,6 +63,8 @@ class TabItem extends Component {
63 deleteService: PropTypes.func.isRequired, 63 deleteService: PropTypes.func.isRequired,
64 disableService: PropTypes.func.isRequired, 64 disableService: PropTypes.func.isRequired,
65 enableService: PropTypes.func.isRequired, 65 enableService: PropTypes.func.isRequired,
66 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
67 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
66 }; 68 };
67 69
68 static contextTypes = { 70 static contextTypes = {
@@ -81,6 +83,8 @@ class TabItem extends Component {
81 disableService, 83 disableService,
82 enableService, 84 enableService,
83 openSettings, 85 openSettings,
86 showMessageBadgeWhenMutedSetting,
87 showMessageBadgesEvenWhenMuted,
84 } = this.props; 88 } = this.props;
85 const { intl } = this.context; 89 const { intl } = this.context;
86 90
@@ -121,6 +125,26 @@ class TabItem extends Component {
121 }]; 125 }];
122 const menu = Menu.buildFromTemplate(menuTemplate); 126 const menu = Menu.buildFromTemplate(menuTemplate);
123 127
128 let notificationBadge = null;
129 if ((showMessageBadgeWhenMutedSetting || service.isNotificationEnabled) && showMessageBadgesEvenWhenMuted && service.isBadgeEnabled) {
130 notificationBadge = (
131 <span>
132 {service.unreadDirectMessageCount > 0 && (
133 <span className="tab-item__message-count">
134 {service.unreadDirectMessageCount}
135 </span>
136 )}
137 {service.unreadIndirectMessageCount > 0
138 && service.unreadDirectMessageCount === 0
139 && service.isIndirectMessageBadgeEnabled && (
140 <span className="tab-item__message-count is-indirect">
141
142 </span>
143 )}
144 </span>
145 );
146 }
147
124 return ( 148 return (
125 <li 149 <li
126 className={classnames({ 150 className={classnames({
@@ -138,18 +162,7 @@ class TabItem extends Component {
138 className="tab-item__icon" 162 className="tab-item__icon"
139 alt="" 163 alt=""
140 /> 164 />
141 {service.unreadDirectMessageCount > 0 && ( 165 {notificationBadge}
142 <span className="tab-item__message-count">
143 {service.unreadDirectMessageCount}
144 </span>
145 )}
146 {service.unreadIndirectMessageCount > 0
147 && service.unreadDirectMessageCount === 0
148 && service.isIndirectMessageBadgeEnabled && (
149 <span className="tab-item__message-count is-indirect">
150
151 </span>
152 )}
153 </li> 166 </li>
154 ); 167 );
155 } 168 }
diff --git a/src/components/services/tabs/Tabbar.js b/src/components/services/tabs/Tabbar.js
index fd4325107..ceb88c51c 100644
--- a/src/components/services/tabs/Tabbar.js
+++ b/src/components/services/tabs/Tabbar.js
@@ -18,6 +18,8 @@ export default class TabBar extends Component {
18 toggleAudio: PropTypes.func.isRequired, 18 toggleAudio: PropTypes.func.isRequired,
19 deleteService: PropTypes.func.isRequired, 19 deleteService: PropTypes.func.isRequired,
20 updateService: PropTypes.func.isRequired, 20 updateService: PropTypes.func.isRequired,
21 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
22 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
21 } 23 }
22 24
23 onSortEnd = ({ oldIndex, newIndex }) => { 25 onSortEnd = ({ oldIndex, newIndex }) => {
@@ -30,6 +32,8 @@ export default class TabBar extends Component {
30 reorder({ oldIndex, newIndex }); 32 reorder({ oldIndex, newIndex });
31 }; 33 };
32 34
35 shouldPreventSorting = event => event.target.tagName !== 'LI';
36
33 toggleService = ({ serviceId, isEnabled }) => { 37 toggleService = ({ serviceId, isEnabled }) => {
34 const { updateService } = this.props; 38 const { updateService } = this.props;
35 39
@@ -62,6 +66,8 @@ export default class TabBar extends Component {
62 toggleNotifications, 66 toggleNotifications,
63 toggleAudio, 67 toggleAudio,
64 deleteService, 68 deleteService,
69 showMessageBadgeWhenMutedSetting,
70 showMessageBadgesEvenWhenMuted,
65 } = this.props; 71 } = this.props;
66 72
67 return ( 73 return (
@@ -71,6 +77,7 @@ export default class TabBar extends Component {
71 setActive={setActive} 77 setActive={setActive}
72 onSortEnd={this.onSortEnd} 78 onSortEnd={this.onSortEnd}
73 onSortStart={disableToolTip} 79 onSortStart={disableToolTip}
80 shouldCancelStart={this.shouldPreventSorting}
74 reload={reload} 81 reload={reload}
75 toggleNotifications={toggleNotifications} 82 toggleNotifications={toggleNotifications}
76 toggleAudio={toggleAudio} 83 toggleAudio={toggleAudio}
@@ -82,6 +89,8 @@ export default class TabBar extends Component {
82 axis="y" 89 axis="y"
83 lockAxis="y" 90 lockAxis="y"
84 helperClass="is-reordering" 91 helperClass="is-reordering"
92 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
93 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
85 /> 94 />
86 </div> 95 </div>
87 ); 96 );
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 75dbdef49..89fa07800 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -28,6 +28,10 @@ const messages = defineMessages({
28 id: 'settings.account.headlineInvoices', 28 id: 'settings.account.headlineInvoices',
29 defaultMessage: '!!Invoices', 29 defaultMessage: '!!Invoices',
30 }, 30 },
31 headlineDangerZone: {
32 id: 'settings.account.headlineDangerZone',
33 defaultMessage: '!!Danger Zone',
34 },
31 manageSubscriptionButtonLabel: { 35 manageSubscriptionButtonLabel: {
32 id: 'settings.account.manageSubscription.label', 36 id: 'settings.account.manageSubscription.label',
33 defaultMessage: '!!!Manage your subscription', 37 defaultMessage: '!!!Manage your subscription',
@@ -72,6 +76,18 @@ const messages = defineMessages({
72 id: 'settings.account.mining.cancel', 76 id: 'settings.account.mining.cancel',
73 defaultMessage: '!!!Cancel mining', 77 defaultMessage: '!!!Cancel mining',
74 }, 78 },
79 deleteAccount: {
80 id: 'settings.account.deleteAccount',
81 defaultMessage: '!!!Delete account',
82 },
83 deleteInfo: {
84 id: 'settings.account.deleteInfo',
85 defaultMessage: '!!!If you don\'t need your Franz account any longer, you can delete your account and all related data here.',
86 },
87 deleteEmailSent: {
88 id: 'settings.account.deleteEmailSent',
89 defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!',
90 },
75}); 91});
76 92
77@observer 93@observer
@@ -90,6 +106,9 @@ export default class AccountDashboard extends Component {
90 openExternalUrl: PropTypes.func.isRequired, 106 openExternalUrl: PropTypes.func.isRequired,
91 onCloseSubscriptionWindow: PropTypes.func.isRequired, 107 onCloseSubscriptionWindow: PropTypes.func.isRequired,
92 stopMiner: PropTypes.func.isRequired, 108 stopMiner: PropTypes.func.isRequired,
109 deleteAccount: PropTypes.func.isRequired,
110 isLoadingDeleteAccount: PropTypes.bool.isRequired,
111 isDeleteAccountSuccessful: PropTypes.bool.isRequired,
93 }; 112 };
94 113
95 static contextTypes = { 114 static contextTypes = {
@@ -111,6 +130,9 @@ export default class AccountDashboard extends Component {
111 retryUserInfoRequest, 130 retryUserInfoRequest,
112 onCloseSubscriptionWindow, 131 onCloseSubscriptionWindow,
113 stopMiner, 132 stopMiner,
133 deleteAccount,
134 isLoadingDeleteAccount,
135 isDeleteAccountSuccessful,
114 } = this.props; 136 } = this.props;
115 const { intl } = this.context; 137 const { intl } = this.context;
116 138
@@ -201,7 +223,7 @@ export default class AccountDashboard extends Component {
201 /> 223 />
202 </div> 224 </div>
203 </div> 225 </div>
204 <div className="account__box account__box--last"> 226 <div className="account__box">
205 <h2>{intl.formatMessage(messages.headlineInvoices)}</h2> 227 <h2>{intl.formatMessage(messages.headlineInvoices)}</h2>
206 <table className="invoices"> 228 <table className="invoices">
207 <tbody> 229 <tbody>
@@ -230,7 +252,7 @@ export default class AccountDashboard extends Component {
230 252
231 {user.isMiner && ( 253 {user.isMiner && (
232 <div className="account franz-form"> 254 <div className="account franz-form">
233 <div className="account__box"> 255 <div className="account__box account__box--last">
234 <h2>{intl.formatMessage(messages.headlineSubscription)}</h2> 256 <h2>{intl.formatMessage(messages.headlineSubscription)}</h2>
235 <div className="account__subscription"> 257 <div className="account__subscription">
236 <div> 258 <div>
@@ -267,7 +289,7 @@ export default class AccountDashboard extends Component {
267 <Loader /> 289 <Loader />
268 ) : ( 290 ) : (
269 <div className="account franz-form"> 291 <div className="account franz-form">
270 <div className="account__box account__box--last"> 292 <div className="account__box">
271 <h2>{intl.formatMessage(messages.headlineUpgrade)}</h2> 293 <h2>{intl.formatMessage(messages.headlineUpgrade)}</h2>
272 <SubscriptionForm 294 <SubscriptionForm
273 onCloseWindow={onCloseSubscriptionWindow} 295 onCloseWindow={onCloseSubscriptionWindow}
@@ -276,8 +298,29 @@ export default class AccountDashboard extends Component {
276 </div> 298 </div>
277 ) 299 )
278 )} 300 )}
301
302 <div className="account franz-form">
303 <div className="account__box">
304 <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2>
305 {!isDeleteAccountSuccessful && (
306 <div className="account__subscription">
307 <p>{intl.formatMessage(messages.deleteInfo)}</p>
308 <Button
309 label={intl.formatMessage(messages.deleteAccount)}
310 buttonType="danger"
311 onClick={() => deleteAccount()}
312 loaded={!isLoadingDeleteAccount}
313 />
314 </div>
315 )}
316 {isDeleteAccountSuccessful && (
317 <p>{intl.formatMessage(messages.deleteEmailSent)}</p>
318 )}
319 </div>
320 </div>
279 </div> 321 </div>
280 )} 322 )}
323
281 </div> 324 </div>
282 <ReactTooltip place="right" type="dark" effect="solid" /> 325 <ReactTooltip place="right" type="dark" effect="solid" />
283 </div> 326 </div>
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js
index 3b21a7765..fea8d682d 100644
--- a/src/components/settings/navigation/SettingsNavigation.js
+++ b/src/components/settings/navigation/SettingsNavigation.js
@@ -74,7 +74,6 @@ export default class SettingsNavigation extends Component {
74 <Link 74 <Link
75 to="/auth/logout" 75 to="/auth/logout"
76 className="settings-navigation__link" 76 className="settings-navigation__link"
77 activeClassName="is-active"
78 > 77 >
79 {intl.formatMessage(messages.logout)} 78 {intl.formatMessage(messages.logout)}
80 </Link> 79 </Link>
diff --git a/src/components/settings/recipes/RecipesDashboard.js b/src/components/settings/recipes/RecipesDashboard.js
index 02ea04e35..b6ade5da4 100644
--- a/src/components/settings/recipes/RecipesDashboard.js
+++ b/src/components/settings/recipes/RecipesDashboard.js
@@ -9,6 +9,7 @@ import Infobox from '../../ui/Infobox';
9import RecipeItem from './RecipeItem'; 9import RecipeItem from './RecipeItem';
10import Loader from '../../ui/Loader'; 10import Loader from '../../ui/Loader';
11import Appear from '../../ui/effects/Appear'; 11import Appear from '../../ui/effects/Appear';
12import { FRANZ_SERVICE_REQUEST } from '../../../config';
12 13
13const messages = defineMessages({ 14const messages = defineMessages({
14 headline: { 15 headline: {
@@ -35,6 +36,10 @@ const messages = defineMessages({
35 id: 'settings.recipes.servicesSuccessfulAddedInfo', 36 id: 'settings.recipes.servicesSuccessfulAddedInfo',
36 defaultMessage: '!!!Service successfully added', 37 defaultMessage: '!!!Service successfully added',
37 }, 38 },
39 missingService: {
40 id: 'settings.recipes.missingService',
41 defaultMessage: '!!!Missing a service?',
42 },
38}); 43});
39 44
40@observer 45@observer
@@ -96,33 +101,39 @@ export default class RecipesDashboard extends Component {
96 </Infobox> 101 </Infobox>
97 </Appear> 102 </Appear>
98 )} 103 )}
99 {!searchNeedle && ( 104 {/* {!searchNeedle && ( */}
100 <div className="recipes__navigation"> 105 <div className="recipes__navigation">
101 <Link 106 <Link
102 to="/settings/recipes" 107 to="/settings/recipes"
103 className="badge" 108 className="badge"
104 activeClassName="badge--primary" 109 activeClassName={`${!searchNeedle ? 'badge--primary' : ''}`}
105 > 110 onClick={() => resetSearch()}
106 {intl.formatMessage(messages.mostPopularRecipes)} 111 >
107 </Link> 112 {intl.formatMessage(messages.mostPopularRecipes)}
113 </Link>
114 <Link
115 to="/settings/recipes/all"
116 className="badge"
117 activeClassName={`${!searchNeedle ? 'badge--primary' : ''}`}
118 onClick={() => resetSearch()}
119 >
120 {intl.formatMessage(messages.allRecipes)}
121 </Link>
122 {devRecipesCount > 0 && (
108 <Link 123 <Link
109 to="/settings/recipes/all" 124 to="/settings/recipes/dev"
110 className="badge" 125 className="badge"
111 activeClassName="badge--primary" 126 activeClassName={`${!searchNeedle ? 'badge--primary' : ''}`}
127 onClick={() => resetSearch()}
112 > 128 >
113 {intl.formatMessage(messages.allRecipes)} 129 {intl.formatMessage(messages.devRecipes)} ({devRecipesCount})
114 </Link> 130 </Link>
115 {devRecipesCount > 0 && ( 131 )}
116 <Link 132 <a href={FRANZ_SERVICE_REQUEST} target="_blank" className="link recipes__service-request">
117 to="/settings/recipes/dev" 133 {intl.formatMessage(messages.missingService)} <i className="mdi mdi-open-in-new" />
118 className="badge" 134 </a>
119 activeClassName="badge--primary" 135 </div>
120 > 136 {/* )} */}
121 {intl.formatMessage(messages.devRecipes)} ({devRecipesCount})
122 </Link>
123 )}
124 </div>
125 )}
126 {isLoading ? ( 137 {isLoading ? (
127 <Loader /> 138 <Loader />
128 ) : ( 139 ) : (
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js
index bcbda7773..ee69d53aa 100644
--- a/src/components/settings/services/EditServiceForm.js
+++ b/src/components/settings/services/EditServiceForm.js
@@ -48,6 +48,10 @@ const messages = defineMessages({
48 id: 'settings.service.form.tabOnPremise', 48 id: 'settings.service.form.tabOnPremise',
49 defaultMessage: '!!!Self hosted ⭐️', 49 defaultMessage: '!!!Self hosted ⭐️',
50 }, 50 },
51 useHostedService: {
52 id: 'settings.service.form.useHostedService',
53 defaultMessage: '!!!Use the hosted {name} service.',
54 },
51 customUrlValidationError: { 55 customUrlValidationError: {
52 id: 'settings.service.form.customUrlValidationError', 56 id: 'settings.service.form.customUrlValidationError',
53 defaultMessage: '!!!Could not validate custom {name} server.', 57 defaultMessage: '!!!Could not validate custom {name} server.',
@@ -68,6 +72,18 @@ const messages = defineMessages({
68 id: 'settings.service.form.isMutedInfo', 72 id: 'settings.service.form.isMutedInfo',
69 defaultMessage: '!!!When disabled, all notification sounds and audio playback are muted', 73 defaultMessage: '!!!When disabled, all notification sounds and audio playback are muted',
70 }, 74 },
75 headlineNotifications: {
76 id: 'settings.service.form.headlineNotifications',
77 defaultMessage: '!!!Notifications',
78 },
79 headlineBadges: {
80 id: 'settings.service.form.headlineBadges',
81 defaultMessage: '!!!Unread message dadges',
82 },
83 headlineGeneral: {
84 id: 'settings.service.form.headlineGeneral',
85 defaultMessage: '!!!General',
86 },
71}); 87});
72 88
73@observer 89@observer
@@ -109,13 +125,12 @@ export default class EditServiceForm extends Component {
109 this.props.form.submit({ 125 this.props.form.submit({
110 onSuccess: async (form) => { 126 onSuccess: async (form) => {
111 const values = form.values(); 127 const values = form.values();
112
113 let isValid = true; 128 let isValid = true;
114 129
115 if (recipe.validateUrl && values.customUrl) { 130 if (recipe.validateUrl && values.customUrl) {
116 this.setState({ isValidatingCustomUrl: true }); 131 this.setState({ isValidatingCustomUrl: true });
117 try { 132 try {
118 values.customUrl = normalizeUrl(values.customUrl); 133 values.customUrl = normalizeUrl(values.customUrl, { stripWWW: false });
119 isValid = await recipe.validateUrl(values.customUrl); 134 isValid = await recipe.validateUrl(values.customUrl);
120 } catch (err) { 135 } catch (err) {
121 console.warn('ValidateURL', err); 136 console.warn('ValidateURL', err);
@@ -167,6 +182,13 @@ export default class EditServiceForm extends Component {
167 /> 182 />
168 ); 183 );
169 184
185 let activeTabIndex = 0;
186 if (recipe.hasHostedOption && service.team) {
187 activeTabIndex = 1;
188 } else if (recipe.hasHostedOption && service.customUrl) {
189 activeTabIndex = 2;
190 }
191
170 return ( 192 return (
171 <div className="settings__main"> 193 <div className="settings__main">
172 <div className="settings__header"> 194 <div className="settings__header">
@@ -207,11 +229,20 @@ export default class EditServiceForm extends Component {
207 </div> 229 </div>
208 {(recipe.hasTeamId || recipe.hasCustomUrl) && ( 230 {(recipe.hasTeamId || recipe.hasCustomUrl) && (
209 <Tabs 231 <Tabs
210 active={service.customUrl ? 1 : 0} 232 active={activeTabIndex}
211 > 233 >
234 {recipe.hasHostedOption && (
235 <TabItem title={recipe.name}>
236 {intl.formatMessage(messages.useHostedService, { name: recipe.name })}
237 </TabItem>
238 )}
212 {recipe.hasTeamId && ( 239 {recipe.hasTeamId && (
213 <TabItem title={intl.formatMessage(messages.tabHosted)}> 240 <TabItem title={intl.formatMessage(messages.tabHosted)}>
214 <Input field={form.$('team')} suffix={recipe.urlInputSuffix} /> 241 <Input
242 field={form.$('team')}
243 prefix={recipe.urlInputPrefix}
244 suffix={recipe.urlInputSuffix}
245 />
215 </TabItem> 246 </TabItem>
216 )} 247 )}
217 {recipe.hasCustomUrl && ( 248 {recipe.hasCustomUrl && (
@@ -240,20 +271,32 @@ export default class EditServiceForm extends Component {
240 </Tabs> 271 </Tabs>
241 )} 272 )}
242 <div className="settings__options"> 273 <div className="settings__options">
243 <Toggle field={form.$('isNotificationEnabled')} /> 274 <div className="settings__settings-group">
244 {recipe.hasIndirectMessages && ( 275 <h3>{intl.formatMessage(messages.headlineNotifications)}</h3>
245 <div> 276 <Toggle field={form.$('isNotificationEnabled')} />
246 <Toggle field={form.$('isIndirectMessageBadgeEnabled')} /> 277 <Toggle field={form.$('isMuted')} />
247 <p className="settings__help"> 278 <p className="settings__help">
248 {intl.formatMessage(messages.indirectMessageInfo)} 279 {intl.formatMessage(messages.isMutedInfo)}
249 </p> 280 </p>
250 </div> 281 </div>
251 )} 282
252 <Toggle field={form.$('isMuted')} /> 283 <div className="settings__settings-group">
253 <p className="settings__help"> 284 <h3>{intl.formatMessage(messages.headlineBadges)}</h3>
254 {intl.formatMessage(messages.isMutedInfo)} 285 <Toggle field={form.$('isBadgeEnabled')} />
255 </p> 286 {recipe.hasIndirectMessages && form.$('isBadgeEnabled').value && (
256 <Toggle field={form.$('isEnabled')} /> 287 <div>
288 <Toggle field={form.$('isIndirectMessageBadgeEnabled')} />
289 <p className="settings__help">
290 {intl.formatMessage(messages.indirectMessageInfo)}
291 </p>
292 </div>
293 )}
294 </div>
295
296 <div className="settings__settings-group">
297 <h3>{intl.formatMessage(messages.headlineGeneral)}</h3>
298 <Toggle field={form.$('isEnabled')} />
299 </div>
257 </div> 300 </div>
258 {recipe.message && ( 301 {recipe.message && (
259 <p className="settings__message"> 302 <p className="settings__message">
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index ba07b1a5b..ff398aa33 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -9,6 +9,8 @@ import Button from '../../ui/Button';
9import Toggle from '../../ui/Toggle'; 9import Toggle from '../../ui/Toggle';
10import Select from '../../ui/Select'; 10import Select from '../../ui/Select';
11 11
12import { FRANZ_TRANSLATION } from '../../../config';
13
12const messages = defineMessages({ 14const messages = defineMessages({
13 headline: { 15 headline: {
14 id: 'settings.app.headline', 16 id: 'settings.app.headline',
@@ -30,6 +32,14 @@ const messages = defineMessages({
30 id: 'settings.app.headlineAppearance', 32 id: 'settings.app.headlineAppearance',
31 defaultMessage: '!!!Appearance', 33 defaultMessage: '!!!Appearance',
32 }, 34 },
35 headlineAdvanced: {
36 id: 'settings.app.headlineAdvanced',
37 defaultMessage: '!!!Advanced',
38 },
39 translationHelp: {
40 id: 'settings.app.translationHelp',
41 defaultMessage: '!!!Help us to translate Franz into your language.',
42 },
33 buttonSearchForUpdate: { 43 buttonSearchForUpdate: {
34 id: 'settings.app.buttonSearchForUpdate', 44 id: 'settings.app.buttonSearchForUpdate',
35 defaultMessage: '!!!Check for updates', 45 defaultMessage: '!!!Check for updates',
@@ -116,18 +126,38 @@ export default class EditSettingsForm extends Component {
116 onChange={e => this.submit(e)} 126 onChange={e => this.submit(e)}
117 id="form" 127 id="form"
118 > 128 >
119 <h2>{intl.formatMessage(messages.headlineGeneral)}</h2> 129 {/* General */}
130 <h2 id="general">{intl.formatMessage(messages.headlineGeneral)}</h2>
120 <Toggle field={form.$('autoLaunchOnStart')} /> 131 <Toggle field={form.$('autoLaunchOnStart')} />
121 <Toggle field={form.$('runInBackground')} /> 132 <Toggle field={form.$('runInBackground')} />
122 <Toggle field={form.$('enableSystemTray')} /> 133 <Toggle field={form.$('enableSystemTray')} />
123 {process.platform === 'win32' && ( 134 {process.platform === 'win32' && (
124 <Toggle field={form.$('minimizeToSystemTray')} /> 135 <Toggle field={form.$('minimizeToSystemTray')} />
125 )} 136 )}
126 <h2>{intl.formatMessage(messages.headlineAppearance)}</h2> 137
138 {/* Appearance */}
139 <h2 id="apperance">{intl.formatMessage(messages.headlineAppearance)}</h2>
127 <Toggle field={form.$('showDisabledServices')} /> 140 <Toggle field={form.$('showDisabledServices')} />
128 <h2>{intl.formatMessage(messages.headlineLanguage)}</h2> 141 <Toggle field={form.$('showMessageBadgeWhenMuted')} />
142
143 {/* Language */}
144 <h2 id="language">{intl.formatMessage(messages.headlineLanguage)}</h2>
129 <Select field={form.$('locale')} showLabel={false} /> 145 <Select field={form.$('locale')} showLabel={false} />
130 <h2>{intl.formatMessage(messages.headlineUpdates)}</h2> 146 <a
147 href={FRANZ_TRANSLATION}
148 target="_blank"
149 className="link"
150 >
151 {intl.formatMessage(messages.translationHelp)} <i className="mdi mdi-open-in-new" />
152 </a>
153
154 {/* Advanced */}
155 <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2>
156 <Toggle field={form.$('enableSpellchecking')} />
157 {/* <Select field={form.$('spellcheckingLanguage')} /> */}
158
159 {/* Updates */}
160 <h2 id="updates">{intl.formatMessage(messages.headlineUpdates)}</h2>
131 {updateIsReadyToInstall ? ( 161 {updateIsReadyToInstall ? (
132 <Button 162 <Button
133 label={intl.formatMessage(messages.buttonInstallUpdate)} 163 label={intl.formatMessage(messages.buttonInstallUpdate)}
diff --git a/src/components/ui/AppLoader.js b/src/components/ui/AppLoader.js
index 64a212969..ac3cdcb05 100644
--- a/src/components/ui/AppLoader.js
+++ b/src/components/ui/AppLoader.js
@@ -8,7 +8,7 @@ export default function () {
8 <div className="app-loader"> 8 <div className="app-loader">
9 <Appear> 9 <Appear>
10 <h1 className="app-loader__title">Franz</h1> 10 <h1 className="app-loader__title">Franz</h1>
11 <Loader /> 11 <Loader color="#FFF" />
12 </Appear> 12 </Appear>
13 </div> 13 </div>
14 ); 14 );
diff --git a/src/components/ui/Button.js b/src/components/ui/Button.js
index 07e94192f..554206cb7 100644
--- a/src/components/ui/Button.js
+++ b/src/components/ui/Button.js
@@ -68,7 +68,7 @@ export default class Button extends Component {
68 loaded={loaded} 68 loaded={loaded}
69 lines={10} 69 lines={10}
70 scale={0.4} 70 scale={0.4}
71 color={buttonType === '' ? '#FFF' : '#373a3c'} 71 color={buttonType !== 'secondary' ? '#FFF' : '#373a3c'}
72 component="span" 72 component="span"
73 /> 73 />
74 {label} 74 {label}
diff --git a/src/components/ui/InfoBar.js b/src/components/ui/InfoBar.js
index aea2bd888..84a5f1446 100644
--- a/src/components/ui/InfoBar.js
+++ b/src/components/ui/InfoBar.js
@@ -61,10 +61,13 @@ export default class InfoBar extends Component {
61 [`${className}`]: true, 61 [`${className}`]: true,
62 })} 62 })}
63 > 63 >
64 <div onClick={onClick} className="info-bar__content"> 64 <div className="info-bar__content">
65 {children} 65 {children}
66 {ctaLabel && ( 66 {ctaLabel && (
67 <button className="info-bar__cta"> 67 <button
68 className="info-bar__cta"
69 onClick={onClick}
70 >
68 <Loader 71 <Loader
69 loaded={!ctaLoading} 72 loaded={!ctaLoading}
70 lines={10} 73 lines={10}
diff --git a/src/components/ui/Loader.js b/src/components/ui/Loader.js
index e4fbd96a2..f73296bb6 100644
--- a/src/components/ui/Loader.js
+++ b/src/components/ui/Loader.js
@@ -9,12 +9,14 @@ export default class LoaderComponent extends Component {
9 children: oneOrManyChildElements, 9 children: oneOrManyChildElements,
10 loaded: PropTypes.bool, 10 loaded: PropTypes.bool,
11 className: PropTypes.string, 11 className: PropTypes.string,
12 color: PropTypes.string,
12 }; 13 };
13 14
14 static defaultProps = { 15 static defaultProps = {
15 children: null, 16 children: null,
16 loaded: false, 17 loaded: false,
17 className: '', 18 className: '',
19 color: '#373a3c',
18 }; 20 };
19 21
20 render() { 22 render() {
@@ -22,6 +24,7 @@ export default class LoaderComponent extends Component {
22 children, 24 children,
23 loaded, 25 loaded,
24 className, 26 className,
27 color,
25 } = this.props; 28 } = this.props;
26 29
27 return ( 30 return (
@@ -30,7 +33,7 @@ export default class LoaderComponent extends Component {
30 // lines={10} 33 // lines={10}
31 width={4} 34 width={4}
32 scale={0.6} 35 scale={0.6}
33 color="#373a3c" 36 color={color}
34 component="span" 37 component="span"
35 className={className} 38 className={className}
36 > 39 >
diff --git a/src/components/ui/Subscription.js b/src/components/ui/Subscription.js
index fe0925a26..8bff72095 100644
--- a/src/components/ui/Subscription.js
+++ b/src/components/ui/Subscription.js
@@ -93,6 +93,10 @@ const messages = defineMessages({
93 id: 'subscription.mining.moreInformation', 93 id: 'subscription.mining.moreInformation',
94 defaultMessage: '!!!Get more information about this plan', 94 defaultMessage: '!!!Get more information about this plan',
95 }, 95 },
96 euTaxInfo: {
97 id: 'subscription.euTaxInfo',
98 defaultMessage: '!!!EU residents: local sales tax may apply',
99 },
96}); 100});
97 101
98@observer 102@observer
@@ -144,14 +148,18 @@ export default class SubscriptionForm extends Component {
144 label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'year') 148 label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'year')
145 ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}` 149 ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}`
146 : 'yearly'}`, 150 : 'yearly'}`,
147 }, {
148 value: 'mining',
149 label: intl.formatMessage(messages.typeMining),
150 }], 151 }],
151 }, 152 },
152 }, 153 },
153 }; 154 };
154 155
156 if (this.props.plan.miner) {
157 form.fields.paymentTier.options.push({
158 value: 'mining',
159 label: intl.formatMessage(messages.typeMining),
160 });
161 }
162
155 if (this.props.showSkipOption) { 163 if (this.props.showSkipOption) {
156 form.fields.paymentTier.options.unshift({ 164 form.fields.paymentTier.options.unshift({
157 value: 'skip', 165 value: 'skip',
@@ -259,6 +267,11 @@ export default class SubscriptionForm extends Component {
259 onClick={() => handlePayment(this.form.$('paymentTier').value)} 267 onClick={() => handlePayment(this.form.$('paymentTier').value)}
260 /> 268 />
261 )} 269 )}
270 {this.form.$('paymentTier').value !== 'skip' && this.form.$('paymentTier').value !== 'mining' && (
271 <p className="legal">
272 {intl.formatMessage(messages.euTaxInfo)}
273 </p>
274 )}
262 </Loader> 275 </Loader>
263 ); 276 );
264 } 277 }
diff --git a/src/components/ui/SubscriptionPopup.js b/src/components/ui/SubscriptionPopup.js
index 5aae2c47a..528d02907 100644
--- a/src/components/ui/SubscriptionPopup.js
+++ b/src/components/ui/SubscriptionPopup.js
@@ -58,7 +58,6 @@ export default class SubscriptionPopup extends Component {
58 58
59 autosize 59 autosize
60 src={encodeURI(url)} 60 src={encodeURI(url)}
61 disablewebsecurity
62 onDidNavigate={completeCheck} 61 onDidNavigate={completeCheck}
63 // onNewWindow={(event, url, frameName, options) => 62 // onNewWindow={(event, url, frameName, options) =>
64 // openWindow({ event, url, frameName, options })} 63 // openWindow({ event, url, frameName, options })}
diff --git a/src/config.js b/src/config.js
index 1627993f5..e66594c59 100644
--- a/src/config.js
+++ b/src/config.js
@@ -7,11 +7,18 @@ export const GA_ID = 'UA-74126766-6';
7export const DEFAULT_APP_SETTINGS = { 7export const DEFAULT_APP_SETTINGS = {
8 autoLaunchOnStart: true, 8 autoLaunchOnStart: true,
9 autoLaunchInBackground: false, 9 autoLaunchInBackground: false,
10 runInBackground: false, 10 runInBackground: true,
11 enableSystemTray: true, 11 enableSystemTray: true,
12 minimizeToSystemTray: false, 12 minimizeToSystemTray: false,
13 showDisabledServices: true, 13 showDisabledServices: true,
14 locale: 'en-US', 14 showMessageBadgeWhenMuted: true,
15 enableSpellchecking: true,
16 // spellcheckingLanguage: 'auto',
17 locale: '',
18 fallbackLocale: 'en-US',
15 beta: false, 19 beta: false,
16 isAppMuted: false, 20 isAppMuted: false,
17}; 21};
22
23export const FRANZ_SERVICE_REQUEST = 'http://bit.ly/franz-service-request';
24export const FRANZ_TRANSLATION = 'http://bit.ly/franz-translate';
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js
index 8e5b3d2ed..e4a9d60c3 100644
--- a/src/containers/layout/AppLayoutContainer.js
+++ b/src/containers/layout/AppLayoutContainer.js
@@ -67,9 +67,6 @@ export default class AppLayoutContainer extends Component {
67 const isLoadingServices = services.allServicesRequest.isExecuting 67 const isLoadingServices = services.allServicesRequest.isExecuting
68 && services.allServicesRequest.isExecutingFirstTime; 68 && services.allServicesRequest.isExecutingFirstTime;
69 69
70 // const isLoadingRecipes = recipes.allRecipesRequest.isExecuting
71 // && recipes.allRecipesRequest.isExecutingFirstTime;
72
73 if (isLoadingServices) { 70 if (isLoadingServices) {
74 return ( 71 return (
75 <AppLoader /> 72 <AppLoader />
@@ -80,7 +77,7 @@ export default class AppLayoutContainer extends Component {
80 <Sidebar 77 <Sidebar
81 services={services.allDisplayed} 78 services={services.allDisplayed}
82 setActive={setActive} 79 setActive={setActive}
83 isAppMuted={Boolean(app.isSystemMuted) || Boolean(settings.all.isMuted)} 80 isAppMuted={settings.all.isAppMuted}
84 openSettings={openSettings} 81 openSettings={openSettings}
85 closeSettings={closeSettings} 82 closeSettings={closeSettings}
86 reorder={reorder} 83 reorder={reorder}
@@ -90,6 +87,8 @@ export default class AppLayoutContainer extends Component {
90 deleteService={deleteService} 87 deleteService={deleteService}
91 updateService={updateService} 88 updateService={updateService}
92 toggleMuteApp={toggleMuteApp} 89 toggleMuteApp={toggleMuteApp}
90 showMessageBadgeWhenMutedSetting={settings.all.showMessageBadgeWhenMuted}
91 showMessageBadgesEvenWhenMuted={ui.showMessageBadgesEvenWhenMuted}
93 /> 92 />
94 ); 93 );
95 94
@@ -100,7 +99,7 @@ export default class AppLayoutContainer extends Component {
100 setWebviewReference={setWebviewReference} 99 setWebviewReference={setWebviewReference}
101 openWindow={openWindow} 100 openWindow={openWindow}
102 reload={reload} 101 reload={reload}
103 isAppMuted={settings.all.isMuted || false} 102 isAppMuted={settings.all.isAppMuted}
104 update={updateService} 103 update={updateService}
105 /> 104 />
106 ); 105 );
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js
index a1ac8bda3..008c495d4 100644
--- a/src/containers/settings/AccountScreen.js
+++ b/src/containers/settings/AccountScreen.js
@@ -69,6 +69,7 @@ export default class AccountScreen extends Component {
69 render() { 69 render() {
70 const { user, payment, app } = this.props.stores; 70 const { user, payment, app } = this.props.stores;
71 const { openExternalUrl } = this.props.actions.app; 71 const { openExternalUrl } = this.props.actions.app;
72 const { user: userActions } = this.props.actions;
72 73
73 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting; 74 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting;
74 const isLoadingOrdersInfo = payment.ordersDataRequest.isExecuting; 75 const isLoadingOrdersInfo = payment.ordersDataRequest.isExecuting;
@@ -89,6 +90,9 @@ export default class AccountScreen extends Component {
89 openExternalUrl={url => openExternalUrl({ url })} 90 openExternalUrl={url => openExternalUrl({ url })}
90 onCloseSubscriptionWindow={() => this.onCloseWindow()} 91 onCloseSubscriptionWindow={() => this.onCloseWindow()}
91 stopMiner={() => this.stopMiner()} 92 stopMiner={() => this.stopMiner()}
93 deleteAccount={userActions.delete}
94 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting}
95 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError}
92 /> 96 />
93 ); 97 );
94 } 98 }
@@ -109,6 +113,7 @@ AccountScreen.wrappedComponent.propTypes = {
109 }).isRequired, 113 }).isRequired,
110 user: PropTypes.shape({ 114 user: PropTypes.shape({
111 update: PropTypes.func.isRequired, 115 update: PropTypes.func.isRequired,
116 delete: PropTypes.func.isRequired,
112 }).isRequired, 117 }).isRequired,
113 }).isRequired, 118 }).isRequired,
114}; 119};
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js
index 52a9fa6db..8827896ef 100644
--- a/src/containers/settings/EditServiceScreen.js
+++ b/src/containers/settings/EditServiceScreen.js
@@ -26,6 +26,10 @@ const messages = defineMessages({
26 id: 'settings.service.form.enableNotification', 26 id: 'settings.service.form.enableNotification',
27 defaultMessage: '!!!Enable Notifications', 27 defaultMessage: '!!!Enable Notifications',
28 }, 28 },
29 enableBadge: {
30 id: 'settings.service.form.enableBadge',
31 defaultMessage: '!!!Show unread message badges',
32 },
29 enableAudio: { 33 enableAudio: {
30 id: 'settings.service.form.enableAudio', 34 id: 'settings.service.form.enableAudio',
31 defaultMessage: '!!!Enable audio', 35 defaultMessage: '!!!Enable audio',
@@ -92,6 +96,11 @@ export default class EditServiceScreen extends Component {
92 value: service.isNotificationEnabled, 96 value: service.isNotificationEnabled,
93 default: true, 97 default: true,
94 }, 98 },
99 isBadgeEnabled: {
100 label: intl.formatMessage(messages.enableBadge),
101 value: service.isBadgeEnabled,
102 default: true,
103 },
95 isMuted: { 104 isMuted: {
96 label: intl.formatMessage(messages.enableAudio), 105 label: intl.formatMessage(messages.enableAudio),
97 value: !service.isMuted, 106 value: !service.isMuted,
@@ -127,11 +136,22 @@ export default class EditServiceScreen extends Component {
127 }); 136 });
128 } 137 }
129 138
139 // More fine grained and use case specific validation rules
130 if (recipe.hasTeamId && recipe.hasCustomUrl) { 140 if (recipe.hasTeamId && recipe.hasCustomUrl) {
131 config.fields.team.validate = [oneRequired(['team', 'customUrl'])]; 141 config.fields.team.validate = [oneRequired(['team', 'customUrl'])];
132 config.fields.customUrl.validate = [url, oneRequired(['team', 'customUrl'])]; 142 config.fields.customUrl.validate = [url, oneRequired(['team', 'customUrl'])];
133 } 143 }
134 144
145 // If a service can be hosted and has a teamId or customUrl
146 if (recipe.hasHostedOption && (recipe.hasTeamId || recipe.hasCustomUrl)) {
147 if (config.fields.team) {
148 config.fields.team.validate = [];
149 }
150 if (config.fields.customUrl) {
151 config.fields.customUrl.validate = [url];
152 }
153 }
154
135 if (recipe.hasIndirectMessages) { 155 if (recipe.hasIndirectMessages) {
136 Object.assign(config.fields, { 156 Object.assign(config.fields, {
137 isIndirectMessageBadgeEnabled: { 157 isIndirectMessageBadgeEnabled: {
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index b10acf3c6..45ded9e5c 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -7,7 +7,7 @@ import AppStore from '../../stores/AppStore';
7import SettingsStore from '../../stores/SettingsStore'; 7import SettingsStore from '../../stores/SettingsStore';
8import UserStore from '../../stores/UserStore'; 8import UserStore from '../../stores/UserStore';
9import Form from '../../lib/Form'; 9import Form from '../../lib/Form';
10import languages from '../../i18n/languages'; 10import { APP_LOCALES } from '../../i18n/languages';
11import { gaPage } from '../../lib/analytics'; 11import { gaPage } from '../../lib/analytics';
12import { DEFAULT_APP_SETTINGS } from '../../config'; 12import { DEFAULT_APP_SETTINGS } from '../../config';
13 13
@@ -43,6 +43,22 @@ const messages = defineMessages({
43 id: 'settings.app.form.showDisabledServices', 43 id: 'settings.app.form.showDisabledServices',
44 defaultMessage: '!!!Display disabled services tabs', 44 defaultMessage: '!!!Display disabled services tabs',
45 }, 45 },
46 showMessageBadgeWhenMuted: {
47 id: 'settings.app.form.showMessagesBadgesWhenMuted',
48 defaultMessage: '!!!Show unread message badge when notifications are disabled',
49 },
50 enableSpellchecking: {
51 id: 'settings.app.form.enableSpellchecking',
52 defaultMessage: '!!!Enable spell checking',
53 },
54 spellcheckingLanguage: {
55 id: 'settings.app.form.spellcheckingLanguage',
56 defaultMessage: '!!!Language for spell checking',
57 },
58 // spellcheckingAutomaticDetection: {
59 // id: 'settings.app.form.spellcheckingAutomaticDetection',
60 // defaultMessage: '!!!Detect language automatically',
61 // },
46 beta: { 62 beta: {
47 id: 'settings.app.form.beta', 63 id: 'settings.app.form.beta',
48 defaultMessage: '!!!Include beta versions', 64 defaultMessage: '!!!Include beta versions',
@@ -73,6 +89,9 @@ export default class EditSettingsScreen extends Component {
73 enableSystemTray: settingsData.enableSystemTray, 89 enableSystemTray: settingsData.enableSystemTray,
74 minimizeToSystemTray: settingsData.minimizeToSystemTray, 90 minimizeToSystemTray: settingsData.minimizeToSystemTray,
75 showDisabledServices: settingsData.showDisabledServices, 91 showDisabledServices: settingsData.showDisabledServices,
92 showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted,
93 enableSpellchecking: settingsData.enableSpellchecking,
94 // spellcheckingLanguage: settingsData.spellcheckingLanguage,
76 locale: settingsData.locale, 95 locale: settingsData.locale,
77 beta: settingsData.beta, 96 beta: settingsData.beta,
78 }, 97 },
@@ -89,14 +108,25 @@ export default class EditSettingsScreen extends Component {
89 const { app, settings, user } = this.props.stores; 108 const { app, settings, user } = this.props.stores;
90 const { intl } = this.context; 109 const { intl } = this.context;
91 110
92 const options = []; 111 const locales = [];
93 Object.keys(languages).forEach((key) => { 112 Object.keys(APP_LOCALES).forEach((key) => {
94 options.push({ 113 locales.push({
95 value: key, 114 value: key,
96 label: languages[key], 115 label: APP_LOCALES[key],
97 }); 116 });
98 }); 117 });
99 118
119 // const spellcheckerLocales = [{
120 // value: 'auto',
121 // label: intl.formatMessage(messages.spellcheckingAutomaticDetection),
122 // }];
123 // Object.keys(SPELLCHECKER_LOCALES).forEach((key) => {
124 // spellcheckerLocales.push({
125 // value: key,
126 // label: SPELLCHECKER_LOCALES[key],
127 // });
128 // });
129
100 const config = { 130 const config = {
101 fields: { 131 fields: {
102 autoLaunchOnStart: { 132 autoLaunchOnStart: {
@@ -129,10 +159,26 @@ export default class EditSettingsScreen extends Component {
129 value: settings.all.showDisabledServices, 159 value: settings.all.showDisabledServices,
130 default: DEFAULT_APP_SETTINGS.showDisabledServices, 160 default: DEFAULT_APP_SETTINGS.showDisabledServices,
131 }, 161 },
162 showMessageBadgeWhenMuted: {
163 label: intl.formatMessage(messages.showMessageBadgeWhenMuted),
164 value: settings.all.showMessageBadgeWhenMuted,
165 default: DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted,
166 },
167 enableSpellchecking: {
168 label: intl.formatMessage(messages.enableSpellchecking),
169 value: settings.all.enableSpellchecking,
170 default: DEFAULT_APP_SETTINGS.enableSpellchecking,
171 },
172 // spellcheckingLanguage: {
173 // label: intl.formatMessage(messages.spellcheckingLanguage),
174 // value: settings.all.spellcheckingLanguage,
175 // options: spellcheckerLocales,
176 // default: DEFAULT_APP_SETTINGS.spellcheckingLanguage,
177 // },
132 locale: { 178 locale: {
133 label: intl.formatMessage(messages.language), 179 label: intl.formatMessage(messages.language),
134 value: app.locale, 180 value: app.locale,
135 options, 181 options: locales,
136 default: DEFAULT_APP_SETTINGS.locale, 182 default: DEFAULT_APP_SETTINGS.locale,
137 }, 183 },
138 beta: { 184 beta: {
diff --git a/src/electron/deepLinking.js b/src/electron/deepLinking.js
new file mode 100644
index 000000000..ef23fd3c5
--- /dev/null
+++ b/src/electron/deepLinking.js
@@ -0,0 +1,7 @@
1export default function handleDeepLink(window, rawUrl) {
2 const url = rawUrl.replace('franz://', '');
3
4 if (!url) return;
5
6 window.webContents.send('navigateFromDeepLink', { url });
7}
diff --git a/src/helpers/async-helpers.js b/src/helpers/async-helpers.js
new file mode 100644
index 000000000..2ef01ee09
--- /dev/null
+++ b/src/helpers/async-helpers.js
@@ -0,0 +1,5 @@
1/* eslint-disable import/prefer-default-export */
2
3export function sleep(ms = 0) {
4 return new Promise(r => setTimeout(r, ms));
5}
diff --git a/src/helpers/webview-ime-focus-helpers.js b/src/helpers/webview-ime-focus-helpers.js
deleted file mode 100644
index 2593a5f26..000000000
--- a/src/helpers/webview-ime-focus-helpers.js
+++ /dev/null
@@ -1,38 +0,0 @@
1module.exports.releaseDocumentFocus = () => {
2 const element = document.createElement('span');
3 document.body.appendChild(element);
4
5 const range = document.createRange();
6 range.setStart(element, 0);
7
8 const selection = window.getSelection();
9 selection.removeAllRanges();
10 selection.addRange(range);
11 selection.removeAllRanges();
12
13 document.body.removeChild(element);
14};
15
16module.exports.claimDocumentFocus = () => {
17 const { activeElement } = document;
18 const selection = window.getSelection();
19
20 let selectionStart;
21 let selectionEnd;
22 let range;
23
24 if (activeElement) ({ selectionStart, selectionEnd } = activeElement);
25 if (selection.rangeCount) range = selection.getRangeAt(0);
26
27 const restoreOriginalSelection = () => {
28 if (selectionStart >= 0 && selectionEnd >= 0) {
29 activeElement.selectionStart = selectionStart;
30 activeElement.selectionEnd = selectionEnd;
31 } else if (range) {
32 selection.addRange(range);
33 }
34 };
35
36 exports.releaseDocumentFocus();
37 window.requestAnimationFrame(restoreOriginalSelection);
38};
diff --git a/src/i18n/languages.js b/src/i18n/languages.js
index 72d7b26c1..f32c345af 100644
--- a/src/i18n/languages.js
+++ b/src/i18n/languages.js
@@ -1,17 +1,66 @@
1module.exports = { 1export const APP_LOCALES = {
2 'en-US': 'English', 2 'en-US': 'English',
3 'pt-BR': 'Portuguese (Brazil)', 3 ca: 'Catalan',
4 'el-GR': 'Ελληνικά (Greece)', 4 'zh-HANT': 'Chinese (Traditional)',
5 nl: 'Nederlands', 5 cs: 'Czech',
6 'nl-BE': 'Vlaams', 6 nl: 'Dutch',
7 de: 'Deutsch', 7 es: 'Spanish',
8 fr: 'French', 8 fr: 'French',
9 ka: 'Georgian',
10 de: 'German',
11 hu: 'Hungarian',
12 id: 'Indonesian',
13 ga: 'Irish',
14 it: 'Italian',
9 ja: 'Japanese', 15 ja: 'Japanese',
10 pl: 'Polish', 16 pl: 'Polish',
11 ru: 'Русский', 17 pt: 'Portuguese',
12 ua: 'Українська', 18 'pt-BR': 'Portuguese (Brazil)',
13 it: 'Italian', 19 ru: 'Russian',
14 'es-ES': 'Español - España', 20 sk: 'Slovak',
15 'zh-Hant': 'Chinese (Traditional)', 21 uk: 'Ukrainian',
16 'nb-NO': 'Norsk', 22 'nl-BE': 'Vlaams',
17}; 23};
24
25export default APP_LOCALES;
26
27// export const SPELLCHECKER_LOCALES = {
28// af: 'Afrikaans',
29// sq: 'Albanian',
30// ar: 'Arabic',
31// bg: 'Bulgarian',
32// zh: 'Chinese',
33// hr: 'Croatian',
34// cs: 'Czech',
35// da: 'Danish',
36// nl: 'Dutch',
37// en: 'English',
38// 'en-AU': 'English (AU)',
39// 'en-CA': 'English (CA)',
40// 'en-GB': 'English (GB)',
41// fi: 'Finnish',
42// fr: 'French',
43// ka: 'Georgian',
44// de: 'German',
45// el: 'Greek, Modern',
46// hi: 'Hindi',
47// hu: 'Hungarian',
48// id: 'Indonesian',
49// it: 'Italian',
50// ja: 'Japanese',
51// jv: 'Javanese',
52// ko: 'Korean',
53// lt: 'Lithuanian',
54// lv: 'Latvian',
55// ms: 'Malay',
56// no: 'Norwegian',
57// pl: 'Polish',
58// pt: 'Portuguese',
59// ro: 'Romanian, Moldavian, Moldovan',
60// ru: 'Russian',
61// sk: 'Slovak',
62// es: 'Spanish',
63// sv: 'Swedish',
64// uk: 'Ukrainian',
65// vi: 'Vietnamese',
66// };
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json
new file mode 100644
index 000000000..6019d8023
--- /dev/null
+++ b/src/i18n/locales/ca.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "No es pot connectar amb els serveis en línia de Franz",
3 "global.notConnectedToTheInternet" : "No esteu connectat a Internet.",
4 "import.headline" : "Importa els teus serveis Franz 4",
5 "import.notSupportedHeadline" : "Serveis que encara no s'admeten a Franz 5",
6 "import.skip.label" : "Vull afegir serveis manualment",
7 "import.submit.label" : "Importar serveis",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Reinicia i instal·la l'actualització",
10 "infobar.buttonReloadServices" : "Recarrega serveis",
11 "infobar.requiredRequestsFailed" : "No s'han pogut carregar els serveis i la informació de l'usuari",
12 "infobar.servicesUpdated" : "Els vostres serveis s'han actualitzat.",
13 "infobar.updateAvailable" : "Hi ha disponible una nova actualització per a Franz.",
14 "invite.email.label" : "Correu electrònic",
15 "invite.headline.friends" : "Convida 3 dels teus amics o companys",
16 "invite.name.label" : "Nom",
17 "invite.skip.label" : "Vull fer-ho més tard",
18 "invite.submit.label" : "Enviar invitacions",
19 "login.email.label" : "Correu electrònic",
20 "login.headline" : "Accedir",
21 "login.invalidCredentials" : "El correu electrònic o la contrasenya no són vàlids",
22 "login.link.password" : "Restablir contrasenya",
23 "login.link.signup" : "Crea un compte gratuït",
24 "login.password.label" : "Contrasenya",
25 "login.serverLogout" : "La teva sessió ha caducat, torna a iniciar la sessió.",
26 "login.submit.label" : "Accedir",
27 "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.",
28 "password.email.label" : "Correu electrònic",
29 "password.headline" : "Restablir contrasenya",
30 "password.link.login" : "Inicia la sessió al teu compte",
31 "password.link.signup" : "Crea un compte gratuït",
32 "password.noUser" : "No s'ha trobat cap usuari amb aquesta adreça de correu electrònic",
33 "password.submit.label" : "Enviar",
34 "password.successInfo" : "Comproveu el vostre correu electrònic",
35 "pricing.headline" : "Donar suport a Franz",
36 "pricing.link.skipPayment" : "No vull donar suport al desenvolupament de Franz.",
37 "pricing.submit.label" : "Vull donar suport al desenvolupament de Franz",
38 "pricing.support.label" : "Seleccioneu el vostre pla de suport",
39 "service.crashHandler.action" : "Recarrega {name}",
40 "service.crashHandler.autoReload" : "Intentant restablir automàticament {name} en {seconds} segons",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} ha causat un error.",
43 "service.disabledHandler.action" : "Activar {name}",
44 "service.disabledHandler.headline" : "{name} està desactivat",
45 "services.getStarted" : "Introducció",
46 "services.welcome" : "Benvingut a Franz",
47 "settings.account.account.editButton" : "Editar Compte",
48 "settings.account.accountType.basic" : "Compte bàsic",
49 "settings.account.accountType.premium" : "Compte de Suport Premium",
50 "settings.account.buttonSave" : "Actualitzar el perfil",
51 "settings.account.headline" : "Compte",
52 "settings.account.headlineAccount" : "Informació del compte",
53 "settings.account.headlineInvoices" : "Factures",
54 "settings.account.headlinePassword" : "Canvia la contrasenya",
55 "settings.account.headlineProfile" : "Actualitza el perfil",
56 "settings.account.headlineSubscription" : "La vostra subscripció",
57 "settings.account.headlineUpgrade" : "Actualitzeu el vostre compte i doneu suport a Franz",
58 "settings.account.invoiceDownload" : "Descarregar",
59 "settings.account.manageSubscription.label" : "Gestioneu la vostra subscripció",
60 "settings.account.mining.active" : "Ara realitzeu {hashes} càlculs per segon.",
61 "settings.account.mining.cancel" : "Cancel·la la mineria",
62 "settings.account.mining.moreInformation" : "Obenir més informació",
63 "settings.account.mining.thankyou" : "Gràcies per donar suport a Franz amb el vostre poder de processament.",
64 "settings.account.successInfo" : "S'han desat els canvis",
65 "settings.account.tryReloadUserInfoRequest" : "Torna a provar-ho",
66 "settings.account.userInfoRequestFailed" : "No s'ha pogut carregar la informació de l'usuari",
67 "settings.app.buttonInstallUpdate" : "Reinicia i instal·la l'actualització",
68 "settings.app.buttonSearchForUpdate" : "Comprova si hi ha actualitzacions",
69 "settings.app.currentVersion" : "Versió actual:",
70 "settings.app.form.autoLaunchInBackground" : "Obrir en segon plà",
71 "settings.app.form.autoLaunchOnStart" : "Iniciar Franz a l'inici",
72 "settings.app.form.beta" : "Inclou versions beta",
73 "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogràfica",
74 "settings.app.form.enableSystemTray" : "Mostra Franz a la safata del sistema",
75 "settings.app.form.language" : "Idioma",
76 "settings.app.form.minimizeToSystemTray" : "Minimitza Franz a la safata del sistema",
77 "settings.app.form.runInBackground" : "Mantén a Franz en segon pla en tancar la finestra",
78 "settings.app.form.showDisabledServices" : "Mostra les pestanyes dels serveis desactivats",
79 "settings.app.headline" : "Configuració",
80 "settings.app.headlineAdvanced" : "Avançat",
81 "settings.app.headlineAppearance" : "Aparença",
82 "settings.app.headlineGeneral" : "General",
83 "settings.app.headlineLanguage" : "Idioma",
84 "settings.app.headlineUpdates" : "Actualitzacions",
85 "settings.app.restartRequired" : "Els canvis requereixen reiniciar",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Actualització disponible, descarregant ...",
88 "settings.app.updateStatusSearching" : "Està buscant actualitzacions",
89 "settings.app.updateStatusUpToDate" : "Esteu utilitzant la versió més recent de Franz",
90 "settings.navigation.account" : "Compte",
91 "settings.navigation.availableServices" : "Serveis disponibles",
92 "settings.navigation.logout" : "Sortir",
93 "settings.navigation.settings" : "Configuració",
94 "settings.navigation.yourServices" : "Els vostres serveis",
95 "settings.recipes.all" : "Tots els serveis",
96 "settings.recipes.dev" : "Desenvolupament",
97 "settings.recipes.headline" : "Serveis disponibles",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Els més populars",
100 "settings.recipes.nothingFound" : "Ho sentim, però cap servei coincideix amb el terme cercat.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "El servei s'ha afegit correctament",
102 "settings.service.error.goBack" : "Tornar als serveis",
103 "settings.service.error.headline" : "Error",
104 "settings.service.error.message" : "No s'ha pogut carregar la recepta del servei.",
105 "settings.service.form.addServiceHeadline" : "Afegir {name}",
106 "settings.service.form.availableServices" : "Serveis disponibles",
107 "settings.service.form.customUrl" : "Servidor personalitzat",
108 "settings.service.form.customUrlPremiumInfo" : "Per afegir serveis allotjats per vosaltres mateixos, necessiteu un Compte Franz Premium Supporter.",
109 "settings.service.form.customUrlUpgradeAccount" : "Actualitzeu el vostre compte",
110 "settings.service.form.customUrlValidationError" : "No s'ha pogut validar el servidor {name} personalitzat.",
111 "settings.service.form.deleteButton" : "Suprimeix el servei",
112 "settings.service.form.editServiceHeadline" : "Edita {name}",
113 "settings.service.form.enableAudio" : "Activa l'àudio",
114 "settings.service.form.enableNotification" : "Activa les notificacions",
115 "settings.service.form.enableService" : "Activa el servei",
116 "settings.service.form.indirectMessageInfo" : "Se't notificarà sobre tots els missatges nous en un canal, no només @usuari, @canal, @aquí ...",
117 "settings.service.form.indirectMessages" : "Mostra la insígnia de missatge per a tots els missatges nous",
118 "settings.service.form.isMutedInfo" : "Quan es desactiva, tots els sons de notificació i reproducció d'àudio es silenciaran",
119 "settings.service.form.name" : "Nom",
120 "settings.service.form.saveButton" : "Desa el servei",
121 "settings.service.form.tabHosted" : "Allotjat",
122 "settings.service.form.tabOnPremise" : "Allotjat per si mateix ⭐️",
123 "settings.service.form.team" : "Equip",
124 "settings.service.form.yourServices" : "Els vostres serveis",
125 "settings.services.deletedInfo" : "S'ha eliminat el servei",
126 "settings.services.discoverServices" : "Descobrir serveis",
127 "settings.services.headline" : "Els vostres serveis",
128 "settings.services.noServicesAdded" : "Encara no heu afegit cap servei.",
129 "settings.services.tooltip.isDisabled" : "El servei està desactivat",
130 "settings.services.tooltip.isMuted" : "Tots els sons estan desactivats",
131 "settings.services.tooltip.notificationsDisabled" : "Les notificacions estan desactivades",
132 "settings.services.updatedInfo" : "S'han desat els canvis",
133 "settings.user.form.accountType.company" : "Empresa",
134 "settings.user.form.accountType.individual" : "Individual",
135 "settings.user.form.accountType.label" : "Tipus de compte",
136 "settings.user.form.accountType.non-profit" : "Sense ànim de lucre",
137 "settings.user.form.currentPassword" : "Contrasenya actual",
138 "settings.user.form.email" : "Correu electrònic",
139 "settings.user.form.firstname" : "Nom",
140 "settings.user.form.lastname" : "Cognoms",
141 "settings.user.form.newPassword" : "Nova contrasenya",
142 "sidebar.addNewService" : "Afegeix nou servei",
143 "sidebar.mute" : "Desactiva l'àudio",
144 "sidebar.settings" : "Configuració",
145 "sidebar.unmute" : "Activa l'àudio",
146 "signup.company.label" : "Empresa",
147 "signup.email.label" : "Correu electrònic",
148 "signup.emailDuplicate" : "Ja existeix un usuari amb aquesta adreça de correu electrònic",
149 "signup.firstname.label" : "Nom",
150 "signup.headline" : "Donar-se d'alta",
151 "signup.lastname.label" : "Cognoms",
152 "signup.legal.info" : "En crear un compte de Franz, accepteu",
153 "signup.legal.privacy" : "Declaració de privacitat",
154 "signup.legal.terms" : "Termes del Servei",
155 "signup.link.login" : "Ja teniu un compte, iniciar la sessió?",
156 "signup.password.label" : "Contrasenya",
157 "signup.submit.label" : "Crea un compte",
158 "subscription.euTaxInfo" : "Residents d'EU: es poden aplicar impostos locals",
159 "subscription.features.ads" : "Sense anuncis, mai!",
160 "subscription.features.comingSoon" : "properament",
161 "subscription.features.customServices" : "Serveis privats per a vostè i el seu equip",
162 "subscription.features.encryptedSync" : "Sincronització de sessió xifrada",
163 "subscription.features.onpremise" : "Afegiu serveis en premissa\/allotjats com HipChat",
164 "subscription.features.vpn" : "Compatibilitat amb proxy i VPN",
165 "subscription.includedFeatures" : "El compte de pagament Franz Premium Supporter inclou",
166 "subscription.mining.experimental" : "experimental",
167 "subscription.mining.headline" : "Com funciona?",
168 "subscription.mining.line1" : "Activant el \"Suport amb poder de processament\", Franz utilitzarà entre un 20-50% de la teva CPU de la mineria de la criptomoneda Monero que equival aproximadament a 5$\/l'any.",
169 "subscription.mining.line2" : "Adaptarem l'ús de la CPU basant-nos en els teus habits de treball per no consumir la teva bateria ni relentir el teu ordinador.",
170 "subscription.mining.line3" : "Durant el periode que mantinguis la mineria activa, tindrás accés ilimitat a totes les carectarístiques ilimitades de Franz Premium Supporter.",
171 "subscription.mining.moreInformation" : "Obtenir més informació sobre aquest pla.",
172 "subscription.paymentSessionError" : "No s'ha pogut inicialitzar el formulari de pagament",
173 "subscription.submit.label" : "Vull donar suport al desenvolupament de Franz",
174 "subscription.type.free" : "gratuït",
175 "subscription.type.mining" : "Donar suport a Franz amb el poder de processament",
176 "subscription.type.month" : "mes",
177 "subscription.type.year" : "any",
178 "subscriptionPopup.buttonCancel" : "Cancel·la",
179 "subscriptionPopup.buttonDone" : "Fet",
180 "tabs.item.deleteService" : "Suprimeix el servei",
181 "tabs.item.disableAudio" : "Desactiva l'àudio",
182 "tabs.item.disableNotifications" : "Desactiva les notificacions",
183 "tabs.item.disableService" : "Desactiva el servei",
184 "tabs.item.edit" : "Edita",
185 "tabs.item.enableAudio" : "Activa l'àudio",
186 "tabs.item.enableNotification" : "Activa les notificacions",
187 "tabs.item.enableService" : "Activa el servei",
188 "tabs.item.reload" : "Recarrega",
189 "welcome.loginButton" : "Inicia sessió al teu compte",
190 "welcome.signupButton" : "Crea un compte gratuït",
191 "welcome.slogan" : "Crea un compte gratuït"
192}
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json
new file mode 100644
index 000000000..122fc9b53
--- /dev/null
+++ b/src/i18n/locales/cs.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Nemůžeme Franz připojit k online službám",
3 "global.notConnectedToTheInternet" : "Nejste připojen k internetu.",
4 "import.headline" : "Importovat služby z Franz 4",
5 "import.notSupportedHeadline" : "Služby nejsou podporovány v verzi Franz 5",
6 "import.skip.label" : "Chci přidat služby manuálně",
7 "import.submit.label" : "Importovat služby",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Restartovat a instalovat aktualizaci",
10 "infobar.buttonReloadServices" : "Obnovit služby",
11 "infobar.requiredRequestsFailed" : "Není možné nahrát služby a informace o uživateli",
12 "infobar.servicesUpdated" : "Vaše služby byly aktualizovány",
13 "infobar.updateAvailable" : "Nová aktualizace Franz je k dispozici",
14 "invite.email.label" : "E-mailová adresa",
15 "invite.headline.friends" : "Pozvěte 3 přátele nebo kolegy",
16 "invite.name.label" : "Jméno",
17 "invite.skip.label" : "Udělám to později",
18 "invite.submit.label" : "Poslat pozvánky",
19 "login.email.label" : "E-mailová adresa",
20 "login.headline" : "Přihlásit se",
21 "login.invalidCredentials" : "E-mail nebo heslo nesouhlasí",
22 "login.link.password" : "Obnovit heslo",
23 "login.link.signup" : "Vytvořit uživatelský účet zdarma",
24 "login.password.label" : "Heslo",
25 "login.serverLogout" : "Sezení vypršelo, prosím přihlaste se znovu.",
26 "login.submit.label" : "Přihlásit se",
27 "login.tokenExpired" : "Sezení vypršelo, prosím přihlaste se znovu",
28 "password.email.label" : "E-mailová adresa",
29 "password.headline" : "Obnovit heslo",
30 "password.link.login" : "Přihlášení do vašeho účtu",
31 "password.link.signup" : "Vytvořit uživatelský účet zdarma",
32 "password.noUser" : "Uživatel s touto e-mailovou adresou nebyl nalezen",
33 "password.submit.label" : "Odeslat",
34 "password.successInfo" : "Prosím, zkontrolujte svůj e-mail",
35 "pricing.headline" : "Podpořte Franz",
36 "pricing.link.skipPayment" : "Nechci podpořit vývoj skvělé aplikace Franz.",
37 "pricing.submit.label" : "Chci podpořit vývoj aplikace Franz",
38 "pricing.support.label" : "Vyberte váš plán podpory",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Začněme",
46 "services.welcome" : "Vítejte v programu Franz",
47 "settings.account.account.editButton" : "Upravit účet",
48 "settings.account.accountType.basic" : "Základní účet",
49 "settings.account.accountType.premium" : "Prémiový účet podporovatele",
50 "settings.account.buttonSave" : "Aktualizovat profil",
51 "settings.account.headline" : "Účet",
52 "settings.account.headlineAccount" : "Informace o účtu",
53 "settings.account.headlineInvoices" : "Faktury",
54 "settings.account.headlinePassword" : "Změnit heslo",
55 "settings.account.headlineProfile" : "Aktualizovat profil",
56 "settings.account.headlineSubscription" : "Vaše předplatné",
57 "settings.account.headlineUpgrade" : "Aktualizujte svůj účet a podpořte Franz",
58 "settings.account.invoiceDownload" : "Stáhnout",
59 "settings.account.manageSubscription.label" : "Spravovat vaše předplatné",
60 "settings.account.mining.active" : "Právě nyní provádíte {hashes} výpočtů za sekundu.",
61 "settings.account.mining.cancel" : "Zrušit dolování",
62 "settings.account.mining.moreInformation" : "Získat další informace",
63 "settings.account.mining.thankyou" : "Děkujeme, že jste podpořili Franz vašim výpočetním výkonem.",
64 "settings.account.successInfo" : "Vaše změny byly uloženy",
65 "settings.account.tryReloadUserInfoRequest" : "Zkusit opět",
66 "settings.account.userInfoRequestFailed" : "Nelze načíst informace o uživateli.",
67 "settings.app.buttonInstallUpdate" : "Restartovat a nainstalovat aktualizace",
68 "settings.app.buttonSearchForUpdate" : "Zkontrolovat aktualizace",
69 "settings.app.currentVersion" : "Aktuální verze:",
70 "settings.app.form.autoLaunchInBackground" : "Spustit na pozadí",
71 "settings.app.form.autoLaunchOnStart" : "Spustit Franz při startu",
72 "settings.app.form.beta" : "Zahrnout beta verze",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Zobrazit Franz v systémové liště",
75 "settings.app.form.language" : "Jazyk",
76 "settings.app.form.minimizeToSystemTray" : "Minimalizovat Franz do systémové lišty",
77 "settings.app.form.runInBackground" : "Ponechat Franze v pozadí při zavírání okna",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Nastavení",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "Obecné",
83 "settings.app.headlineLanguage" : "Jazyk",
84 "settings.app.headlineUpdates" : "Aktualizace",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Aktualizace k dispozici, stahování...",
88 "settings.app.updateStatusSearching" : "Hledá aktualizace",
89 "settings.app.updateStatusUpToDate" : "Používáte nejnovější verzi programu Franz",
90 "settings.navigation.account" : "Účet",
91 "settings.navigation.availableServices" : "Dostupné služby",
92 "settings.navigation.logout" : "Odhlásit",
93 "settings.navigation.settings" : "Nastavení",
94 "settings.navigation.yourServices" : "Vaše služby",
95 "settings.recipes.all" : "Všechny služby",
96 "settings.recipes.dev" : "Vývoj",
97 "settings.recipes.headline" : "Dostupné služby",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Nejpopulárnější",
100 "settings.recipes.nothingFound" : "Je nám líto, ale žádná služba neodpovídá vašemu hledanému výrazu.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Služba byla úspěšně přidána",
102 "settings.service.error.goBack" : "Zpět na služby",
103 "settings.service.error.headline" : "Chyba",
104 "settings.service.error.message" : "Nelze načíst službu.",
105 "settings.service.form.addServiceHeadline" : "Přidat {name}",
106 "settings.service.form.availableServices" : "Dostupné služby",
107 "settings.service.form.customUrl" : "Vlastní server",
108 "settings.service.form.customUrlPremiumInfo" : "Chcete-li přidat vlastní hostované služby, potřebujete účet Franz Premium Supporter.",
109 "settings.service.form.customUrlUpgradeAccount" : "Aktualizujte svůj účet",
110 "settings.service.form.customUrlValidationError" : "Nepodařilo se ověřit vlastní server {name}.",
111 "settings.service.form.deleteButton" : "Odstranit službu",
112 "settings.service.form.editServiceHeadline" : "Upravit {name}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Povolit upozornění",
115 "settings.service.form.enableService" : "Povolit službu",
116 "settings.service.form.indirectMessageInfo" : "Budete informováni o všech nových zprávách v kanálu, nikoliv pouze @název, @kanál, @kde, ...",
117 "settings.service.form.indirectMessages" : "Zobrazovat znak zprávy pro všechny nové zprávy",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Jméno",
120 "settings.service.form.saveButton" : "Uložit službu",
121 "settings.service.form.tabHosted" : "Hostováno",
122 "settings.service.form.tabOnPremise" : "Samostatně hostované ⭐️",
123 "settings.service.form.team" : "Tým",
124 "settings.service.form.yourServices" : "Vaše služby",
125 "settings.services.deletedInfo" : "Služba byla odstraněna",
126 "settings.services.discoverServices" : "Objevte služby",
127 "settings.services.headline" : "Vaše služby",
128 "settings.services.noServicesAdded" : "Doposud jste nepřidali žádné služby.",
129 "settings.services.tooltip.isDisabled" : "Služba je zakázána",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "Oznámení jsou zakázána",
132 "settings.services.updatedInfo" : "Vaše změny byly uloženy",
133 "settings.user.form.accountType.company" : "Společnost",
134 "settings.user.form.accountType.individual" : "Jednotlivec",
135 "settings.user.form.accountType.label" : "Druh účtu",
136 "settings.user.form.accountType.non-profit" : "Nezisková organizace",
137 "settings.user.form.currentPassword" : "Aktuální heslo",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "Nové heslo",
142 "sidebar.addNewService" : "Přidat novou službu",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Nastavení",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Společnost",
147 "signup.email.label" : "Emailová adresa",
148 "signup.emailDuplicate" : "Uživatel s touto emailovou adresou již existuje",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Přihlásit se",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "Vytvořením účtu Franz souhlasíte s",
153 "signup.legal.privacy" : "Prohlášení o ochraně soukromí",
154 "signup.legal.terms" : "Podmínky služby",
155 "signup.link.login" : "Již máte účet, přihlásit se?",
156 "signup.password.label" : "Heslo",
157 "signup.submit.label" : "Vytvořit účet",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "Žádné reklamy, nikdy!",
160 "subscription.features.comingSoon" : "již brzy",
161 "subscription.features.customServices" : "Privátní služby pro vás a váš tým",
162 "subscription.features.encryptedSync" : "Šifrovaná synchronizace relací",
163 "subscription.features.onpremise" : "Přidat hostované služby jako HipChat",
164 "subscription.features.vpn" : "Proxy & VPN podpora",
165 "subscription.includedFeatures" : "Placený účet Premium Supporter Franz zahrnuje",
166 "subscription.mining.experimental" : "experimentální",
167 "subscription.mining.headline" : "Jak to funguje?",
168 "subscription.mining.line1" : "Povolením funkce \"Podpora se zpracováním výkonu\" použije Franz zhruba 20-50% vašeho procesoru, aby doloval kryptografickou měnu Monero, která se rovná přibližně 5 dolarům za rok.",
169 "subscription.mining.line2" : "Přizpůsobíme spotřebu CPU na základě vašeho pracovního chování, abychom nevyčerpali baterii a zpomalili vás a váš stroj.",
170 "subscription.mining.line3" : "Dokud je horník aktivní, budete mít neomezený přístup ke všem funkcím Franz Premium Supporter.",
171 "subscription.mining.moreInformation" : "Získejte více informací o tomto plánu.",
172 "subscription.paymentSessionError" : "Nebylo možné inicializovat platbu od",
173 "subscription.submit.label" : "Chci podpořit vývoj aplikace Franz",
174 "subscription.type.free" : "zdarma",
175 "subscription.type.mining" : "Podpořte Franz výpočetním výkonem",
176 "subscription.type.month" : "měsíc",
177 "subscription.type.year" : "rok",
178 "subscriptionPopup.buttonCancel" : "Zrušit",
179 "subscriptionPopup.buttonDone" : "Dokončit",
180 "tabs.item.deleteService" : "Odstranit službu",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Zakázat upozornění",
183 "tabs.item.disableService" : "Zakázat službu",
184 "tabs.item.edit" : "Upravit",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Povolit oznamování",
187 "tabs.item.enableService" : "Povolit službu",
188 "tabs.item.reload" : "Obnovit",
189 "welcome.loginButton" : "Přihlášení do vašeho účtu",
190 "welcome.signupButton" : "Vytvořit účet zdarma",
191 "welcome.slogan" : "Zprávy, které pracují pro vás"
192}
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index 80b66db08..cdfce9d55 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -1,168 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Verbindung mit dem Franz Online Service fehlgeschlagen.", 2 "global.api.unhealthy" : "Verbindung mit dem Franz Online Service fehlgeschlagen.",
3 "global.notConnectedToTheInternet": "Du bist nicht mit dem Internet verbunden.", 3 "global.notConnectedToTheInternet" : "Du bist nicht mit dem Internet verbunden.",
4 "welcome.signupButton": "Kostenloses Konto erstellen", 4 "import.headline" : "Importiere deine Franz 4 Dienste",
5 "welcome.loginButton": "Anmelden", 5 "import.notSupportedHeadline" : "Dienste, die noch nicht von Franz 5 unterstützt werden",
6 "welcome.slogan": "Kommunikation, die für Dich funktioniert", 6 "import.skip.label" : "Ich möchte meine Dienste manuell hinzufügen",
7 "login.headline": "Anmelden", 7 "import.submit.label" : "Dienste importieren",
8 "login.email.label": "E-Mail-Adresse", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Passwort", 9 "infobar.buttonInstallUpdate" : "Neustarten & Update installieren",
10 "login.submit.label": "Anmelden", 10 "infobar.buttonReloadServices" : "Dienste neu laden",
11 "login.invalidCredentials": "E-Mail-Adresse oder Passwort ungültig", 11 "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden",
12 "login.tokenExpired": "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.", 12 "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.",
13 "login.serverLogout": "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.", 13 "infobar.updateAvailable" : "Eine neue Version von Franz ist verfügbar.",
14 "login.link.signup": "Kostenloses Konto erstellen", 14 "invite.email.label" : "E-Mail Adresse",
15 "login.link.password": "Passwort zurücksetzen", 15 "invite.headline.friends" : "Lade 3 Freunde oder Kollegen ein",
16 "password.headline": "Passwort zurücksetzen", 16 "invite.name.label" : "Name",
17 "password.email.label": "E-Mail-Adresse", 17 "invite.skip.label" : "Ich möchte das später tun",
18 "password.submit.label": "Absenden", 18 "invite.submit.label" : "Einladungen senden",
19 "password.noUser": "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden", 19 "login.email.label" : "E-Mail Adresse",
20 "password.successInfo": "Bitte überprüfe Deine E-Mail-Adresse", 20 "login.headline" : "Anmelden",
21 "password.link.signup": "Kostenloses Konto erstellen", 21 "login.invalidCredentials" : "E-Mail Adresse oder Passwort ungültig",
22 "password.link.login": "Anmelden", 22 "login.link.password" : "Passwort zurücksetzen",
23 "signup.headline": "Registrierung", 23 "login.link.signup" : "Kostenloses Konto erstellen",
24 "signup.firstname.label": "Vorname", 24 "login.password.label" : "Passwort",
25 "signup.lastname.label": "Nachname", 25 "login.serverLogout" : "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.",
26 "signup.email.label": "E-Mail-Adresse", 26 "login.submit.label" : "Anmelden",
27 "signup.company.label": "Unternehmen", 27 "login.tokenExpired" : "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.",
28 "signup.password.label": "Passwort", 28 "password.email.label" : "E-Mail Adresse",
29 "signup.submit.label": "Konto erstellen", 29 "password.headline" : "Passwort zurücksetzen",
30 "signup.link.login": "Du hast bereits ein Konto? Melde Dich an.", 30 "password.link.login" : "Anmelden",
31 "signup.emailDuplicate": "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits.", 31 "password.link.signup" : "Kostenloses Konto erstellen",
32 "signup.legal.info": "Mit der Erstellung eines Franz Kontos, akzeptierst Du die", 32 "password.noUser" : "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.",
33 "signup.legal.terms": "Nutzungsbedingungen", 33 "password.submit.label" : "Absenden",
34 "signup.legal.privacy": "Datenschutzerklärung", 34 "password.successInfo" : "Wir haben dir ein E-Mail mit weiteren Anweisungen geschickt.",
35 "pricing.headline": "Unterstütze Franz", 35 "pricing.headline" : "Unterstütze Franz",
36 "pricing.support.label": "Wie möchtest Du Franz unterstützen?", 36 "pricing.link.skipPayment" : "Ich möchte die Entwicklung von Franz nicht unterstützen.",
37 "pricing.submit.label": "Ich möchte die Entwicklung von Franz unterstützen.", 37 "pricing.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen.",
38 "pricing.link.skipPayment": "Ich möchte die Entwicklung von Franz nicht unterstützen.", 38 "pricing.support.label" : "Wie möchtest du Franz unterstützen?",
39 "import.headline": "Importiere Deine Franz 4 Dienste", 39 "service.crashHandler.action" : "Neu laden",
40 "import.notSupportedHeadline": "Dienste, die noch nicht von Franz 5 unterstützt werden", 40 "service.crashHandler.autoReload" : "{name} wird automatisch wiederhergestellt in {seconds} sekunden",
41 "import.submit.label": "Dienste importieren", 41 "service.crashHandler.headline" : "Oh nein!",
42 "import.skip.label": "Ich möchte einen Dienst manuell hinzufügen", 42 "service.crashHandler.text" : "{name} hat einen Fehler verursacht.",
43 "invite.submit.label": "Einladungen senden", 43 "service.disabledHandler.action" : "{name} aktivieren",
44 "invite.headline.friends": "Lade 3 Deiner Freund oder Kollegen ein", 44 "service.disabledHandler.headline" : "{name} ist deaktiviert",
45 "invite.name.label": "Name", 45 "services.getStarted" : "Loslegen",
46 "invite.email.label": "E-Mail-Adresse", 46 "services.welcome" : "Willkommen bei Franz.",
47 "invite.skip.label": "Ich möchte das später tun", 47 "settings.account.account.editButton" : "Konto bearbeiten",
48 "subscription.submit.label": "Ich möchte die Entwicklung von Franz unterstützen", 48 "settings.account.accountType.basic" : "Basis Konto",
49 "subscription.paymentSessionError": "Das Zahlungs-Formular konnte nicht geladen werden.", 49 "settings.account.accountType.premium" : "Premium-Supporter Konto",
50 "subscription.includedFeatures": "Bezahlte Franz Premium Support Konten beinhalten", 50 "settings.account.buttonSave" : "Profil aktualisieren",
51 "subscription.features.onpremise": "Integration von gehosteten Diensten, wie HipChat", 51 "settings.account.headline" : "Konto",
52 "subscription.features.customServices": "Private Dienste für Dich und Dein Team", 52 "settings.account.headlineAccount" : "Konto Informationen",
53 "subscription.features.encryptedSync": "Verschlüsselte Sitzungs-Synchronisation", 53 "settings.account.headlineInvoices" : "Rechnungen",
54 "subscription.features.vpn": "Proxy & VPN Unterstützung", 54 "settings.account.headlinePassword" : "Passwort ändern",
55 "subscription.features.ads": "Nie mehr Werbung!", 55 "settings.account.headlineProfile" : "Profil aktualisieren",
56 "subscription.features.comingSoon": "folgt bald", 56 "settings.account.headlineSubscription" : "Dein Abonnement",
57 "infobar.servicesUpdated": "Deine Dienste wurden aktualisiert.", 57 "settings.account.headlineUpgrade" : "Upgrade dein Konto & unterstütze Franz",
58 "infobar.updateAvailable": "Eine neue Version von Franz ist verfügbar.", 58 "settings.account.invoiceDownload" : "Download",
59 "infobar.buttonReloadServices": "Dienste neuladen", 59 "settings.account.manageSubscription.label" : "Verwalte Dein Abonnement",
60 "infobar.buttonInstallUpdate": "Neustarten & Aktualisierung installieren", 60 "settings.account.mining.active" : "Du führst gerade {hashes} Berechnungen pro Sekunde aus.",
61 "infobar.requiredRequestsFailed": "Dienste und Benutzerinformationen konnten nicht geladen werden", 61 "settings.account.mining.cancel" : "Mining abbrechen",
62 "sidebar.settings": "Einstellungen", 62 "settings.account.mining.moreInformation" : "Weitere Informationen",
63 "sidebar.addNewService": "!!!Add new service", 63 "settings.account.mining.thankyou" : "Vielen Dank, dass du Franz mit deiner Rechenleistung unterstützt.",
64 "services.welcome": "Willkommen bei Franz", 64 "settings.account.successInfo" : "Deine Änderungen wurden gespeichert.",
65 "services.getStarted": "Loslegen", 65 "settings.account.tryReloadUserInfoRequest" : "Erneut versuchen",
66 "settings.account.headline": "Konto", 66 "settings.account.userInfoRequestFailed" : "Benutzerinformationen konnten nicht geladen werden",
67 "settings.account.headlineSubscription": "Dein Abonnement", 67 "settings.app.buttonInstallUpdate" : "Neustarten & Update installieren",
68 "settings.account.headlineUpgrade": "Erweitere Dein Konto & unterstütze Franz", 68 "settings.app.buttonSearchForUpdate" : "Nach Updates suchen",
69 "settings.account.headlineInvoices": "Rechnungen", 69 "settings.app.currentVersion" : "Aktuelle Version:",
70 "settings.account.manageSubscription.label": "Verwalte Dein Abonnement", 70 "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen",
71 "settings.account.accountType.basic": "Basis Konto", 71 "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen",
72 "settings.account.accountType.premium": "Premium-Supporter Konto", 72 "settings.app.form.beta" : "Beta-Versionen einbeziehen",
73 "settings.account.account.editButton": "Konto bearbeiten", 73 "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren",
74 "settings.account.invoiceDownload": "Herunterladen", 74 "settings.app.form.enableSystemTray" : "Franz in der Systemleiste anzeigen",
75 "settings.account.userInfoRequestFailed": "Benutzerinformationen konnten nicht geladen werden", 75 "settings.app.form.language" : "Sprache",
76 "settings.account.tryReloadUserInfoRequest": "Erneut versuchen", 76 "settings.app.form.minimizeToSystemTray" : "Franz in die Systemleiste minimieren",
77 "settings.account.headlineProfile": "Profil aktualisieren", 77 "settings.app.form.runInBackground" : "Franz im Hintergrund behalten, wenn das Fenster geschlossen wird",
78 "settings.account.headlineAccount": "Kontoinformationen", 78 "settings.app.form.showDisabledServices" : "Deaktivierte Services-Tabs anzeigen",
79 "settings.account.headlinePassword": "Passwort ändern", 79 "settings.app.headline" : "Einstellungen",
80 "settings.account.successInfo": "Deine Änderungen wurden gespeichert.", 80 "settings.app.headlineAdvanced" : "Erweitert",
81 "settings.account.buttonSave": "Profil aktualisieren", 81 "settings.app.headlineAppearance" : "Darstellung",
82 "settings.account.mining.thankyou": "Vielen Dank, dass Du Franz mit Deiner Rechenleistung unterstützt.", 82 "settings.app.headlineGeneral" : "Allgemein",
83 "settings.account.mining.active": "Du führst gerade {hashes} Berechnungen pro Sekunde aus.", 83 "settings.app.headlineLanguage" : "Sprache",
84 "settings.account.mining.moreInformation": "Weitere Informationen", 84 "settings.app.headlineUpdates" : "Updates",
85 "settings.account.mining.cancel": "Mining abbrechen", 85 "settings.app.restartRequired" : "Änderungen werden erst nach einem Neustart wirksam. ",
86 "settings.navigation.availableServices": "Verfügbare Dienste", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Deine Dienste", 87 "settings.app.updateStatusAvailable" : "Update verfügbar, herunterladen...",
88 "settings.navigation.account": "Konto", 88 "settings.app.updateStatusSearching" : "Suche nach Updates",
89 "settings.navigation.settings": "Einstellungen", 89 "settings.app.updateStatusUpToDate" : "Du nutzt die aktuellste Version von Franz",
90 "settings.navigation.logout": "Abmelden", 90 "settings.navigation.account" : "Konto",
91 "settings.recipes.headline": "Verfügbare Dienste", 91 "settings.navigation.availableServices" : "Verfügbare Dienste",
92 "settings.recipes.mostPopular": "Am beliebtesten", 92 "settings.navigation.logout" : "Abmelden",
93 "settings.recipes.all": "Alle Dienste", 93 "settings.navigation.settings" : "Einstellungen",
94 "settings.recipes.dev": "Entwicklung", 94 "settings.navigation.yourServices" : "Deine Dienste",
95 "settings.recipes.nothingFound": "Entschuldigung, aber kein Dienst entspricht Deiner Suchanfrage.", 95 "settings.recipes.all" : "Alle Dienste",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Dienst erfolgreich hinzugefügt", 96 "settings.recipes.dev" : "Entwicklung",
97 "settings.service.form.saveButton": "Dienst speichern", 97 "settings.recipes.headline" : "Verfügbare Dienste",
98 "settings.service.form.deleteButton": "Dienst entfernen", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Verfügbare Dienste", 99 "settings.recipes.mostPopular" : "Am beliebtesten",
100 "settings.service.form.yourServices": "Deine Dienste", 100 "settings.recipes.nothingFound" : "Entschuldigung, aber kein Dienst entspricht deiner Suchanfrage.",
101 "settings.service.form.addServiceHeadline": "{name} hinzufügen", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Dienst erfolgreich hinzugefügt",
102 "settings.service.form.editServiceHeadline": "{name} bearbeiten", 102 "settings.service.error.goBack" : "Zurück zu den Diensten",
103 "settings.service.form.tabHosted": "Gehostet", 103 "settings.service.error.headline" : "Fehler",
104 "settings.service.form.tabOnPremise": "Selbst gehostet ⭐️", 104 "settings.service.error.message" : "Das Dienst-Rezept konnte nicht geladen werden.",
105 "settings.service.form.customUrlValidationError": "Dein eigener {name} server konnte nicht verifiziert werden.", 105 "settings.service.form.addServiceHeadline" : "{name} hinzufügen",
106 "settings.service.form.customUrlPremiumInfo": "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst Du ein Franz Premium-Supporter Konto.", 106 "settings.service.form.availableServices" : "Verfügbare Dienste",
107 "settings.service.form.customUrlUpgradeAccount": "Erweitere Dein Konto", 107 "settings.service.form.customUrl" : "Eigener Server",
108 "settings.service.form.indirectMessageInfo": "Du wirst über alle neuen Nachrichten in einem Kanal informiert, nicht nur @username, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst du ein Franz Premium-Supporter Konto.",
109 "settings.service.error.headline": "Fehler", 109 "settings.service.form.customUrlUpgradeAccount" : "Upgrade dein Konto",
110 "settings.service.error.goBack": "Zurück zu den Diensten", 110 "settings.service.form.customUrlValidationError" : "Dein {name}-Server konnte nicht verifiziert werden.\",",
111 "settings.service.error.message": "Das Dienst-Rezept konnte nicht geladen werden.", 111 "settings.service.form.deleteButton" : "Dienst entfernen",
112 "settings.services.tooltip.isDisabled": "Dienst deaktiviert", 112 "settings.service.form.editServiceHeadline" : "{name} bearbeiten",
113 "settings.services.tooltip.notificationsDisabled": "Benachrichtigungen deaktiviert", 113 "settings.service.form.enableAudio" : "Audio aktivieren",
114 "settings.services.headline": "Deine Dienste", 114 "settings.service.form.enableNotification" : "Benachrichtigungen aktivieren",
115 "settings.services.noServicesAdded": "Du hast noch keine Dienste hinzugefügt.", 115 "settings.service.form.enableService" : "Dienst aktivieren",
116 "settings.services.discoverServices": "Dienste entdecken", 116 "settings.service.form.indirectMessageInfo" : "Du wirst über alle neuen Nachrichten in einem Kanal informiert, nicht nur @username, @channel, @here, ...",
117 "settings.services.updatedInfo": "Deine Änderungen wurden gespeichert.", 117 "settings.service.form.indirectMessages" : "Nachrichten-Badge für alle neuen Nachrichten anzeigen",
118 "settings.services.deletedInfo": "Dienst wurde entfernt", 118 "settings.service.form.isMutedInfo" : "Sämtliche Wiedergabe von Tönen wird deaktiviert",
119 "settings.app.headline": "Einstellungen", 119 "settings.service.form.name" : "Name",
120 "settings.app.headlineGeneral": "Allgemein", 120 "settings.service.form.saveButton" : "Dienst speichern",
121 "settings.app.headlineLanguage": "Sprache", 121 "settings.service.form.tabHosted" : "Gehostet",
122 "settings.app.headlineUpdates": "Aktualisierungen", 122 "settings.service.form.tabOnPremise" : "Selbst gehostet ⭐️",
123 "settings.app.buttonSearchForUpdate": "Auf Aktualisierungen prüfen", 123 "settings.service.form.team" : "Team",
124 "settings.app.buttonInstallUpdate": "Neustarten & Aktualisierung installieren", 124 "settings.service.form.yourServices" : "Deine Dienste",
125 "settings.app.updateStatusSearching": "Suche nach Aktualisierungen", 125 "settings.services.deletedInfo" : "Dienst wurde entfernt",
126 "settings.app.updateStatusAvailable": "Aktualisierung verfügbar, herunterladen...", 126 "settings.services.discoverServices" : "Dienste entdecken",
127 "settings.app.updateStatusUpToDate": "Du nutzt die aktuellste Version von Franz", 127 "settings.services.headline" : "Deine Dienste",
128 "settings.app.form.autoLaunchOnStart": "Franz beim Systemstart ausführen", 128 "settings.services.noServicesAdded" : "Du hast noch keine Dienste hinzugefügt.",
129 "settings.app.form.autoLaunchInBackground": "Im Hintergrund öffnen", 129 "settings.services.tooltip.isDisabled" : "Dienst deaktiviert",
130 "settings.app.form.minimizeToSystemTray": "Franz in die Systemleiste minimieren", 130 "settings.services.tooltip.isMuted" : "Audio ist deaktiviert",
131 "settings.app.form.runInBackground": "Franz im Hintergrund behalten, wenn das Fenster geschlossen wird", 131 "settings.services.tooltip.notificationsDisabled" : "Benachrichtigungen deaktiviert",
132 "settings.app.form.language": "Sprache", 132 "settings.services.updatedInfo" : "Deine Änderungen wurden gespeichert",
133 "settings.app.form.beta": "Beta-Versionen einbeziehen", 133 "settings.user.form.accountType.company" : "Unternehmen",
134 "settings.app.currentVersion": "Aktuelle Version:", 134 "settings.user.form.accountType.individual" : "Einzelperson",
135 "settings.service.form.name": "Name", 135 "settings.user.form.accountType.label" : "Konto-Typ",
136 "settings.service.form.enableService": "Dienst aktivieren", 136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.service.form.enableNotification": "Benachrichtigungen aktivieren", 137 "settings.user.form.currentPassword" : "Aktuelles Passwort",
138 "settings.service.form.team": "Team", 138 "settings.user.form.email" : "E-Mail",
139 "settings.service.form.customUrl": "Eigener Server", 139 "settings.user.form.firstname" : "Vorname",
140 "settings.service.form.indirectMessages": "Nachrichten-Badge für alle neuen Nachrichten anzeigen", 140 "settings.user.form.lastname" : "Nachname",
141 "settings.user.form.firstname": "Vorname", 141 "settings.user.form.newPassword" : "Neues Passwort",
142 "settings.user.form.lastname": "Nachname", 142 "sidebar.addNewService" : "!!!Add new service",
143 "settings.user.form.email": "E-Mail-Adresse", 143 "sidebar.mute" : "Audio deaktivieren",
144 "settings.user.form.currentPassword": "Aktuelles Passwort", 144 "sidebar.settings" : "Einstellungen",
145 "settings.user.form.newPassword": "Neues Passwort", 145 "sidebar.unmute" : "Audio aktivieren",
146 "settings.user.form.accountType.label": "Konto-Typ", 146 "signup.company.label" : "Unternehmen",
147 "settings.user.form.accountType.individual": "Einzelperson", 147 "signup.email.label" : "E-Mail Adresse",
148 "settings.user.form.accountType.non-profit": "Gemeinnützig", 148 "signup.emailDuplicate" : "Ein Benutzer mit dieser E-Mail Adresse existiert bereits.",
149 "settings.user.form.accountType.company": "Unternehmen", 149 "signup.firstname.label" : "Vorname",
150 "subscription.type.free": "kostenlos", 150 "signup.headline" : "Registrierung",
151 "subscription.type.month": "Monat", 151 "signup.lastname.label" : "Nachname",
152 "subscription.type.year": "Jahr", 152 "signup.legal.info" : "Mit der Erstellung eines Franz Kontos akzeptierst du die",
153 "subscription.type.mining": "Unterstütze Franz mit Rechenleistung", 153 "signup.legal.privacy" : "Datenschutzerklärung",
154 "subscription.mining.headline": "Wie funktioniert das?", 154 "signup.legal.terms" : "Nutzungsbedingungen",
155 "subscription.mining.experimental": "experimentell", 155 "signup.link.login" : "Du hast bereits ein Konto? Melde dich an.",
156 "subscription.mining.line1": "Durch das Aktivieren von \"Unterstützung mit Rechenleistung\", wird Franz circa 20-50% deines Prozessors nutzen, um die Crypto-Währung Monero zu minen, was ungefähr 5$/Jahr entspricht.", 156 "signup.password.label" : "Passwort",
157 "subscription.mining.line2": "Wir passen die Prozessor-Nutzung an Dein Arbeitsverhalten an, um Deinen Akku nicht unnötig zu belasten oder Dein System zu verlangsamen.", 157 "signup.submit.label" : "Konto erstellen",
158 "subscription.mining.line3": "So lange der Miner aktiv ist, hast Du unbegrenzten Zugang auf alle Franz Premium-Supporter Funktionen.", 158 "subscription.euTaxInfo" : "Preise sind exklusive Steuern. ",
159 "subscription.mining.moreInformation": "Erhalte mehr Informationen über diesen Plan.", 159 "subscription.features.ads" : "Nie mehr Werbung!",
160 "subscriptionPopup.buttonCancel": "Abbrechen", 160 "subscription.features.comingSoon" : "folgt bald",
161 "subscriptionPopup.buttonDone": "Fertig", 161 "subscription.features.customServices" : "Private Dienste für dich und dein Team",
162 "tabs.item.reload": "Neuladen", 162 "subscription.features.encryptedSync" : "Verschlüsselte Sitzungs-Synchronisation",
163 "tabs.item.edit": "Bearbeiten", 163 "subscription.features.onpremise" : "Integration von gehosteten Diensten, wie HipChat",
164 "tabs.item.disableNotifications": "Benachrichtigungen deaktivieren", 164 "subscription.features.vpn" : "Proxy & VPN Unterstützung",
165 "tabs.item.enableNotification": "Benachrichtigungen aktivieren", 165 "subscription.includedFeatures" : "Bezahlte Franz Premium Support Konten beinhalten",
166 "tabs.item.disableService": "Dienst deaktivieren", 166 "subscription.mining.experimental" : "experimentell",
167 "tabs.item.deleteService": "Dienst entfernen" 167 "subscription.mining.headline" : "Wie funktioniert das?",
168 "subscription.mining.line1" : "Durch das Aktivieren von \"Unterstützung mit Rechenleistung\", wird Franz circa 20-50% deines Prozessors nutzen, um die Crypto-Währung Monero zu minen, was ungefähr 5$\/Jahr entspricht.",
169 "subscription.mining.line2" : "Wir passen die Prozessor-Nutzung an dein Arbeitsverhalten an, um deinen Akku nicht unnötig zu belasten oder dein System zu verlangsamen.",
170 "subscription.mining.line3" : "So lange der Miner aktiv ist, hast du unbegrenzten Zugang auf alle Franz Premium-Supporter Funktionen.",
171 "subscription.mining.moreInformation" : "Erhalte mehr Informationen über diesen Plan.",
172 "subscription.paymentSessionError" : "Das Zahlungs-Formular konnte nicht geladen werden.",
173 "subscription.submit.label" : "Ich möchte die Entwicklung von Franz unterstützen",
174 "subscription.type.free" : "kostenlos",
175 "subscription.type.mining" : "Unterstütze Franz mit Rechenleistung",
176 "subscription.type.month" : "Monat",
177 "subscription.type.year" : "Jahr",
178 "subscriptionPopup.buttonCancel" : "Abbrechen",
179 "subscriptionPopup.buttonDone" : "Fertig",
180 "tabs.item.deleteService" : "Dienst entfernen",
181 "tabs.item.disableAudio" : "Audio deaktivieren",
182 "tabs.item.disableNotifications" : "Benachrichtigungen deaktivieren",
183 "tabs.item.disableService" : "Dienst deaktivieren",
184 "tabs.item.edit" : "Bearbeiten",
185 "tabs.item.enableAudio" : "Audio aktivieren",
186 "tabs.item.enableNotification" : "Benachrichtigungen aktivieren",
187 "tabs.item.enableService" : "Dienst aktivieren",
188 "tabs.item.reload" : "Neu laden",
189 "welcome.loginButton" : "Anmelden",
190 "welcome.signupButton" : "Kostenloses Konto erstellen",
191 "welcome.slogan" : "Kommunikation, die für Dich funktioniert"
168} 192}
diff --git a/src/i18n/locales/el-GR.json b/src/i18n/locales/el-GR.json
deleted file mode 100644
index 3710bc9a2..000000000
--- a/src/i18n/locales/el-GR.json
+++ /dev/null
@@ -1,169 +0,0 @@
1{
2 "global.api.unhealthy": "Δεν είναι δυνατή η σύνδεση με τις online υπηρεσίες του Franz",
3 "global.notConnectedToTheInternet": "Δεν είστε συνδεδεμένοι στο διαδίκτυο.",
4 "welcome.signupButton": "Δημιουργία δωρεάν λογαριασμού",
5 "welcome.loginButton": "Σύνδεση στο λογαριασμό σας",
6 "welcome.slogan": "Μηνύματα που λειτουργούν για εσάς",
7 "login.headline": "Σύνδεση",
8 "login.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
9 "login.password.label": "Κωδικός πρόσβασης",
10 "login.submit.label": "Σύνδεση",
11 "login.invalidCredentials": "Το email ή ο κωδικός πρόσβασης δεν είναι έγκυρος",
12 "login.tokenExpired": "Η συνεδρία σας έληξε, συνδεθείτε ξανά.",
13 "login.serverLogout": "Η συνεδρία σας έληξε, συνδεθείτε ξανά.",
14 "login.link.signup": "Δημιουργία δωρεάν λογαριασμού",
15 "login.link.password": "Επαναφορά κωδικού πρόσβασης",
16 "password.headline": "Επαναφορά κωδικού πρόσβασης",
17 "password.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
18 "password.submit.label": "Υποβολή",
19 "password.noUser": "Δεν βρέθηκε χρήστης με τη συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου",
20 "password.successInfo": "Ελέγξτε το email σας",
21 "password.link.signup": "Δημιουργία δωρεάν λογαριασμού",
22 "password.link.login": "Σύνδεση στο λογαριασμό σας",
23 "signup.headline": "Εγγραφή",
24 "signup.firstname.label": "Όνομα",
25 "signup.lastname.label": "Επίθετο",
26 "signup.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
27 "signup.company.label": "Εταιρεία",
28 "signup.password.label": "Κωδικός πρόσβασης",
29 "signup.submit.label": "Δημιουργία λογαριασμού",
30 "signup.link.login": "Έχετε ήδη λογαριασμό, συνδεθείτε ?",
31 "signup.emailDuplicate": "Ένας χρήστης με τη συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου υπάρχει ήδη",
32 "signup.legal.info": "Δημιουργώντας έναν λογαριασμό Franz αποδέχεστε τους",
33 "signup.legal.terms": "Όροι υπηρεσίας",
34 "signup.legal.privacy": "Δήλωση απορρήτου",
35 "pricing.headline": "Υποστήριξη Franz",
36 "pricing.support.label": "Επιλέξτε το πακέτο υποστήριξης",
37 "pricing.submit.label": "Θέλω να βοηθήσω στήν ανάπτυξη του Franz",
38 "pricing.link.skipPayment": "Δεν θέλω να βοηθήσω στήν ανάπτυξη του Franz.",
39 "import.headline": "Εισαγάγετε τις Franz 4 υπηρεσίες σας",
40 "import.notSupportedHeadline": "Υπηρεσίες που δεν υποστηρίζονται ακόμα στο Franz 5",
41 "import.submit.label": "Υπηρεσίες εισαγωγής",
42 "import.skip.label": "Θέλω να προσθέσω υπηρεσίες χειροκίνητα",
43 "invite.submit.label": "Αποστολή προσκλήσεων",
44 "invite.headline.friends": "Προσκαλέστε 3 από τους φίλους ή τους συναδέλφους σας",
45 "invite.name.label": "Όνομα",
46 "invite.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
47 "invite.skip.label": "Θέλω να το κάνω αργότερα",
48 "subscription.submit.label": "Θέλω να βοηθήσω στήν ανάπτυξη του Franz",
49 "subscription.paymentSessionError": "Δεν ήταν δυνατή η προετοιμασία της φόρμας πληρωμής",
50 "subscription.includedFeatures": "Ο Premium λογαριασμός υποστήριξης Franz περιλαμβάνει",
51 "subscription.features.onpremise": "Add on-premise / hosted services όπως το HipChat",
52 "subscription.features.customServices": "Ιδιωτικές υπηρεσίες για εσάς και την ομάδα σας",
53 "subscription.features.encryptedSync": "Κρυπτογραφημένος συγχρονισμός περιόδου σύνδεσης",
54 "subscription.features.vpn": "Υποστήριξη μεσολαβητή (Proxy) και VPN",
55 "subscription.features.ads": "Τέλος στις διαφημίσεις, :-D",
56 "subscription.features.comingSoon": "σύντομα",
57 "infobar.servicesUpdated": "Οι υπηρεσίες σας έχουν ενημερωθεί.",
58 "infobar.updateAvailable": "Υπάρχει διαθέσιμη μια νέα ενημέρωση για τον Franz.",
59 "infobar.buttonReloadServices": "Υπηρεσίες ανανέωσης",
60 "infobar.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημερώσεων",
61 "infobar.requiredRequestsFailed": "Δεν ήταν δυνατή η φόρτωση υπηρεσιών και πληροφοριών χρηστών",
62 "sidebar.settings": "Ρυθμίσεις",
63 "sidebar.addNewService": "!!!Add new service",
64 "services.welcome": "Καλώς ορίσατε στον Franz",
65 "services.getStarted": "Ξεκινήστε",
66 "settings.account.headline": "Λογαριασμός",
67 "settings.account.headlineSubscription": "Η συνδρομή σας",
68 "settings.account.headlineUpgrade": "Αναβάθμιση του λογαριασμού σας και υποστήριξη Franz",
69 "settings.account.headlineInvoices": "Τιμολόγια",
70 "settings.account.manageSubscription.label": "Διαχείριση της συνδρομής σας",
71 "settings.account.accountType.basic": "Βασικός λογαριασμός",
72 "settings.account.accountType.premium": "Υποστηριζόμενος λογαριασμός Premium",
73 "settings.account.account.editButton": "Επεξεργασία λογαριασμού",
74 "settings.account.invoiceDownload": "Λήψη",
75 "settings.account.userInfoRequestFailed": "Δεν ήταν δυνατή η φόρτωση πληροφοριών χρήστη",
76 "settings.account.tryReloadUserInfoRequest": "Δοκιμάστε ξανά",
77 "settings.account.headlineProfile": "Ενημέρωση προφίλ",
78 "settings.account.headlineAccount": "Πληροφορίες λογαριασμού",
79 "settings.account.headlinePassword": "Αλλαγή κωδικού πρόσβασης",
80 "settings.account.successInfo": "Οι αλλαγές σας έχουν αποθηκευτεί",
81 "settings.account.buttonSave": "Ενημέρωση προφίλ",
82 "settings.account.mining.thankyou": "Σας ευχαριστούμε για την υποστήριξη του Franz με την ισχύ επεξεργασίας σας",
83 "settings.account.mining.active": "Τώρα πραγματοποιείτε υπολογισμούς {hashes} ανά δευτερόλεπτο.",
84 "settings.account.mining.moreInformation": "Λάβετε περισσότερες πληροφορίες",
85 "settings.account.mining.cancel": "Άκυρο εξόρυξη",
86 "settings.navigation.availableServices": "Διαθέσιμες υπηρεσίες",
87 "settings.navigation.yourServices": "Οι υπηρεσίες σας",
88 "settings.navigation.account": "Λογαριασμός",
89 "settings.navigation.settings": "Ρυθμίσεις",
90 "settings.navigation.logout": "Αποσύνδεση",
91 "settings.recipes.headline": "Διαθέσιμες υπηρεσίες",
92 "settings.recipes.mostPopular": "Τα πιο δημοφιλή",
93 "settings.recipes.all": "Όλες οι υπηρεσίες",
94 "settings.recipes.dev": "Ανάπτυξη",
95 "settings.recipes.nothingFound": "Λυπούμαστε αλλά καμία υπηρεσία δεν ταιριάζει με τον όρο αναζήτησης.",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Υπηρεσία προστέθηκε με επιτυχία",
97 "settings.service.form.saveButton": "Αποθήκευση υπηρεσίας",
98 "settings.service.form.deleteButton": "Διαγραφή υπηρεσίας",
99 "settings.service.form.availableServices": "Διαθέσιμες υπηρεσίες",
100 "settings.service.form.yourServices": "Οι υπηρεσίες σας",
101 "settings.service.form.addServiceHeadline": "Προσθήκη {όνομα}",
102 "settings.service.form.editServiceHeadline": "Επεξεργασία {όνομα}",
103 "settings.service.form.tabHosted": "Φιλοξενείται",
104 "settings.service.form.tabOnPremise": "Αυτο-φιλοξενείται ⭐️",
105 "settings.service.form.customUrlValidationError": "Δεν ήταν δυνατή η επικύρωση του προσαρμοσμένου διακομιστή {name}.",
106 "settings.service.form.customUrlPremiumInfo": "Για να προσθέσετε υπηρεσίες που φιλοξενούνται μόνος σας, χρειάζεστε έναν λογαριασμό υποστήριξης Premium Franz.",
107 "settings.service.form.customUrlUpgradeAccount": "Αναβάθμιση του λογαριασμού σας",
108 "settings.service.form.indirectMessageInfo": "Θα ειδοποιηθείτε για όλα τα νέα μηνύματα σε ένα κανάλι, όχι μόνο @username, @channel, @here, ...",
109 "settings.service.error.headline": "Σφάλμα",
110 "settings.service.error.goBack": "Επιστροφή στις υπηρεσίες",
111 "settings.service.error.message": "Δεν ήταν δυνατή η φόρτωση της συνταγής υπηρεσίας.",
112 "settings.services.tooltip.isDisabled": "Η υπηρεσία είναι απενεργοποιημένη",
113 "settings.services.tooltip.notificationsDisabled": "Οι ειδοποιήσεις είναι απενεργοποιημένες",
114 "settings.services.headline": "Οι υπηρεσίες σας",
115 "settings.services.noServicesAdded": "Δεν έχετε προσθέσει ακόμα υπηρεσίες.",
116 "settings.services.discoverServices": "Ανακαλύψτε τις υπηρεσίες",
117 "settings.services.updatedInfo": "Οι αλλαγές σας έχουν αποθηκευτεί",
118 "settings.services.deletedInfo": "Η υπηρεσία έχει διαγραφεί",
119 "settings.app.headline": "Ρυθμίσεις",
120 "settings.app.headlineΓενικά": "Γενικά",
121 "settings.app.headlineLanguage": "Γλώσσα",
122 "settings.app.headlineUpdates": "Ενημερώσεις",
123 "settings.app.buttonSearchForUpdate": "Έλεγχος για ενημερώσεις",
124 "settings.app.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημερώσεων",
125 "settings.app.updateStatusSearching": "Ψάχνει για ενημέρωση",
126 "settings.app.updateStatusAvailable": "Διαθέσιμη ενημέρωση, λήψη ...",
127 "settings.app.updateStatusUpToDate": "Χρησιμοποιείτε την τελευταία έκδοση του Franz",
128 "settings.app.form.autoLaunchOnStart": "Εκκίνηση του Franz στην αρχή",
129 "settings.app.form.autoLaunchInBackground": "Άνοιγμα στο παρασκήνιο",
130 "settings.app.form.enableSystemTray": "Εμφάνιση του Franz στο δίσκο συστήματος",
131 "settings.app.form.minimizeToSystemTray": "Ελαχιστοποίηση του Franz στο δίσκο συστήματος",
132 "settings.app.form.runInBackground": "Κρατήστε Franz στο παρασκήνιο κατά το κλείσιμο του παραθύρου",
133 "settings.app.form.language": "Γλώσσα",
134 "settings.app.form.beta": "Συμπεριλάβετε εκδόσεις beta",
135 "settings.app.currentVersion": "Τρέχουσα έκδοση:",
136 "settings.service.form.name": "Όνομα",
137 "settings.service.form.enableService": "Ενεργοποίηση υπηρεσίας",
138 "settings.service.form.enableNotification": "Ενεργοποίηση ειδοποιήσεων",
139 "settings.service.form.team": "Ομάδα",
140 "settings.service.form.customUrl": "Προσαρμοσμένος διακομιστής",
141 "settings.service.form.indirectMessages": "Εμφάνιση ειδοποίησης μηνύματος για όλα τα νέα μηνύματα",
142 "settings.user.form.firstname": "Όνομα",
143 "settings.user.form.lastname": "Επίθετο",
144 "settings.user.form.email": "Email",
145 "settings.user.form.currentPassword": "Τρέχων κωδικός πρόσβασης",
146 "settings.user.form.newPassword": "Νέος κωδικός πρόσβασης",
147 "settings.user.form.accountType.label": "Τύπος λογαριασμού",
148 "settings.user.form.accountType.individual": "Ατομική",
149 "settings.user.form.accountType.non-profit": "Μη κερδοσκοπικό",
150 "settings.user.form.accountType.company": "Εταιρεία",
151 "subscription.type.free": "δωρεάν",
152 "subscription.type.month": "μήνας",
153 "subscription.type.year": "έτος",
154 "subscription.type.mining": "Υποστήριξη Franz με ισχύ CPU",
155 "subscription.mining.headline": "Πώς λειτουργεί αυτό;",
156 "subscription.mining.experimental": "πειραματική",
157 "subscription.mining.line1": "Franz χρησιμοποιεί περίπου το 20-50% της CPU σας για να εξορύξει την κρυπτογράφηση Monero που ισούται περίπου με $ 5 / έτος.",
158 "subscription.mining.line2": "Θα προσαρμόσουμε τη χρήση της CPU με βάση τη συμπεριφορά εργασίας σας ώστε να μην αποστραγγίσουμε την μπαταρία σας και να επιβραδύνουμε εσάς και το μηχάνημά σας.",
159 "subscription.mining.line3": "Εφόσον ο Miner είναι ενεργός, θα έχετε απεριόριστη πρόσβαση σε όλα τα χαρακτηριστικά του Franz Premium Supporter.",
160 "subscription.mining.moreInformation": "Λάβετε περισσότερες πληροφορίες σχετικά με αυτό το πακέτο.",
161 "subscriptionPopup.buttonCancel": "Ακύρωση",
162 "subscriptionPopup.buttonDone": "Έγινε",
163 "tabs.item.reload": "Επαναφόρτωση",
164 "tabs.item.edit": "Επεξεργασία",
165 "tabs.item.disableNotifications": "Απενεργοποίηση ειδοποιήσεων",
166 "tabs.item.enableNotification": "Ενεργοποίηση ειδοποιήσεων",
167 "tabs.item.disableService": "Απενεργοποίηση υπηρεσίας",
168 "tabs.item.deleteService": "Διαγραφή υπηρεσίας"
169}
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json
new file mode 100644
index 000000000..459d097f3
--- /dev/null
+++ b/src/i18n/locales/el.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Can't connect to Franz online services",
3 "global.notConnectedToTheInternet" : "You are not connected to the internet.",
4 "import.headline" : "Import your Franz 4 services",
5 "import.notSupportedHeadline" : "Services not yet supported in Franz 5",
6 "import.skip.label" : "I want to add services manually",
7 "import.submit.label" : "Import services",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Restart & install update",
10 "infobar.buttonReloadServices" : "Reload services",
11 "infobar.requiredRequestsFailed" : "Could not load services and user information",
12 "infobar.servicesUpdated" : "Your services have been updated.",
13 "infobar.updateAvailable" : "A new update for Franz is available.",
14 "invite.email.label" : "Email address",
15 "invite.headline.friends" : "Invite 3 of your friends or colleagues",
16 "invite.name.label" : "Name",
17 "invite.skip.label" : "I want to do this later",
18 "invite.submit.label" : "Send invites",
19 "login.email.label" : "Email address",
20 "login.headline" : "Sign in",
21 "login.invalidCredentials" : "Email or password not valid",
22 "login.link.password" : "Reset password",
23 "login.link.signup" : "Create a free account",
24 "login.password.label" : "Password",
25 "login.serverLogout" : "Your session expired, please login again.",
26 "login.submit.label" : "Sign in",
27 "login.tokenExpired" : "Your session expired, please login again.",
28 "password.email.label" : "Email address",
29 "password.headline" : "Reset password",
30 "password.link.login" : "Sign in to your account",
31 "password.link.signup" : "Create a free account",
32 "password.noUser" : "No user with that email address was found",
33 "password.submit.label" : "Submit",
34 "password.successInfo" : "Please check your email",
35 "pricing.headline" : "Support Franz",
36 "pricing.link.skipPayment" : "I don't want to support the development of Franz.",
37 "pricing.submit.label" : "I want to support the development of Franz",
38 "pricing.support.label" : "Select your support plan",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Get started",
46 "services.welcome" : "Welcome to Franz",
47 "settings.account.account.editButton" : "Edit account",
48 "settings.account.accountType.basic" : "Basic Account",
49 "settings.account.accountType.premium" : "Premium Supporter Account",
50 "settings.account.buttonSave" : "Update profile",
51 "settings.account.headline" : "Account",
52 "settings.account.headlineAccount" : "Account information",
53 "settings.account.headlineInvoices" : "Invoices",
54 "settings.account.headlinePassword" : "Change password",
55 "settings.account.headlineProfile" : "Update profile",
56 "settings.account.headlineSubscription" : "Your subscription",
57 "settings.account.headlineUpgrade" : "Upgrade your account & support Franz",
58 "settings.account.invoiceDownload" : "Download",
59 "settings.account.manageSubscription.label" : "Manage your subscription",
60 "settings.account.mining.active" : "You are right now performing {hashes} calculations per second.",
61 "settings.account.mining.cancel" : "Cancel mining",
62 "settings.account.mining.moreInformation" : "Get more information",
63 "settings.account.mining.thankyou" : "Thank you for supporting Franz with your processing power.",
64 "settings.account.successInfo" : "Your changes have been saved",
65 "settings.account.tryReloadUserInfoRequest" : "Try again",
66 "settings.account.userInfoRequestFailed" : "Could not load user information",
67 "settings.app.buttonInstallUpdate" : "Restart & install update",
68 "settings.app.buttonSearchForUpdate" : "Check for updates",
69 "settings.app.currentVersion" : "Current version:",
70 "settings.app.form.autoLaunchInBackground" : "Open in background",
71 "settings.app.form.autoLaunchOnStart" : "Launch Franz on start",
72 "settings.app.form.beta" : "Include beta versions",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Show Franz in system tray",
75 "settings.app.form.language" : "Language",
76 "settings.app.form.minimizeToSystemTray" : "Minimize Franz to system tray",
77 "settings.app.form.runInBackground" : "Keep Franz in background when closing the window",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Settings",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "General",
83 "settings.app.headlineLanguage" : "Language",
84 "settings.app.headlineUpdates" : "Updates",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Update available, downloading...",
88 "settings.app.updateStatusSearching" : "Is searching for update",
89 "settings.app.updateStatusUpToDate" : "You are using the latest version of Franz",
90 "settings.navigation.account" : "Account",
91 "settings.navigation.availableServices" : "Available services",
92 "settings.navigation.logout" : "Logout",
93 "settings.navigation.settings" : "Settings",
94 "settings.navigation.yourServices" : "Your services",
95 "settings.recipes.all" : "All services",
96 "settings.recipes.dev" : "Development",
97 "settings.recipes.headline" : "Available services",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Most popular",
100 "settings.recipes.nothingFound" : "Sorry, but no service matched your search term.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Service successfully added",
102 "settings.service.error.goBack" : "Back to services",
103 "settings.service.error.headline" : "Error",
104 "settings.service.error.message" : "Could not load service recipe.",
105 "settings.service.form.addServiceHeadline" : "Add {name}",
106 "settings.service.form.availableServices" : "Available services",
107 "settings.service.form.customUrl" : "Custom server",
108 "settings.service.form.customUrlPremiumInfo" : "To add self hosted services, you need a Franz Premium Supporter Account.",
109 "settings.service.form.customUrlUpgradeAccount" : "Upgrade your account",
110 "settings.service.form.customUrlValidationError" : "Could not validate custom {name} server.",
111 "settings.service.form.deleteButton" : "Delete service",
112 "settings.service.form.editServiceHeadline" : "Edit {name}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Enable notifications",
115 "settings.service.form.enableService" : "Enable service",
116 "settings.service.form.indirectMessageInfo" : "You will be notified about all new messages in a channel, not just @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "Show message badge for all new messages",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Name",
120 "settings.service.form.saveButton" : "Save service",
121 "settings.service.form.tabHosted" : "Hosted",
122 "settings.service.form.tabOnPremise" : "Self hosted ⭐️",
123 "settings.service.form.team" : "Team",
124 "settings.service.form.yourServices" : "Your services",
125 "settings.services.deletedInfo" : "Service has been deleted",
126 "settings.services.discoverServices" : "Discover services",
127 "settings.services.headline" : "Your services",
128 "settings.services.noServicesAdded" : "You haven't added any services yet.",
129 "settings.services.tooltip.isDisabled" : "Service is disabled",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "Notifications are disabled",
132 "settings.services.updatedInfo" : "Your changes have been saved",
133 "settings.user.form.accountType.company" : "Company",
134 "settings.user.form.accountType.individual" : "Individual",
135 "settings.user.form.accountType.label" : "Account type",
136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.user.form.currentPassword" : "Current password",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "New password",
142 "sidebar.addNewService" : "Add new service",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Settings",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Company",
147 "signup.email.label" : "Email address",
148 "signup.emailDuplicate" : "A user with that email address already exists",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Sign up",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "By creating a Franz account you accept the",
153 "signup.legal.privacy" : "Privacy Statement",
154 "signup.legal.terms" : "Terms of service",
155 "signup.link.login" : "Already have an account, sign in?",
156 "signup.password.label" : "Password",
157 "signup.submit.label" : "Create account",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "No ads, ever!",
160 "subscription.features.comingSoon" : "coming soon",
161 "subscription.features.customServices" : "Private services for you and your team",
162 "subscription.features.encryptedSync" : "Encrypted session synchronization",
163 "subscription.features.onpremise" : "Add on-premise\/hosted services like HipChat",
164 "subscription.features.vpn" : "Proxy & VPN support",
165 "subscription.includedFeatures" : "Paid Franz Premium Supporter Account includes",
166 "subscription.mining.experimental" : "experimental",
167 "subscription.mining.headline" : "How does this work?",
168 "subscription.mining.line1" : "By enabling \"Support with processing power\", Franz will use about 20-50% of your CPU to mine the cryptocurrency Monero which equals approximately $ 5\/year.",
169 "subscription.mining.line2" : "We will adapt the CPU usage based to your work behaviour to not drain your battery and slow you and your machine down.",
170 "subscription.mining.line3" : "As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.",
171 "subscription.mining.moreInformation" : "Get more information about this plan.",
172 "subscription.paymentSessionError" : "Could not initialize payment form",
173 "subscription.submit.label" : "I want to support the development of Franz",
174 "subscription.type.free" : "free",
175 "subscription.type.mining" : "Support Franz with processing power",
176 "subscription.type.month" : "month",
177 "subscription.type.year" : "year",
178 "subscriptionPopup.buttonCancel" : "Cancel",
179 "subscriptionPopup.buttonDone" : "Done",
180 "tabs.item.deleteService" : "Delete service",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Disable notifications",
183 "tabs.item.disableService" : "Disable service",
184 "tabs.item.edit" : "Edit",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Enable notifications",
187 "tabs.item.enableService" : "Enable service",
188 "tabs.item.reload" : "Reload",
189 "welcome.loginButton" : "Login to your account",
190 "welcome.signupButton" : "Create a free account",
191 "welcome.slogan" : "Messaging that works for you"
192}
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index fd8ba0fef..567537d75 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -21,8 +21,8 @@
21 "password.link.signup": "Create a free account", 21 "password.link.signup": "Create a free account",
22 "password.link.login": "Sign in to your account", 22 "password.link.login": "Sign in to your account",
23 "signup.headline": "Sign up", 23 "signup.headline": "Sign up",
24 "signup.firstname.label": "Firstname", 24 "signup.firstname.label": "First Name",
25 "signup.lastname.label": "Lastname", 25 "signup.lastname.label": "Last Name",
26 "signup.email.label": "Email address", 26 "signup.email.label": "Email address",
27 "signup.company.label": "Company", 27 "signup.company.label": "Company",
28 "signup.password.label": "Password", 28 "signup.password.label": "Password",
@@ -39,7 +39,7 @@
39 "import.headline": "Import your Franz 4 services", 39 "import.headline": "Import your Franz 4 services",
40 "import.notSupportedHeadline": "Services not yet supported in Franz 5", 40 "import.notSupportedHeadline": "Services not yet supported in Franz 5",
41 "import.submit.label": "Import services", 41 "import.submit.label": "Import services",
42 "import.skip.label": "I want add services manually", 42 "import.skip.label": "I want to add services manually",
43 "invite.submit.label": "Send invites", 43 "invite.submit.label": "Send invites",
44 "invite.headline.friends": "Invite 3 of your friends or colleagues", 44 "invite.headline.friends": "Invite 3 of your friends or colleagues",
45 "invite.name.label": "Name", 45 "invite.name.label": "Name",
@@ -58,17 +58,19 @@
58 "infobar.updateAvailable": "A new update for Franz is available.", 58 "infobar.updateAvailable": "A new update for Franz is available.",
59 "infobar.buttonReloadServices": "Reload services", 59 "infobar.buttonReloadServices": "Reload services",
60 "infobar.buttonInstallUpdate": "Restart & install update", 60 "infobar.buttonInstallUpdate": "Restart & install update",
61 "infobar.buttonChangelog": "What is new?",
61 "infobar.requiredRequestsFailed": "Could not load services and user information", 62 "infobar.requiredRequestsFailed": "Could not load services and user information",
62 "sidebar.settings": "Settings", 63 "sidebar.settings": "Settings",
63 "sidebar.addNewService": "Add new service", 64 "sidebar.addNewService": "Add new service",
64 "sidebar.mute": "Disable audio", 65 "sidebar.muteApp": "Disable notifications & audio",
65 "sidebar.unmute": "Enable audio", 66 "sidebar.unmuteApp": "Enable notifications & audio",
66 "services.welcome": "Welcome to Franz", 67 "services.welcome": "Welcome to Franz",
67 "services.getStarted": "Get started", 68 "services.getStarted": "Get started",
68 "settings.account.headline": "Account", 69 "settings.account.headline": "Account",
69 "settings.account.headlineSubscription": "Your subscription", 70 "settings.account.headlineSubscription": "Your subscription",
70 "settings.account.headlineUpgrade": "Upgrade your account & support Franz", 71 "settings.account.headlineUpgrade": "Upgrade your account & support Franz",
71 "settings.account.headlineInvoices": "Invoices", 72 "settings.account.headlineInvoices": "Invoices",
73 "settings.account.headlineDangerZone": "Danger Zone",
72 "settings.account.manageSubscription.label": "Manage your subscription", 74 "settings.account.manageSubscription.label": "Manage your subscription",
73 "settings.account.accountType.basic": "Basic Account", 75 "settings.account.accountType.basic": "Basic Account",
74 "settings.account.accountType.premium": "Premium Supporter Account", 76 "settings.account.accountType.premium": "Premium Supporter Account",
@@ -85,6 +87,9 @@
85 "settings.account.mining.active": "You are right now performing {hashes} calculations per second.", 87 "settings.account.mining.active": "You are right now performing {hashes} calculations per second.",
86 "settings.account.mining.moreInformation": "Get more information", 88 "settings.account.mining.moreInformation": "Get more information",
87 "settings.account.mining.cancel": "Cancel mining", 89 "settings.account.mining.cancel": "Cancel mining",
90 "settings.account.deleteAccount": "Delete account",
91 "settings.account.deleteInfo": "If you don't need your Franz account any longer, you can delete your account and all related data here.",
92 "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
88 "settings.navigation.availableServices": "Available services", 93 "settings.navigation.availableServices": "Available services",
89 "settings.navigation.yourServices": "Your services", 94 "settings.navigation.yourServices": "Your services",
90 "settings.navigation.account": "Account", 95 "settings.navigation.account": "Account",
@@ -96,6 +101,7 @@
96 "settings.recipes.dev": "Development", 101 "settings.recipes.dev": "Development",
97 "settings.recipes.nothingFound": "Sorry, but no service matched your search term.", 102 "settings.recipes.nothingFound": "Sorry, but no service matched your search term.",
98 "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", 103 "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added",
104 "settings.recipes.missingService": "Missing a service?",
99 "settings.service.form.saveButton": "Save service", 105 "settings.service.form.saveButton": "Save service",
100 "settings.service.form.deleteButton": "Delete service", 106 "settings.service.form.deleteButton": "Delete service",
101 "settings.service.form.availableServices": "Available services", 107 "settings.service.form.availableServices": "Available services",
@@ -104,6 +110,7 @@
104 "settings.service.form.editServiceHeadline": "Edit {name}", 110 "settings.service.form.editServiceHeadline": "Edit {name}",
105 "settings.service.form.tabHosted": "Hosted", 111 "settings.service.form.tabHosted": "Hosted",
106 "settings.service.form.tabOnPremise": "Self hosted ⭐️", 112 "settings.service.form.tabOnPremise": "Self hosted ⭐️",
113 "settings.service.form.useHostedService": "Use the hosted {name} service.",
107 "settings.service.form.customUrlValidationError": "Could not validate custom {name} server.", 114 "settings.service.form.customUrlValidationError": "Could not validate custom {name} server.",
108 "settings.service.form.customUrlPremiumInfo": "To add self hosted services, you need a Franz Premium Supporter Account.", 115 "settings.service.form.customUrlPremiumInfo": "To add self hosted services, you need a Franz Premium Supporter Account.",
109 "settings.service.form.customUrlUpgradeAccount": "Upgrade your account", 116 "settings.service.form.customUrlUpgradeAccount": "Upgrade your account",
@@ -111,11 +118,15 @@
111 "settings.service.form.name": "Name", 118 "settings.service.form.name": "Name",
112 "settings.service.form.enableService": "Enable service", 119 "settings.service.form.enableService": "Enable service",
113 "settings.service.form.enableNotification": "Enable notifications", 120 "settings.service.form.enableNotification": "Enable notifications",
121 "settings.service.form.enableBadge": "Show unread message badges",
114 "settings.service.form.team": "Team", 122 "settings.service.form.team": "Team",
115 "settings.service.form.customUrl": "Custom server", 123 "settings.service.form.customUrl": "Custom server",
116 "settings.service.form.indirectMessages": "Show message badge for all new messages", 124 "settings.service.form.indirectMessages": "Show message badge for all new messages",
117 "settings.service.form.enableAudio": "Enable audio", 125 "settings.service.form.enableAudio": "Enable audio",
118 "settings.service.form.isMutedInfo": "When disabled, all notification sounds and audio playback are muted", 126 "settings.service.form.isMutedInfo": "When disabled, all notification sounds and audio playback are muted",
127 "settings.service.form.headlineNotifications": "Notifications",
128 "settings.service.form.headlineBadges": "Unread message badges",
129 "settings.service.form.headlineGeneral": "General",
119 "settings.service.error.headline": "Error", 130 "settings.service.error.headline": "Error",
120 "settings.service.error.goBack": "Back to services", 131 "settings.service.error.goBack": "Back to services",
121 "settings.service.error.message": "Could not load service recipe.", 132 "settings.service.error.message": "Could not load service recipe.",
@@ -132,6 +143,7 @@
132 "settings.app.headlineLanguage": "Language", 143 "settings.app.headlineLanguage": "Language",
133 "settings.app.headlineUpdates": "Updates", 144 "settings.app.headlineUpdates": "Updates",
134 "settings.app.headlineAppearance": "Appearance", 145 "settings.app.headlineAppearance": "Appearance",
146 "settings.app.headlineAdvanced": "Advanced",
135 "settings.app.buttonSearchForUpdate": "Check for updates", 147 "settings.app.buttonSearchForUpdate": "Check for updates",
136 "settings.app.buttonInstallUpdate": "Restart & install update", 148 "settings.app.buttonInstallUpdate": "Restart & install update",
137 "settings.app.updateStatusSearching": "Is searching for update", 149 "settings.app.updateStatusSearching": "Is searching for update",
@@ -143,11 +155,15 @@
143 "settings.app.form.minimizeToSystemTray": "Minimize Franz to system tray", 155 "settings.app.form.minimizeToSystemTray": "Minimize Franz to system tray",
144 "settings.app.form.runInBackground": "Keep Franz in background when closing the window", 156 "settings.app.form.runInBackground": "Keep Franz in background when closing the window",
145 "settings.app.form.language": "Language", 157 "settings.app.form.language": "Language",
158 "settings.app.form.enableSpellchecking": "Enable spell checking",
146 "settings.app.form.showDisabledServices": "Display disabled services tabs", 159 "settings.app.form.showDisabledServices": "Display disabled services tabs",
160 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
147 "settings.app.form.beta": "Include beta versions", 161 "settings.app.form.beta": "Include beta versions",
162 "settings.app.translationHelp": "Help us to translate Franz into your language.",
148 "settings.app.currentVersion": "Current version:", 163 "settings.app.currentVersion": "Current version:",
149 "settings.user.form.firstname": "Firstname", 164 "settings.app.restartRequired": "Changes require restart",
150 "settings.user.form.lastname": "Lastname", 165 "settings.user.form.firstname": "First Name",
166 "settings.user.form.lastname": "Last Name",
151 "settings.user.form.email": "Email", 167 "settings.user.form.email": "Email",
152 "settings.user.form.currentPassword": "Current password", 168 "settings.user.form.currentPassword": "Current password",
153 "settings.user.form.newPassword": "New password", 169 "settings.user.form.newPassword": "New password",
@@ -165,6 +181,7 @@
165 "subscription.mining.line2": "We will adapt the CPU usage based to your work behaviour to not drain your battery and slow you and your machine down.", 181 "subscription.mining.line2": "We will adapt the CPU usage based to your work behaviour to not drain your battery and slow you and your machine down.",
166 "subscription.mining.line3": "As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.", 182 "subscription.mining.line3": "As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.",
167 "subscription.mining.moreInformation": "Get more information about this plan.", 183 "subscription.mining.moreInformation": "Get more information about this plan.",
184 "subscription.euTaxInfo": "EU residents: local sales tax may apply",
168 "subscriptionPopup.buttonCancel": "Cancel", 185 "subscriptionPopup.buttonCancel": "Cancel",
169 "subscriptionPopup.buttonDone": "Done", 186 "subscriptionPopup.buttonDone": "Done",
170 "tabs.item.reload": "Reload", 187 "tabs.item.reload": "Reload",
@@ -181,5 +198,5 @@
181 "service.crashHandler.action": "Reload {name}", 198 "service.crashHandler.action": "Reload {name}",
182 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", 199 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds",
183 "service.disabledHandler.headline": "{name} is disabled", 200 "service.disabledHandler.headline": "{name} is disabled",
184 "service.disabledHandler.action": "Enable {name}" 201 "service.disabledHandler.action": "Enable {name}"
185} 202}
diff --git a/src/i18n/locales/es-ES.json b/src/i18n/locales/es-ES.json
deleted file mode 100644
index f71b07b2d..000000000
--- a/src/i18n/locales/es-ES.json
+++ /dev/null
@@ -1,168 +0,0 @@
1{
2 "global.api.unhealthy": "No se pudo conectar con los servicios online de Franz",
3 "global.notConnectedToTheInternet": "No estás conectado a internet.",
4 "welcome.signupButton": "Crea una cuenta gratuita",
5 "welcome.loginButton": "Accede a tu cuenta",
6 "welcome.slogan": "Mensajería hecha para ti",
7 "login.headline": "Acceder",
8 "login.email.label": "Dirección de Email",
9 "login.password.label": "Contraseña",
10 "login.submit.label": "Acceder",
11 "login.invalidCredentials": "Email o contraseña no válidos",
12 "login.tokenExpired": "Tu sesión ha expirado. Por favor, accede de nuevo.",
13 "login.serverLogout": "Tu sesión ha expirado. Por favor, accede de nuevo.",
14 "login.link.signup": "Crea una cuenta gratuita",
15 "login.link.password": "Restablecer contraseña",
16 "password.headline": "Restablecer contraseña",
17 "password.email.label": "Dirección de Email",
18 "password.submit.label": "Enviar",
19 "password.noUser": "No hemos encontrado un usuario con ese email",
20 "password.successInfo": "Por favor, comprueba tu email",
21 "password.link.signup": "Crea una cuenta gratuita",
22 "password.link.login": "Accede a tu cuenta",
23 "signup.headline": "Crea tu cuenta",
24 "signup.firstname.label": "Nombre",
25 "signup.lastname.label": "Apellidos",
26 "signup.email.label": "Dirección de Email",
27 "signup.company.label": "Empresa",
28 "signup.password.label": "Contraseña",
29 "signup.submit.label": "Crear cuenta",
30 "signup.link.login": "¿Tienes ya una cuenta? Accede",
31 "signup.emailDuplicate": "Ya existe un usuario con esa dirección de email",
32 "signup.legal.info": "Al crear una cuenta de Franz aceptas los",
33 "signup.legal.terms": "Términos de servicio",
34 "signup.legal.privacy": "Política de privacidad",
35 "pricing.headline": "Ayuda a Franz",
36 "pricing.support.label": "Selecciona tu plan de ayuda",
37 "pricing.submit.label": "Quiero ayudar al desarrollo de Franz",
38 "pricing.link.skipPayment": "No quiero ayudar al desarrollo de Franz.",
39 "import.headline": "Importa tus servicios de Franz 4",
40 "import.notSupportedHeadline": "Servicios aún no disponibles en Franz 5",
41 "import.submit.label": "Importar servicios",
42 "import.skip.label": "Quiero añadir los servicios manualmente",
43 "invite.submit.label": "Enviar invitaciones",
44 "invite.headline.friends": "Invita a 3 de tus amigos o compañeros",
45 "invite.name.label": "Nombre",
46 "invite.email.label": "Dirección de Email",
47 "invite.skip.label": "Prefiero hacer esto luego",
48 "subscription.submit.label": "Quiero ayudar al desarrollo de Franz",
49 "subscription.paymentSessionError": "No se ha podido inicializar el formulario de pago",
50 "subscription.includedFeatures": "La cuenta de Franz Premium Supporter incluye",
51 "subscription.features.onpremise": "Añadir servicios in-situ/alojados como HipChat",
52 "subscription.features.customServices": "Servicios privados para ti y tu equipo",
53 "subscription.features.encryptedSync": "Sincronización de sesión encriptada",
54 "subscription.features.vpn": "Soporte para Proxy y VPN",
55 "subscription.features.ads": "¡Sin anuncios, para siempre!",
56 "subscription.features.comingSoon": "próximamente",
57 "infobar.servicesUpdated": "Tus servicios han sido actualizados.",
58 "infobar.updateAvailable": "Una nueva actualización para Franz está disponible.",
59 "infobar.buttonReloadServices": "Volver a cargar servicios",
60 "infobar.buttonInstallUpdate": "Reiniciar e instalar actualizaciones",
61 "infobar.requiredRequestsFailed": "No se han podido cargar los servicios y la información de usuario",
62 "sidebar.settings": "Ajustes",
63 "services.welcome": "Bienvenido a Franz",
64 "services.getStarted": "Comienza",
65 "settings.account.headline": "Mi cuenta",
66 "settings.account.headlineSubscription": "Tu suscripción",
67 "settings.account.headlineUpgrade": "Mejora tu cuenta y ayuda a Franz",
68 "settings.account.headlineInvoices": "Recibos",
69 "settings.account.manageSubscription.label": "Administra tu suscripción",
70 "settings.account.accountType.basic": "Cuenta Básica",
71 "settings.account.accountType.premium": "Cuenta Premium Supporter",
72 "settings.account.account.editButton": "Editar cuenta",
73 "settings.account.invoiceDownload": "Descargar",
74 "settings.account.userInfoRequestFailed": "No se ha podido cargar la información de usuario",
75 "settings.account.tryReloadUserInfoRequest": "TPrueba otra vez",
76 "settings.account.headlineProfile": "Actualizar perfil",
77 "settings.account.headlineAccount": "Información de la cuenta",
78 "settings.account.headlinePassword": "Cambiar contraseña",
79 "settings.account.successInfo": "Tus cambios han sido guardados",
80 "settings.account.buttonSave": "Actualizar perfil",
81 "settings.account.mining.thankyou": "Gracias por ayudar a Franz con tu procesador.",
82 "settings.account.mining.active": "Ahora mismo estás haciendo {hashes} cálculos por segundo.",
83 "settings.account.mining.moreInformation": "Obtén más información",
84 "settings.account.mining.cancel": "Cancelar minado",
85 "settings.navigation.availableServices": "Servicios disponibles",
86 "settings.navigation.yourServices": "Tus servicios",
87 "settings.navigation.account": "Cuenta",
88 "settings.navigation.settings": "Ajustes",
89 "settings.navigation.logout": "Desconectar",
90 "settings.recipes.headline": "Servicios disponibles",
91 "settings.recipes.mostPopular": "Más populares",
92 "settings.recipes.all": "Todos los servicios",
93 "settings.recipes.dev": "Desarrollo",
94 "settings.recipes.nothingFound": "Lo sentimos, no hemos encontrado nada.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Servicio añadido con éxito",
96 "settings.service.form.saveButton": "Guardar servicio",
97 "settings.service.form.deleteButton": "Eliminar servicio",
98 "settings.service.form.availableServices": "Servicios disponibles",
99 "settings.service.form.yourServices": "Tus servicios",
100 "settings.service.form.addServiceHeadline": "Añadir {name}",
101 "settings.service.form.editServiceHeadline": "Editar {name}",
102 "settings.service.form.tabHosted": "Alojados",
103 "settings.service.form.tabOnPremise": "Autoalojados ⭐️",
104 "settings.service.form.customUrlValidationError": "No se ha podido validar el servidor personalizado {name}.",
105 "settings.service.form.customUrlPremiumInfo": "Para añadir servicios autoalojados necesitas una cuenta de Franz Premium Supporter.",
106 "settings.service.form.customUrlUpgradeAccount": "Mejora tu cuenta",
107 "settings.service.form.indirectMessageInfo": "Serás notificado sobre todos los nuevos mensajes en un canal, no solo @username, @channel, @here, ...",
108 "settings.service.error.headline": "Error",
109 "settings.service.error.goBack": "Volver a los servicios",
110 "settings.service.error.message": "No se ha podido cargar el servicio.",
111 "settings.services.tooltip.isDisabled": "Servicio deshabilitado",
112 "settings.services.tooltip.notificationsDisabled": "Notificaciones deshabilitadas",
113 "settings.services.headline": "Tus servicios",
114 "settings.services.noServicesAdded": "Aún no has añadido ningún servicio.",
115 "settings.services.discoverServices": "Descubrir servicios",
116 "settings.services.updatedInfo": "Tu cambios han sido guardados",
117 "settings.services.deletedInfo": "Se ha eliminado el servicio",
118 "settings.app.headline": "Ajustes",
119 "settings.app.headlineGeneral": "Generales",
120 "settings.app.headlineLanguage": "Idioma",
121 "settings.app.headlineUpdates": "Actualizaciones",
122 "settings.app.buttonSearchForUpdate": "Buscar actualizaciones",
123 "settings.app.buttonInstallUpdate": "Reiniciar e instalar actualizaciones",
124 "settings.app.updateStatusSearching": "Buscando actualizaciones",
125 "settings.app.updateStatusAvailable": "Actualización disponible, descargando...",
126 "settings.app.updateStatusUpToDate": "Estás utilizando la última versión de Franz",
127 "settings.app.form.autoLaunchOnStart": "Iniciar Franz al encender",
128 "settings.app.form.autoLaunchInBackground": "Abrir en segundo plano",
129 "settings.app.form.enableSystemTray": "Mostrar Franz en la barra de tareas",
130 "settings.app.form.minimizeToSystemTray": "Minimizar Franz a la barra de tareas",
131 "settings.app.form.runInBackground": "Mantener Franz abierto en segundo plano al cerrar la ventana",
132 "settings.app.form.language": "Idioma",
133 "settings.app.form.beta": "Incluir versiones beta",
134 "settings.app.currentVersion": "Versión actual:",
135 "settings.service.form.name": "Nombre",
136 "settings.service.form.enableService": "Habilitar servicio",
137 "settings.service.form.enableNotification": "Habilitar notificaciones",
138 "settings.service.form.team": "Equipo",
139 "settings.service.form.customUrl": "Servidor personalizado",
140 "settings.service.form.indirectMessages": "Mostrar señal para todos los mensajes nuevos",
141 "settings.user.form.firstname": "Nombre",
142 "settings.user.form.lastname": "Apellidos",
143 "settings.user.form.email": "Email",
144 "settings.user.form.currentPassword": "Contraseña actual",
145 "settings.user.form.newPassword": "Nueva contraseña",
146 "settings.user.form.accountType.label": "Tipo de cuenta",
147 "settings.user.form.accountType.individual": "Individual",
148 "settings.user.form.accountType.non-profit": "Sin ánimo de lucro",
149 "settings.user.form.accountType.company": "Empresa",
150 "subscription.type.free": "gratis",
151 "subscription.type.month": "mensual",
152 "subscription.type.year": "anual",
153 "subscription.type.mining": "Ayuda a Franz con tu procesador",
154 "subscription.mining.headline": "¿Cómo funciona?",
155 "subscription.mining.experimental": "experimental",
156 "subscription.mining.line1": "Al habilitar \"Ayuda a Franz con tu procesador\", Franz utilizará entre un 20-50% de tu CPU para minar la criptomoneda Monero, lo que equivale a aproximadamente 5$ anuales.",
157 "subscription.mining.line2": "Adaptaremos el uso de CPU basándonos en tu carga de trabajo para no vaciar tu batería ni realentizar tu ordenador.",
158 "subscription.mining.line3": "Siempre que el minero esté activo, tendrás acceso ilimitado a todas las ventajas de la cuenta Franz Premium Supporter.",
159 "subscription.mining.moreInformation": "Obtén más información sobre este plan.",
160 "subscriptionPopup.buttonCancel": "Cancelar",
161 "subscriptionPopup.buttonDone": "Hecho",
162 "tabs.item.reload": "Recargar",
163 "tabs.item.edit": "Editar",
164 "tabs.item.disableNotifications": "Desactivar notificaciones",
165 "tabs.item.enableNotification": "Activar notificaciones",
166 "tabs.item.disableService": "Deshabilitar servicio",
167 "tabs.item.deleteService": "Eliminar servicio"
168}
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
new file mode 100644
index 000000000..459d097f3
--- /dev/null
+++ b/src/i18n/locales/es.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Can't connect to Franz online services",
3 "global.notConnectedToTheInternet" : "You are not connected to the internet.",
4 "import.headline" : "Import your Franz 4 services",
5 "import.notSupportedHeadline" : "Services not yet supported in Franz 5",
6 "import.skip.label" : "I want to add services manually",
7 "import.submit.label" : "Import services",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Restart & install update",
10 "infobar.buttonReloadServices" : "Reload services",
11 "infobar.requiredRequestsFailed" : "Could not load services and user information",
12 "infobar.servicesUpdated" : "Your services have been updated.",
13 "infobar.updateAvailable" : "A new update for Franz is available.",
14 "invite.email.label" : "Email address",
15 "invite.headline.friends" : "Invite 3 of your friends or colleagues",
16 "invite.name.label" : "Name",
17 "invite.skip.label" : "I want to do this later",
18 "invite.submit.label" : "Send invites",
19 "login.email.label" : "Email address",
20 "login.headline" : "Sign in",
21 "login.invalidCredentials" : "Email or password not valid",
22 "login.link.password" : "Reset password",
23 "login.link.signup" : "Create a free account",
24 "login.password.label" : "Password",
25 "login.serverLogout" : "Your session expired, please login again.",
26 "login.submit.label" : "Sign in",
27 "login.tokenExpired" : "Your session expired, please login again.",
28 "password.email.label" : "Email address",
29 "password.headline" : "Reset password",
30 "password.link.login" : "Sign in to your account",
31 "password.link.signup" : "Create a free account",
32 "password.noUser" : "No user with that email address was found",
33 "password.submit.label" : "Submit",
34 "password.successInfo" : "Please check your email",
35 "pricing.headline" : "Support Franz",
36 "pricing.link.skipPayment" : "I don't want to support the development of Franz.",
37 "pricing.submit.label" : "I want to support the development of Franz",
38 "pricing.support.label" : "Select your support plan",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Get started",
46 "services.welcome" : "Welcome to Franz",
47 "settings.account.account.editButton" : "Edit account",
48 "settings.account.accountType.basic" : "Basic Account",
49 "settings.account.accountType.premium" : "Premium Supporter Account",
50 "settings.account.buttonSave" : "Update profile",
51 "settings.account.headline" : "Account",
52 "settings.account.headlineAccount" : "Account information",
53 "settings.account.headlineInvoices" : "Invoices",
54 "settings.account.headlinePassword" : "Change password",
55 "settings.account.headlineProfile" : "Update profile",
56 "settings.account.headlineSubscription" : "Your subscription",
57 "settings.account.headlineUpgrade" : "Upgrade your account & support Franz",
58 "settings.account.invoiceDownload" : "Download",
59 "settings.account.manageSubscription.label" : "Manage your subscription",
60 "settings.account.mining.active" : "You are right now performing {hashes} calculations per second.",
61 "settings.account.mining.cancel" : "Cancel mining",
62 "settings.account.mining.moreInformation" : "Get more information",
63 "settings.account.mining.thankyou" : "Thank you for supporting Franz with your processing power.",
64 "settings.account.successInfo" : "Your changes have been saved",
65 "settings.account.tryReloadUserInfoRequest" : "Try again",
66 "settings.account.userInfoRequestFailed" : "Could not load user information",
67 "settings.app.buttonInstallUpdate" : "Restart & install update",
68 "settings.app.buttonSearchForUpdate" : "Check for updates",
69 "settings.app.currentVersion" : "Current version:",
70 "settings.app.form.autoLaunchInBackground" : "Open in background",
71 "settings.app.form.autoLaunchOnStart" : "Launch Franz on start",
72 "settings.app.form.beta" : "Include beta versions",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Show Franz in system tray",
75 "settings.app.form.language" : "Language",
76 "settings.app.form.minimizeToSystemTray" : "Minimize Franz to system tray",
77 "settings.app.form.runInBackground" : "Keep Franz in background when closing the window",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Settings",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "General",
83 "settings.app.headlineLanguage" : "Language",
84 "settings.app.headlineUpdates" : "Updates",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Update available, downloading...",
88 "settings.app.updateStatusSearching" : "Is searching for update",
89 "settings.app.updateStatusUpToDate" : "You are using the latest version of Franz",
90 "settings.navigation.account" : "Account",
91 "settings.navigation.availableServices" : "Available services",
92 "settings.navigation.logout" : "Logout",
93 "settings.navigation.settings" : "Settings",
94 "settings.navigation.yourServices" : "Your services",
95 "settings.recipes.all" : "All services",
96 "settings.recipes.dev" : "Development",
97 "settings.recipes.headline" : "Available services",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Most popular",
100 "settings.recipes.nothingFound" : "Sorry, but no service matched your search term.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Service successfully added",
102 "settings.service.error.goBack" : "Back to services",
103 "settings.service.error.headline" : "Error",
104 "settings.service.error.message" : "Could not load service recipe.",
105 "settings.service.form.addServiceHeadline" : "Add {name}",
106 "settings.service.form.availableServices" : "Available services",
107 "settings.service.form.customUrl" : "Custom server",
108 "settings.service.form.customUrlPremiumInfo" : "To add self hosted services, you need a Franz Premium Supporter Account.",
109 "settings.service.form.customUrlUpgradeAccount" : "Upgrade your account",
110 "settings.service.form.customUrlValidationError" : "Could not validate custom {name} server.",
111 "settings.service.form.deleteButton" : "Delete service",
112 "settings.service.form.editServiceHeadline" : "Edit {name}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Enable notifications",
115 "settings.service.form.enableService" : "Enable service",
116 "settings.service.form.indirectMessageInfo" : "You will be notified about all new messages in a channel, not just @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "Show message badge for all new messages",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Name",
120 "settings.service.form.saveButton" : "Save service",
121 "settings.service.form.tabHosted" : "Hosted",
122 "settings.service.form.tabOnPremise" : "Self hosted ⭐️",
123 "settings.service.form.team" : "Team",
124 "settings.service.form.yourServices" : "Your services",
125 "settings.services.deletedInfo" : "Service has been deleted",
126 "settings.services.discoverServices" : "Discover services",
127 "settings.services.headline" : "Your services",
128 "settings.services.noServicesAdded" : "You haven't added any services yet.",
129 "settings.services.tooltip.isDisabled" : "Service is disabled",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "Notifications are disabled",
132 "settings.services.updatedInfo" : "Your changes have been saved",
133 "settings.user.form.accountType.company" : "Company",
134 "settings.user.form.accountType.individual" : "Individual",
135 "settings.user.form.accountType.label" : "Account type",
136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.user.form.currentPassword" : "Current password",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "New password",
142 "sidebar.addNewService" : "Add new service",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Settings",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Company",
147 "signup.email.label" : "Email address",
148 "signup.emailDuplicate" : "A user with that email address already exists",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Sign up",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "By creating a Franz account you accept the",
153 "signup.legal.privacy" : "Privacy Statement",
154 "signup.legal.terms" : "Terms of service",
155 "signup.link.login" : "Already have an account, sign in?",
156 "signup.password.label" : "Password",
157 "signup.submit.label" : "Create account",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "No ads, ever!",
160 "subscription.features.comingSoon" : "coming soon",
161 "subscription.features.customServices" : "Private services for you and your team",
162 "subscription.features.encryptedSync" : "Encrypted session synchronization",
163 "subscription.features.onpremise" : "Add on-premise\/hosted services like HipChat",
164 "subscription.features.vpn" : "Proxy & VPN support",
165 "subscription.includedFeatures" : "Paid Franz Premium Supporter Account includes",
166 "subscription.mining.experimental" : "experimental",
167 "subscription.mining.headline" : "How does this work?",
168 "subscription.mining.line1" : "By enabling \"Support with processing power\", Franz will use about 20-50% of your CPU to mine the cryptocurrency Monero which equals approximately $ 5\/year.",
169 "subscription.mining.line2" : "We will adapt the CPU usage based to your work behaviour to not drain your battery and slow you and your machine down.",
170 "subscription.mining.line3" : "As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.",
171 "subscription.mining.moreInformation" : "Get more information about this plan.",
172 "subscription.paymentSessionError" : "Could not initialize payment form",
173 "subscription.submit.label" : "I want to support the development of Franz",
174 "subscription.type.free" : "free",
175 "subscription.type.mining" : "Support Franz with processing power",
176 "subscription.type.month" : "month",
177 "subscription.type.year" : "year",
178 "subscriptionPopup.buttonCancel" : "Cancel",
179 "subscriptionPopup.buttonDone" : "Done",
180 "tabs.item.deleteService" : "Delete service",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Disable notifications",
183 "tabs.item.disableService" : "Disable service",
184 "tabs.item.edit" : "Edit",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Enable notifications",
187 "tabs.item.enableService" : "Enable service",
188 "tabs.item.reload" : "Reload",
189 "welcome.loginButton" : "Login to your account",
190 "welcome.signupButton" : "Create a free account",
191 "welcome.slogan" : "Messaging that works for you"
192}
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 2863f47e4..d54d7c34e 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -1,168 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Impossible de se connecter aux services en ligne de Franz", 2 "global.api.unhealthy" : "Impossible de se connecter aux services en ligne de Franz",
3 "global.notConnectedToTheInternet": "Vous n'êtes pas connecté à Internet.", 3 "global.notConnectedToTheInternet" : "Vous n'êtes pas connecté à Internet.",
4 "welcome.signupButton": "Créer un compte gratuitement", 4 "import.headline" : "Importez vos services depuis Franz 4",
5 "welcome.loginButton": "Connectez-vous à votre compte", 5 "import.notSupportedHeadline" : "Services non supportés actuellement dans Franz 5",
6 "welcome.slogan": "Une messagerie qui fonctionne pour vous", 6 "import.skip.label" : "Je veux ajouter des services manuellement",
7 "login.headline": "S'inscrire", 7 "import.submit.label" : "Importer des services",
8 "login.email.label": "Adresse e-mail", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Mot de passe", 9 "infobar.buttonInstallUpdate" : "Redémarrer et installer la mise à jour",
10 "login.submit.label": "Se connecter", 10 "infobar.buttonReloadServices" : "Recharger les services",
11 "login.invalidCredentials": "E-mail ou mot de passe invalide", 11 "infobar.requiredRequestsFailed" : "Impossible de charger les services et les informations de l'utilisateur",
12 "login.tokenExpired": "Votre session a expiré, veuillez vous reconnecter.", 12 "infobar.servicesUpdated" : "Vos services ont été mis à jour.",
13 "login.serverLogout": "Votre session a expiré, veuillez vous reconnecter.", 13 "infobar.updateAvailable" : "Une nouvelle mise à jour est disponible pour Franz.",
14 "login.link.signup": "Créer un compte gratuitement", 14 "invite.email.label" : "Adresse e-mail",
15 "login.link.password": "Réinitialiser le mot de passe", 15 "invite.headline.friends" : "Invitez 3 de vos amis ou collègues",
16 "password.headline": "Réinitialiser le mot de passe", 16 "invite.name.label" : "Nom",
17 "password.email.label": "Adresse e-mail", 17 "invite.skip.label" : "Je veux faire cela plus tard",
18 "password.submit.label": "Soumettre", 18 "invite.submit.label" : "Envoyer des invitations",
19 "password.noUser": "Aucun utilisateur avec cette adresse e-mail n'a été trouvé", 19 "login.email.label" : "Adresse e-mail",
20 "password.successInfo": "Merci de consulter vos e-mails", 20 "login.headline" : "S'inscrire",
21 "password.link.signup": "Créer un compte gratuitement", 21 "login.invalidCredentials" : "E-mail ou mot de passe invalide",
22 "password.link.login": "Connectez-vous à votre compte", 22 "login.link.password" : "Réinitialiser le mot de passe",
23 "signup.headline": "S'inscrire", 23 "login.link.signup" : "Créer un compte gratuitement",
24 "signup.firstname.label": "Prénom", 24 "login.password.label" : "Mot de passe",
25 "signup.lastname.label": "Nom", 25 "login.serverLogout" : "Votre session a expiré, veuillez vous reconnecter.",
26 "signup.email.label": "Adresse e-mail", 26 "login.submit.label" : "Se connecter",
27 "signup.company.label": "Compagnie", 27 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.",
28 "signup.password.label": "Mot de passe", 28 "password.email.label" : "Adresse e-mail",
29 "signup.submit.label": "Créer un compte", 29 "password.headline" : "Réinitialiser le mot de passe",
30 "signup.link.login": "Vous possédez déjà un compte ? Connectez-vous", 30 "password.link.login" : "Connectez-vous à votre compte",
31 "signup.emailDuplicate": "Un utilisateur avec cette adresse e-mail existe déjà", 31 "password.link.signup" : "Créer un compte gratuitement",
32 "signup.legal.info": "En créant un compte Franz, vous acceptez les", 32 "password.noUser" : "Aucun utilisateur avec cette adresse e-mail n'a été trouvé",
33 "signup.legal.terms": "Conditions d'utilisation", 33 "password.submit.label" : "Soumettre",
34 "signup.legal.privacy": "Déclaration de confidentialité", 34 "password.successInfo" : "Merci de consulter vos e-mails",
35 "pricing.headline": "Supportez Franz", 35 "pricing.headline" : "Supportez Franz",
36 "pricing.support.label": "Sélectionnez votre plan de soutien", 36 "pricing.link.skipPayment" : "Je ne veux pas soutenir le développement de Franz.",
37 "pricing.submit.label": "Je veux soutenir le développement de Franz", 37 "pricing.submit.label" : "Je veux soutenir le développement de Franz",
38 "pricing.link.skipPayment": "Je ne veux pas soutenir le développement de Franz.", 38 "pricing.support.label" : "Sélectionnez votre plan de soutien",
39 "import.headline": "Importez vos services depuis Franz 4", 39 "service.crashHandler.action" : "Reload {name}",
40 "import.notSupportedHeadline": "Services non supportés actuellement dans Franz 5", 40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "import.submit.label": "Importer des services", 41 "service.crashHandler.headline" : "Oh no!",
42 "import.skip.label": "Je veux ajouter des services manuellement", 42 "service.crashHandler.text" : "{name} has caused an error.",
43 "invite.submit.label": "Envoyer des invitations", 43 "service.disabledHandler.action" : "Enable {name}",
44 "invite.headline.friends": "Invitez 3 de vos amis ou collègues", 44 "service.disabledHandler.headline" : "{name} is disabled",
45 "invite.name.label": "Nom", 45 "services.getStarted" : "Commencer",
46 "invite.email.label": "Adresse e-mail", 46 "services.welcome" : "Bienvenue sur Franz",
47 "invite.skip.label": "Je veux faire cela plus tard", 47 "settings.account.account.editButton" : "Modifier le compte",
48 "subscription.submit.label": "Je veux soutenir le développement de Franz", 48 "settings.account.accountType.basic" : "Compte basique",
49 "subscription.paymentSessionError": "Impossible d'initialiser le formulaire de paiement", 49 "settings.account.accountType.premium" : "Compte Supporter Premium",
50 "subscription.includedFeatures": "Le compte payant Supporter Premium Franz inclut", 50 "settings.account.buttonSave" : "Mettre à jour le profil",
51 "subscription.features.onpremise": "Add on-premise/hosted services like HipChat", 51 "settings.account.headline" : "Compte",
52 "subscription.features.customServices": "Des services privés pour vous et votre équipe", 52 "settings.account.headlineAccount" : "Informations de compte",
53 "subscription.features.encryptedSync": "Synchronisation de session chiffrée", 53 "settings.account.headlineInvoices" : "Factures",
54 "subscription.features.vpn": "Support des Proxy et VPN", 54 "settings.account.headlinePassword" : "Changer le mot de passe",
55 "subscription.features.ads": "Aucune publicité !", 55 "settings.account.headlineProfile" : "Mettre à jour le profil",
56 "subscription.features.comingSoon": "arrive bientôt", 56 "settings.account.headlineSubscription" : "Votre abonnement",
57 "infobar.servicesUpdated": "Vos services ont été mis à jour.", 57 "settings.account.headlineUpgrade" : "Améliorez votre compte et supportez Franz",
58 "infobar.updateAvailable": "Une nouvelle mise à jour est disponible pour Franz.", 58 "settings.account.invoiceDownload" : "Télécharger",
59 "infobar.buttonReloadServices": "Recharger les services", 59 "settings.account.manageSubscription.label" : "Gérer votre abonnement",
60 "infobar.buttonInstallUpdate": "Redémarrer et installer la mise à jour", 60 "settings.account.mining.active" : "Vous êtes en train d'effectuer {hashes} calculs par seconde.",
61 "infobar.requiredRequestsFailed": "Impossible de charger les services et les informations de l'utilisateur", 61 "settings.account.mining.cancel" : "Annuler le minage",
62 "sidebar.settings": "Paramètres", 62 "settings.account.mining.moreInformation" : "Obtenir plus d'informations",
63 "sidebar.addNewService": "!!!Add new service", 63 "settings.account.mining.thankyou" : "Merci de soutenir Franz avec votre puissance de calcul.",
64 "services.welcome": "Bienvenue sur Franz", 64 "settings.account.successInfo" : "Vos modifications ont été enregistrées",
65 "services.getStarted": "Commencer", 65 "settings.account.tryReloadUserInfoRequest" : "Réessayer",
66 "settings.account.headline": "Compte", 66 "settings.account.userInfoRequestFailed" : "Impossible de charger les informations de l'utilisateur",
67 "settings.account.headlineSubscription": "Votre abonnement", 67 "settings.app.buttonInstallUpdate" : "Redémarrer et installer la mise à jour",
68 "settings.account.headlineUpgrade": "Améliorez votre compte et supportez Franz", 68 "settings.app.buttonSearchForUpdate" : "Vérifier les mises à jour",
69 "settings.account.headlineInvoices": "Factures", 69 "settings.app.currentVersion" : "Version actuelle:",
70 "settings.account.manageSubscription.label": "Gérer votre abonnement", 70 "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan",
71 "settings.account.accountType.basic": "Compte basique", 71 "settings.app.form.autoLaunchOnStart" : "Lancer Franz au démarrage",
72 "settings.account.accountType.premium": "Compte Supporter Premium", 72 "settings.app.form.beta" : "Inclure les versions bêta",
73 "settings.account.account.editButton": "Modifier le compte", 73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.account.invoiceDownload": "Télécharger", 74 "settings.app.form.enableSystemTray" : "Afficher Franz dans la barre d'état système",
75 "settings.account.userInfoRequestFailed": "Impossible de charger les informations de l'utilisateur", 75 "settings.app.form.language" : "Langue",
76 "settings.account.tryReloadUserInfoRequest": "Réessayer", 76 "settings.app.form.minimizeToSystemTray" : "Minimiser Franz dans la zone de notification",
77 "settings.account.headlineProfile": "Mettre à jour le profil", 77 "settings.app.form.runInBackground" : "Ouvrir en arrière-plan",
78 "settings.account.headlineAccount": "Informations de compte", 78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.account.headlinePassword": "Changer le mot de passe", 79 "settings.app.headline" : "Paramètres",
80 "settings.account.successInfo": "Vos modifications ont été enregistrées", 80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.account.buttonSave": "Mettre à jour le profil", 81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.account.mining.thankyou": "Merci de soutenir Franz avec votre puissance de calcul.", 82 "settings.app.headlineGeneral" : "Général",
83 "settings.account.mining.active": "Vous êtes en train d'effectuer {hashes} calculs par seconde.", 83 "settings.app.headlineLanguage" : "Langue",
84 "settings.account.mining.moreInformation": "Obtenir plus d'informations", 84 "settings.app.headlineUpdates" : "Mises à jour",
85 "settings.account.mining.cancel": "Annuler le minage", 85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.navigation.availableServices": "Services disponibles", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Vos services", 87 "settings.app.updateStatusAvailable" : "Mise à jour disponible, téléchargement...",
88 "settings.navigation.account": "Compte", 88 "settings.app.updateStatusSearching" : "Recherche des mises à jour",
89 "settings.navigation.settings": "Paramètres", 89 "settings.app.updateStatusUpToDate" : "Vous utilisez la dernière version de Franz",
90 "settings.navigation.logout": "Se déconnecter", 90 "settings.navigation.account" : "Compte",
91 "settings.recipes.headline": "Services disponibles", 91 "settings.navigation.availableServices" : "Services disponibles",
92 "settings.recipes.mostPopular": "Les plus populaires", 92 "settings.navigation.logout" : "Se déconnecter",
93 "settings.recipes.all": "Tous les services", 93 "settings.navigation.settings" : "Paramètres",
94 "settings.recipes.dev": "Développement", 94 "settings.navigation.yourServices" : "Vos services",
95 "settings.recipes.nothingFound": "Désolé, aucun service ne correspond à votre recherche.", 95 "settings.recipes.all" : "Tous les services",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Service ajouté avec succès", 96 "settings.recipes.dev" : "Développement",
97 "settings.service.form.saveButton": "Enregistrer le service", 97 "settings.recipes.headline" : "Services disponibles",
98 "settings.service.form.deleteButton": "Supprimer le service", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Services disponibles", 99 "settings.recipes.mostPopular" : "Les plus populaires",
100 "settings.service.form.yourServices": "Vos services", 100 "settings.recipes.nothingFound" : "Désolé, aucun service ne correspond à votre recherche.",
101 "settings.service.form.addServiceHeadline": "Ajouter {name}", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Service ajouté avec succès",
102 "settings.service.form.editServiceHeadline": "Modifier {name}", 102 "settings.service.error.goBack" : "Retour aux services",
103 "settings.service.form.tabHosted": "Hébergé", 103 "settings.service.error.headline" : "Erreur",
104 "settings.service.form.tabOnPremise": "Auto-hébergé ⭐️", 104 "settings.service.error.message" : "Impossible de charger le service.",
105 "settings.service.form.customUrlValidationError": "Impossible de valider le {name} personnalisé du serveur.", 105 "settings.service.form.addServiceHeadline" : "Ajouter {name}",
106 "settings.service.form.customUrlPremiumInfo": "Pour ajouter des services auto-hébergés, vous avez besoin d'un compte Supporter Premium Franz.", 106 "settings.service.form.availableServices" : "Services disponibles",
107 "settings.service.form.customUrlUpgradeAccount": "Améliorez votre compte", 107 "settings.service.form.customUrl" : "Serveur personnalisé",
108 "settings.service.form.indirectMessageInfo": "Vous serez averti de tous les nouveaux messages dans un salon, pas seulement @username, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Pour ajouter des services auto-hébergés, vous avez besoin d'un compte Supporter Premium Franz.",
109 "settings.service.error.headline": "Erreur", 109 "settings.service.form.customUrlUpgradeAccount" : "Améliorez votre compte",
110 "settings.service.error.goBack": "Retour aux services", 110 "settings.service.form.customUrlValidationError" : "Impossible de valider le {name} personnalisé du serveur.",
111 "settings.service.error.message": "Could not load service recipe.", 111 "settings.service.form.deleteButton" : "Supprimer le service",
112 "settings.services.tooltip.isDisabled": "Le service est désactivé", 112 "settings.service.form.editServiceHeadline" : "Modifier {name}",
113 "settings.services.tooltip.notificationsDisabled": "Les notifications sont désactivées", 113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.services.headline": "Vos services", 114 "settings.service.form.enableNotification" : "Activer les notifications",
115 "settings.services.noServicesAdded": "Vous n'avez pas encore ajouté de services.", 115 "settings.service.form.enableService" : "Activer le service",
116 "settings.services.discoverServices": "Découvrir des services", 116 "settings.service.form.indirectMessageInfo" : "Vous serez averti de tous les nouveaux messages dans un salon, pas seulement @username, @channel, @here, ...",
117 "settings.services.updatedInfo": "Vos modifications ont été enregistrées", 117 "settings.service.form.indirectMessages" : "Afficher le badge des messages pour tous les nouveaux messages",
118 "settings.services.deletedInfo": "Le service a été supprimé", 118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.app.headline": "Paramètres", 119 "settings.service.form.name" : "Nom",
120 "settings.app.headlineGeneral": "Général", 120 "settings.service.form.saveButton" : "Enregistrer le service",
121 "settings.app.headlineLanguage": "Langue", 121 "settings.service.form.tabHosted" : "Hébergé",
122 "settings.app.headlineUpdates": "Mises à jour", 122 "settings.service.form.tabOnPremise" : "Auto-hébergé ⭐️",
123 "settings.app.buttonSearchForUpdate": "Vérifier les mises à jour", 123 "settings.service.form.team" : "Équipe",
124 "settings.app.buttonInstallUpdate": "Redémarrer et installer la mise à jour", 124 "settings.service.form.yourServices" : "Vos services",
125 "settings.app.updateStatusSearching": "Recherche des mises à jour", 125 "settings.services.deletedInfo" : "Le service a été supprimé",
126 "settings.app.updateStatusAvailable": "Mise à jour disponible, téléchargement...", 126 "settings.services.discoverServices" : "Découvrir des services",
127 "settings.app.updateStatusUpToDate": "Vous utilisez la dernière version de Franz", 127 "settings.services.headline" : "Vos services",
128 "settings.app.form.autoLaunchOnStart": "Lancer Franz au démarrage", 128 "settings.services.noServicesAdded" : "Vous n'avez pas encore ajouté de services.",
129 "settings.app.form.autoLaunchInBackground": "Ouvrir en arrière-plan", 129 "settings.services.tooltip.isDisabled" : "Le service est désactivé",
130 "settings.app.form.minimizeToSystemTray": "Minimiser Franz dans la zone de notification", 130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.app.form.runInBackground": "Gardez Franz en arrière-plan lors de la fermeture de la fenêtre", 131 "settings.services.tooltip.notificationsDisabled" : "Les notifications sont désactivées",
132 "settings.app.form.language": "Langue", 132 "settings.services.updatedInfo" : "Vos modifications ont été enregistrées",
133 "settings.app.form.beta": "Inclure les versions bêta", 133 "settings.user.form.accountType.company" : "Entreprise",
134 "settings.app.currentVersion": "Version actuelle :", 134 "settings.user.form.accountType.individual" : "Individuel",
135 "settings.service.form.name": "Nom", 135 "settings.user.form.accountType.label" : "Type de compte",
136 "settings.service.form.enableService": "Activer le service", 136 "settings.user.form.accountType.non-profit" : "Non lucratif",
137 "settings.service.form.enableNotification": "Activer les notifications", 137 "settings.user.form.currentPassword" : "Mot de passe actuel",
138 "settings.service.form.team": "Équipe", 138 "settings.user.form.email" : "E-mail",
139 "settings.service.form.customUrl": "Serveur personnalisé", 139 "settings.user.form.firstname" : "Prénom",
140 "settings.service.form.indirectMessages": "Afficher le badge des messages pour tous les nouveaux messages", 140 "settings.user.form.lastname" : "Nom",
141 "settings.user.form.firstname": "Prénom", 141 "settings.user.form.newPassword" : "Nouveau mot de passe",
142 "settings.user.form.lastname": "Nom", 142 "sidebar.addNewService" : "Ajouter un nouveau service",
143 "settings.user.form.email": "E-mail", 143 "sidebar.mute" : "Disable audio",
144 "settings.user.form.currentPassword": "Mot de passe actuel", 144 "sidebar.settings" : "Paramètres",
145 "settings.user.form.newPassword": "Nouveau mot de passe", 145 "sidebar.unmute" : "Enable audio",
146 "settings.user.form.accountType.label": "Type de compte", 146 "signup.company.label" : "Entreprise",
147 "settings.user.form.accountType.individual": "Individuel", 147 "signup.email.label" : "Adresse e-mail",
148 "settings.user.form.accountType.non-profit": "Non lucratif", 148 "signup.emailDuplicate" : "Un utilisateur avec cette adresse e-mail existe déjà",
149 "settings.user.form.accountType.company": "Compagnie", 149 "signup.firstname.label" : "Prénom",
150 "subscription.type.free": "gratuit", 150 "signup.headline" : "S'inscrire",
151 "subscription.type.month": "mois", 151 "signup.lastname.label" : "Nom",
152 "subscription.type.year": "année", 152 "signup.legal.info" : "En créant un compte Franz, vous acceptez les",
153 "subscription.type.mining": "Soutenez Franz avec de la puissance de calcul", 153 "signup.legal.privacy" : "Déclaration de confidentialité",
154 "subscription.mining.headline": "Comment cela fonctionne-t-il?", 154 "signup.legal.terms" : "Conditions d'utilisation",
155 "subscription.mining.experimental": "expérimental", 155 "signup.link.login" : "Vous possédez déjà un compte ? Connectez-vous",
156 "subscription.mining.line1": "En activant \"Soutenez Franz avec de la puissance de calcul\", Franz utilisera environ de 20 à 50% de votre CPU pour miner la crypto-monnaie Monero, ce qui équivaut à environ 5$/an.", 156 "signup.password.label" : "Mot de passe",
157 "subscription.mining.line2": "Nous adapterons l'utilisation du processeur en fonction de vos habitudes de travail pour ne pas vider votre batterie et ne pas ralentir votre machine.", 157 "signup.submit.label" : "Créer un compte",
158 "subscription.mining.line3": "Tant que le minage est actif, vous aurez un accès illimité à toutes les fonctionnalités Supporter Premium Franz.", 158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.mining.moreInformation": "Obtenir plus d'informations.", 159 "subscription.features.ads" : "Aucune publicité!",
160 "subscriptionPopup.buttonCancel": "Annuler", 160 "subscription.features.comingSoon" : "arrive bientôt",
161 "subscriptionPopup.buttonDone": "Terminé", 161 "subscription.features.customServices" : "Des services privés pour vous et votre équipe",
162 "tabs.item.reload": "Recharger", 162 "subscription.features.encryptedSync" : "Synchronisation de session chiffrée",
163 "tabs.item.edit": "Modifier", 163 "subscription.features.onpremise" : "Add on-premise\/hosted services like HipChat",
164 "tabs.item.disableNotifications": "Désactiver les notifications", 164 "subscription.features.vpn" : "Support des Proxy et VPN",
165 "tabs.item.enableNotification": "Activer les notifications", 165 "subscription.includedFeatures" : "Le compte payant Supporter Premium Franz inclut",
166 "tabs.item.disableService": "Désactiver le service", 166 "subscription.mining.experimental" : "expérimental",
167 "tabs.item.deleteService": "Supprimer le service" 167 "subscription.mining.headline" : "Comment cela fonctionne-t-il?",
168 "subscription.mining.line1" : "En activant \"Soutenez Franz avec de la puissance de calcul\", Franz utilisera environ de 20 à 50% de votre CPU pour miner la crypto-monnaie Monero, ce qui équivaut à environ 5$\/an.",
169 "subscription.mining.line2" : "Nous adapterons l'utilisation du processeur en fonction de vos habitudes de travail pour ne pas vider votre batterie et ne pas ralentir votre machine.",
170 "subscription.mining.line3" : "Tant que le minage est actif, vous aurez un accès illimité à toutes les fonctionnalités Supporter Premium Franz.",
171 "subscription.mining.moreInformation" : "Obtenir plus d'informations.",
172 "subscription.paymentSessionError" : "Impossible d'initialiser le formulaire de paiement",
173 "subscription.submit.label" : "Je veux soutenir le développement de Franz",
174 "subscription.type.free" : "gratuit",
175 "subscription.type.mining" : "Soutenez Franz avec de la puissance de calcul",
176 "subscription.type.month" : "mois",
177 "subscription.type.year" : "année",
178 "subscriptionPopup.buttonCancel" : "Annuler",
179 "subscriptionPopup.buttonDone" : "Terminé",
180 "tabs.item.deleteService" : "Supprimer le service",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Désactiver les notifications",
183 "tabs.item.disableService" : "Désactiver le service",
184 "tabs.item.edit" : "Modifier",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Activer les notifications",
187 "tabs.item.enableService" : "Activer le service",
188 "tabs.item.reload" : "Recharger",
189 "welcome.loginButton" : "Connectez-vous à votre compte",
190 "welcome.signupButton" : "Créer un compte gratuitement",
191 "welcome.slogan" : "Une messagerie qui fonctionne pour vous"
168} 192}
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json
new file mode 100644
index 000000000..63816cf65
--- /dev/null
+++ b/src/i18n/locales/ga.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Ní fhéadfar nascadh le seirbhísí arlíne Franz",
3 "global.notConnectedToTheInternet" : "Níl tú nasctha leis an Idirlíon.",
4 "import.headline" : "Iompórtáil do chuid seirbhísí Franz 4",
5 "import.notSupportedHeadline" : "Níl na seirbhísí seo taca i Franz 5 go fóill",
6 "import.skip.label" : "Ba mhaith liom seirbhísí a chur leis de láimh",
7 "import.submit.label" : "Iomportaigh seirbhísí",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Atosaigh & suiteáil nuashonrú",
10 "infobar.buttonReloadServices" : "Athlódáil seirbhísí",
11 "infobar.requiredRequestsFailed" : "Ní fhéadfar seirbhísí agus eolas úsáideora a lódáil",
12 "infobar.servicesUpdated" : "Nuashonraítear do chuid seirbhísí.",
13 "infobar.updateAvailable" : "Tá nuashonrú nua do Franz le fáil.",
14 "invite.email.label" : "Seoladh ríomhphoist",
15 "invite.headline.friends" : "Tabhair cuireadh do thriúr de do chairde nó chomhghleacaithe",
16 "invite.name.label" : "Ainm",
17 "invite.skip.label" : "Ba mhaith liom é seo a dhéanamh níos deireanaí",
18 "invite.submit.label" : "Seol cuireadh",
19 "login.email.label" : "Seoladh ríomhphoist",
20 "login.headline" : "Logáil isteach",
21 "login.invalidCredentials" : "Seoladh ríomhphoist nó pasfhocal neamhbhailí",
22 "login.link.password" : "Athshocraigh pasfhocal",
23 "login.link.signup" : "Cruthaigh cuntas saor in aisce",
24 "login.password.label" : "Pasfhocal",
25 "login.serverLogout" : "D'éag do sheisiún, logáil isteach arís le do thoil.",
26 "login.submit.label" : "Logáil isteach",
27 "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arís le do thoil.",
28 "password.email.label" : "Seoladh ríomhphoist",
29 "password.headline" : "Athshocraigh pasfhocal",
30 "password.link.login" : "Logáil isteach i do chúntas",
31 "password.link.signup" : "Cruthaigh cuntas saor in aisce",
32 "password.noUser" : "Níor aimsíodh úsáideoir leis an seoladh ríomhphoist seo",
33 "password.submit.label" : "Cuir isteach",
34 "password.successInfo" : "Seiceáil do chuid ríomhphoist, le do thoil",
35 "pricing.headline" : "Tabhair tacaíocht do Franz",
36 "pricing.link.skipPayment" : "Ní mhaith liom tacaíocht a thabhairt d'fhorbairt Franz.",
37 "pricing.submit.label" : "Ba maith liom tacaíocht a thabhairt d'fhorbairt Franz.",
38 "pricing.support.label" : "Roghnaigh do phlean tacaíochta",
39 "service.crashHandler.action" : "Athlódáil {name}",
40 "service.crashHandler.autoReload" : "Ag baint triail {name} a thabhairt ar ais go huathoibríoch i gceann {seconds} shoicind",
41 "service.crashHandler.headline" : "Ó, ná habair!",
42 "service.crashHandler.text" : "Tá {name} tar éis earraid a dhéanamh.",
43 "service.disabledHandler.action" : "Cumasaigh {name}",
44 "service.disabledHandler.headline" : "Tá {name} díchumasaithe",
45 "services.getStarted" : "Tosaigh",
46 "services.welcome" : "Fáilte go Franz",
47 "settings.account.account.editButton" : "Cuir cuntas in eagar",
48 "settings.account.accountType.basic" : "Bunchuntas",
49 "settings.account.accountType.premium" : "Cuntas Phŕeimhtacadóra Franz",
50 "settings.account.buttonSave" : "Nuashonraigh próifíl",
51 "settings.account.headline" : "Cuntas",
52 "settings.account.headlineAccount" : "Eolas an chuntais",
53 "settings.account.headlineInvoices" : "Sonraisc",
54 "settings.account.headlinePassword" : "Athraigh pasfhocal",
55 "settings.account.headlineProfile" : "Nuashonraigh próifíl",
56 "settings.account.headlineSubscription" : "Do shintiús",
57 "settings.account.headlineUpgrade" : "Uasghrádaigh do chuntas chun tacaíocht a thabhairt do Franz",
58 "settings.account.invoiceDownload" : "Íoslódáil",
59 "settings.account.manageSubscription.label" : "Bainistigh do shintiús",
60 "settings.account.mining.active" : "Tá tú ag déanamh {hashes} áireamh in aghaidh an soicind anois.",
61 "settings.account.mining.cancel" : "Cuir an mhíneáil ar ceal",
62 "settings.account.mining.moreInformation" : "Faigh tuilleadh eolais",
63 "settings.account.mining.thankyou" : "Go raibh maith agat as ucht tacaíocht a thabhairt go Franz le do chumhacht phróiseála.",
64 "settings.account.successInfo" : "Sábhailtear do chuid athruithe",
65 "settings.account.tryReloadUserInfoRequest" : "Atriail",
66 "settings.account.userInfoRequestFailed" : "Ní fheadfar eolas úsáideora a lódáil",
67 "settings.app.buttonInstallUpdate" : "Atosaigh & suiteáil nuashonrú",
68 "settings.app.buttonSearchForUpdate" : "Seiceáil do nuashonruithe",
69 "settings.app.currentVersion" : "Leagan reatha:",
70 "settings.app.form.autoLaunchInBackground" : "Oscail sa chúlra",
71 "settings.app.form.autoLaunchOnStart" : "Láinseáil Franz ón tús",
72 "settings.app.form.beta" : "Cuir leagain béite san áireamh",
73 "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe",
74 "settings.app.form.enableSystemTray" : "Taispeáin Franz i dtrae an chórais",
75 "settings.app.form.language" : "Teanga",
76 "settings.app.form.minimizeToSystemTray" : "Íoslaghdaigh Franz go dtí trae an chórais",
77 "settings.app.form.runInBackground" : "Cóimeád Franz sa chúlra agus an fhuinneog a dhúnadh",
78 "settings.app.form.showDisabledServices" : "Taispeáin tabanna do sheirbhísí díchumasaithe",
79 "settings.app.headline" : "Socruithe",
80 "settings.app.headlineAdvanced" : "Casta",
81 "settings.app.headlineAppearance" : "Dealramh",
82 "settings.app.headlineGeneral" : "Ginearálta",
83 "settings.app.headlineLanguage" : "Teanga",
84 "settings.app.headlineUpdates" : "Nuashonruithe",
85 "settings.app.restartRequired" : "Ní gá tosú arís chun athruithe a chur i bhfeidhm",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Nuashonrú le fáil, ag íoslódáil",
88 "settings.app.updateStatusSearching" : "Ag cuardú le haghaidh nuashonrú",
89 "settings.app.updateStatusUpToDate" : "Tá tú ag baint úsáid as an leagn is deireanaí de Franz",
90 "settings.navigation.account" : "Cuntas",
91 "settings.navigation.availableServices" : "Seirbhísí le fáil",
92 "settings.navigation.logout" : "Logáil amach",
93 "settings.navigation.settings" : "Socruithe",
94 "settings.navigation.yourServices" : "Do chuid seirbhísí",
95 "settings.recipes.all" : "Gach seirbhís",
96 "settings.recipes.dev" : "Forbairt",
97 "settings.recipes.headline" : "Seirbhísí le fáil",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Is coitianta",
100 "settings.recipes.nothingFound" : "Tá brón orm, ach níl seirbhís ar bith ag teacht le do théarma chuardach.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Seirbhís curtha leis go ráthúil",
102 "settings.service.error.goBack" : "Ar ais go dtí seirbhísí",
103 "settings.service.error.headline" : "Earraid",
104 "settings.service.error.message" : "Ní fhéadfar oideas seirbhíse a lódáil.",
105 "settings.service.form.addServiceHeadline" : "Cuir {name} leis",
106 "settings.service.form.availableServices" : "Seirbhísí le fáil",
107 "settings.service.form.customUrl" : "Freastalaí saincheaptha",
108 "settings.service.form.customUrlPremiumInfo" : "Chun seirbhísí féinóstáilte a chur leis, ní gá Cuntas Phŕeimhtacadóra Franz a bheith agat.",
109 "settings.service.form.customUrlUpgradeAccount" : "Uasghrádaigh do chuntas",
110 "settings.service.form.customUrlValidationError" : "Ní fhéadfar seirbhís {name} saincheaptha a dheimhniú",
111 "settings.service.form.deleteButton" : "Scrios seirbhís",
112 "settings.service.form.editServiceHeadline" : "Cuir {name} in eagar",
113 "settings.service.form.enableAudio" : "Cumasaigh fuaim",
114 "settings.service.form.enableNotification" : "Cumasaigh fógraí",
115 "settings.service.form.enableService" : "Cumasaigh seirbhís",
116 "settings.service.form.indirectMessageInfo" : "Fógraítear thú faoi gach teachtaireacht nua i gcainéail, ní amháin @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "Taispeáin comhartha theachtaireachta do theachtaireachtaí nua",
118 "settings.service.form.isMutedInfo" : "Nuair a dhíchumasaítear é seo, tachtar gach fuaim fógraí agus athchasadh fuaime",
119 "settings.service.form.name" : "Ainm",
120 "settings.service.form.saveButton" : "Sábhail seirbhís",
121 "settings.service.form.tabHosted" : "Óstáilte",
122 "settings.service.form.tabOnPremise" : "Féinóstáilte ⭐️",
123 "settings.service.form.team" : "Meitheal",
124 "settings.service.form.yourServices" : "Do chuid seirbhísí",
125 "settings.services.deletedInfo" : "Seirbhís scriosta",
126 "settings.services.discoverServices" : "Aimsigh seirbhísí",
127 "settings.services.headline" : "Do chuid seirbhísí",
128 "settings.services.noServicesAdded" : "Níl aon seirbhís curtha agat fós.",
129 "settings.services.tooltip.isDisabled" : "Seirbhís díchumasaithe",
130 "settings.services.tooltip.isMuted" : "Gach fuaim tachta",
131 "settings.services.tooltip.notificationsDisabled" : "Fógraí díchumasaithe",
132 "settings.services.updatedInfo" : "Sábháiltear do chuid athruithe",
133 "settings.user.form.accountType.company" : "Comhlacht",
134 "settings.user.form.accountType.individual" : "Aonair",
135 "settings.user.form.accountType.label" : "Cineál cuntais",
136 "settings.user.form.accountType.non-profit" : "Neamhbhrabúis",
137 "settings.user.form.currentPassword" : "Pasfhocal reatha",
138 "settings.user.form.email" : "Ríomhphost",
139 "settings.user.form.firstname" : "Céadainm",
140 "settings.user.form.lastname" : "Sloinne",
141 "settings.user.form.newPassword" : "Pasfhocal nua",
142 "sidebar.addNewService" : "Cuir seirbhís nua leis",
143 "sidebar.mute" : "Díchumasaigh fuaim",
144 "sidebar.settings" : "Socruithe",
145 "sidebar.unmute" : "Cumasaigh fuaim",
146 "signup.company.label" : "Comhlacht",
147 "signup.email.label" : "Seoladh ríomhphoist",
148 "signup.emailDuplicate" : "Tá úsáideoir leis an seoladh ríomhphoist sin chean féin",
149 "signup.firstname.label" : "Céadainm",
150 "signup.headline" : "Cláraigh",
151 "signup.lastname.label" : "Sloinne",
152 "signup.legal.info" : "Agus tú ag cruthú cuntais Franz glacann tú leis an",
153 "signup.legal.privacy" : "Ráiteas príobháideachais",
154 "signup.legal.terms" : "Tearmaí seirbhíse",
155 "signup.link.login" : "Cuntas agat cheana féin, logáil isteach?",
156 "signup.password.label" : "Pasfhocal",
157 "signup.submit.label" : "Cruthaigh cuntas",
158 "subscription.euTaxInfo" : "Áithritheoirí an tAÉ: féadfar cáin díolacháin áitiúla a chur i bhfeidhm",
159 "subscription.features.ads" : "Fógraí ar bith, choíche!",
160 "subscription.features.comingSoon" : "ag teacht go luath",
161 "subscription.features.customServices" : "Seirbhísí phríobháideach duitse agus do do mheitheal",
162 "subscription.features.encryptedSync" : "Sionchronú seisiúin chriptithe",
163 "subscription.features.onpremise" : "Cuir seirbhísí óstáilte ar nós HipChat leis",
164 "subscription.features.vpn" : "Tacaíocht seachfhreastalaí & LPF",
165 "subscription.includedFeatures" : "Cuireann Cuntas Phŕeimhtacadóra Franz san áireamh",
166 "subscription.mining.experimental" : "turgnamhach",
167 "subscription.mining.headline" : "Conas a oibríonn sé seo?",
168 "subscription.mining.line1" : "Tar éis chur \"Tabhair tacaíocht le cumhacht phŕóiseála\" ar chumas, bainfidh Franz úsáid as thart ar 20-50\\% de do lárionad próiseála chun an airgeadra digiteach Monero a mhíneáil, a chothromaíonn $5 sa bhliain.",
169 "subscription.mining.line2" : "Cuirimid úsáid an láríonaid próiseála in oiriúint do d'iompar oibre ionas nach mbeidh do cheallra caite agus tú agus do ríomhaire moillithe.",
170 "subscription.mining.line3" : "Fad is go bhfuil an mhianadóir gníomhach, beidh rochtain gan teorainn agat do Phŕeimhghnéithe Taca Franz.",
171 "subscription.mining.moreInformation" : "Faigh tuilleadh eolais faoin bplean seo.",
172 "subscription.paymentSessionError" : "Ní fhéadfar tús a chur leis an bhfoirm íocaíochta",
173 "subscription.submit.label" : "Ba mhaith liom tacaíocht a thabhairt d'fhorbairt Franz",
174 "subscription.type.free" : "saor in aisce",
175 "subscription.type.mining" : "Tabhair tacaíocht do Franz le cumhacht phróiseála",
176 "subscription.type.month" : "mí",
177 "subscription.type.year" : "bliain",
178 "subscriptionPopup.buttonCancel" : "Cuir ar ceal",
179 "subscriptionPopup.buttonDone" : "Déanta",
180 "tabs.item.deleteService" : "Scrios seirbhís",
181 "tabs.item.disableAudio" : "Díchumasaigh fuaim",
182 "tabs.item.disableNotifications" : "Díchumasaigh fógraí",
183 "tabs.item.disableService" : "Díchumasaigh seirbhís",
184 "tabs.item.edit" : "Cuir in eagar",
185 "tabs.item.enableAudio" : "Cumasaigh fuaim",
186 "tabs.item.enableNotification" : "Cumasaigh fógraí",
187 "tabs.item.enableService" : "Cumasaigh seirbhís",
188 "tabs.item.reload" : "Athlódáil",
189 "welcome.loginButton" : "Logáil isteach i do chuntas",
190 "welcome.signupButton" : "Cruthaigh cuntas nua",
191 "welcome.slogan" : "Teachtaireachtaí ag obair leat"
192}
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
new file mode 100644
index 000000000..f62c0ead9
--- /dev/null
+++ b/src/i18n/locales/hu.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Nem lehet csatlakozni a Franz online szolgáltatásaihoz",
3 "global.notConnectedToTheInternet" : "Nincs kapcsolat a kiszolgálóval.",
4 "import.headline" : "Importáld szolgáltatásaidat a Franz 4-ből",
5 "import.notSupportedHeadline" : "Még nem támogatott szolgáltatások a Franz 5-ben",
6 "import.skip.label" : "Kézzel szeretnék szolgáltatást felvenni",
7 "import.submit.label" : "Szolgáltatások importálása",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Újraindítás és a frissítés telepítése",
10 "infobar.buttonReloadServices" : "Szolgáltatások újratöltése",
11 "infobar.requiredRequestsFailed" : "Szolgáltatások és felhasználói információk nem tölthetők be",
12 "infobar.servicesUpdated" : "A szolgáltatások frissítésre kerültek.",
13 "infobar.updateAvailable" : "Új frissítés érhető el a Franz-hoz.",
14 "invite.email.label" : "Email cím",
15 "invite.headline.friends" : "Hívd meg 3 barátodat vagy kollégádat",
16 "invite.name.label" : "Név",
17 "invite.skip.label" : "Későbbre halasztom",
18 "invite.submit.label" : "Meghívók küldése",
19 "login.email.label" : "Email cím",
20 "login.headline" : "Bejelentkezés",
21 "login.invalidCredentials" : "Hibás email cím vagy jelszó",
22 "login.link.password" : "Jelszó visszaállítás",
23 "login.link.signup" : "Új fiók létrehozása",
24 "login.password.label" : "Jelszó",
25 "login.serverLogout" : "A munkamenet lejárt, kérlek lépj be újra.",
26 "login.submit.label" : "Bejelentkezés",
27 "login.tokenExpired" : "A munkamenet lejárt, kérlek lépj be újra.",
28 "password.email.label" : "Email cím",
29 "password.headline" : "Jelszó visszaállítása",
30 "password.link.login" : "Jelentkezz be a fiókodba",
31 "password.link.signup" : "Új fiók létrehozása",
32 "password.noUser" : "Nem található felhasználó a megadott email címmel",
33 "password.submit.label" : "Küldés",
34 "password.successInfo" : "Ellenőrizd az email fiókodat",
35 "pricing.headline" : "Támogasd a Franz-ot",
36 "pricing.link.skipPayment" : "Nem szeretném támogatni a Franz fejlesztését.",
37 "pricing.submit.label" : "Támogatni szeretném a Franz fejlesztését.",
38 "pricing.support.label" : "Válaszd ki a támogatás módját",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Kezdj hozzá",
46 "services.welcome" : "Üdvözöl a Franz",
47 "settings.account.account.editButton" : "Fiók szerkesztése",
48 "settings.account.accountType.basic" : "Alap Fiók",
49 "settings.account.accountType.premium" : "Prémium Támogató Fiók",
50 "settings.account.buttonSave" : "Profil frissítése",
51 "settings.account.headline" : "Fiók",
52 "settings.account.headlineAccount" : "Fiókinformációk",
53 "settings.account.headlineInvoices" : "Számlák",
54 "settings.account.headlinePassword" : "Jelszócsere",
55 "settings.account.headlineProfile" : "Profil frissítése",
56 "settings.account.headlineSubscription" : "Előfizetésed",
57 "settings.account.headlineUpgrade" : "Frissítsd fiókod és támogasd a Franz-ot",
58 "settings.account.invoiceDownload" : "Letöltés",
59 "settings.account.manageSubscription.label" : "Előfizetés kezelése",
60 "settings.account.mining.active" : "Jelenleg {hashes} számítást végzel másodpercenként.",
61 "settings.account.mining.cancel" : "Bányászás megszakítása",
62 "settings.account.mining.moreInformation" : "Több információ",
63 "settings.account.mining.thankyou" : "Köszönjük, hogy számítási kapacitásoddal támogatod a Franz-ot.",
64 "settings.account.successInfo" : "A módosításokat elmentettük",
65 "settings.account.tryReloadUserInfoRequest" : "Próbáld újra",
66 "settings.account.userInfoRequestFailed" : "A felhasználói adatok betöltése sikertelen",
67 "settings.app.buttonInstallUpdate" : "Újraindítás és frissítések telepítése",
68 "settings.app.buttonSearchForUpdate" : "Frissítések keresése",
69 "settings.app.currentVersion" : "Aktuális verzió:",
70 "settings.app.form.autoLaunchInBackground" : "Megnyitás háttérben",
71 "settings.app.form.autoLaunchOnStart" : "Franz betöltése indításkor",
72 "settings.app.form.beta" : "Béta verziók keresése",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Franz mutatása a tálcán",
75 "settings.app.form.language" : "Nyelv",
76 "settings.app.form.minimizeToSystemTray" : "Franz kicsinyítése a tálcára",
77 "settings.app.form.runInBackground" : "Franz fusson a háttérben az ablak bezárásakor",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Beállítások",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "Általános",
83 "settings.app.headlineLanguage" : "Nyelv",
84 "settings.app.headlineUpdates" : "Frissítések",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Frissítés elérhető, letöltés folyamatban...",
88 "settings.app.updateStatusSearching" : "Frissítéseket keres",
89 "settings.app.updateStatusUpToDate" : "A Franz legfrissebb verzióját használod",
90 "settings.navigation.account" : "Fiók",
91 "settings.navigation.availableServices" : "Elérhető szolgáltatások",
92 "settings.navigation.logout" : "Kijelentkezés",
93 "settings.navigation.settings" : "Beállítások",
94 "settings.navigation.yourServices" : "Szolgáltatásaid",
95 "settings.recipes.all" : "Összes szolgáltatás",
96 "settings.recipes.dev" : "Fejlesztés",
97 "settings.recipes.headline" : "Elérhető szolgáltatások",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Legnépszerűbb",
100 "settings.recipes.nothingFound" : "Sajnáljuk, nincs egyezés a szolgáltatások között a keresett kifejezésre.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Szolgáltatás sikeresen hozzáadva.",
102 "settings.service.error.goBack" : "Vissza a szolgáltatásokhoz",
103 "settings.service.error.headline" : "Hiba",
104 "settings.service.error.message" : "Nem tölthető be a szolgáltatás receptje.",
105 "settings.service.form.addServiceHeadline" : "{name} hozzáadása",
106 "settings.service.form.availableServices" : "Elérhető szolgáltatások",
107 "settings.service.form.customUrl" : "Egyéni szerver",
108 "settings.service.form.customUrlPremiumInfo" : "Egyénileg üzemeltetett szolgáltatások hozzáadásához Franz Prémium Támogató Fiók szükséges.",
109 "settings.service.form.customUrlUpgradeAccount" : "Frissítsd fiókodat",
110 "settings.service.form.customUrlValidationError" : "Nem sikerült hitelesíteni az egyéni {name} szervert.",
111 "settings.service.form.deleteButton" : "Szolgáltatás törlése",
112 "settings.service.form.editServiceHeadline" : "{name} szerkesztése",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Értesítések engedélyezése",
115 "settings.service.form.enableService" : "Szolgáltatás engedélyezése",
116 "settings.service.form.indirectMessageInfo" : "Értesítést kapsz minden üzenetről a csatornában, nem csak @felhasználónév, @csatorna @here és egyéb említések esetén",
117 "settings.service.form.indirectMessages" : "Üzenet kitűző megjelenítése minden üzenethez",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Név",
120 "settings.service.form.saveButton" : "Szolgáltatás mentése",
121 "settings.service.form.tabHosted" : "Üzemeltetett",
122 "settings.service.form.tabOnPremise" : "Egyénileg üzemeltetett",
123 "settings.service.form.team" : "Csapat",
124 "settings.service.form.yourServices" : "Szolgáltatásaid",
125 "settings.services.deletedInfo" : "A szolgáltatás törlésre került",
126 "settings.services.discoverServices" : "Szolgáltatások felfedezése",
127 "settings.services.headline" : "Szolgáltatásaid",
128 "settings.services.noServicesAdded" : "Még nem adtál hozzá egyetlen szolgáltatást sem eddig.",
129 "settings.services.tooltip.isDisabled" : "Ez a szolgáltatás le van tiltva.",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "Értesítések letiltva",
132 "settings.services.updatedInfo" : "A módosításokat elmentettük",
133 "settings.user.form.accountType.company" : "Cég",
134 "settings.user.form.accountType.individual" : "Egyén",
135 "settings.user.form.accountType.label" : "Fiók típusa",
136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.user.form.currentPassword" : "Jelenlegi jelszó",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "Új jelszó",
142 "sidebar.addNewService" : "Szolgáltatás hozzáadása",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Beállítások",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Cég",
147 "signup.email.label" : "Email cím",
148 "signup.emailDuplicate" : "Ezzel az e-mail címmel már létezik felhasználó",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Regisztráció",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "A Franz fiók létrehozásával elfogadod az",
153 "signup.legal.privacy" : "Adatvédelmi Nyilatkozatot",
154 "signup.legal.terms" : "Felhasználási Feltételeket",
155 "signup.link.login" : "Már van fiókod? Lépj be!",
156 "signup.password.label" : "Jelszó",
157 "signup.submit.label" : "Fiók létrehozása",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "Hirdetésmentes, mindig!",
160 "subscription.features.comingSoon" : "Hamarosan!",
161 "subscription.features.customServices" : "Privát szolgáltatások neked és a csapatodnak",
162 "subscription.features.encryptedSync" : "Titkosított munkamenet szinkronizálás",
163 "subscription.features.onpremise" : "Helyi\/üzemeltetett szolgáltatások használata, pl. HipChat",
164 "subscription.features.vpn" : "Proxy & VPN támogatás",
165 "subscription.includedFeatures" : "Az előfizetett Franz Prémium Támogató Fiók tartalmazza",
166 "subscription.mining.experimental" : "kísérleti",
167 "subscription.mining.headline" : "Hogyan működik?",
168 "subscription.mining.line1" : "A \"Franz támogatása számítási kapacitással\" opció bekapcsolásával a Franz a CPU teljesítményének 20-50%-át Monero kriptovaluta bányászatához fogja használni, ami évente $5-nak felel meg.",
169 "subscription.mining.line2" : "Alkalmazkodni fog a CPU használat a munkafolyamataidhoz, igyekszik nem terhelni az akkumulátort és lassítani a gépet.",
170 "subscription.mining.line3" : "Amíg a bányász aktív, korlátlan hozzáférésed van minden Franz Prémium Támogató Funkcióhoz.",
171 "subscription.mining.moreInformation" : "Több információ erről az opcióról.",
172 "subscription.paymentSessionError" : "Nem sikerült a fizetési felületet betölteni",
173 "subscription.submit.label" : "Szeretném támogatni a Franz fejlesztését",
174 "subscription.type.free" : "ingyenes",
175 "subscription.type.mining" : "Franz támogatása számítási kapacitással",
176 "subscription.type.month" : "hónap",
177 "subscription.type.year" : "év",
178 "subscriptionPopup.buttonCancel" : "Mégsem",
179 "subscriptionPopup.buttonDone" : "Kész",
180 "tabs.item.deleteService" : "Szolgáltatás törlése",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Értesítések letiltása",
183 "tabs.item.disableService" : "Szolgáltatás letiltása",
184 "tabs.item.edit" : "Szerkesztés",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Értesítések engedélyezése",
187 "tabs.item.enableService" : "Szolgáltatás engedélyezése",
188 "tabs.item.reload" : "Újratöltés",
189 "welcome.loginButton" : "Jelentkezz be a fiókodba",
190 "welcome.signupButton" : "Új fiók létrehozása",
191 "welcome.slogan" : "Üzenetküldés okosan"
192}
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
new file mode 100644
index 000000000..611cad550
--- /dev/null
+++ b/src/i18n/locales/id.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Tidak bisa tersambung ke layanan Franz",
3 "global.notConnectedToTheInternet" : "Anda tidak tersambung ke internet.",
4 "import.headline" : "Impor layanan Franz 4 Anda",
5 "import.notSupportedHeadline" : "Layanan belum didukung di Franz 5",
6 "import.skip.label" : "Saya ingin menambahkan layanan secara manual",
7 "import.submit.label" : "Impor layanan",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Mulai ulang dan instal versi baru",
10 "infobar.buttonReloadServices" : "Muat ulang layanan",
11 "infobar.requiredRequestsFailed" : "Tidak bisa memuat layanan dan informasi pengguna",
12 "infobar.servicesUpdated" : "Layanan Anda telah diperbarui",
13 "infobar.updateAvailable" : "Versi baru Franz tersedia.",
14 "invite.email.label" : "Alamat email",
15 "invite.headline.friends" : "Undang 3 teman atau kolega Anda",
16 "invite.name.label" : "Nama",
17 "invite.skip.label" : "Saya ingin melakukannya nanti saja",
18 "invite.submit.label" : "Kirim undangan",
19 "login.email.label" : "Alamat email",
20 "login.headline" : "Masuk",
21 "login.invalidCredentials" : "Email atau sandi tidak valid",
22 "login.link.password" : "Setel ulang sandi",
23 "login.link.signup" : "Buat akun gratis",
24 "login.password.label" : "Sandi",
25 "login.serverLogout" : "Sesi Anda kedaluwarsa, silakan masuk kembali.",
26 "login.submit.label" : "Masuk",
27 "login.tokenExpired" : "Sesi Anda kedaluwarsa, silakan masuk kembali.",
28 "password.email.label" : "Alamat email",
29 "password.headline" : "Setel ulang sandi",
30 "password.link.login" : "Masuk ke akun Anda",
31 "password.link.signup" : "Buat akun gratis",
32 "password.noUser" : "Tidak ditemukan pengguna dengan email tersebut",
33 "password.submit.label" : "Kirim",
34 "password.successInfo" : "Periksa email Anda",
35 "pricing.headline" : "Dukung Franz",
36 "pricing.link.skipPayment" : "Saya tidak ingin mendukung pengembangan Franz.",
37 "pricing.submit.label" : "Saya ingin mendukung pengembangan Franz",
38 "pricing.support.label" : "Pilih paket dukungan Anda",
39 "service.crashHandler.action" : "Muat Ulang {name}",
40 "service.crashHandler.autoReload" : "Mencoba memulihkan {name} secara otomatis dalam {seconds} detik",
41 "service.crashHandler.headline" : "Ya Ampun!",
42 "service.crashHandler.text" : "{name} menyebabkan kesalahan.",
43 "service.disabledHandler.action" : "Aktifkan {name}",
44 "service.disabledHandler.headline" : "{name} dinonaktifkan",
45 "services.getStarted" : "Memulai",
46 "services.welcome" : "Selamat datang di Franz",
47 "settings.account.account.editButton" : "Edit akun",
48 "settings.account.accountType.basic" : "Akun Dasar",
49 "settings.account.accountType.premium" : "Akun Pendukung Premium",
50 "settings.account.buttonSave" : "Perbarui profil",
51 "settings.account.headline" : "Akun",
52 "settings.account.headlineAccount" : "Informasi akun",
53 "settings.account.headlineInvoices" : "Tagihan",
54 "settings.account.headlinePassword" : "Ubah sandi",
55 "settings.account.headlineProfile" : "Perbarui profil",
56 "settings.account.headlineSubscription" : "Langganan Anda",
57 "settings.account.headlineUpgrade" : "Tingkatkan akun Anda & dukung Franz",
58 "settings.account.invoiceDownload" : "Unduh",
59 "settings.account.manageSubscription.label" : "Kelola langganan Anda",
60 "settings.account.mining.active" : "Anda sedang melakukan menjalankan {hashes} perhitungan per detik.",
61 "settings.account.mining.cancel" : "Batalkan penambangan",
62 "settings.account.mining.moreInformation" : "Dapatkan informasi lebih lanjut",
63 "settings.account.mining.thankyou" : "Terima kasih telah mendukung Franz dengan daya pemrosesan Anda.",
64 "settings.account.successInfo" : "Perubahan Anda telah disimpan",
65 "settings.account.tryReloadUserInfoRequest" : "Coba lagi",
66 "settings.account.userInfoRequestFailed" : "Tidak bisa memuat informasi pengguna",
67 "settings.app.buttonInstallUpdate" : "Mulai ulang dan instal versi baru",
68 "settings.app.buttonSearchForUpdate" : "Periksa versi baru",
69 "settings.app.currentVersion" : "Versi saat ini:",
70 "settings.app.form.autoLaunchInBackground" : "Buka di latar belakang",
71 "settings.app.form.autoLaunchOnStart" : "Jalankan Franz saat komputer dimulai",
72 "settings.app.form.beta" : "Sertakan versi beta",
73 "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan",
74 "settings.app.form.enableSystemTray" : "Tampilkan Franz di baki sistem",
75 "settings.app.form.language" : "Bahasa",
76 "settings.app.form.minimizeToSystemTray" : "Perkecil Franz ke baki sistem",
77 "settings.app.form.runInBackground" : "Tetap jalankan Franz di latar belakang saat menutup jendela",
78 "settings.app.form.showDisabledServices" : "Tampilkan tab layanan yang dinonaktifkan",
79 "settings.app.headline" : "Pengaturan",
80 "settings.app.headlineAdvanced" : "Tingkat Lanjut",
81 "settings.app.headlineAppearance" : "Tampilan",
82 "settings.app.headlineGeneral" : "Umum",
83 "settings.app.headlineLanguage" : "Bahasa",
84 "settings.app.headlineUpdates" : "Versi Baru",
85 "settings.app.restartRequired" : "Perubahan membutuhkan mulai ulang",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Versi baru tersedia, mengunduh...",
88 "settings.app.updateStatusSearching" : "Sedang mencari versi baru",
89 "settings.app.updateStatusUpToDate" : "Anda sedang menggunakan versi terbaru Franz",
90 "settings.navigation.account" : "Akun",
91 "settings.navigation.availableServices" : "Layanan tersedia",
92 "settings.navigation.logout" : "Keluar",
93 "settings.navigation.settings" : "Pengaturan",
94 "settings.navigation.yourServices" : "Layanan Anda",
95 "settings.recipes.all" : "Semua layanan",
96 "settings.recipes.dev" : "Pengembangan",
97 "settings.recipes.headline" : "Layanan tersedia",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Paling populer",
100 "settings.recipes.nothingFound" : "Maaf, tidak ada layanan yang cocok dengan pencarian Anda.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Layanan berhasil ditambahkan",
102 "settings.service.error.goBack" : "Kembali ke layanan",
103 "settings.service.error.headline" : "Kesalahan",
104 "settings.service.error.message" : "Tidak dapat memuat konfigurasi layanan.",
105 "settings.service.form.addServiceHeadline" : "Tambahkan {name}",
106 "settings.service.form.availableServices" : "Layanan tersedia",
107 "settings.service.form.customUrl" : "Server khusus",
108 "settings.service.form.customUrlPremiumInfo" : "Untuk menambahkan layanan yang dijalankan mandiri, Anda membutuhkan Franz Premium Supporter Account.",
109 "settings.service.form.customUrlUpgradeAccount" : "Tingkatkan akun Anda",
110 "settings.service.form.customUrlValidationError" : "Tidak bisa memvalidasi server {name} khusus.",
111 "settings.service.form.deleteButton" : "Hapus layanan",
112 "settings.service.form.editServiceHeadline" : "Edit {name}",
113 "settings.service.form.enableAudio" : "Aktifkan audio",
114 "settings.service.form.enableNotification" : "Aktifkan pemberitahuan",
115 "settings.service.form.enableService" : "Aktifkan layanan",
116 "settings.service.form.indirectMessageInfo" : "Anda akan diberi tahu tentang semua pesan dalam kanal, bukan hanya @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "Tampilkan lencana pesan untuk semua pesan",
118 "settings.service.form.isMutedInfo" : "Saat dinonaktifkan, semua suara notifikasi dan pemutaran audio akan dibisukan",
119 "settings.service.form.name" : "Nama",
120 "settings.service.form.saveButton" : "Simpan layanan",
121 "settings.service.form.tabHosted" : "Hosted",
122 "settings.service.form.tabOnPremise" : "Hosted mandiri",
123 "settings.service.form.team" : "Tim",
124 "settings.service.form.yourServices" : "Layanan Anda",
125 "settings.services.deletedInfo" : "Layanan telah dihapus",
126 "settings.services.discoverServices" : "Temukan layanan",
127 "settings.services.headline" : "Layanan Anda",
128 "settings.services.noServicesAdded" : "Anda belum menambahkan layanan.",
129 "settings.services.tooltip.isDisabled" : "Layanan dinonaktifkan",
130 "settings.services.tooltip.isMuted" : "Semua suara dibisukan",
131 "settings.services.tooltip.notificationsDisabled" : "Pemberitahuan dinonaktifkan",
132 "settings.services.updatedInfo" : "Perubahan telah disimpan",
133 "settings.user.form.accountType.company" : "Perusahaan",
134 "settings.user.form.accountType.individual" : "Pribadi",
135 "settings.user.form.accountType.label" : "Jenis akun",
136 "settings.user.form.accountType.non-profit" : "Nirlaba",
137 "settings.user.form.currentPassword" : "Sandi saat ini",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "Nama Depan",
140 "settings.user.form.lastname" : "Nama Belakang",
141 "settings.user.form.newPassword" : "Sandi baru",
142 "sidebar.addNewService" : "Tambahkan layanan baru",
143 "sidebar.mute" : "Nonaktifkan audio",
144 "sidebar.settings" : "Pengaturan",
145 "sidebar.unmute" : "Aktifkan audio",
146 "signup.company.label" : "Perusahaan",
147 "signup.email.label" : "Alamat email",
148 "signup.emailDuplicate" : "Pengguna dengan alamat email ini sudah ada",
149 "signup.firstname.label" : "Nama Depan",
150 "signup.headline" : "Daftar",
151 "signup.lastname.label" : "Nama Akhir",
152 "signup.legal.info" : "Dengan membuat akun Franz, Anda menyetujui",
153 "signup.legal.privacy" : "Pernyataan Privasi",
154 "signup.legal.terms" : "Ketentuan layanan",
155 "signup.link.login" : "Sudah punya akun, masuk?",
156 "signup.password.label" : "Sandi",
157 "signup.submit.label" : "Buat akun",
158 "subscription.euTaxInfo" : "Warga UE: pajak penjualan lokal mungkin berlaku",
159 "subscription.features.ads" : "Tanpa iklan, selamanya!",
160 "subscription.features.comingSoon" : "segera hadir",
161 "subscription.features.customServices" : "Layanan pribadi untuk Anda dan tim Anda",
162 "subscription.features.encryptedSync" : "Sinkronisasi sesi terenkripsi",
163 "subscription.features.onpremise" : "Layanan add-on premise\/hosten seperti HipChat",
164 "subscription.features.vpn" : "Dukungan proxy & VPN",
165 "subscription.includedFeatures" : "Franz Premium Supporter Account berbayar menyertakan",
166 "subscription.mining.experimental" : "eksperimental",
167 "subscription.mining.headline" : "Bagaimana cara kerjanya?",
168 "subscription.mining.line1" : "Dengan mengaktifkan \"Dukung dengan daya pemrosesan\", Franz akan menggunakan 20%-50% kemampuan CPU Anda untuk menambang mata uang kripto Monero yang sepadan kira-kira $5\/tahun.",
169 "subscription.mining.line2" : "Kami akan menyesuaikan penggunaan CPU berdasarkan perilaku penggunaan komputer Anda agar tidak menghabiskan baterau dan memperlambat Anda dan pekerjaan Anda.",
170 "subscription.mining.line3" : "Selama penambang aktif Anda akan memiliki akses tak terbatas ke Franz Premium Supporter Features.",
171 "subscription.mining.moreInformation" : "Dapatkan informasi lebih lanjut tentang paket ini.",
172 "subscription.paymentSessionError" : "Tidak bisa menginisialisasi formulir pembayaran",
173 "subscription.submit.label" : "Saya ingin mendukung pengembangan Franz",
174 "subscription.type.free" : "gratis",
175 "subscription.type.mining" : "Dukung Franz dengan daya pemrosesan",
176 "subscription.type.month" : "bulan",
177 "subscription.type.year" : "tahun",
178 "subscriptionPopup.buttonCancel" : "Batalkan",
179 "subscriptionPopup.buttonDone" : "Selesai",
180 "tabs.item.deleteService" : "Hapus layanan",
181 "tabs.item.disableAudio" : "Nonaktifkan audio",
182 "tabs.item.disableNotifications" : "Nonaktifkan pemberitahuan",
183 "tabs.item.disableService" : "Nonaktifkan layanan",
184 "tabs.item.edit" : "Edit",
185 "tabs.item.enableAudio" : "Aktifkan audio",
186 "tabs.item.enableNotification" : "Aktifkan pemberitahuan",
187 "tabs.item.enableService" : "Aktifkan layanan",
188 "tabs.item.reload" : "Muat Ulang",
189 "welcome.loginButton" : "Masuk ke akun Anda",
190 "welcome.signupButton" : "Buat akun gratis",
191 "welcome.slogan" : "Perpesanan yang bekerja untuk Anda"
192}
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index dd87599bb..ad3f9b880 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -1,168 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Impossibile connettersi ai servizi online di Franz", 2 "global.api.unhealthy" : "Impossibile collegarsi ai servizi online di Franz",
3 "global.notConnectedToTheInternet": "Non sei connesso ad internet.", 3 "global.notConnectedToTheInternet" : "Non sei connesso a Internet.",
4 "welcome.signupButton": "Iscriviti gratis", 4 "import.headline" : "Importa i tuoi servizi da Franz 4",
5 "welcome.loginButton": "Accedi", 5 "import.notSupportedHeadline" : "Servizi non ancora supportati in Franz 5",
6 "welcome.slogan": "Messagistica che lavora per te", 6 "import.skip.label" : "Voglio aggiungere servizi manualmente",
7 "login.headline": "Accedi", 7 "import.submit.label" : "Importa servizi",
8 "login.email.label": "Indirizzo email", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Password", 9 "infobar.buttonInstallUpdate" : "Riavvia e installa aggiornamento",
10 "login.submit.label": "Accedi", 10 "infobar.buttonReloadServices" : "Ricarica servizi",
11 "login.invalidCredentials": "Email o password non validi", 11 "infobar.requiredRequestsFailed" : "Impossibile caricare servizi e info utente",
12 "login.tokenExpired": "La tua sessione è scaduta, accedi di nuovo per favore.", 12 "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.",
13 "login.serverLogout": "La tua sessione è scaduta, accedi di nuovo per favore.", 13 "infobar.updateAvailable" : "È disponibile un nuovo aggiornamento di Franz.",
14 "login.link.signup": "Iscriviti gratis", 14 "invite.email.label" : "Indirizzo e-mail",
15 "login.link.password": "Reimposta password", 15 "invite.headline.friends" : "Invita 3 dei tuoi amici o colleghi",
16 "password.headline": "Reimposta password", 16 "invite.name.label" : "Nome",
17 "password.email.label": "Indirizzo email", 17 "invite.skip.label" : "Voglio farlo dopo",
18 "password.submit.label": "Invia", 18 "invite.submit.label" : "Invia inviti",
19 "password.noUser": "Non è stato trovato nessun utente con questa email", 19 "login.email.label" : "Indirizzo e-mail",
20 "password.successInfo": "Per favore controlla la tua email", 20 "login.headline" : "Accedi",
21 "password.link.signup": "Iscriviti gratis", 21 "login.invalidCredentials" : "E-mail o password non valide",
22 "password.link.login": "Accedi", 22 "login.link.password" : "Reimposta password",
23 "signup.headline": "Accedi", 23 "login.link.signup" : "Crea un account gratuito",
24 "signup.firstname.label": "Nome", 24 "login.password.label" : "Password",
25 "signup.lastname.label": "Cognome", 25 "login.serverLogout" : "Sessione scaduta, accedi di nuovo.",
26 "signup.email.label": "Indirizzo email", 26 "login.submit.label" : "Accedi",
27 "signup.company.label": "Azienda", 27 "login.tokenExpired" : "Sessione scaduta, accedi di nuovo.",
28 "signup.password.label": "Password", 28 "password.email.label" : "Indirizzo e-mail",
29 "signup.submit.label": "Registrati", 29 "password.headline" : "Reimposta password",
30 "signup.link.login": "Hai già fatto l'iscrizione? Accedi", 30 "password.link.login" : "Accedi al tuo account",
31 "signup.emailDuplicate": "Esiste già un utente con questo indirizzo email", 31 "password.link.signup" : "Crea un account gratuito",
32 "signup.legal.info": "Iscrivendoti a Franz accetti", 32 "password.noUser" : "Non è stato trovato nessun utente con quell'indirizzo e-mail",
33 "signup.legal.terms": "Termini di servizio", 33 "password.submit.label" : "Invia",
34 "signup.legal.privacy": "Informativa sulla Privacy", 34 "password.successInfo" : "Controlla la tua e-mail",
35 "pricing.headline": "Supporta Franz", 35 "pricing.headline" : "Supporta Franz",
36 "pricing.support.label": "Seleziona il tuo piano di sostegno", 36 "pricing.link.skipPayment" : "Non voglio supportare lo sviluppo di Franz",
37 "pricing.submit.label": "Voglio sostenere lo sviluppo di Franz", 37 "pricing.submit.label" : "Voglio supportare lo sviluppo di Franz",
38 "pricing.link.skipPayment": "Non voglio sostenere lo sviluppo Franz.", 38 "pricing.support.label" : "Seleziona il tuo piano di supporto",
39 "import.headline": "Importa i tuoi servizi di Franz 4", 39 "service.crashHandler.action" : "Ricarica {name}",
40 "import.notSupportedHeadline": "Servzi non ancora supportati in Franz 5", 40 "service.crashHandler.autoReload" : "Prova a ripristinare automaticamente {name} in {seconds} secondi",
41 "import.submit.label": "Importa servizi", 41 "service.crashHandler.headline" : "Oh no!",
42 "import.skip.label": "Voglio aggiungere i servizi a mano", 42 "service.crashHandler.text" : "{name} ha causato un errore.",
43 "invite.submit.label": "Manda inviti", 43 "service.disabledHandler.action" : "Abilita {name}",
44 "invite.headline.friends": "Invita 3 dei tuoi amici o colleghi", 44 "service.disabledHandler.headline" : "{name} è disabilitato",
45 "invite.name.label": "Nome", 45 "services.getStarted" : "Iniziamo",
46 "invite.email.label": "Indirizzo email", 46 "services.welcome" : "Benvenuto in Franz",
47 "invite.skip.label": "Voglio farlo dopo", 47 "settings.account.account.editButton" : "Modifica account",
48 "subscription.submit.label": "Voglio sostenere lo sviluppo di Franz", 48 "settings.account.accountType.basic" : "Account Basic",
49 "subscription.paymentSessionError": "Impossibile inizializzare il modulo di pagamento", 49 "settings.account.accountType.premium" : "Premium Supporter Account",
50 "subscription.includedFeatures": "La sottoscrizione a pagamento Franz Premium Supporter include", 50 "settings.account.buttonSave" : "Aggiorna profilo",
51 "subscription.features.onpremise": "Agiunge servizi on-premise/hosted come HipChat", 51 "settings.account.headline" : "Account",
52 "subscription.features.customServices": "Servizi privati per te ed il tuo team", 52 "settings.account.headlineAccount" : "Informazioni account",
53 "subscription.features.encryptedSync": "Sincronizzazione sessione crittografata", 53 "settings.account.headlineInvoices" : "Fatture",
54 "subscription.features.vpn": "Supporto di Proxy e VPN", 54 "settings.account.headlinePassword" : "Cambia password",
55 "subscription.features.ads": "Nessuna pubblicità", 55 "settings.account.headlineProfile" : "Aggiorna profilo",
56 "subscription.features.comingSoon": "Presto disponibile", 56 "settings.account.headlineSubscription" : "La tua sottoscrizione",
57 "infobar.servicesUpdated": "I tuoi servizi sono stati aggiornati.", 57 "settings.account.headlineUpgrade" : "Aggiorna il tuo account e supporta Franz",
58 "infobar.updateAvailable": "È disponibile un nuovo aggiornamento per Franz.", 58 "settings.account.invoiceDownload" : "Scarica",
59 "infobar.buttonReloadServices": "Ricarica i servizi", 59 "settings.account.manageSubscription.label" : "Gestisci la tua sottoscrizione",
60 "infobar.buttonInstallUpdate": "Riavvia e installa l'aggiornamento", 60 "settings.account.mining.active" : "Stai eseguendo {hashes} calcoli al secondo.",
61 "infobar.requiredRequestsFailed": "Impossibile caricare i servizi e le informazioni dell'utente", 61 "settings.account.mining.cancel" : "Annulla mining",
62 "sidebar.settings": "Impostazioni", 62 "settings.account.mining.moreInformation" : "Ottieni ulteriori informazioni",
63 "services.welcome": "Benvenuto in Franz", 63 "settings.account.mining.thankyou" : "Grazier per supportare Franz con la tua potenza di calcolo.",
64 "services.getStarted": "Inizia", 64 "settings.account.successInfo" : "Le tue modifiche sono state salvate",
65 "settings.account.headline": "Conto", 65 "settings.account.tryReloadUserInfoRequest" : "Riprova ancora",
66 "settings.account.headlineSubscription": "La tua sottoscrizione", 66 "settings.account.userInfoRequestFailed" : "Impossibile caricare informazioni utente.",
67 "settings.account.headlineUpgrade": "Aggiorna il tuo conto e supporta Franz", 67 "settings.app.buttonInstallUpdate" : "Riavvia e installa aggiornamento",
68 "settings.account.headlineInvoices": "Fatture", 68 "settings.app.buttonSearchForUpdate" : "Controlla aggiornamenti",
69 "settings.account.manageSubscription.label": "Gestisci la tua sottoscrizione", 69 "settings.app.currentVersion" : "Versione attuale:",
70 "settings.account.accountType.basic": "Conto Base", 70 "settings.app.form.autoLaunchInBackground" : "Apri in secondo piano",
71 "settings.account.accountType.premium": "Conto Premium Supporter", 71 "settings.app.form.autoLaunchOnStart" : "Apri Franz all'avvio",
72 "settings.account.account.editButton": "Modifica conto", 72 "settings.app.form.beta" : "Includi versioni beta",
73 "settings.account.invoiceDownload": "Scarica", 73 "settings.app.form.enableSpellchecking" : "Abilita controllo ortografico",
74 "settings.account.userInfoRequestFailed": "Impossibile caricare le informazioni dell'utente", 74 "settings.app.form.enableSystemTray" : "Mostra Franz nell'area di notifica",
75 "settings.account.tryReloadUserInfoRequest": "Prova ancora", 75 "settings.app.form.language" : "Lingua",
76 "settings.account.headlineProfile": "Aggiorna profilo", 76 "settings.app.form.minimizeToSystemTray" : "Minimizza Franz nell'area di notifica",
77 "settings.account.headlineAccount": "Informazioni sul conto", 77 "settings.app.form.runInBackground" : "Mantieni Franz in esecuzione quando chiudi la finestra",
78 "settings.account.headlinePassword": "Cambia la password", 78 "settings.app.form.showDisabledServices" : "Mostra i tab disabilitati",
79 "settings.account.successInfo": "Le tue modifiche sono state salvate", 79 "settings.app.headline" : "Impostazioni",
80 "settings.account.buttonSave": "Aggiorna profilo", 80 "settings.app.headlineAdvanced" : "Avanzate",
81 "settings.account.mining.thankyou": "Grazie per supportare Franz con la tua potenza di calcolo.", 81 "settings.app.headlineAppearance" : "Aspetto",
82 "settings.account.mining.active": "Al momento stai eseguendo {hashes} calcoli al secondo.", 82 "settings.app.headlineGeneral" : "Generale",
83 "settings.account.mining.moreInformation": "Ottieni piú informazioni", 83 "settings.app.headlineLanguage" : "Lingua",
84 "settings.account.mining.cancel": "Annulla mining", 84 "settings.app.headlineUpdates" : "Aggiornamenti",
85 "settings.navigation.availableServices": "Servizi disponibili", 85 "settings.app.restartRequired" : "Le modifiche richiedono un riavvio",
86 "settings.navigation.yourServices": "I tuoi servizi", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.account": "Conto", 87 "settings.app.updateStatusAvailable" : "Aggiornamento disponibile, download in corso...",
88 "settings.navigation.settings": "Impostazioni", 88 "settings.app.updateStatusSearching" : "È in ricerca di un aggiornamento",
89 "settings.navigation.logout": "Disconnetti", 89 "settings.app.updateStatusUpToDate" : "Stai utilizzando l'ultima versione di Franz",
90 "settings.recipes.headline": "Servizi disponibili", 90 "settings.navigation.account" : "Account",
91 "settings.recipes.mostPopular": "Piú popolari", 91 "settings.navigation.availableServices" : "Servizi disponibili",
92 "settings.recipes.all": "Tutti i servizi", 92 "settings.navigation.logout" : "Esci",
93 "settings.recipes.dev": "Sviluppo", 93 "settings.navigation.settings" : "Impostazioni",
94 "settings.recipes.nothingFound": "Mi dispiace, nessuno servizio corrisponde alla tua ricerca.", 94 "settings.navigation.yourServices" : "I tuoi servizi",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Servizio aggiunto con successo", 95 "settings.recipes.all" : "Tutti i servizi",
96 "settings.service.form.saveButton": "Salva servizio", 96 "settings.recipes.dev" : "Sviluppo",
97 "settings.service.form.deleteButton": "Elimina servizio", 97 "settings.recipes.headline" : "Servizi disponibili",
98 "settings.service.form.availableServices": "Servizi disponibili", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.yourServices": "I tuoi servizi", 99 "settings.recipes.mostPopular" : "Più popolari",
100 "settings.service.form.addServiceHeadline": "Aggiungi {name}", 100 "settings.recipes.nothingFound" : "Ci dispiace, ma nessun servizio corrisponde alla tua ricerca.",
101 "settings.service.form.editServiceHeadline": "Modifica {name}", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Servizio aggiunto con successo",
102 "settings.service.form.tabHosted": "Hosted", 102 "settings.service.error.goBack" : "Indietro ai servizi",
103 "settings.service.form.tabOnPremise": "Self hosted ⭐️", 103 "settings.service.error.headline" : "Errore",
104 "settings.service.form.customUrlValidationError": "Impossibile validare il server personale {name}.", 104 "settings.service.error.message" : "Impossibile caricare il servizio.",
105 "settings.service.form.customUrlPremiumInfo": "Per aggiungere servizi self hosted devi avere un conto Franz Premium Supporter.", 105 "settings.service.form.addServiceHeadline" : "Aggiungi {name}",
106 "settings.service.form.customUrlUpgradeAccount": "Aggiorna il tuo conto", 106 "settings.service.form.availableServices" : "Servizi disponibili",
107 "settings.service.form.indirectMessageInfo": "Riceverai notifiche per tutti i nuovi messaggi in un canale, non solo @username, @channel, @here, ...", 107 "settings.service.form.customUrl" : "Server personalizzato",
108 "settings.service.error.headline": "Errore", 108 "settings.service.form.customUrlPremiumInfo" : "Per aggiungere servizi self hosted, devi avere un account Franz da Premium Supporter.",
109 "settings.service.error.goBack": "Torna ai servizi", 109 "settings.service.form.customUrlUpgradeAccount" : "Aggiorna il tuo account",
110 "settings.service.error.message": "Impossibile caricare le specifiche del servizio.", 110 "settings.service.form.customUrlValidationError" : "Impossibile validare il server personalizzato {name}.",
111 "settings.services.tooltip.isDisabled": "Il servizio è disabilitato", 111 "settings.service.form.deleteButton" : "Elimina servizio",
112 "settings.services.tooltip.notificationsDisabled": "Le notifiche sono disabilitate", 112 "settings.service.form.editServiceHeadline" : "Modifica {name}",
113 "settings.services.headline": "I tuoi servizi", 113 "settings.service.form.enableAudio" : "Abilita audio",
114 "settings.services.noServicesAdded": "Non hai ancora aggiunto nessun servizio.", 114 "settings.service.form.enableNotification" : "Attiva notifiche",
115 "settings.services.discoverServices": "Trova servizi", 115 "settings.service.form.enableService" : "Attiva servizio",
116 "settings.services.updatedInfo": "Le tue modifiche sono state salvate", 116 "settings.service.form.indirectMessageInfo" : "Verrai notificato di tutti i messaggi in un canale, non solo @username, @channel, @here, ...",
117 "settings.services.deletedInfo": "Il servizio è stato eliminato", 117 "settings.service.form.indirectMessages" : "Mostra il simbolo del messaggio per tutti i messaggi",
118 "settings.app.headline": "Impostazioni", 118 "settings.service.form.isMutedInfo" : "Quando disabilitato, tutte le notifiche sonore e le riproduzioni audio saranno disattivate",
119 "settings.app.headlineGeneral": "Generale", 119 "settings.service.form.name" : "Nome",
120 "settings.app.headlineLanguage": "Lingua", 120 "settings.service.form.saveButton" : "Salva servizio",
121 "settings.app.headlineUpdates": "Aggiornamento", 121 "settings.service.form.tabHosted" : "Hosted",
122 "settings.app.buttonSearchForUpdate": "Controlla aggiornamento versione", 122 "settings.service.form.tabOnPremise" : "Self hosted ⭐️",
123 "settings.app.buttonInstallUpdate": "Riavvia e installa l'aggiornamento", 123 "settings.service.form.team" : "Team",
124 "settings.app.updateStatusSearching": "Sto cercando l'aggiornamento", 124 "settings.service.form.yourServices" : "I tuoi servizi",
125 "settings.app.updateStatusAvailable": "Aggiornamento disponibile, scarico...", 125 "settings.services.deletedInfo" : "Il servizio è stato eliminato",
126 "settings.app.updateStatusUpToDate": "You are using the latest version of Franz", 126 "settings.services.discoverServices" : "Scopri servizi",
127 "settings.app.form.autoLaunchOnStart": "Lancia Franz all'avvio", 127 "settings.services.headline" : "I tuoi servizi",
128 "settings.app.form.autoLaunchInBackground": "Apri in background", 128 "settings.services.noServicesAdded" : "Non aggiunto ancora nessun servizio.",
129 "settings.app.form.enableSystemTray": "Mostra Franz nella zona delle notifiche di sistema", 129 "settings.services.tooltip.isDisabled" : "Servizio disattivato",
130 "settings.app.form.minimizeToSystemTray": "Minimizza Franz nella zona delle notifiche di sistema", 130 "settings.services.tooltip.isMuted" : "Tutti i suoni sono disattivati",
131 "settings.app.form.runInBackground": "Maniteni Franz attivo in background quando chiudi la finestra", 131 "settings.services.tooltip.notificationsDisabled" : "Le notifiche sono state disattivate",
132 "settings.app.form.language": "Lingua", 132 "settings.services.updatedInfo" : "Le modifiche sono state salvate",
133 "settings.app.form.beta": "Includi versioni beta", 133 "settings.user.form.accountType.company" : "Società",
134 "settings.app.currentVersion": "Versione corrente:", 134 "settings.user.form.accountType.individual" : "Individuo",
135 "settings.service.form.name": "Nome", 135 "settings.user.form.accountType.label" : "Tipo account",
136 "settings.service.form.enableService": "Abilita servizio", 136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.service.form.enableNotification": "Abilita notifiche", 137 "settings.user.form.currentPassword" : "Password attuale",
138 "settings.service.form.team": "Team", 138 "settings.user.form.email" : "E-mail",
139 "settings.service.form.customUrl": "Server personale", 139 "settings.user.form.firstname" : "Nome",
140 "settings.service.form.indirectMessages": "Mostra il badge del messaggio per tutti i nuovi messaggi", 140 "settings.user.form.lastname" : "Cognome",
141 "settings.user.form.firstname": "Nome", 141 "settings.user.form.newPassword" : "Nuova password",
142 "settings.user.form.lastname": "Cognome", 142 "sidebar.addNewService" : "Aggiungi nuovo servizio",
143 "settings.user.form.email": "Email", 143 "sidebar.mute" : "Disabilita audio",
144 "settings.user.form.currentPassword": "Password corrente", 144 "sidebar.settings" : "Impostazioni",
145 "settings.user.form.newPassword": "Nuova password", 145 "sidebar.unmute" : "Abilita audio",
146 "settings.user.form.accountType.label": "Tipo di conto", 146 "signup.company.label" : "Società",
147 "settings.user.form.accountType.individual": "Individuale", 147 "signup.email.label" : "Indirizzo e-mail",
148 "settings.user.form.accountType.non-profit": "Non-Profit", 148 "signup.emailDuplicate" : "Esiste già un utente con lo stesso indirizzo e-mail",
149 "settings.user.form.accountType.company": "Azienda", 149 "signup.firstname.label" : "Nome",
150 "subscription.type.free": "gratis", 150 "signup.headline" : "Iscriviti",
151 "subscription.type.month": "mese", 151 "signup.lastname.label" : "Cognome",
152 "subscription.type.year": "anno", 152 "signup.legal.info" : "Creato un account Franz accetti",
153 "subscription.type.mining": "Supporta Franz con della potenza di calcolo", 153 "signup.legal.privacy" : "Informativa sulla Privacy",
154 "subscription.mining.headline": "Come funziona?", 154 "signup.legal.terms" : "Termini del Servizio",
155 "subscription.mining.experimental": "sperimentale", 155 "signup.link.login" : "Hai già un account, accedi?",
156 "subscription.mining.line1": "Abilitando \"Supporta Franz con della potenza di calcolo\",Franz userà circa il 20-50% della tua CPU per fare il mining della criptovaluta Monero che equivale approssimativamente a 5$/anno.", 156 "signup.password.label" : "Password",
157 "subscription.mining.line2": "Adatteremo l'utilizzo della CPU in base all tue abitudini di lavoro per non scaricare la tua batteria e rallentare la tua macchina.", 157 "signup.submit.label" : "Crea un account",
158 "subscription.mining.line3": "Fino a che il mining è attivo, avrai accesso illimitato a tutte le funzionalità del conto Franz Premium Supporter.", 158 "subscription.euTaxInfo" : "Residente nella Comunità Europea, possono essere applicate tasse locali",
159 "subscription.mining.moreInformation": "Ottieni più informazioni su questo piano.", 159 "subscription.features.ads" : "Nessuna pubblicità, mai!",
160 "subscriptionPopup.buttonCancel": "Annulla", 160 "subscription.features.comingSoon" : "in arrivo",
161 "subscriptionPopup.buttonDone": "Fatto", 161 "subscription.features.customServices" : "Servizi privati per te e il tuo team",
162 "tabs.item.reload": "Ricarica", 162 "subscription.features.encryptedSync" : "Sincronizzazione sessione crittografata",
163 "tabs.item.edit": "Modifica", 163 "subscription.features.onpremise" : "Aggiungi servizi on-premise\/hostati come HipChat",
164 "tabs.item.disableNotifications": "Disabilita le notifiche", 164 "subscription.features.vpn" : "Supporto Proxy e VPN",
165 "tabs.item.enableNotification": "Abilita le notifiche", 165 "subscription.includedFeatures" : "L'account Franz a pagamento Premium Supporter include",
166 "tabs.item.disableService": "Disabilita servizio", 166 "subscription.mining.experimental" : "sperimentale",
167 "tabs.item.deleteService": "Elimina servizio" 167 "subscription.mining.headline" : "Come funziona?",
168 "subscription.mining.line1" : "Attivando il \"Supporto con potenza di calcolo\", Franz utilizzerà circa il 20-50% della tua CPU per minare la criptomoneta Monero che equivale a circa 5$\/anno.",
169 "subscription.mining.line2" : "Adatteremo l'utilizzo della CPU in base al carico di lavoro per non drenare la batteria e rallentare la tua macchina.",
170 "subscription.mining.line3" : "Avrai accesso illimitato a tutte le caratteristiche Premium Supporter finché che il mining sarà attivo.",
171 "subscription.mining.moreInformation" : "Ottieni maggiori informazioni su questo piano.",
172 "subscription.paymentSessionError" : "Impossibile inizializzare il form del pagamento",
173 "subscription.submit.label" : "Voglio supportare lo sviluppo di Franz",
174 "subscription.type.free" : "gratis",
175 "subscription.type.mining" : "Supporta Franz con potenza di calcolo",
176 "subscription.type.month" : "mese",
177 "subscription.type.year" : "anno",
178 "subscriptionPopup.buttonCancel" : "Annulla",
179 "subscriptionPopup.buttonDone" : "Fatto",
180 "tabs.item.deleteService" : "Elimina servizio",
181 "tabs.item.disableAudio" : "Disattiva audio",
182 "tabs.item.disableNotifications" : "Disattiva notifiche",
183 "tabs.item.disableService" : "Disattiva servizio",
184 "tabs.item.edit" : "Modifica",
185 "tabs.item.enableAudio" : "Attiva audio",
186 "tabs.item.enableNotification" : "Attiva notifiche",
187 "tabs.item.enableService" : "Attiva servizio",
188 "tabs.item.reload" : "Ricarica",
189 "welcome.loginButton" : "Accedi al tuo account",
190 "welcome.signupButton" : "Crea un account gratuito",
191 "welcome.slogan" : "Messaging that works for you"
168} 192}
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 98b7cbb19..e091f1f5b 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -1,169 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Franzオンラインサービスに接続できません。", 2 "global.api.unhealthy" : "Franzオンラインサービスに接続できません。",
3 "global.notConnectedToTheInternet": "Internetに接続されていません。", 3 "global.notConnectedToTheInternet" : "Internetに接続されていません。",
4 "welcome.signupButton": "無料アカウントを作成", 4 "import.headline" : "Franz 4サービスのインポート",
5 "welcome.loginButton": "アカウントにログイン", 5 "import.notSupportedHeadline" : "サービスはFranz 5ではまだ対応されていません",
6 "welcome.slogan": "Messaging that works for you", 6 "import.skip.label" : "サービスの追加は後で行う",
7 "login.headline": "サインイン", 7 "import.submit.label" : "サービスのインポート",
8 "login.email.label": "メールアドレス", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "パスワード", 9 "infobar.buttonInstallUpdate" : "再起動して更新をインストールする",
10 "login.submit.label": "サインイン", 10 "infobar.buttonReloadServices" : "サービスのリロード",
11 "login.invalidCredentials": "メールアドレスかパスワードに誤りがあります。", 11 "infobar.requiredRequestsFailed" : "サービスとユーザー情報が読み込めません",
12 "login.tokenExpired": "セッションが切れました。ログインし直して下さい。", 12 "infobar.servicesUpdated" : "サービスが更新されました。",
13 "login.serverLogout": "セッションが切れました。ログインし直して下さい。", 13 "infobar.updateAvailable" : "Franzの新しい更新があります。",
14 "login.link.signup": "無料アカウントを作成", 14 "invite.email.label" : "メールアドレス",
15 "login.link.password": "パスワードをリセット", 15 "invite.headline.friends" : "あなたの友人や同僚の方を3名までFranzに招待できます",
16 "password.headline": "パスワードをリセット", 16 "invite.name.label" : "氏名",
17 "password.email.label": "メールアドレス", 17 "invite.skip.label" : "後にする",
18 "password.submit.label": "送信", 18 "invite.submit.label" : "招待を送る",
19 "password.noUser": "このメールアドレスは登録されていません", 19 "login.email.label" : "メールアドレス",
20 "password.successInfo": "メールを確認して下さい", 20 "login.headline" : "サインイン",
21 "password.link.signup": "無料アカウントを作成", 21 "login.invalidCredentials" : "メールアドレスかパスワードに誤りがあります",
22 "password.link.login": "サインイン", 22 "login.link.password" : "パスワードをリセット",
23 "signup.headline": "アカウントの作成", 23 "login.link.signup" : "無料アカウントを作成",
24 "signup.firstname.label": "名", 24 "login.password.label" : "パスワード",
25 "signup.lastname.label": "姓", 25 "login.serverLogout" : "セッションが切れました。ログインし直して下さい。",
26 "signup.email.label": "メールアドレス", 26 "login.submit.label" : "サインイン",
27 "signup.company.label": "会社名", 27 "login.tokenExpired" : "セッションが切れました。ログインし直して下さい。",
28 "signup.password.label": "パスワード", 28 "password.email.label" : "メールアドレス",
29 "signup.submit.label": "作成する", 29 "password.headline" : "パスワードのリセット",
30 "signup.link.login": "アカウントを既に持っていますか? こちらからサインイン", 30 "password.link.login" : "サインイン",
31 "signup.emailDuplicate": "このメールアドレスは既に登録されています", 31 "password.link.signup" : "無料アカウントを作成",
32 "signup.legal.info": "Franzアカウントを作成することで、以下の規約に同意したものとみなします", 32 "password.noUser" : "このメールアドレスは登録されていません",
33 "signup.legal.terms": "利用規約", 33 "password.submit.label" : "送信",
34 "signup.legal.privacy": "プライバシーについて", 34 "password.successInfo" : "メールを確認して下さい",
35 "pricing.headline": "Franzを支援する", 35 "pricing.headline" : "Franzを支援する",
36 "pricing.support.label": "プランを選択して下さい", 36 "pricing.link.skipPayment" : "Franzの開発を支援しない。",
37 "pricing.submit.label": "Franzの開発を支援したい", 37 "pricing.submit.label" : "Franzの開発を支援したい。",
38 "pricing.link.skipPayment": "Franzの開発を支援しない", 38 "pricing.support.label" : "プランを選択して下さい",
39 "import.headline": "Franz 4サービスのインポート", 39 "service.crashHandler.action" : "{name} をリロード",
40 "import.notSupportedHeadline": "サービスの機能はFranz 5ではまだ対応されていません", 40 "service.crashHandler.autoReload" : "{seconds}秒後、自動的に{name}の復旧を試みます",
41 "import.submit.label": "サービスのインポート", 41 "service.crashHandler.headline" : "しまった!",
42 "import.skip.label": "サービスの追加は後で行う", 42 "service.crashHandler.text" : "{name}はエラーを起こしました。",
43 "invite.submit.label": "招待を送る", 43 "service.disabledHandler.action" : "{name}を有効にする",
44 "invite.headline.friends": "あなたの友人や同僚の方を3名までFranzに招待できます", 44 "service.disabledHandler.headline" : "{name}は無効です",
45 "invite.name.label": "氏名", 45 "services.getStarted" : "はじめる",
46 "invite.email.label": "メールアドレス", 46 "services.welcome" : "Franzにようこそ",
47 "invite.skip.label": "後にする", 47 "settings.account.account.editButton" : "アカウントの編集",
48 "subscription.submit.label": "Franzの開発を支援したい", 48 "settings.account.accountType.basic" : "Basicアカウント",
49 "subscription.paymentSessionError": "支払いフォームを初期化出来ません", 49 "settings.account.accountType.premium" : "Premium Supporterアカウント",
50 "subscription.includedFeatures": "Franz Premium Supporter有料アカウントには以下が含まれます", 50 "settings.account.buttonSave" : "プロフィールの更新",
51 "subscription.features.onpremise": "HipChatのようなオンプレミス/ホスト型サービスの追加", 51 "settings.account.headline" : "アカウント",
52 "subscription.features.customServices": "あなたとあなたのチームのためのプライベートサービス", 52 "settings.account.headlineAccount" : "アカウント情報",
53 "subscription.features.encryptedSync": "暗号化されたセッションの同期", 53 "settings.account.headlineInvoices" : "請求書",
54 "subscription.features.vpn": "プロキシサーバーとVPNのサポート", 54 "settings.account.headlinePassword" : "パスワードの変更",
55 "subscription.features.ads": "広告は一切ありません!", 55 "settings.account.headlineProfile" : "プロフィールの更新",
56 "subscription.features.comingSoon": "まもなく登場", 56 "settings.account.headlineSubscription" : "サブスクリプション内容",
57 "infobar.servicesUpdated": "サービスが更新されました", 57 "settings.account.headlineUpgrade" : "アカウントをアップグレードし、Franzを支援する",
58 "infobar.updateAvailable": "Franzの新しい更新があります", 58 "settings.account.invoiceDownload" : "ダウンロード",
59 "infobar.buttonReloadServices": "Serviceのリロード", 59 "settings.account.manageSubscription.label" : "サブスクリプションの管理",
60 "infobar.buttonInstallUpdate": "再起動して更新をインストールする", 60 "settings.account.mining.active" : "1秒あたり{hashes}個のハッシュを計算中です。",
61 "infobar.requiredRequestsFailed": "サービスとユーザー情報が読み込めません", 61 "settings.account.mining.cancel" : "マイニングをキャンセルする",
62 "sidebar.settings": "設定", 62 "settings.account.mining.moreInformation" : "詳細を確認する",
63 "sidebar.addNewService": "!!!Add new service", 63 "settings.account.mining.thankyou" : "お使いのPCの処理能力をFranzの支援に活用して頂き、ありがとうございます。",
64 "services.welcome": "Franzにようこそ", 64 "settings.account.successInfo" : "変更内容が保存されました",
65 "services.getStarted": "はじめる", 65 "settings.account.tryReloadUserInfoRequest" : "再試行",
66 "settings.account.headline": "アカウント", 66 "settings.account.userInfoRequestFailed" : "ユーザ情報を読み込めませんでした",
67 "settings.account.headlineSubscription": "サブスクリプション内容", 67 "settings.app.buttonInstallUpdate" : "再起動して更新をインストールする",
68 "settings.account.headlineUpgrade": "アカウントをアップグレードし、Franzを支援する", 68 "settings.app.buttonSearchForUpdate" : "更新の確認",
69 "settings.account.headlineInvoices": "インボイス", 69 "settings.app.currentVersion" : "現在のバージョン:",
70 "settings.account.manageSubscription.label": "サブスクリプションの管理", 70 "settings.app.form.autoLaunchInBackground" : "バックグラウンドで開く",
71 "settings.account.accountType.basic": "Basicアカウント", 71 "settings.app.form.autoLaunchOnStart" : "システム起動時にFranzを開く",
72 "settings.account.accountType.premium": "Premium Supporterアカウント", 72 "settings.app.form.beta" : "Betaバージョンを含める",
73 "settings.account.account.editButton": "アカウントを編集する", 73 "settings.app.form.enableSpellchecking" : "スペルチェックを有効にする",
74 "settings.account.invoiceDownload": "ダウンロード", 74 "settings.app.form.enableSystemTray" : "Franzをシステムトレイに表示する",
75 "settings.account.userInfoRequestFailed": "ユーザー情報が読み込めません", 75 "settings.app.form.language" : "言語",
76 "settings.account.tryReloadUserInfoRequest": "リトライ", 76 "settings.app.form.minimizeToSystemTray" : "Franzをシステムトレイに最小化する",
77 "settings.account.headlineProfile": "プロフィールを更新する", 77 "settings.app.form.runInBackground" : "ウインドウを閉じた際にFranzをバックグラウンドで実行させておく",
78 "settings.account.headlineAccount": "アカウント情報", 78 "settings.app.form.showDisabledServices" : "無効化されたサービスのタブを表示する",
79 "settings.account.headlinePassword": "パスワードを変更する", 79 "settings.app.headline" : "設定",
80 "settings.account.successInfo": "変更内容が保存されました", 80 "settings.app.headlineAdvanced" : "詳細",
81 "settings.account.buttonSave": "プロフィールを更新", 81 "settings.app.headlineAppearance" : "表示スタイル",
82 "settings.account.mining.thankyou": "お使いのPCの処理能力をFranzの支援に活用して頂き、ありがとうございます。", 82 "settings.app.headlineGeneral" : "一般",
83 "settings.account.mining.active": "1秒あたり{hashes}個のハッシュを計算中です。", 83 "settings.app.headlineLanguage" : "言語",
84 "settings.account.mining.moreInformation": "詳細を確認する", 84 "settings.app.headlineUpdates" : "更新",
85 "settings.account.mining.cancel": "マイニングをキャンセルする", 85 "settings.app.restartRequired" : "変更には再起動が必要です",
86 "settings.navigation.availableServices": "利用可能なサービス", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "利用中のサービス", 87 "settings.app.updateStatusAvailable" : "更新が見つかりました。ダウンロードしています...",
88 "settings.navigation.account": "アカウント", 88 "settings.app.updateStatusSearching" : "更新を確認中",
89 "settings.navigation.settings": "設定", 89 "settings.app.updateStatusUpToDate" : "お使いのFranzは最新です",
90 "settings.navigation.logout": "ログアウト", 90 "settings.navigation.account" : "アカウント",
91 "settings.recipes.headline": "利用可能なサービス", 91 "settings.navigation.availableServices" : "利用可能なサービス",
92 "settings.recipes.mostPopular": "最も人気", 92 "settings.navigation.logout" : "ログアウト",
93 "settings.recipes.all": "全てのサービス", 93 "settings.navigation.settings" : "設定",
94 "settings.recipes.dev": "開発版", 94 "settings.navigation.yourServices" : "利用中のサービス",
95 "settings.recipes.nothingFound": "すみませんが、検索ワードに該当するサービスが見つかりませんでした。", 95 "settings.recipes.all" : "すべてのサービス",
96 "settings.recipes.servicesSuccessfulAddedInfo": "サービスが追加されました", 96 "settings.recipes.dev" : "開発版",
97 "settings.service.form.saveButton": "サービスを保存する", 97 "settings.recipes.headline" : "利用可能なサービス",
98 "settings.service.form.deleteButton": "サービスを削除する", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "利用可能なサービス", 99 "settings.recipes.mostPopular" : "最も人気",
100 "settings.service.form.yourServices": "利用中のサービス", 100 "settings.recipes.nothingFound" : "すみませんが、検索ワードに該当するサービスが見つかりませんでした。",
101 "settings.service.form.addServiceHeadline": "{name}を追加", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "サービスが追加されました",
102 "settings.service.form.editServiceHeadline": "{name}を編集", 102 "settings.service.error.goBack" : "サービスに戻る",
103 "settings.service.form.tabHosted": "ホスト", 103 "settings.service.error.headline" : "エラー",
104 "settings.service.form.tabOnPremise": "セルフホスト ⭐️", 104 "settings.service.error.message" : "サービスのレシピを読み込めませんでした。",
105 "settings.service.form.customUrlValidationError": "カスタムサービス{name}を検証できませんでした。", 105 "settings.service.form.addServiceHeadline" : "{name}を追加",
106 "settings.service.form.customUrlPremiumInfo": "独自サービスを追加するためには、Franz Premium Supporterアカウントが必要です。", 106 "settings.service.form.availableServices" : "利用可能なサービス",
107 "settings.service.form.customUrlUpgradeAccount": "アカウントをアップグレードする", 107 "settings.service.form.customUrl" : "独自サーバー",
108 "settings.service.form.indirectMessageInfo": "@username、@channel、@hereだけでなく、チャンネル内のすべての新規メッセージについて通知されます。", 108 "settings.service.form.customUrlPremiumInfo" : "独自サービスを追加するためには、Franz Premium Supporterアカウントが必要です。",
109 "settings.service.error.headline": "エラー", 109 "settings.service.form.customUrlUpgradeAccount" : "アカウントをアップグレードする",
110 "settings.service.error.goBack": "サービスに戻る", 110 "settings.service.form.customUrlValidationError" : "独自サーバー{name}を検証できませんでした。",
111 "settings.service.error.message": "サービスのレシピが読み込めません。", 111 "settings.service.form.deleteButton" : "サービスの削除",
112 "settings.services.tooltip.isDisabled": "サービスが無効です", 112 "settings.service.form.editServiceHeadline" : "{name}を編集",
113 "settings.services.tooltip.notificationsDisabled": "通知が無効です", 113 "settings.service.form.enableAudio" : "オーディオの有効化",
114 "settings.services.headline": "利用中のサービス", 114 "settings.service.form.enableNotification" : "通知を有効にする",
115 "settings.services.noServicesAdded": "まだ、どのサービスも追加されていません。", 115 "settings.service.form.enableService" : "サービスを有効にする",
116 "settings.services.discoverServices": "サービスを見つける", 116 "settings.service.form.indirectMessageInfo" : "@username、@channel、@hereだけでなく、チャンネル内のすべての新規メッセージについて通知されます。",
117 "settings.services.updatedInfo": "変更内容が保存されました", 117 "settings.service.form.indirectMessages" : "すべての新規メッセージについてバッジを表示する",
118 "settings.services.deletedInfo": "サービスが削除されました", 118 "settings.service.form.isMutedInfo" : "無効化されている場合、全ての通知音やオーディオ再生は無音になります",
119 "settings.app.headline": "設定", 119 "settings.service.form.name" : "サービス名",
120 "settings.app.headlineGeneral": "一般", 120 "settings.service.form.saveButton" : "サービスの保存",
121 "settings.app.headlineLanguage": "言語", 121 "settings.service.form.tabHosted" : "ホスト",
122 "settings.app.headlineUpdates": "更新", 122 "settings.service.form.tabOnPremise" : "セルフホスト ⭐️",
123 "settings.app.buttonSearchForUpdate": "更新の確認", 123 "settings.service.form.team" : "チーム",
124 "settings.app.buttonInstallUpdate": "再起動して更新をインストール", 124 "settings.service.form.yourServices" : "利用中のサービス",
125 "settings.app.updateStatusSearching": "更新を確認中", 125 "settings.services.deletedInfo" : "サービスが削除されました",
126 "settings.app.updateStatusAvailable": "更新が見つかりました。ダウンロードしています...", 126 "settings.services.discoverServices" : "サービスを探す",
127 "settings.app.updateStatusUpToDate": "お使いのFranzは最新です", 127 "settings.services.headline" : "利用中のサービス",
128 "settings.app.form.autoLaunchOnStart": "システム起動時にFranzを開く", 128 "settings.services.noServicesAdded" : "まだ、どのサービスも追加されていません。",
129 "settings.app.form.autoLaunchInBackground": "バックグラウンドで開く", 129 "settings.services.tooltip.isDisabled" : "サービスが無効です",
130 "settings.app.form.enableSystemTray": "Franzをシステムトレイに表示する", 130 "settings.services.tooltip.isMuted" : "無音となっています",
131 "settings.app.form.minimizeToSystemTray": "Franzをシステムトレイに最小化する", 131 "settings.services.tooltip.notificationsDisabled" : "通知は無効です",
132 "settings.app.form.runInBackground": "ウインドウを閉じた際にFranzをバックグラウンドで実行させておく", 132 "settings.services.updatedInfo" : "変更内容が保存されました",
133 "settings.app.form.language": "言語", 133 "settings.user.form.accountType.company" : "法人",
134 "settings.app.form.beta": "Betaバージョンを含める", 134 "settings.user.form.accountType.individual" : "個人",
135 "settings.app.currentVersion": "現在のバージョン:", 135 "settings.user.form.accountType.label" : "アカウントの種類",
136 "settings.service.form.name": "サービス名", 136 "settings.user.form.accountType.non-profit" : "非営利",
137 "settings.service.form.enableService": "サービスを有効にする", 137 "settings.user.form.currentPassword" : "現在のパスワード",
138 "settings.service.form.enableNotification": "通知を有効にする", 138 "settings.user.form.email" : "メールアドレス",
139 "settings.service.form.team": "チーム", 139 "settings.user.form.firstname" : "名",
140 "settings.service.form.customUrl": "カスタムサーバー", 140 "settings.user.form.lastname" : "姓",
141 "settings.service.form.indirectMessages": "すべての新規メッセージについてバッジを表示する", 141 "settings.user.form.newPassword" : "新しいパスワード",
142 "settings.user.form.firstname": "名", 142 "sidebar.addNewService" : "サービスを追加",
143 "settings.user.form.lastname": "姓", 143 "sidebar.mute" : "オーディオの無効化",
144 "settings.user.form.email": "メールアドレス", 144 "sidebar.settings" : "設定",
145 "settings.user.form.currentPassword": "現在のパスワード", 145 "sidebar.unmute" : "オーディオの有効化",
146 "settings.user.form.newPassword": "新しいパスワード", 146 "signup.company.label" : "法人",
147 "settings.user.form.accountType.label": "アカウントの種類", 147 "signup.email.label" : "メールアドレス",
148 "settings.user.form.accountType.individual": "個人", 148 "signup.emailDuplicate" : "このメールアドレスは既に登録されています",
149 "settings.user.form.accountType.non-profit": "非営利", 149 "signup.firstname.label" : "名",
150 "settings.user.form.accountType.company": "法人", 150 "signup.headline" : "アカウントの作成",
151 "subscription.type.free": "無料", 151 "signup.lastname.label" : "姓",
152 "subscription.type.month": "月間", 152 "signup.legal.info" : "Franzアカウントを作成することで、以下の規約に同意したものとみなします",
153 "subscription.type.year": "年間", 153 "signup.legal.privacy" : "プライバシーについて",
154 "subscription.type.mining": "PCの処理能力を使ってFranzを支援する", 154 "signup.legal.terms" : "利用規約",
155 "subscription.mining.headline": "これはどのような仕組みですか", 155 "signup.link.login" : "アカウントを既に持っていますか? こちらからサインイン",
156 "subscription.mining.experimental": "実験的", 156 "signup.password.label" : "パスワード",
157 "subscription.mining.line1": "\"PCの処理能力を使ってFranzを支援する\"を有効にすることで、Franzはおよそ20-50%のCPUパワーを暗号通貨Moneroのマイニングに使用し、これはおよそ年間で5ドル分にあたります。", 157 "signup.submit.label" : "アカウントの作成",
158 "subscription.mining.line2": "処理能力に基づいてCPUの使用率を適応しますのでバッテリーを無駄に消費したり、システムを遅くすることはありません。", 158 "subscription.euTaxInfo" : "EU在住者 : 地域の消費税が適用される可能性があります",
159 "subscription.mining.line3": "マイニングが機能している限り、Franz Premium Supporterの全ての機能を無制限で利用できます。", 159 "subscription.features.ads" : "広告は一切ありません!",
160 "subscription.mining.moreInformation": "このプランの詳細を確認する。", 160 "subscription.features.comingSoon" : "まもなく登場",
161 "subscriptionPopup.buttonCancel": "キャンセルしました", 161 "subscription.features.customServices" : "あなたとあなたのチームのためのプライベートサービス",
162 "subscriptionPopup.buttonDone": "完了しました", 162 "subscription.features.encryptedSync" : "暗号化されたセッションの同期",
163 "tabs.item.reload": "リロード", 163 "subscription.features.onpremise" : "HipChatのようなオンプレミス\/ホスト型サービスの追加",
164 "tabs.item.edit": "編集", 164 "subscription.features.vpn" : "プロキシサーバーとVPNのサポート",
165 "tabs.item.disableNotifications": "通知を無効にする", 165 "subscription.includedFeatures" : "Franz Premium Supporter有料アカウントには以下が含まれます",
166 "tabs.item.enableNotification": "通知を有効にする", 166 "subscription.mining.experimental" : "試験的",
167 "tabs.item.disableService": "サービスを無効にする", 167 "subscription.mining.headline" : "これはどのように機能しますか?",
168 "tabs.item.deleteService": "サービスを削除する" 168 "subscription.mining.line1" : "\"PCの処理能力を使ってFranzを支援する\"を有効にすることで、Franzはおよそ20-50%のCPUパワーを暗号通貨Moneroのマイニングに使用し、これはおよそ年間で5ドル分に相当します。",
169 "subscription.mining.line2" : "処理能力に基づいてCPUの使用率を適応しますのでバッテリーを無駄に消費したり、システムを遅くすることはありません。",
170 "subscription.mining.line3" : "マイニングが機能している限り、Franz Premium Supporterの全ての機能を無制限で利用できます。",
171 "subscription.mining.moreInformation" : "このプランの詳細を確認する。",
172 "subscription.paymentSessionError" : "支払いフォームを初期化出来ません",
173 "subscription.submit.label" : "Franzの開発を支援したい",
174 "subscription.type.free" : "無料",
175 "subscription.type.mining" : "PCの処理能力を使ってFranzを支援する",
176 "subscription.type.month" : "月間",
177 "subscription.type.year" : "年間",
178 "subscriptionPopup.buttonCancel" : "キャンセル",
179 "subscriptionPopup.buttonDone" : "完了",
180 "tabs.item.deleteService" : "サービスを削除する",
181 "tabs.item.disableAudio" : "オーディオの無効化",
182 "tabs.item.disableNotifications" : "通知を無効にする",
183 "tabs.item.disableService" : "サービスを無効にする",
184 "tabs.item.edit" : "編集",
185 "tabs.item.enableAudio" : "オーディオの有効化",
186 "tabs.item.enableNotification" : "通知を有効にする",
187 "tabs.item.enableService" : "サービスを有効にする",
188 "tabs.item.reload" : "再読み込み",
189 "welcome.loginButton" : "アカウントにログイン",
190 "welcome.signupButton" : "無料アカウントを作成",
191 "welcome.slogan" : "Messaging that works for you"
169} 192}
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json
new file mode 100644
index 000000000..30337cc61
--- /dev/null
+++ b/src/i18n/locales/ka.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Franz-ის ონლაინ სერვისთან დაკავშირება ვერ მოხერხდა",
3 "global.notConnectedToTheInternet" : "თქვენ არ ხართ ინტერნეტთან დაკავშირებული.",
4 "import.headline" : "შემოიტანე Franz 4-ის სერვისები",
5 "import.notSupportedHeadline" : "სერვისები ჯერ არ არის მხარდაჭერილი Franz 5-ში",
6 "import.skip.label" : "მსურს სერვისების ხელით დამატება",
7 "import.submit.label" : "მოწვევის გაგზავნა",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "გადატვირთეთ და დააყენეთ განახლება",
10 "infobar.buttonReloadServices" : "სერვისების გადატვირთვა ",
11 "infobar.requiredRequestsFailed" : "სერვისებისა და მომხმარებლის ინფორმაციის ჩატვირთვა ვერ მოხერხდა",
12 "infobar.servicesUpdated" : "თქვენი სერვისები განახლებულია.",
13 "infobar.updateAvailable" : "განახლება Franz-ისთვის ხელმისაწვდომია.",
14 "invite.email.label" : "მეილი",
15 "invite.headline.friends" : "მოიწვიეთ 3 თქვენი მეგობარი ან კოლეგა",
16 "invite.name.label" : "სახელი ",
17 "invite.skip.label" : "ამას მოგვიანებით გავაკეთებ",
18 "invite.submit.label" : "მოწვევის გაგზავნა",
19 "login.email.label" : "მეილი",
20 "login.headline" : "შესვლა",
21 "login.invalidCredentials" : "მეილი ან პაროლი არასწორია",
22 "login.link.password" : "პაროლის აღდგენა",
23 "login.link.signup" : "ანგარიშის შექმნა",
24 "login.password.label" : "პაროლი ",
25 "login.serverLogout" : "თქვენს სესიას ვადა გაუვიდა, შედით ანგარიშში ხელახლა.",
26 "login.submit.label" : "შესვლა",
27 "login.tokenExpired" : "თქვენს სესიას ვადა გაუვიდა, შედით ანგარიშში ხელახლა.",
28 "password.email.label" : "მეილი",
29 "password.headline" : "პაროლის აღდგენა",
30 "password.link.login" : "შედით თქვენს ანგარიშში",
31 "password.link.signup" : "ანგარიშის შექმნა",
32 "password.noUser" : "მომხმარებელი მითითებული მეილით ვერ მოიძებნა",
33 "password.submit.label" : "დადასტურება",
34 "password.successInfo" : "გთხოვთ შეამოწმეთ მეილი",
35 "pricing.headline" : "Franz-ის მხარდაჭერა",
36 "pricing.link.skipPayment" : "არ მინდა ხელი შევუწყო Franz-ის განვითარებას.",
37 "pricing.submit.label" : "მინდა ხელი შევუწყო Franz-ის განვითარებას",
38 "pricing.support.label" : "აირჩიეთ თქვენი მხარდაჭერის გეგმა",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "დაწყება",
46 "services.welcome" : "მოგესალმებით Franz-ზე",
47 "settings.account.account.editButton" : "ანგარიშის მართვა",
48 "settings.account.accountType.basic" : "ძირითადი ანგარიში",
49 "settings.account.accountType.premium" : "პრემიუმ მხარდამჭერის ანგარიში",
50 "settings.account.buttonSave" : "პროფილის განახლება",
51 "settings.account.headline" : "ანგარიში",
52 "settings.account.headlineAccount" : "ანგარიშის ინფორმაცია",
53 "settings.account.headlineInvoices" : "ინვოისები",
54 "settings.account.headlinePassword" : "პაროლის შეცვლა",
55 "settings.account.headlineProfile" : "პროფილის განახლება",
56 "settings.account.headlineSubscription" : "თქვენი გამოწერა",
57 "settings.account.headlineUpgrade" : "განაახლეთ თქვენი ანგარიში და მხარი დაუჭირეთ Franz-ს",
58 "settings.account.invoiceDownload" : "გადმოწერა",
59 "settings.account.manageSubscription.label" : "თქვენი გამოწერის მართვა",
60 "settings.account.mining.active" : "თქვენ ახლა ასრულებთ {hashes} გაანგარიშებას წამში.",
61 "settings.account.mining.cancel" : "მაინინგის გაუქმება",
62 "settings.account.mining.moreInformation" : "მეტი ინფორმაციის მიღება",
63 "settings.account.mining.thankyou" : "გმადლობთ Franz-ის მხარდაჭერისთვის.",
64 "settings.account.successInfo" : "თქვენი ცვლილებები შენახულია",
65 "settings.account.tryReloadUserInfoRequest" : "სცადეთ ხელახლა",
66 "settings.account.userInfoRequestFailed" : "მომხმარებლის ინფორმაციის ჩატვირთვა ვერ მოხერხდა",
67 "settings.app.buttonInstallUpdate" : "გადატვირთეთ და დააყენეთ განახლება",
68 "settings.app.buttonSearchForUpdate" : "განახლებების შემოწმება",
69 "settings.app.currentVersion" : "ამჟამინდელი ვერსია:",
70 "settings.app.form.autoLaunchInBackground" : "გახსენით ფონზე",
71 "settings.app.form.autoLaunchOnStart" : "გაეშვას Franz სისტემის ჩატვირთვისას",
72 "settings.app.form.beta" : "ჩართეთ ბეტა ვერსიები",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "აჩვენეთ Franz სისტემის უჯრაში",
75 "settings.app.form.language" : "ენა",
76 "settings.app.form.minimizeToSystemTray" : "ჩაკეცეთ Franz სისტემის უჯრაში",
77 "settings.app.form.runInBackground" : "დატოვეთ Franz გაშვებული როდესაც ფანჯარა დაიხურება",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "პარამეტრები",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "მთავარი",
83 "settings.app.headlineLanguage" : "ენა",
84 "settings.app.headlineUpdates" : "განახლებები",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "განახლება ხელმისაწვდომია, იწყება გადმოწერა...",
88 "settings.app.updateStatusSearching" : "მიმდინარეობს განახლების ძიება",
89 "settings.app.updateStatusUpToDate" : "თქვენ იყენებთ Franz-ის უახლეს ვერსიას",
90 "settings.navigation.account" : "ანგარიში",
91 "settings.navigation.availableServices" : "ხელმისაწვდომი სერვისები",
92 "settings.navigation.logout" : "გასვლა",
93 "settings.navigation.settings" : "პარამეტრები",
94 "settings.navigation.yourServices" : "თქვენი სერვისები",
95 "settings.recipes.all" : "ყველა სერვისი",
96 "settings.recipes.dev" : "განვითარება",
97 "settings.recipes.headline" : "ხელმისაწვდომი სერვისები",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "ყველაზე პოპულარული",
100 "settings.recipes.nothingFound" : "უკაცრავად, მაგრამ არცერთი სერვისი არ შეესაბამება თქვენს ძიებას.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "სერვისი წარმატებით დაემატა",
102 "settings.service.error.goBack" : "სერვისებში დაბრუნება",
103 "settings.service.error.headline" : "შეცდომა",
104 "settings.service.error.message" : "სერვისის ჩატვირთვა ვერ მოხერხდა.",
105 "settings.service.form.addServiceHeadline" : "დაამატე {name}",
106 "settings.service.form.availableServices" : "ხელმისაწვდომი სერვისები",
107 "settings.service.form.customUrl" : "კერძო სერვერი",
108 "settings.service.form.customUrlPremiumInfo" : "თვით დაჰოსტილი სერვისების დასამატებლად საჭიროა Franz-ის პრემიუმ მხარდამჭერის ანგარიში.",
109 "settings.service.form.customUrlUpgradeAccount" : "განაახლეთ თქვენი ანგარიში",
110 "settings.service.form.customUrlValidationError" : "ვერ დადასტურდა {name} კერძო სერვერი.",
111 "settings.service.form.deleteButton" : "სერვისის წაშლა",
112 "settings.service.form.editServiceHeadline" : "შეასწორე {name}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "შეტყობინებების ჩართვა",
115 "settings.service.form.enableService" : "სერვისის ჩართვა",
116 "settings.service.form.indirectMessageInfo" : "თქვენ მიიღებთ შეტყობინებას ყოველი ახალი შეტყობინებისას არხზე, არამარტო @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "აჩვენე შეტყობინებების ნიშანი ყოველი ახალი შეტყობინებისთვის",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "სახელი",
120 "settings.service.form.saveButton" : "სერვისის შენახვა",
121 "settings.service.form.tabHosted" : "დაჰოსტილი",
122 "settings.service.form.tabOnPremise" : "თვით დაჰოსტილი ⭐️",
123 "settings.service.form.team" : "გუნდი",
124 "settings.service.form.yourServices" : "თქვენი სერვისები",
125 "settings.services.deletedInfo" : "სერვისი წაიშალა",
126 "settings.services.discoverServices" : "აღმოაჩინეთ სერვისები",
127 "settings.services.headline" : "თქვენი სერვისები",
128 "settings.services.noServicesAdded" : "თქვენ ჯერ არ გაქვთ სერვისები დამატებული.",
129 "settings.services.tooltip.isDisabled" : "სერვისი გათიშულია",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "შეტყობინებები გათიშულია",
132 "settings.services.updatedInfo" : "ცვლილებები შენახულია",
133 "settings.user.form.accountType.company" : "კომპანია",
134 "settings.user.form.accountType.individual" : "ინდივიდუალური",
135 "settings.user.form.accountType.label" : "ანგარიშის ტიპი",
136 "settings.user.form.accountType.non-profit" : "არაკომერციული",
137 "settings.user.form.currentPassword" : "ამჟამინდელი პაროლი",
138 "settings.user.form.email" : "მეილი",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "ახალი პაროლი",
142 "sidebar.addNewService" : "Add new service",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "პარამეტრები",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "კომპანია",
147 "signup.email.label" : "მეილი",
148 "signup.emailDuplicate" : "მომხმარებელი ამ მეილით უკვე არსებობს",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "ანგარიშის შექმნა",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "Franz-ის ანგარიშის შექმნით თქვენ ეთანხმებით",
153 "signup.legal.privacy" : "კონფიდენციალურობის შესახებ",
154 "signup.legal.terms" : "მომსახურების პირობები",
155 "signup.link.login" : "უკვე გაქვთ ანგარიში?",
156 "signup.password.label" : "პაროლი",
157 "signup.submit.label" : "ანგარიშის შექმნა",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "არანაირი რეკლამები, არასდროს!",
160 "subscription.features.comingSoon" : "მალე",
161 "subscription.features.customServices" : "პირადი მომსახურება თქვენთვის და თქვენი გუნდისთვის",
162 "subscription.features.encryptedSync" : "დაშიფრული სესიის სინქრონიზაცია",
163 "subscription.features.onpremise" : "on-premise\/hosted სერვისების დამატება, როგორიცაა HipChat",
164 "subscription.features.vpn" : "Proxy-სა და VPN-ის მხარდაჭერა",
165 "subscription.includedFeatures" : "ფასიანი Franz-ის პრემიუმ მხარმდამჭერი ანგარიში",
166 "subscription.mining.experimental" : "ექსპერიმენტული",
167 "subscription.mining.headline" : "როგორ მუშაობს?",
168 "subscription.mining.line1" : "\"პროცესორული დამუშავების ძალით მხარდაჭერის\" გააქტიურებით, Franz გამოიყენებს თქვენი პროცესორის 20-50% სიმძლავრეს Monero კრიპტოვალუტის მაინინგისთვის, რომელიც დაახლოებით გამოიმუშავებს $5-ს წელიწადში.",
169 "subscription.mining.line2" : "ჩვენ მოვახდენთ პროცესორის გამოყენების ადაპტირებას, რათა არ გაითიშოს თქვენი ბატარეა ან შეაყოვნოს თქვენი მოწყობილობა.",
170 "subscription.mining.line3" : "სანამ მაინიგი მიმდინარეობს, თქვენ გექნებათ ულიმიტო წვდომა ყველა Franz-ის პრემიუმ მხარდამჭერის მახასიათებლებზე.",
171 "subscription.mining.moreInformation" : "მიიღეთ მეტი ინფორმაცია ამის შესახებ.",
172 "subscription.paymentSessionError" : "გადახდის ფორმატის ინიციალიზაცია ვერ მოხერხდა",
173 "subscription.submit.label" : "მინდა ხელი შევუწყო Franz-ის განვითარებას",
174 "subscription.type.free" : "უფასო",
175 "subscription.type.mining" : "Franz-ის მხარდაჭერა პროცესორული დამუშავების ძალით",
176 "subscription.type.month" : "თვე",
177 "subscription.type.year" : "წელი",
178 "subscriptionPopup.buttonCancel" : "გაუქმება",
179 "subscriptionPopup.buttonDone" : "შესრულებულია",
180 "tabs.item.deleteService" : "სერვისის წაშლა",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "შეტყობინებების გამორთვა",
183 "tabs.item.disableService" : "სერვისის გაუქმება",
184 "tabs.item.edit" : "რედაქტირება",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "შეტყობინებების ჩართვა",
187 "tabs.item.enableService" : "სერვისის ჩართვა",
188 "tabs.item.reload" : "ჩატვირთვა",
189 "welcome.loginButton" : "შედით თქვენს ანგარიშში",
190 "welcome.signupButton" : "შექმენი ანგარიში, ეს უფასოა",
191 "welcome.slogan" : "შეტყობინების აპლიკაცია, რომელიც მუშაობს შენთვის"
192}
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index a19d51b2b..70ae4467e 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -1,168 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Kan geen verbinding maken met de Franz online services", 2 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services",
3 "global.notConnectedToTheInternet": "Je bent niet verbonden met het internet.", 3 "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.",
4 "welcome.signupButton": "Maak een gratis account aan", 4 "import.headline" : "Importeer je Franz 4 services",
5 "welcome.loginButton": "Inloggen op je account", 5 "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5",
6 "welcome.slogan": "Messaging that works for you", 6 "import.skip.label" : "Ik wil handmatig een service toevoegen",
7 "login.headline": "Inloggen", 7 "import.submit.label" : "Importeer services",
8 "login.email.label": "E-mailadres", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Wachtwoord", 9 "infobar.buttonInstallUpdate" : "Start opnieuw op & installeer de update",
10 "login.submit.label": "Log in", 10 "infobar.buttonReloadServices" : "Herlaad de services",
11 "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig", 11 "infobar.requiredRequestsFailed" : "Kan de services en gebruikers informatie niet laden",
12 "login.tokenExpired": "Je sessie is verlopen, log opnieuw in a.u.b..", 12 "infobar.servicesUpdated" : "Je services zijn geüpdatet.",
13 "login.serverLogout": "Je sessie is verlopen, log opnieuw in a.u.b..", 13 "infobar.updateAvailable" : "Een nieuwe update voor Franz is beschikbaar.",
14 "login.link.signup": "Gratis account aanmaken", 14 "invite.email.label" : "E-mailadres",
15 "login.link.password": "Wachtwoord resetten", 15 "invite.headline.friends" : "Nodig 3 van je vrienden of collega's uit",
16 "password.headline": "Wachtwoord resetten", 16 "invite.name.label" : "Naam",
17 "password.email.label": "E-mailadres", 17 "invite.skip.label" : "Ik wil dit later doen",
18 "password.submit.label": "Doorgaan", 18 "invite.submit.label" : "Verzend uitnodigingen",
19 "password.noUser": "Geen gebruiker met dit e-mailadres gevonden", 19 "login.email.label" : "E-mailadres",
20 "password.successInfo": "Kijk je mail na", 20 "login.headline" : "Inloggen",
21 "password.link.signup": "Gratis account aanmaken", 21 "login.invalidCredentials" : "E-mailadres of wachtwoord ongeldig",
22 "password.link.login": "Inloggen op je account", 22 "login.link.password" : "Wachtwoord resetten",
23 "signup.headline": "Registreren", 23 "login.link.signup" : "Maak een gratis account",
24 "signup.firstname.label": "Naam", 24 "login.password.label" : "Wachtwoord",
25 "signup.lastname.label": "Achternaam", 25 "login.serverLogout" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
26 "signup.email.label": "E-mailadres", 26 "login.submit.label" : "Log in",
27 "signup.company.label": "Bedrijf", 27 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
28 "signup.password.label": "Wachtwoord", 28 "password.email.label" : "E-mailadres",
29 "signup.submit.label": "Account aanmaken", 29 "password.headline" : "Wachtwoord resetten",
30 "signup.link.login": "Al een account, inloggen?", 30 "password.link.login" : "Log in op je account",
31 "signup.emailDuplicate": "Er bestaat reeds een gebruiker met dat e-mailadres", 31 "password.link.signup" : "Maak een gratis account",
32 "signup.legal.info": "Door een account aan te maken aanvaard je de", 32 "password.noUser" : "Geen gebruiker bekend met dat e-mailadres",
33 "signup.legal.terms": "Servicevoorwaarden", 33 "password.submit.label" : "Doorgaan",
34 "signup.legal.privacy": "Privacyverklaring", 34 "password.successInfo" : "Controleer alsjeblieft je e-mail",
35 "pricing.headline": "Franz Steunen", 35 "pricing.headline" : "Ondersteun Franz",
36 "pricing.support.label": "Selecteer je steunplan", 36 "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Franz niet ondersteunen.",
37 "pricing.submit.label": "Ik wil de ontwikkeling van Franz steunen", 37 "pricing.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen",
38 "pricing.link.skipPayment": "Ik wil de ontwikkeling van Franz niet steunen.", 38 "pricing.support.label" : "Selecteer je ondersteuningsplan",
39 "import.headline": "Je Franz 4 services importeren", 39 "service.crashHandler.action" : "Reload {name}",
40 "import.notSupportedHeadline": "Services nog niet ondersteund in Franz 5", 40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "import.submit.label": "Services importeren", 41 "service.crashHandler.headline" : "Oh no!",
42 "import.skip.label": "Ik wil services handmatig toevoegen", 42 "service.crashHandler.text" : "{name} has caused an error.",
43 "invite.submit.label": "Uitnodiging sturen", 43 "service.disabledHandler.action" : "Enable {name}",
44 "invite.headline.friends": "3 van je vrienden of collega's uitnodigen", 44 "service.disabledHandler.headline" : "{name} is disabled",
45 "invite.name.label": "Naam", 45 "services.getStarted" : "Beginnen",
46 "invite.email.label": "E-mailadres", 46 "services.welcome" : "Welkom bij Franz",
47 "invite.skip.label": "Ik wil dit later doen", 47 "settings.account.account.editButton" : "Bewerk account",
48 "subscription.submit.label": "Ik wil de ontwikkeling van Franz steunen", 48 "settings.account.accountType.basic" : "Basis Account",
49 "subscription.paymentSessionError": "Betalingsformulier kon niet geladen worden", 49 "settings.account.accountType.premium" : "Premium Supporter Account",
50 "subscription.includedFeatures": "Een betalend account voor Franz omvat", 50 "settings.account.buttonSave" : "Profiel aanpassen",
51 "subscription.features.onpremise": "Intern gehoste services zoals HipChat", 51 "settings.account.headline" : "Account",
52 "subscription.features.customServices": "Persoonlijke services voor jou en je team", 52 "settings.account.headlineAccount" : "Account informatie",
53 "subscription.features.encryptedSync": "Synchronisatie van geëncrypteerde sessies", 53 "settings.account.headlineInvoices" : "Facturen",
54 "subscription.features.vpn": "Proxy & VPN ondersteuning", 54 "settings.account.headlinePassword" : "Wijzig wachtwoord",
55 "subscription.features.ads": "Geen reclame, nooit!", 55 "settings.account.headlineProfile" : "Profiel aanpassen",
56 "subscription.features.comingSoon": "komt binnenkort", 56 "settings.account.headlineSubscription" : "Je abonnement",
57 "infobar.servicesUpdated": "Je services zijn geüpdatet.", 57 "settings.account.headlineUpgrade" : "Upgrade je account & ondersteun Franz",
58 "infobar.updateAvailable": "Er is een nieuwe update van Franz beschikbaar.", 58 "settings.account.invoiceDownload" : "Download",
59 "infobar.buttonReloadServices": "Services herladen", 59 "settings.account.manageSubscription.label" : "Beheer je abonnement",
60 "infobar.buttonInstallUpdate": "Herstarten & update installeren", 60 "settings.account.mining.active" : "Op dit moment voer je {hashes} berekingen per seconde uit.",
61 "infobar.requiredRequestsFailed": "Kon services en gebruikersinformatie niet laden", 61 "settings.account.mining.cancel" : "Stop mining",
62 "sidebar.settings": "Instellingen", 62 "settings.account.mining.moreInformation" : "Meer informatie",
63 "sidebar.addNewService": "!!!Add new service", 63 "settings.account.mining.thankyou" : "Bedankt voor je ondersteuning van Franz met je rekenkracht.",
64 "services.welcome": "Welkom bij Franz", 64 "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen",
65 "services.getStarted": "Begin", 65 "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw",
66 "settings.account.headline": "Account", 66 "settings.account.userInfoRequestFailed" : "Kon gebruikerinformatie niet laden",
67 "settings.account.headlineSubscription": "Je abonnement", 67 "settings.app.buttonInstallUpdate" : "Herstart & installeer update",
68 "settings.account.headlineUpgrade": "Upgrade je account & ondersteun Franz", 68 "settings.app.buttonSearchForUpdate" : "Controleer op updates",
69 "settings.account.headlineInvoices": "Facturen", 69 "settings.app.currentVersion" : "Huidige versie:",
70 "settings.account.manageSubscription.label": "Je abonnement beheren", 70 "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond",
71 "settings.account.accountType.basic": "Basisaccount", 71 "settings.app.form.autoLaunchOnStart" : "Lanceer Franz bij opstarten",
72 "settings.account.accountType.premium": "Premium Supporter Account", 72 "settings.app.form.beta" : "Inclusief bèta versies",
73 "settings.account.account.editButton": "Account aanpassen", 73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.account.invoiceDownload": "Downloaden", 74 "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk",
75 "settings.account.userInfoRequestFailed": "Kon de gebruikersinformatie niet laden", 75 "settings.app.form.language" : "Taal",
76 "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw", 76 "settings.app.form.minimizeToSystemTray" : "Minimaliseer Franz naar de systeembalk",
77 "settings.account.headlineProfile": "Profiel aanpassen", 77 "settings.app.form.runInBackground" : "Houd Franz op de achtergrond wanneer het venster gesloten wordt",
78 "settings.account.headlineAccount": "Accountinformatie", 78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.account.headlinePassword": "Wachtwoord veranderen", 79 "settings.app.headline" : "Instellingen",
80 "settings.account.successInfo": "Je wijzigingen zijn opgeslagen", 80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.account.buttonSave": "Profiel aanpassen", 81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.account.mining.thankyou": "Bedankt om Franz te steunen met je rekenkracht.", 82 "settings.app.headlineGeneral" : "Algemeen",
83 "settings.account.mining.active": "Op dit moment maak je {hashes} berekeningen per seconde.", 83 "settings.app.headlineLanguage" : "Taal",
84 "settings.account.mining.moreInformation": "Meer informatie", 84 "settings.app.headlineUpdates" : "Updates",
85 "settings.account.mining.cancel": "Mijnen annuleren", 85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.navigation.availableServices": "Beschikbare services", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Jouw services", 87 "settings.app.updateStatusAvailable" : "Update beschikbaar, downloaden...",
88 "settings.navigation.account": "Account", 88 "settings.app.updateStatusSearching" : "Zoekt naar updates",
89 "settings.navigation.settings": "Instellingen", 89 "settings.app.updateStatusUpToDate" : "Je gebruikt de laatste versie van Franz",
90 "settings.navigation.logout": "Uitloggen", 90 "settings.navigation.account" : "Account",
91 "settings.recipes.headline": "Beschikbare services", 91 "settings.navigation.availableServices" : "Beschikbare services",
92 "settings.recipes.mostPopular": "Meest populair", 92 "settings.navigation.logout" : "Uitloggen",
93 "settings.recipes.all": "Alle services", 93 "settings.navigation.settings" : "Instellingen",
94 "settings.recipes.dev": "Ontwikkeling", 94 "settings.navigation.yourServices" : "Jouw services",
95 "settings.recipes.nothingFound": "Sorry, maar geen enkele service kwam overeen met je zoekterm.", 95 "settings.recipes.all" : "Alle services",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd", 96 "settings.recipes.dev" : "Ontwikkeling",
97 "settings.service.form.saveButton": "Service bewaren", 97 "settings.recipes.headline" : "Beschikbare services",
98 "settings.service.form.deleteButton": "Service verwijderen", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Beschikbare services", 99 "settings.recipes.mostPopular" : "Meest populair",
100 "settings.service.form.yourServices": "Jouw services", 100 "settings.recipes.nothingFound" : "Sorry, maar geen enkele service kwam overeen met je zoekterm.",
101 "settings.service.form.addServiceHeadline": "{name} toevoegen", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Service succesvol toegevoegd",
102 "settings.service.form.editServiceHeadline": "{name} aanpassen", 102 "settings.service.error.goBack" : "Terug naar de services",
103 "settings.service.form.tabHosted": "Gehost", 103 "settings.service.error.headline" : "Fout",
104 "settings.service.form.tabOnPremise": "Intern gehost ⭐️", 104 "settings.service.error.message" : "Kon het service-recept niet laden.",
105 "settings.service.form.customUrlValidationError": "Kon de custom {name} server niet valideren.", 105 "settings.service.form.addServiceHeadline" : "{name} toevoegen",
106 "settings.service.form.customUrlPremiumInfo": "Om intern gehoste services toe te voegen heb je een Franz Premium Supporter Account nodig.", 106 "settings.service.form.availableServices" : "Beschikbare services",
107 "settings.service.form.customUrlUpgradeAccount": "Je account upgraden", 107 "settings.service.form.customUrl" : "Aangepaste server",
108 "settings.service.form.indirectMessageInfo": "Je wordt verwittigd over alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Om intern gehoste services toe te voegen heb je een Franz Premium Supporter Account nodig.",
109 "settings.service.error.headline": "Fout", 109 "settings.service.form.customUrlUpgradeAccount" : "Je account upgraden",
110 "settings.service.error.goBack": "Terug naar de services", 110 "settings.service.form.customUrlValidationError" : "Kon de custom {name} server niet valideren.",
111 "settings.service.error.message": "Kon het service-recept niet laden.", 111 "settings.service.form.deleteButton" : "Service verwijderen",
112 "settings.services.tooltip.isDisabled": "Service staat uit", 112 "settings.service.form.editServiceHeadline" : "{name} aanpassen",
113 "settings.services.tooltip.notificationsDisabled": "Notificaties staan uit", 113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.services.headline": "Jouw services", 114 "settings.service.form.enableNotification" : "Notificaties aanzetten",
115 "settings.services.noServicesAdded": "Je hebt nog geen services toegevoegd.", 115 "settings.service.form.enableService" : "Service aanzetten",
116 "settings.services.discoverServices": "Services ontdekken", 116 "settings.service.form.indirectMessageInfo" : "Je wordt verwittigd over alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...",
117 "settings.services.updatedInfo": "Je wijzigingen werden bewaard", 117 "settings.service.form.indirectMessages" : "Toon berichten-badge voor alle nieuwe berichten",
118 "settings.services.deletedInfo": "Service werd verwijderd", 118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.app.headline": "Instellingen", 119 "settings.service.form.name" : "Naam",
120 "settings.app.headlineGeneral": "Algemeen", 120 "settings.service.form.saveButton" : "Service bewaren",
121 "settings.app.headlineLanguage": "Talen", 121 "settings.service.form.tabHosted" : "Gehost",
122 "settings.app.headlineUpdates": "Updates", 122 "settings.service.form.tabOnPremise" : "Intern gehost ⭐️",
123 "settings.app.buttonSearchForUpdate": "Controleren op updates", 123 "settings.service.form.team" : "Team",
124 "settings.app.buttonInstallUpdate": "Herstart & installeer update", 124 "settings.service.form.yourServices" : "Jouw services",
125 "settings.app.updateStatusSearching": "Zoeken naar updates", 125 "settings.services.deletedInfo" : "Service werd verwijderd",
126 "settings.app.updateStatusAvailable": "Update beschikbaar, wordt gedownload...", 126 "settings.services.discoverServices" : "Services ontdekken",
127 "settings.app.updateStatusUpToDate": "Je gebruikt de laatste versie van Franz", 127 "settings.services.headline" : "Jouw services",
128 "settings.app.form.autoLaunchOnStart": "Franz lanceren bij het starten", 128 "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.",
129 "settings.app.form.autoLaunchInBackground": "In de achtergrond openen", 129 "settings.services.tooltip.isDisabled" : "Service staat uit",
130 "settings.app.form.minimizeToSystemTray": "Franz naar je systeemvak minimaliseren", 130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.app.form.runInBackground": "Franz in de achtergrond draaien wanneer je het venster sluit", 131 "settings.services.tooltip.notificationsDisabled" : "Notificaties staan uit",
132 "settings.app.form.language": "Taal", 132 "settings.services.updatedInfo" : "Je wijzigingen werden bewaard",
133 "settings.app.form.beta": "Ook beta versies", 133 "settings.user.form.accountType.company" : "Bedrijf",
134 "settings.app.currentVersion": "Huidige versie:", 134 "settings.user.form.accountType.individual" : "Particulier",
135 "settings.service.form.name": "Naam", 135 "settings.user.form.accountType.label" : "Account type",
136 "settings.service.form.enableService": "Service aanzetten", 136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.service.form.enableNotification": "Notificaties aanzetten", 137 "settings.user.form.currentPassword" : "Huidig wachtwoord",
138 "settings.service.form.team": "Team", 138 "settings.user.form.email" : "Email",
139 "settings.service.form.customUrl": "Aangepaste server", 139 "settings.user.form.firstname" : "Naam",
140 "settings.service.form.indirectMessages": "Toon berichten-badge voor alle nieuwe berichten", 140 "settings.user.form.lastname" : "Achternaam",
141 "settings.user.form.firstname": "Naam", 141 "settings.user.form.newPassword" : "Nieuw wachtwoord",
142 "settings.user.form.lastname": "Achternaam", 142 "sidebar.addNewService" : "!!!Add new service",
143 "settings.user.form.email": "Email", 143 "sidebar.mute" : "Disable audio",
144 "settings.user.form.currentPassword": "Huidig wachtwoord", 144 "sidebar.settings" : "Instellingen",
145 "settings.user.form.newPassword": "Nieuw wachtwoord", 145 "sidebar.unmute" : "Enable audio",
146 "settings.user.form.accountType.label": "Account type", 146 "signup.company.label" : "Bedrijf",
147 "settings.user.form.accountType.individual": "Particulier", 147 "signup.email.label" : "E-mailadres",
148 "settings.user.form.accountType.non-profit": "Non-Profit", 148 "signup.emailDuplicate" : "Er bestaat reeds een gebruiker met dat e-mailadres",
149 "settings.user.form.accountType.company": "Bedrijf", 149 "signup.firstname.label" : "Naam",
150 "subscription.type.free": "gratis", 150 "signup.headline" : "Registreren",
151 "subscription.type.month": "maand", 151 "signup.lastname.label" : "Achternaam",
152 "subscription.type.year": "jaar", 152 "signup.legal.info" : "Door een account aan te maken aanvaard je de",
153 "subscription.type.mining": "Franz ondersteunen met rekenkracht", 153 "signup.legal.privacy" : "Privacyverklaring",
154 "subscription.mining.headline": "Hoe werkt dit?", 154 "signup.legal.terms" : "Servicevoorwaarden",
155 "subscription.mining.experimental": "experimenteel", 155 "signup.link.login" : "Al een account, inloggen?",
156 "subscription.mining.line1": "Door \"Ondersteunen met rekenkracht\" aan te zetten zal Franz ongeveer 20-50% van je CPU gebruiken om Monero cryptocurrency te minen, wat ongeveer op €4,3/jaar neerkomt.", 156 "signup.password.label" : "Wachtwoord",
157 "subscription.mining.line2": "Het CPU gebruik zal aangepast worden aan je werkgedrag zodat we je batterij niet leeg laten lopen of jou en je machine vertragen.", 157 "signup.submit.label" : "Account aanmaken",
158 "subscription.mining.line3": "Zolang de miner actief is heb je ongelimiteerde toegang tot alle Franz Premium Supporter Features.", 158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.mining.moreInformation": "Meer informatie over dit plan.", 159 "subscription.features.ads" : "Geen reclame, nooit!",
160 "subscriptionPopup.buttonCancel": "Annuleren", 160 "subscription.features.comingSoon" : "komt binnenkort",
161 "subscriptionPopup.buttonDone": "Klaar", 161 "subscription.features.customServices" : "Persoonlijke services voor jou en je team",
162 "tabs.item.reload": "Herladen", 162 "subscription.features.encryptedSync" : "Synchronisatie van geëncrypteerde sessies",
163 "tabs.item.edit": "Aanpassen", 163 "subscription.features.onpremise" : "Intern gehoste services zoals HipChat",
164 "tabs.item.disableNotifications": "Notificaties uitschakelen", 164 "subscription.features.vpn" : "Proxy & VPN ondersteuning",
165 "tabs.item.enableNotification": "Notificaties inschakelen", 165 "subscription.includedFeatures" : "Een betalend account voor Franz omvat",
166 "tabs.item.disableService": "Service uitschakelen", 166 "subscription.mining.experimental" : "experimenteel",
167 "tabs.item.deleteService": "Service verwijderen" 167 "subscription.mining.headline" : "Hoe werkt dit?",
168 "subscription.mining.line1" : "Door \"Ondersteunen met rekenkracht\" aan te zetten zal Franz ongeveer 20-50% van je CPU gebruiken om Monero cryptocurrency te minen, wat ongeveer op €4,3\/jaar neerkomt.",
169 "subscription.mining.line2" : "Het CPU gebruik zal aangepast worden aan je werkgedrag zodat we je batterij niet leeg laten lopen of jou en je machine vertragen.",
170 "subscription.mining.line3" : "Zolang de miner actief is heb je ongelimiteerde toegang tot alle Franz Premium Supporter Features.",
171 "subscription.mining.moreInformation" : "Meer informatie over dit plan.",
172 "subscription.paymentSessionError" : "Betalingsformulier kon niet geladen worden",
173 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz steunen",
174 "subscription.type.free" : "gratis",
175 "subscription.type.mining" : "Franz ondersteunen met rekenkracht",
176 "subscription.type.month" : "maand",
177 "subscription.type.year" : "jaar",
178 "subscriptionPopup.buttonCancel" : "Annuleren",
179 "subscriptionPopup.buttonDone" : "Klaar",
180 "tabs.item.deleteService" : "Service verwijderen",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Notificaties uitschakelen",
183 "tabs.item.disableService" : "Service uitschakelen",
184 "tabs.item.edit" : "Aanpassen",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Notificaties inschakelen",
187 "tabs.item.enableService" : "Service aanzetten",
188 "tabs.item.reload" : "Herladen",
189 "welcome.loginButton" : "Inloggen op je account",
190 "welcome.signupButton" : "Maak een gratis account aan",
191 "welcome.slogan" : "Messaging that works for you"
168} 192}
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index aee1a52c8..a78a08878 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -1,169 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Kan niet verbinden met Franz online services", 2 "global.api.unhealthy" : "Kan geen verbinding maken met de Franz services",
3 "global.notConnectedToTheInternet": "Je bent niet verbonden met het internet.", 3 "global.notConnectedToTheInternet" : "Je hebt geen internet verbinding.",
4 "welcome.signupButton": "Maak een gratis account", 4 "import.headline" : "Importeer je Franz 4 services",
5 "welcome.loginButton": "Log in op je account", 5 "import.notSupportedHeadline" : "De volgende services worden nog niet ondersteund in Franz 5",
6 "welcome.slogan": "Messaging dat voor jou werkt", 6 "import.skip.label" : "Ik wil handmatig een service toevoegen",
7 "login.headline": "Inloggen", 7 "import.submit.label" : "Importeer services",
8 "login.email.label": "E-mailadres", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Wachtwoord", 9 "infobar.buttonInstallUpdate" : "Start opnieuw op & installeer de update",
10 "login.submit.label": "Inloggen", 10 "infobar.buttonReloadServices" : "Herlaad de services",
11 "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig", 11 "infobar.requiredRequestsFailed" : "Kan de services en gebruikers informatie niet laden",
12 "login.tokenExpired": "De sessie is verlopen, log opnieuw in alsjeblieft.", 12 "infobar.servicesUpdated" : "Je services zijn geüpdatet.",
13 "login.serverLogout": "De sessie is verlopen, log opnieuw in alsjeblieft.", 13 "infobar.updateAvailable" : "Een nieuwe update voor Franz is beschikbaar.",
14 "login.link.signup": "Maak een gratis account", 14 "invite.email.label" : "E-mailadres",
15 "login.link.password": "Wachtwoord vergeten", 15 "invite.headline.friends" : "Nodig 3 van je vrienden of collega's uit",
16 "password.headline": "Wachtwoord vergeten", 16 "invite.name.label" : "Naam",
17 "password.email.label": "E-mailadres", 17 "invite.skip.label" : "Ik wil dit later doen",
18 "password.submit.label": "Verzenden", 18 "invite.submit.label" : "Verzend uitnodigingen",
19 "password.noUser": "Geen gebruiker bekend met dat e-mailadres", 19 "login.email.label" : "E-mailadres",
20 "password.successInfo": "Controleer alsjeblieft je e-mail", 20 "login.headline" : "Inloggen",
21 "password.link.signup": "Maak een nieuw account aan", 21 "login.invalidCredentials" : "E-mailadres of wachtwoord ongeldig",
22 "password.link.login": "Log in op je account", 22 "login.link.password" : "Wachtwoord vergeten",
23 "signup.headline": "Aanmelden", 23 "login.link.signup" : "Maak een gratis account",
24 "signup.firstname.label": "Voornaam", 24 "login.password.label" : "Wachtwoord",
25 "signup.lastname.label": "Achternaam", 25 "login.serverLogout" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
26 "signup.email.label": "E-mailadres", 26 "login.submit.label" : "Inloggen",
27 "signup.company.label": "Bedrijf", 27 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
28 "signup.password.label": "Wachtwoord", 28 "password.email.label" : "E-mailadres",
29 "signup.submit.label": "Maak account aan", 29 "password.headline" : "Wachtwoord vergeten",
30 "signup.link.login": "Al een account? Log in!", 30 "password.link.login" : "Log in op je account",
31 "signup.emailDuplicate": "Er bestaat al een gebruiker met dat e-mailadres", 31 "password.link.signup" : "Maak een gratis account",
32 "signup.legal.info": "Door een Franz account aan te maken ga je akkoord met de", 32 "password.noUser" : "Geen gebruiker bekend met dat e-mailadres",
33 "signup.legal.terms": "Gebruiksvoorwaarden", 33 "password.submit.label" : "Verzenden",
34 "signup.legal.privacy": "Privacy Voorwaarden", 34 "password.successInfo" : "Controleer alsjeblieft je e-mail",
35 "pricing.headline": "Ondersteun Franz", 35 "pricing.headline" : "Ondersteun Franz",
36 "pricing.support.label": "Selecteer je ondersteuningsplan", 36 "pricing.link.skipPayment" : "Ik wil de ontwikkeling van Franz niet ondersteunen.",
37 "pricing.submit.label": "Ik wil de ontwikkeling van Franz ondersteunen", 37 "pricing.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen",
38 "pricing.link.skipPayment": "Ik wil de ontwikkeling van Franz niet ondersteunen.", 38 "pricing.support.label" : "Selecteer je ondersteuningsplan",
39 "import.headline": "Importeer je Franz 4 services", 39 "service.crashHandler.action" : "{name} herladen",
40 "import.notSupportedHeadline": "Services nog niet ondersteund in Franz 5", 40 "service.crashHandler.autoReload" : "Probeer {name} te herstellen over {seconds} seconden",
41 "import.submit.label": "Importeer services", 41 "service.crashHandler.headline" : "Oh nee!",
42 "import.skip.label": "Ik wil services handmatig toevoegen", 42 "service.crashHandler.text" : "{name} heeft voor een fout gezorgd.",
43 "invite.submit.label": "Verzend uitnodigingen", 43 "service.disabledHandler.action" : "Activeer {name}",
44 "invite.headline.friends": "Nodig 3 van je vrienden of collega's uit", 44 "service.disabledHandler.headline" : "{name} is uitgeschakeld",
45 "invite.name.label": "Naam", 45 "services.getStarted" : "Beginnen",
46 "invite.email.label": "E-mailadres", 46 "services.welcome" : "Welkom bij Franz",
47 "invite.skip.label": "Ik wil dit later doen", 47 "settings.account.account.editButton" : "Bewerk account",
48 "subscription.submit.label": "Ik wil de ontwikkeling van Franz ondersteunen", 48 "settings.account.accountType.basic" : "Basis Account",
49 "subscription.paymentSessionError": "Kan betaalformulier niet initialiseren", 49 "settings.account.accountType.premium" : "Premium Supporter Account",
50 "subscription.includedFeatures": "Betaald Franz Premium Supporter Account bevat", 50 "settings.account.buttonSave" : "Update profiel",
51 "subscription.features.onpremise": "Add on-geschikt/gehoste services zoals HipChat", 51 "settings.account.headline" : "Account",
52 "subscription.features.customServices": "Privé services voor jou en je team", 52 "settings.account.headlineAccount" : "Account informatie",
53 "subscription.features.encryptedSync": "Beveiligde sessie synchronisatie", 53 "settings.account.headlineInvoices" : "Facturen",
54 "subscription.features.vpn": "Proxy & VPN ondersteuning", 54 "settings.account.headlinePassword" : "Wijzig wachtwoord",
55 "subscription.features.ads": "Geen advertenties, nooit!", 55 "settings.account.headlineProfile" : "Update profiel",
56 "subscription.features.comingSoon": "komt binnenkort", 56 "settings.account.headlineSubscription" : "Je abonnement",
57 "infobar.servicesUpdated": "Je services zijn geüpdatet.", 57 "settings.account.headlineUpgrade" : "Upgrade je account & ondersteun Franz",
58 "infobar.updateAvailable": "Een nieuwe update voor Franz is beschikbaar.", 58 "settings.account.invoiceDownload" : "Download",
59 "infobar.buttonReloadServices": "Herlaad services", 59 "settings.account.manageSubscription.label" : "Beheer je abonnement",
60 "infobar.buttonInstallUpdate": "Herstart & installeer update", 60 "settings.account.mining.active" : "Op dit moment voer je {hashes} berekingen per seconde uit.",
61 "infobar.requiredRequestsFailed": "Kon services en gebruikerinformatie niet laden", 61 "settings.account.mining.cancel" : "Stop mining",
62 "sidebar.settings": "Instellingen", 62 "settings.account.mining.moreInformation" : "Meer informatie",
63 "sidebar.addNewService": "Voeg nieuwe service toe", 63 "settings.account.mining.thankyou" : "Bedankt voor je ondersteuning van Franz met je rekenkracht.",
64 "services.welcome": "Welkom bij Franz", 64 "settings.account.successInfo" : "Je wijzigingen zijn opgeslagen",
65 "services.getStarted": "Beginnen", 65 "settings.account.tryReloadUserInfoRequest" : "Probeer opnieuw",
66 "settings.account.headline": "Account", 66 "settings.account.userInfoRequestFailed" : "Kon gebruikerinformatie niet laden",
67 "settings.account.headlineSubscription": "Je abonnement", 67 "settings.app.buttonInstallUpdate" : "Herstart & installeer update",
68 "settings.account.headlineUpgrade": "Upgrade je account & ondersteun Franz", 68 "settings.app.buttonSearchForUpdate" : "Controleer op updates",
69 "settings.account.headlineInvoices": "Facturen", 69 "settings.app.currentVersion" : "Huidige versie:",
70 "settings.account.manageSubscription.label": "Beheer je abonnement", 70 "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond",
71 "settings.account.accountType.basic": "Basis Account", 71 "settings.app.form.autoLaunchOnStart" : "Lanceer Franz bij opstarten",
72 "settings.account.accountType.premium": "Premium Supporter Account", 72 "settings.app.form.beta" : "Inclusief bèta versies",
73 "settings.account.account.editButton": "Bewerk account", 73 "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan",
74 "settings.account.invoiceDownload": "Download", 74 "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk",
75 "settings.account.userInfoRequestFailed": "Kon gebruikerinformatie niet laden", 75 "settings.app.form.language" : "Taal",
76 "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw", 76 "settings.app.form.minimizeToSystemTray" : "Minimaliseer Franz naar de systeembalk",
77 "settings.account.headlineProfile": "Update profiel", 77 "settings.app.form.runInBackground" : "Houd Franz op de achtergrond wanneer het venster gesloten wordt",
78 "settings.account.headlineAccount": "Account informatie", 78 "settings.app.form.showDisabledServices" : "Laat uitgeschakelde services zien",
79 "settings.account.headlinePassword": "Wijzig wachtwoord", 79 "settings.app.headline" : "Instellingen",
80 "settings.account.successInfo": "Je wijzigingen zijn opgeslagen", 80 "settings.app.headlineAdvanced" : "Geavanceerd",
81 "settings.account.buttonSave": "Update profiel", 81 "settings.app.headlineAppearance" : "Weergave",
82 "settings.account.mining.thankyou": "Bedankt voor je ondersteuning van Franz met je rekenkracht.", 82 "settings.app.headlineGeneral" : "Algemeen",
83 "settings.account.mining.active": "Op dit moment voer je {hashes} berekingen per seconde uit.", 83 "settings.app.headlineLanguage" : "Taal",
84 "settings.account.mining.moreInformation": "Meer informatie", 84 "settings.app.headlineUpdates" : "Updates",
85 "settings.account.mining.cancel": "Stop mining", 85 "settings.app.restartRequired" : "Deze wijziging heeft een herstart nodig",
86 "settings.navigation.availableServices": "Beschikbare services", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Jouw services", 87 "settings.app.updateStatusAvailable" : "Update beschikbaar, downloaden...",
88 "settings.navigation.account": "Account", 88 "settings.app.updateStatusSearching" : "Zoekt naar updates",
89 "settings.navigation.settings": "Instellingen", 89 "settings.app.updateStatusUpToDate" : "Je gebruikt de laatste versie van Franz",
90 "settings.navigation.logout": "Uitloggen", 90 "settings.navigation.account" : "Account",
91 "settings.recipes.headline": "Beschikbare services", 91 "settings.navigation.availableServices" : "Beschikbare services",
92 "settings.recipes.mostPopular": "Meest populair", 92 "settings.navigation.logout" : "Uitloggen",
93 "settings.recipes.all": "Alle services", 93 "settings.navigation.settings" : "Instellingen",
94 "settings.recipes.dev": "Ontwikkeling", 94 "settings.navigation.yourServices" : "Jouw services",
95 "settings.recipes.nothingFound": "Geen service kwam overeen met je zoekopdracht.", 95 "settings.recipes.all" : "Alle services",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd", 96 "settings.recipes.dev" : "Ontwikkeling",
97 "settings.service.form.saveButton": "Opslaan service", 97 "settings.recipes.headline" : "Beschikbare services",
98 "settings.service.form.deleteButton": "Verwijder service", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Beschikbare services", 99 "settings.recipes.mostPopular" : "Meest populair",
100 "settings.service.form.yourServices": "Jouw services", 100 "settings.recipes.nothingFound" : "Geen service kwam overeen met je zoekopdracht.",
101 "settings.service.form.addServiceHeadline": "Toevoegen {name}", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Service succesvol toegevoegd",
102 "settings.service.form.editServiceHeadline": "Bewerk {name}", 102 "settings.service.error.goBack" : "Terug naar services",
103 "settings.service.form.tabHosted": "Gehost", 103 "settings.service.error.headline" : "Fout",
104 "settings.service.form.tabOnPremise": "Zelf-gehoste ??", 104 "settings.service.error.message" : "Kon servicerecept niet laden.",
105 "settings.service.form.customUrlValidationError": "Kon custom server {name} niet valideren.", 105 "settings.service.form.addServiceHeadline" : "Toevoegen {name}",
106 "settings.service.form.customUrlPremiumInfo": "Om zelf-gehoste services toe te kunnen voegen, heb je een Franz Premium Supporter Account nodig.", 106 "settings.service.form.availableServices" : "Beschikbare services",
107 "settings.service.form.customUrlUpgradeAccount": "Upgrade je account", 107 "settings.service.form.customUrl" : "Custom server",
108 "settings.service.form.indirectMessageInfo": "Je ontvangt meldingen van alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Om zelf-gehoste services toe te kunnen voegen, heb je een Franz Premium Supporter Account nodig.",
109 "settings.service.error.headline": "Fout", 109 "settings.service.form.customUrlUpgradeAccount" : "Upgrade je account",
110 "settings.service.error.goBack": "Terug naar services", 110 "settings.service.form.customUrlValidationError" : "Kon custom server {name} niet valideren.",
111 "settings.service.error.message": "Kon servicerecept niet laden.", 111 "settings.service.form.deleteButton" : "Verwijder service",
112 "settings.services.tooltip.isDisabled": "Service is uitgeschakeld", 112 "settings.service.form.editServiceHeadline" : "Bewerk {name}",
113 "settings.services.tooltip.notificationsDisabled": "Meldingen zijn uitgeschakeld", 113 "settings.service.form.enableAudio" : "Audio inschakelen",
114 "settings.services.headline": "Jouw services", 114 "settings.service.form.enableNotification" : "Meldingen inschakelen",
115 "settings.services.noServicesAdded": "Je hebt nog geen services toegevoegd.", 115 "settings.service.form.enableService" : "Service inschakelen",
116 "settings.services.discoverServices": "Ontdek services", 116 "settings.service.form.indirectMessageInfo" : "Je ontvangt meldingen van alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...",
117 "settings.services.updatedInfo": "Je wijzigingen zijn opgeslagen", 117 "settings.service.form.indirectMessages" : "Toon berichtenbadge voor alle nieuwe berichten",
118 "settings.services.deletedInfo": "Service is verwijderd", 118 "settings.service.form.isMutedInfo" : "Indien uitgeschakeld zullen alle meldinggeluiden en afgespeelde audio uitgeschakeld zijn",
119 "settings.app.headline": "Instellingen", 119 "settings.service.form.name" : "Naam",
120 "settings.app.headlineGeneral": "Algemeen", 120 "settings.service.form.saveButton" : "Opslaan service",
121 "settings.app.headlineLanguage": "Taal", 121 "settings.service.form.tabHosted" : "Gehost",
122 "settings.app.headlineUpdates": "Updates", 122 "settings.service.form.tabOnPremise" : "Zelf-gehost *",
123 "settings.app.buttonSearchForUpdate": "Controleer op updates", 123 "settings.service.form.team" : "Team",
124 "settings.app.buttonInstallUpdate": "Herstart & installeer update", 124 "settings.service.form.yourServices" : "Jouw services",
125 "settings.app.updateStatusSearching": "Zoekt naar updates", 125 "settings.services.deletedInfo" : "Service is verwijderd",
126 "settings.app.updateStatusAvailable": "Update beschikbaar, downloaden...", 126 "settings.services.discoverServices" : "Ontdek services",
127 "settings.app.updateStatusUpToDate": "Je gebruikt de laatste versie van Franz", 127 "settings.services.headline" : "Jouw services",
128 "settings.app.form.autoLaunchOnStart": "Lanceer Franz bij opstarten", 128 "settings.services.noServicesAdded" : "Je hebt nog geen services toegevoegd.",
129 "settings.app.form.autoLaunchInBackground": "Open op de achtergrond", 129 "settings.services.tooltip.isDisabled" : "Service is uitgeschakeld",
130 "settings.app.form.enableSystemTray": "Toon Franz in de systeembalk", 130 "settings.services.tooltip.isMuted" : "Alle geluiden zijn uitgeschakeld",
131 "settings.app.form.minimizeToSystemTray": "Minimaliseer Franz naar de systeembal", 131 "settings.services.tooltip.notificationsDisabled" : "Meldingen zijn uitgeschakeld",
132 "settings.app.form.runInBackground": "Houd Franz op de achtergrond wanneer het venster gesloten wordt", 132 "settings.services.updatedInfo" : "Je wijzigingen zijn opgeslagen",
133 "settings.app.form.language": "Taal", 133 "settings.user.form.accountType.company" : "Bedrijf",
134 "settings.app.form.beta": "Inclusief beta versies", 134 "settings.user.form.accountType.individual" : "Individueel",
135 "settings.app.currentVersion": "Huidige versie:", 135 "settings.user.form.accountType.label" : "Account type",
136 "settings.service.form.name": "Naam", 136 "settings.user.form.accountType.non-profit" : "Non-Profit",
137 "settings.service.form.enableService": "Activeer service", 137 "settings.user.form.currentPassword" : "Huidig wachtwoord",
138 "settings.service.form.enableNotification": "Activeer meldingen", 138 "settings.user.form.email" : "E-mailadres",
139 "settings.service.form.team": "Team", 139 "settings.user.form.firstname" : "Voornaam",
140 "settings.service.form.customUrl": "Custom server", 140 "settings.user.form.lastname" : "Achternaam",
141 "settings.service.form.indirectMessages": "Toon berichtenbadge voor alle nieuwe berichten", 141 "settings.user.form.newPassword" : "Nieuw wachtwoord",
142 "settings.user.form.firstname": "Voornaam", 142 "sidebar.addNewService" : "Service toevoegen",
143 "settings.user.form.lastname": "Achternaam", 143 "sidebar.mute" : "Audio uitschakelen",
144 "settings.user.form.email": "E-mailadres", 144 "sidebar.settings" : "Instellingen",
145 "settings.user.form.currentPassword": "Huidig wachtwoord", 145 "sidebar.unmute" : "Audio inschakelen",
146 "settings.user.form.newPassword": "Nieuw wachtwoord", 146 "signup.company.label" : "Bedrijf",
147 "settings.user.form.accountType.label": "Account type", 147 "signup.email.label" : "E-mailadres",
148 "settings.user.form.accountType.individual": "Individueel", 148 "signup.emailDuplicate" : "Er bestaat al een gebruiker met dat e-mailadres",
149 "settings.user.form.accountType.non-profit": "Non-Profit", 149 "signup.firstname.label" : "Voornaam",
150 "settings.user.form.accountType.company": "Bedrijf", 150 "signup.headline" : "Aanmelden",
151 "subscription.type.free": "gratis", 151 "signup.lastname.label" : "Achternaam",
152 "subscription.type.month": "maand", 152 "signup.legal.info" : "Door een Franz account aan te maken ga je akkoord met de",
153 "subscription.type.year": "jaar", 153 "signup.legal.privacy" : "Privacy Voorwaarden",
154 "subscription.type.mining": "Ondersteun Franz met rekenkracht", 154 "signup.legal.terms" : "Gebruiksvoorwaarden",
155 "subscription.mining.headline": "Hoe werkt dit?", 155 "signup.link.login" : "Al een account? Log in!",
156 "subscription.mining.experimental": "experimenteel", 156 "signup.password.label" : "Wachtwoord",
157 "subscription.mining.line1": "Door \"Ondersteun met rekenkracht\" te activeren, zal Franz ongeveer 20-50% van je CPU gebruiken om de cryptomunt Monero te minen, wat overeenkomt met ongeveer $ 5/jaar.", 157 "signup.submit.label" : "Maak een nieuw account aan",
158 "subscription.mining.line2": "We zullen het CPU-gebruik aanpassen aan je gebruik en daarmee voorkomen dat de batterij niet leegloopt of dat jij en je werk afgeremd wordt.", 158 "subscription.euTaxInfo" : "Bewoners binnen EU: lokale belasting kan van toepassing zijn",
159 "subscription.mining.line3": "Zolang de miner actief is, heb je onbeperkt toegang tot alle Franz Premium Supporter Features.", 159 "subscription.features.ads" : "Geen advertenties, nooit!",
160 "subscription.mining.moreInformation": "Verkrijg meer informatie over dit plan.", 160 "subscription.features.comingSoon" : "komt binnenkort",
161 "subscriptionPopup.buttonCancel": "Annuleer", 161 "subscription.features.customServices" : "Privé services voor jou en je team",
162 "subscriptionPopup.buttonDone": "Klaar", 162 "subscription.features.encryptedSync" : "Beveiligde sessie synchronisatie",
163 "tabs.item.reload": "Herlaad", 163 "subscription.features.onpremise" : "Add on-geschikt\/gehoste services zoals HipChat",
164 "tabs.item.edit": "Bewerk", 164 "subscription.features.vpn" : "Proxy & VPN ondersteuning",
165 "tabs.item.disableNotifications": "Uitschakelen meldingen", 165 "subscription.includedFeatures" : "Betaald Franz Premium Supporter Account bevat",
166 "tabs.item.enableNotification": "Inschakelen meldingen", 166 "subscription.mining.experimental" : "experimenteel",
167 "tabs.item.disableService": "Uitschakelen service", 167 "subscription.mining.headline" : "Hoe werkt dit?",
168 "tabs.item.deleteService": "Verwijderen service" 168 "subscription.mining.line1" : "Door \"Ondersteun met rekenkracht\" te activeren, zal Franz ongeveer 20-50% van je CPU gebruiken om de cryptomunt Monero te minen, wat overeenkomt met ongeveer $ 5\/jaar.",
169 "subscription.mining.line2" : "We zullen het CPU-gebruik aanpassen aan je gebruik en daarmee voorkomen dat de batterij niet leegloopt of dat jij en je werk afgeremd wordt.",
170 "subscription.mining.line3" : "Zolang de miner actief is, heb je onbeperkt toegang tot alle Franz Premium Supporter Features.",
171 "subscription.mining.moreInformation" : "Verkrijg meer informatie over dit plan.",
172 "subscription.paymentSessionError" : "Kan betaalformulier niet initialiseren",
173 "subscription.submit.label" : "Ik wil de ontwikkeling van Franz ondersteunen",
174 "subscription.type.free" : "gratis",
175 "subscription.type.mining" : "Ondersteun Franz met rekenkracht",
176 "subscription.type.month" : "maand",
177 "subscription.type.year" : "jaar",
178 "subscriptionPopup.buttonCancel" : "Annuleer",
179 "subscriptionPopup.buttonDone" : "Klaar",
180 "tabs.item.deleteService" : "Verwijderen service",
181 "tabs.item.disableAudio" : "Audio uitschakelen",
182 "tabs.item.disableNotifications" : "Uitschakelen meldingen",
183 "tabs.item.disableService" : "Uitschakelen service",
184 "tabs.item.edit" : "Bewerk",
185 "tabs.item.enableAudio" : "Audio inschakelen",
186 "tabs.item.enableNotification" : "Inschakelen meldingen",
187 "tabs.item.enableService" : "Service inschakelen",
188 "tabs.item.reload" : "Herlaad",
189 "welcome.loginButton" : "Log in op je account",
190 "welcome.signupButton" : "Maak een gratis account",
191 "welcome.slogan" : "Messaging die voor jou werkt"
169} 192}
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index a884ef319..67657155f 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -1,168 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Nie można połączyć się z usługą Franz", 2 "global.api.unhealthy" : "Nie można połączyć się z usługami Franz online",
3 "global.notConnectedToTheInternet": "Brak połączenia z Internetem.", 3 "global.notConnectedToTheInternet" : "Nie masz połączenia z Internetem.",
4 "welcome.signupButton": "Stwórz darmowe konto", 4 "import.headline" : "Importuj usługi Franz 4",
5 "welcome.loginButton": "Zaloguj się na swoje konto", 5 "import.notSupportedHeadline" : "Usługi, które nie są jeszcze obsługiwane w Franz 5",
6 "welcome.slogan": "Komunikator który działa", 6 "import.skip.label" : "Chcę ręcznie dodać usługi",
7 "login.headline": "Zaloguj się", 7 "import.submit.label" : "Zaimportuj usługi",
8 "login.email.label": "Adres email", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Hasło", 9 "infobar.buttonInstallUpdate" : "Uruchom ponownie i zainstaluj aktualizację",
10 "login.submit.label": "Zaloguj się", 10 "infobar.buttonReloadServices" : "Załaduj ponownie usługi",
11 "login.invalidCredentials": "Adres email lub hasło są błędne", 11 "infobar.requiredRequestsFailed" : "Nie można załadować usług i informacji użytkownika",
12 "login.tokenExpired": "Twoja sesja wygasła, zaloguj się ponownie.", 12 "infobar.servicesUpdated" : "Usługi zostały zaktualizowane.",
13 "login.serverLogout": "Twoja sesja wygasła, zaloguj się ponownie.", 13 "infobar.updateAvailable" : "Dostępna jest nowa wersja Franza.",
14 "login.link.signup": "Stwórz darmowe konto", 14 "invite.email.label" : "Adres email",
15 "login.link.password": "Zresetuj hasło", 15 "invite.headline.friends" : "Zaproś 3 znajomych lub współpracowników",
16 "password.headline": "Zresetuj hasło", 16 "invite.name.label" : "Imię",
17 "password.email.label": "Adres email", 17 "invite.skip.label" : "Chcę to zrobić później",
18 "password.submit.label": "Wyślij", 18 "invite.submit.label" : "Wyślij zaproszenia",
19 "password.noUser": "Nie znaleziono użytkownika z takim adresem email", 19 "login.email.label" : "Adres email",
20 "password.successInfo": "Sprawdź swoją skrzynkę email", 20 "login.headline" : "Zaloguj się",
21 "password.link.signup": "Stwórz darmowe konto", 21 "login.invalidCredentials" : "Adres email lub hasło są błędne",
22 "password.link.login": "Zaloguj się na swoje konto", 22 "login.link.password" : "Wyzeruj hasło",
23 "signup.headline": "Zarejestruj się", 23 "login.link.signup" : "Załóż darmowe konto",
24 "signup.firstname.label": "Imię", 24 "login.password.label" : "Hasło",
25 "signup.lastname.label": "Nazwisko", 25 "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.",
26 "signup.email.label": "Adres email", 26 "login.submit.label" : "Zaloguj się",
27 "signup.company.label": "Firma", 27 "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.",
28 "signup.password.label": "Hasło", 28 "password.email.label" : "Adres email",
29 "signup.submit.label": "Stwórz konto", 29 "password.headline" : "Wyzeruj hasło",
30 "signup.link.login": "Masz już konto, zalogować się?", 30 "password.link.login" : "Zaloguj się na swoje konto",
31 "signup.emailDuplicate": "Użytkownik z takim adresem email już istnieje", 31 "password.link.signup" : "Stwórz darmowe konto",
32 "signup.legal.info": "Poprzez utworzenie konta Franz akceptujesz", 32 "password.noUser" : "Nie znaleziono użytkownika z takim adresem email",
33 "signup.legal.terms": "Warunki świadczenia usług", 33 "password.submit.label" : "Wyślij",
34 "signup.legal.privacy": "Polityka prywatności", 34 "password.successInfo" : "Proszę sprawdzić swój email",
35 "pricing.headline": "Wspomóż aplikację Franz", 35 "pricing.headline" : "Wspieraj Franz",
36 "pricing.support.label": "Wybierz plan wsparcia", 36 "pricing.link.skipPayment" : "Nie chcę wspierać rozwoju aplikacji Franz.",
37 "pricing.submit.label": "Chcę wspierać rozwój aplikacji Franz", 37 "pricing.submit.label" : "Chcę wspierać rozwój aplikacji Franz",
38 "pricing.link.skipPayment": "Nie chcę wspierać rozwoju aplikacji Franz.", 38 "pricing.support.label" : "Wybierz swój plan wsparcia",
39 "import.headline": "Zaimportuj usługi Franz 4", 39 "service.crashHandler.action" : "Reload {name}",
40 "import.notSupportedHeadline": "Usługi nie są jeszcze wspierane w Franz 5", 40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "import.submit.label": "Zaimportuj usługi", 41 "service.crashHandler.headline" : "Oh no!",
42 "import.skip.label": "Chcę dodać usługi ręcznie", 42 "service.crashHandler.text" : "{name} has caused an error.",
43 "invite.submit.label": "Wyślij zaproszenia", 43 "service.disabledHandler.action" : "Enable {name}",
44 "invite.headline.friends": "Zaproś 3 znajomych lub kolegów z pracy", 44 "service.disabledHandler.headline" : "{name} is disabled",
45 "invite.name.label": "Nazwa", 45 "services.getStarted" : "Zacznij",
46 "invite.email.label": "Adres email", 46 "services.welcome" : "Witaj w programie Franz",
47 "invite.skip.label": "Chcę to zrobić później", 47 "settings.account.account.editButton" : "Modyfikuj konta",
48 "subscription.submit.label": "Chcę wspierać rozwój aplikacji Franz", 48 "settings.account.accountType.basic" : "Podstawowe konto",
49 "subscription.paymentSessionError": "Nie można wczytać formularza płatności", 49 "settings.account.accountType.premium" : "Premium Supporter Account",
50 "subscription.includedFeatures": "Płatne konto Franz Premium obejmuje", 50 "settings.account.buttonSave" : "Uaktualnij profil",
51 "subscription.features.onpremise": "Dodawanie lokalnych/hostowanych usług takich jak HipChat", 51 "settings.account.headline" : "Konto",
52 "subscription.features.customServices": "Prywatne usługi dla Ciebie i Twojego zespołu", 52 "settings.account.headlineAccount" : "Informacje o koncie",
53 "subscription.features.encryptedSync": "Szyfrowana synchronizacja sesji", 53 "settings.account.headlineInvoices" : "Faktury",
54 "subscription.features.vpn": "Wsprarcie Proxy i VPN", 54 "settings.account.headlinePassword" : "Zmień hasło",
55 "subscription.features.ads": "Brak reklam, na zawsze!", 55 "settings.account.headlineProfile" : "Uaktualnij profil",
56 "subscription.features.comingSoon": "wkrótce dostępne", 56 "settings.account.headlineSubscription" : "Twoja subskrypcja",
57 "infobar.servicesUpdated": "Twoje usługi zostały zaaktualizowane.", 57 "settings.account.headlineUpgrade" : "Ulepsz swoje konto i wspieraj aplikację Franz",
58 "infobar.updateAvailable": "Aktualizacja aplikacji Franz jest dostępna.", 58 "settings.account.invoiceDownload" : "Pobierz",
59 "infobar.buttonReloadServices": "Przeładuj usługi", 59 "settings.account.manageSubscription.label" : "Zarządzaj swoimi subskrypcjami",
60 "infobar.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizacje", 60 "settings.account.mining.active" : "Obecnie wykonujesz {hashes} operacji na sekundę.",
61 "infobar.requiredRequestsFailed": "Nie można wczytać usług i informacji o użytkowniku", 61 "settings.account.mining.cancel" : "Anuluj kopanie",
62 "sidebar.settings": "Ustawienia", 62 "settings.account.mining.moreInformation" : "Zdobądź więcej informacji",
63 "sidebar.addNewService": "!!!Add new service", 63 "settings.account.mining.thankyou" : "Dziękuję za wsparcie aplikacji Franz mocą obliczeniową.",
64 "services.welcome": "Witaj w aplikcji Franz", 64 "settings.account.successInfo" : "Twoje zmiany zostały zapisane",
65 "services.getStarted": "Zacznij", 65 "settings.account.tryReloadUserInfoRequest" : "Spróbuj ponownie",
66 "settings.account.headline": "Konto", 66 "settings.account.userInfoRequestFailed" : "Nie można wczytać informacji o użytkowniku",
67 "settings.account.headlineSubscription": "Twoja subskrypcja", 67 "settings.app.buttonInstallUpdate" : "Uruchom ponownie i zainstaluj aktualizację",
68 "settings.account.headlineUpgrade": "Ulepsz swoje konto i wspieraj aplikację Franz", 68 "settings.app.buttonSearchForUpdate" : "Sprawdź aktualizacje",
69 "settings.account.headlineInvoices": "Faktury", 69 "settings.app.currentVersion" : "Aktualna wersja:",
70 "settings.account.manageSubscription.label": "Zarządzaj swoimi subskrypcjami", 70 "settings.app.form.autoLaunchInBackground" : "Otwórz w tle",
71 "settings.account.accountType.basic": "Podstawowe konto", 71 "settings.app.form.autoLaunchOnStart" : "Uruchom Franz na początku",
72 "settings.account.accountType.premium": "Konto Premium", 72 "settings.app.form.beta" : "Uwzględnij wersje beta",
73 "settings.account.account.editButton": "Edytuj konto", 73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.account.invoiceDownload": "Pobieranie", 74 "settings.app.form.enableSystemTray" : "Pokaż Franza w tacy systemowej",
75 "settings.account.userInfoRequestFailed": "Nie można wczytać informacji o użytkowniku", 75 "settings.app.form.language" : "Język",
76 "settings.account.tryReloadUserInfoRequest": "Spróbuj ponownie", 76 "settings.app.form.minimizeToSystemTray" : "Zminimalizuj aplikację Franz",
77 "settings.account.headlineProfile": "Aktualizuj profil", 77 "settings.app.form.runInBackground" : "Zachowaj aplikację Franz w tle po zamknięciu okna",
78 "settings.account.headlineAccount": "Informacje o koncie", 78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.account.headlinePassword": "Zmiana hasła", 79 "settings.app.headline" : "Ustawienia",
80 "settings.account.successInfo": "Zmiany zostały zapisane", 80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.account.buttonSave": "Aktualizuj profil", 81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.account.mining.thankyou": "Dziękuję za wsparcie aplikacji Franz mocą obliczeniową.", 82 "settings.app.headlineGeneral" : "Ogólne",
83 "settings.account.mining.active": "Obecnie wykonujesz {hashes} operacji na sekundę.", 83 "settings.app.headlineLanguage" : "Język",
84 "settings.account.mining.moreInformation": "Dowiedz się więcej", 84 "settings.app.headlineUpdates" : "Aktualizacje",
85 "settings.account.mining.cancel": "Anuluj kopanie", 85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.navigation.availableServices": "Dostępne usługi", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Twoje usługi", 87 "settings.app.updateStatusAvailable" : "Dostępna aktualizacja, pobieram...",
88 "settings.navigation.account": "Konto", 88 "settings.app.updateStatusSearching" : "Szukam aktualizacji",
89 "settings.navigation.settings": "Ustawienia", 89 "settings.app.updateStatusUpToDate" : "Używasz najnowszej wersji aplikacji Franz",
90 "settings.navigation.logout": "Wylogowanie", 90 "settings.navigation.account" : "Konto",
91 "settings.recipes.headline": "Dostępne usługi", 91 "settings.navigation.availableServices" : "Dostępne usługi",
92 "settings.recipes.mostPopular": "Najpopularniejsze", 92 "settings.navigation.logout" : "Wyloguj",
93 "settings.recipes.all": "Wszystkie usługi", 93 "settings.navigation.settings" : "Ustawienia",
94 "settings.recipes.dev": "Rozwojowe", 94 "settings.navigation.yourServices" : "Twoje usługi",
95 "settings.recipes.nothingFound": "Żadna usługa nie została znaleziona.", 95 "settings.recipes.all" : "Wszystkie usługi",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Usługa została dodana pomyślnie", 96 "settings.recipes.dev" : "Rozwojowe",
97 "settings.service.form.saveButton": "Zapisz usługę", 97 "settings.recipes.headline" : "Dostępne usługi",
98 "settings.service.form.deleteButton": "Usuń usługę", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Dostępne usługi", 99 "settings.recipes.mostPopular" : "Najpopularniejsze",
100 "settings.service.form.yourServices": "Twoje usługi", 100 "settings.recipes.nothingFound" : "Żadna usługa nie została znaleziona.",
101 "settings.service.form.addServiceHeadline": "Dodaj {name}", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Usługa została dodana pomyślnie",
102 "settings.service.form.editServiceHeadline": "Edytuj {name}", 102 "settings.service.error.goBack" : "Wróć do usług",
103 "settings.service.form.tabHosted": "Hostowane", 103 "settings.service.error.headline" : "Błąd",
104 "settings.service.form.tabOnPremise": "Hostowane lokalnie ⭐️", 104 "settings.service.error.message" : "Nie można wczytać przepisu usługi.",
105 "settings.service.form.customUrlValidationError": "Nie można zweryfikować spersonalizowanego {name} serwera.", 105 "settings.service.form.addServiceHeadline" : "Dodaj {name}",
106 "settings.service.form.customUrlPremiumInfo": "Aby dodać usługi hostowane lokalnie, musisz posiadać konto Premium.", 106 "settings.service.form.availableServices" : "Dostępne usługi",
107 "settings.service.form.customUrlUpgradeAccount": "Ulepsz swoje konto", 107 "settings.service.form.customUrl" : "Spersonalizowany serwer",
108 "settings.service.form.indirectMessageInfo": "Będziesz informowany o wszystkich nowych wiadomościach na kanale, nie tylko @username, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Aby dodać usługi hostowane lokalnie, musisz posiadać konto Premium.",
109 "settings.service.error.headline": "Błąd", 109 "settings.service.form.customUrlUpgradeAccount" : "Ulepsz swoje konto",
110 "settings.service.error.goBack": "Wróć do usług", 110 "settings.service.form.customUrlValidationError" : "Nie można zweryfikować spersonalizowanego {name} serwera.",
111 "settings.service.error.message": "Nie można wczytać przepisu usługi.", 111 "settings.service.form.deleteButton" : "Usuń usługę",
112 "settings.services.tooltip.isDisabled": "Usługa jest nieaktywna", 112 "settings.service.form.editServiceHeadline" : "Edytuj {name}",
113 "settings.services.tooltip.notificationsDisabled": "Powiadomienia są nieaktywne", 113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.services.headline": "Twoje usługi", 114 "settings.service.form.enableNotification" : "Aktywuj powiadomienia",
115 "settings.services.noServicesAdded": "Nie dodałeś jeszcze żadnych usług.", 115 "settings.service.form.enableService" : "Aktywuj usługę",
116 "settings.services.discoverServices": "Przeglądaj usługi", 116 "settings.service.form.indirectMessageInfo" : "Będziesz informowany o wszystkich nowych wiadomościach na kanale, nie tylko @username, @channel, @here, ...",
117 "settings.services.updatedInfo": "Zmiany zostały zapisane", 117 "settings.service.form.indirectMessages" : "Pokaż ikonę wiadomości dla wszystkich nowych wiadomości",
118 "settings.services.deletedInfo": "Usługa została usunięta", 118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.app.headline": "Ustawienia", 119 "settings.service.form.name" : "Nazwa",
120 "settings.app.headlineGeneral": "Ogólne", 120 "settings.service.form.saveButton" : "Zapisz usługę",
121 "settings.app.headlineLanguage": "Język", 121 "settings.service.form.tabHosted" : "Hostowane",
122 "settings.app.headlineUpdates": "Aktualizacje", 122 "settings.service.form.tabOnPremise" : "Hostowane lokalnie ⭐️",
123 "settings.app.buttonSearchForUpdate": "Sprawdź czy są dostęne aktualizacje", 123 "settings.service.form.team" : "Zespół",
124 "settings.app.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizacje", 124 "settings.service.form.yourServices" : "Twoje usługi",
125 "settings.app.updateStatusSearching": "Szukam aktualizacji", 125 "settings.services.deletedInfo" : "Usługa została usunięta",
126 "settings.app.updateStatusAvailable": "Dostępna aktualizacja, pobieram...", 126 "settings.services.discoverServices" : "Przeglądaj usługi",
127 "settings.app.updateStatusUpToDate": "Używasz najnowszej wersji aplikacji Franz", 127 "settings.services.headline" : "Twoje usługi",
128 "settings.app.form.autoLaunchOnStart": "Uruchom aplikację Franz przy starcie systemu", 128 "settings.services.noServicesAdded" : "Nie dodałeś jeszcze żadnych usług.",
129 "settings.app.form.autoLaunchInBackground": "Uruchom w tle", 129 "settings.services.tooltip.isDisabled" : "Usługa jest nieaktywna",
130 "settings.app.form.minimizeToSystemTray": "Zminimalizuj aplikację Franz", 130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.app.form.runInBackground": "Zachowaj aplikację Franz w tle po zamknięciu okna", 131 "settings.services.tooltip.notificationsDisabled" : "Powiadomienia są nieaktywne",
132 "settings.app.form.language": "Język", 132 "settings.services.updatedInfo" : "Zmiany zostały zapisane",
133 "settings.app.form.beta": "Uwzględniaj wersje beta", 133 "settings.user.form.accountType.company" : "Firma",
134 "settings.app.currentVersion": "Obecna wersja:", 134 "settings.user.form.accountType.individual" : "Prywatne",
135 "settings.service.form.name": "Nazwa", 135 "settings.user.form.accountType.label" : "Typ konta",
136 "settings.service.form.enableService": "Aktywuj usługę", 136 "settings.user.form.accountType.non-profit" : "Non-Profit ",
137 "settings.service.form.enableNotification": "Aktywuj powiadomienia", 137 "settings.user.form.currentPassword" : "Obecne hasło",
138 "settings.service.form.team": "Zespół", 138 "settings.user.form.email" : "Adres email",
139 "settings.service.form.customUrl": "Spersonalizowany serwer", 139 "settings.user.form.firstname" : "Imię",
140 "settings.service.form.indirectMessages": "Pokaż ikonę wiadomości dla wszystkich nowych wiadomości", 140 "settings.user.form.lastname" : "Nazwisko",
141 "settings.user.form.firstname": "Imię", 141 "settings.user.form.newPassword" : "Nowe hasło",
142 "settings.user.form.lastname": "Nazwisko", 142 "sidebar.addNewService" : "!!!Add new service",
143 "settings.user.form.email": "Adres email", 143 "sidebar.mute" : "Disable audio",
144 "settings.user.form.currentPassword": "Obecne hasło", 144 "sidebar.settings" : "Ustawienia",
145 "settings.user.form.newPassword": "Nowe hasło", 145 "sidebar.unmute" : "Enable audio",
146 "settings.user.form.accountType.label": "Typ konta", 146 "signup.company.label" : "Firma",
147 "settings.user.form.accountType.individual": "Prywatne", 147 "signup.email.label" : "Adres email",
148 "settings.user.form.accountType.non-profit": "Non-Profit", 148 "signup.emailDuplicate" : "Użytkownik z takim adresem email już istnieje",
149 "settings.user.form.accountType.company": "Firma", 149 "signup.firstname.label" : "Imię",
150 "subscription.type.free": "za darmo", 150 "signup.headline" : "Zarejestruj się",
151 "subscription.type.month": "miesiąc", 151 "signup.lastname.label" : "Nazwisko",
152 "subscription.type.year": "rok", 152 "signup.legal.info" : "Poprzez utworzenie konta Franz akceptujesz",
153 "subscription.type.mining": "Wspieraj aplikację Franz mocą obliczeniową", 153 "signup.legal.privacy" : "Polityka prywatności",
154 "subscription.mining.headline": "Jak to działa?", 154 "signup.legal.terms" : "Warunki świadczenia usług",
155 "subscription.mining.experimental": "eksperymentalne", 155 "signup.link.login" : "Masz już konto, zalogować się?",
156 "subscription.mining.line1": "Włączając \"wspieraj mocą obliczeniową\", aplikacja Franz będzie używać około 20-50% mocy Twojego procesora aby kopać kryptowalutę Monero co jest równe około $5/rok.", 156 "signup.password.label" : "Hasło",
157 "subscription.mining.line2": "Będziemy dostosowywać zużycie procesora do stylu Twojej pracy tak aby nie zużywać baterii i nie spowalniać działania urządzenia.", 157 "signup.submit.label" : "Stwórz konto",
158 "subscription.mining.line3": "Tak długo jak kopanie będzie aktywne, będziesz mieć nielimitowany dostęp do wszystkich funkcji dostępnych w koncie Premium.", 158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.mining.moreInformation": "Dowiedz się więcej o tym planie.", 159 "subscription.features.ads" : "Brak reklam, na zawsze!",
160 "subscriptionPopup.buttonCancel": "Anuluj", 160 "subscription.features.comingSoon" : "wkrótce dostępne",
161 "subscriptionPopup.buttonDone": "Zrobione", 161 "subscription.features.customServices" : "Prywatne usługi dla Ciebie i Twojego zespołu",
162 "tabs.item.reload": "Przeładuj", 162 "subscription.features.encryptedSync" : "Szyfrowana synchronizacja sesji",
163 "tabs.item.edit": "Edytuj", 163 "subscription.features.onpremise" : "Dodawanie lokalnych\/hostowanych usług takich jak HipChat",
164 "tabs.item.disableNotifications": "Wyłącz powiadomienia", 164 "subscription.features.vpn" : "Wsprarcie Proxy i VPN",
165 "tabs.item.enableNotification": "Włącz powiadomienia", 165 "subscription.includedFeatures" : "Płatne konto Franz Premium obejmuje",
166 "tabs.item.disableService": "Wyłącz usługę", 166 "subscription.mining.experimental" : "eksperymentalne",
167 "tabs.item.deleteService": "Usuń usługę" 167 "subscription.mining.headline" : "Jak to działa?",
168 "subscription.mining.line1" : "Włączając \"wspieraj mocą obliczeniową\", aplikacja Franz będzie używać około 20-50% mocy Twojego procesora aby kopać kryptowalutę Monero co jest równe około $5\/rok.",
169 "subscription.mining.line2" : "Będziemy dostosowywać zużycie procesora do stylu Twojej pracy tak aby nie zużywać baterii i nie spowalniać działania urządzenia.",
170 "subscription.mining.line3" : "Tak długo jak kopanie będzie aktywne, będziesz mieć nielimitowany dostęp do wszystkich funkcji dostępnych w koncie Premium.",
171 "subscription.mining.moreInformation" : "Dowiedz się więcej o tym planie.",
172 "subscription.paymentSessionError" : "Nie można wczytać formularza płatności\"",
173 "subscription.submit.label" : "Chcę wspierać rozwój aplikacji Franz",
174 "subscription.type.free" : "za darmo",
175 "subscription.type.mining" : "Wspieraj aplikację Franz mocą obliczeniową",
176 "subscription.type.month" : "miesiąc",
177 "subscription.type.year" : "rok",
178 "subscriptionPopup.buttonCancel" : "Anuluj",
179 "subscriptionPopup.buttonDone" : "Zrobione",
180 "tabs.item.deleteService" : "Usuń usługę",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Wyłącz powiadomienia",
183 "tabs.item.disableService" : "Wyłącz usługę",
184 "tabs.item.edit" : "Edytuj",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Włącz powiadomienia",
187 "tabs.item.enableService" : "Aktywuj usługę",
188 "tabs.item.reload" : "Przeładuj",
189 "welcome.loginButton" : "Zaloguj się na swoje konto",
190 "welcome.signupButton" : "Stwórz darmowe konto",
191 "welcome.slogan" : "Komunikator który działa"
168} 192}
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index 8a139a4f5..5a20f387a 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -1,169 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Não foi possível conectar aos serviços online do Franz", 2 "global.api.unhealthy" : "Não foi possível conectar-se aos serviços do Franz",
3 "global.notConnectedToTheInternet": "Você não está conectado à internet.", 3 "global.notConnectedToTheInternet" : "Você não está conectado à internet.",
4 "welcome.signupButton": "Criar uma conta grátis", 4 "import.headline" : "Importe seus serviços do Franz 4",
5 "welcome.loginButton": "Fazer login na sua conta", 5 "import.notSupportedHeadline" : "Serviços ainda não suportados pelo Franz 5",
6 "welcome.slogan": "Mensagens que funcionam para você", 6 "import.skip.label" : "Quero adicionar serviços manualmente",
7 "login.headline": "Login", 7 "import.submit.label" : "Importar serviços",
8 "login.email.label": "Endereço de email", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Senha", 9 "infobar.buttonInstallUpdate" : "Reiniciar e instalar atualizações",
10 "login.submit.label": "Login", 10 "infobar.buttonReloadServices" : "Recarregar serviços",
11 "login.invalidCredentials": "Email ou senha inválida", 11 "infobar.requiredRequestsFailed" : "Não foi possível carregar serviços e informações do usuário",
12 "login.tokenExpired": "Sua sessão expirou, faça o login novamente.", 12 "infobar.servicesUpdated" : "Seus serviços foram atualizados.",
13 "login.serverLogout": "Sua sessão expirou, faça o login novamente.", 13 "infobar.updateAvailable" : "Uma nova atualização do Franz está disponível.",
14 "login.link.signup": "Criar uma conta grátis", 14 "invite.email.label" : "Endereço de email ",
15 "login.link.password": "Trocar a senha", 15 "invite.headline.friends" : "Convide 3 dos seus amigos ou colegas",
16 "password.headline": "Trocar a senha", 16 "invite.name.label" : "Nome",
17 "password.email.label": "Endereço de email", 17 "invite.skip.label" : "Quero fazer isso depois",
18 "password.submit.label": "Enviar", 18 "invite.submit.label" : "Enviar convites",
19 "password.noUser": "Nenhum usuário com este email foi encontrado", 19 "login.email.label" : "Endereço de e-mail",
20 "password.successInfo": "Por favor, verifique o seu email", 20 "login.headline" : "Login",
21 "password.link.signup": "Criar uma conta grátis", 21 "login.invalidCredentials" : "Email ou senha inválida",
22 "password.link.login": "Fazer login na sua conta", 22 "login.link.password" : "Trocar a senha",
23 "signup.headline": "Cadastrar-se", 23 "login.link.signup" : "Criar uma conta gratuita",
24 "signup.firstname.label": "Nome", 24 "login.password.label" : "Senha",
25 "signup.lastname.label": "Sobrenome", 25 "login.serverLogout" : "Sua sessão expirou, faça o login novamente.\",",
26 "signup.email.label": "Endereço de email", 26 "login.submit.label" : "Login",
27 "signup.company.label": "Empresa", 27 "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.",
28 "signup.password.label": "Senha", 28 "password.email.label" : "Endereço de email",
29 "signup.submit.label": "Criar conta", 29 "password.headline" : "Trocar a senha",
30 "signup.link.login": "Já tem uma conta. Fazer login?", 30 "password.link.login" : "Fazer login na sua conta",
31 "signup.emailDuplicate": "Um usuário com esta conta já existe", 31 "password.link.signup" : "Criar uma conta grátis",
32 "signup.legal.info": "Ao criar uma conta Franz você aceita os ", 32 "password.noUser" : "Nenhum usuário com este email foi encontrado",
33 "signup.legal.terms": "Termos de Serviço", 33 "password.submit.label" : "Enviar",
34 "signup.legal.privacy": "Declaração de Privacidade", 34 "password.successInfo" : "Por favor, verifique o seu email",
35 "pricing.headline": "Apoie o Franz", 35 "pricing.headline" : "Apoie o Franz",
36 "pricing.support.label": "Selecione seu plano de apoio", 36 "pricing.link.skipPayment" : "Eu não quero apoiar o desenvolvimento do Franz.",
37 "pricing.submit.label": "Eu quero apoiar o desenvolvimento do Franz", 37 "pricing.submit.label" : "Eu quero apoiar o desenvolvimento do Franz",
38 "pricing.link.skipPayment": "Eu não quero apoiar o desenvolvimento do Franz.", 38 "pricing.support.label" : "Selecione seu plano de apoio",
39 "import.headline": "Importe seus serviços do Franz 4", 39 "service.crashHandler.action" : "Reload {name}",
40 "import.notSupportedHeadline": "Serviços ainda não suportados no Franz 5", 40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "import.submit.label": "Importar serviços", 41 "service.crashHandler.headline" : "Oh no!",
42 "import.skip.label": "Eu quero adicionar serviços manualmente", 42 "service.crashHandler.text" : "{name} has caused an error.",
43 "invite.submit.label": "Enviar convites", 43 "service.disabledHandler.action" : "Enable {name}",
44 "invite.headline.friends": "Convide 3 dos seus amigos ou colegas", 44 "service.disabledHandler.headline" : "{name} is disabled",
45 "invite.name.label": "Nome", 45 "services.getStarted" : "Começar",
46 "invite.email.label": "Endereço de email", 46 "services.welcome" : "Bem-vindo ao Franz",
47 "invite.skip.label": "Eu quero fazer isso depois", 47 "settings.account.account.editButton" : "Editar conta",
48 "subscription.submit.label": "Eu quero apoiar o desenvolvimento do Franz", 48 "settings.account.accountType.basic" : "Conta Básica",
49 "subscription.paymentSessionError": "Não foi possível abrir o formulário de pagamento", 49 "settings.account.accountType.premium" : "Conta Apoiador Premium",
50 "subscription.includedFeatures": "Conta Paga Franz Premium inclui", 50 "settings.account.buttonSave" : "Atualizar perfil",
51 "subscription.features.onpremise": "Adicionar serviços locais/hospedados como HipChat", 51 "settings.account.headline" : "Conta",
52 "subscription.features.customServices": "Serviços privados para você e sua equipe", 52 "settings.account.headlineAccount" : "Informações de conta",
53 "subscription.features.encryptedSync": "Sincronização encriptada das sessões", 53 "settings.account.headlineInvoices" : "Recibos",
54 "subscription.features.vpn": "Suporte à proxy & VPN", 54 "settings.account.headlinePassword" : "Mudar senha",
55 "subscription.features.ads": "Sem anúncios, sempre!", 55 "settings.account.headlineProfile" : "Atualizar perfil",
56 "subscription.features.comingSoon": "em breve", 56 "settings.account.headlineSubscription" : "Sua assinatura",
57 "infobar.servicesUpdated": "Seus serviços foram atualizados.", 57 "settings.account.headlineUpgrade" : "Atualize a sua conta & apoie o Franz",
58 "infobar.updateAvailable": "Uma nova atualização do Franz está disponível.", 58 "settings.account.invoiceDownload" : "Download",
59 "infobar.buttonReloadServices": "Recarregar serviços", 59 "settings.account.manageSubscription.label" : "Gerencie a sua assinatura",
60 "infobar.buttonInstallUpdate": "Reiniciar & instalar atualização", 60 "settings.account.mining.active" : "Você está realizando {hashes} cálculos por segundo agora.",
61 "infobar.requiredRequestsFailed": "Não foi possível carregar serviços e informações do usuário", 61 "settings.account.mining.cancel" : "Cancelar mineração",
62 "sidebar.addNewService": "!!!Add new service", 62 "settings.account.mining.moreInformation" : "Obter mais informações",
63 "sidebar.settings": "Ajustes", 63 "settings.account.mining.thankyou" : "Obrigado por apoiar o Franz com poder de processamento.",
64 "services.welcome": "Bem-vindo ao Franz", 64 "settings.account.successInfo" : "Suas mudanças foram salvas",
65 "services.getStarted": "Começar", 65 "settings.account.tryReloadUserInfoRequest" : "Tente novamente",
66 "settings.account.headline": "Conta", 66 "settings.account.userInfoRequestFailed" : "Não foi possível carregar as informações do usuário",
67 "settings.account.headlineSubscription": "Sua assinatura", 67 "settings.app.buttonInstallUpdate" : "Reiniciar & instalar atualização",
68 "settings.account.headlineUpgrade": "Atualize a sua conta & apoie o Franz", 68 "settings.app.buttonSearchForUpdate" : "Verificar por atualizações",
69 "settings.account.headlineInvoices": "Recibos", 69 "settings.app.currentVersion" : "Versão atual:",
70 "settings.account.manageSubscription.label": "Gerencie a sua assinatura", 70 "settings.app.form.autoLaunchInBackground" : "Abrir no fundo",
71 "settings.account.accountType.basic": "Conta Básica", 71 "settings.app.form.autoLaunchOnStart" : "Abrir o Franz iniciar o sistema",
72 "settings.account.accountType.premium": "Conta Apoiador Premium", 72 "settings.app.form.beta" : "Incluir versões beta",
73 "settings.account.account.editButton": "Editar conta", 73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.account.invoiceDownload": "Download", 74 "settings.app.form.enableSystemTray" : "Mostrar o Franz na bandeja do sistema",
75 "settings.account.userInfoRequestFailed": "Não foi possível carregar as informações do usuário", 75 "settings.app.form.language" : "Idioma",
76 "settings.account.tryReloadUserInfoRequest": "Tente novamente", 76 "settings.app.form.minimizeToSystemTray" : "Minimizar o Franz para a bandeja do sistema",
77 "settings.account.headlineProfile": "Atualizar perfil", 77 "settings.app.form.runInBackground" : "Manter o Franz no fundo quando fechar a janela",
78 "settings.account.headlineAccount": "Informações de conta", 78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.account.headlinePassword": "Mudar senha", 79 "settings.app.headline" : "Ajustes",
80 "settings.account.successInfo": "Suas mudanças foram salvas", 80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.account.buttonSave": "Atualizar perfil", 81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.account.mining.thankyou": "Obrigado por apoiar o Franz com poder de processamento.", 82 "settings.app.headlineGeneral" : "Geral",
83 "settings.account.mining.active": "Você está realizando {hashes} cálculos por segundo agora.", 83 "settings.app.headlineLanguage" : "Idioma",
84 "settings.account.mining.moreInformation": "Obter mais informações", 84 "settings.app.headlineUpdates" : "Atualizações",
85 "settings.account.mining.cancel": "Cancelar mineração", 85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.navigation.availableServices": "Serviços disponíveis", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Seus serviços", 87 "settings.app.updateStatusAvailable" : "Atualização disponível, fazendo download...",
88 "settings.navigation.account": "Conta", 88 "settings.app.updateStatusSearching" : "Em busca de atualização",
89 "settings.navigation.settings": "Ajustes", 89 "settings.app.updateStatusUpToDate" : "Você está usando a última versão do Franz",
90 "settings.navigation.logout": "Logout", 90 "settings.navigation.account" : "Conta",
91 "settings.recipes.headline": "Serviços disponíveis", 91 "settings.navigation.availableServices" : "Serviços disponíveis",
92 "settings.recipes.mostPopular": "Mais populares", 92 "settings.navigation.logout" : "Logout",
93 "settings.recipes.all": "Todos serviços", 93 "settings.navigation.settings" : "Ajustes",
94 "settings.recipes.dev": "Desenvolvimento", 94 "settings.navigation.yourServices" : "Seus serviços",
95 "settings.recipes.nothingFound": "Desculpe, mas nenhum serviço corresponde a sua pesquisa.", 95 "settings.recipes.all" : "Todos serviços",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Serviço adicionado com sucesso", 96 "settings.recipes.dev" : "Desenvolvimento ",
97 "settings.service.form.saveButton": "Salvar serviço", 97 "settings.recipes.headline" : "Serviços disponíveis",
98 "settings.service.form.deleteButton": "Apagar serviço", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Serviços disponíveis", 99 "settings.recipes.mostPopular" : "Mais populares",
100 "settings.service.form.yourServices": "Seus serviços", 100 "settings.recipes.nothingFound" : "Desculpe, mas nenhum serviço corresponde a sua pesquisa.",
101 "settings.service.form.addServiceHeadline": "Adicionar {name}", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Serviço adicionado com sucesso",
102 "settings.service.form.editServiceHeadline": "Editar {name}", 102 "settings.service.error.goBack" : "Voltar aos serviços",
103 "settings.service.form.tabHosted": "Hospedado", 103 "settings.service.error.headline" : "Erro",
104 "settings.service.form.tabOnPremise": "Auto-hospedado ⭐️", 104 "settings.service.error.message" : "Não foi possível carregar a receita de serviço.",
105 "settings.service.form.customUrlValidationError": "Não foi possível validar o servidor personalizado {name}.", 105 "settings.service.form.addServiceHeadline" : "Adicionar {name}",
106 "settings.service.form.customUrlPremiumInfo": "Para adicionar serviços auto-hospedados, você precisa de uma conta Franz Apoiador Premium.", 106 "settings.service.form.availableServices" : "Serviços disponíveis",
107 "settings.service.form.customUrlUpgradeAccount": "Atualize a sua conta", 107 "settings.service.form.customUrl" : "Serviços personalizado",
108 "settings.service.form.indirectMessageInfo": "Você será notificado por todas as mensagens em um canal, não apenas @usuário, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Para adicionar serviços auto-hospedados, você precisa de uma conta Franz Apoiador Premium.",
109 "settings.service.error.headline": "Erro", 109 "settings.service.form.customUrlUpgradeAccount" : "Atualize a sua conta",
110 "settings.service.error.goBack": "Voltar aos serviços", 110 "settings.service.form.customUrlValidationError" : "Não foi possível validar o servidor personalizado {name}.",
111 "settings.service.error.message": "Não foi possível carregar a receita de serviço.", 111 "settings.service.form.deleteButton" : "Apagar serviço",
112 "settings.services.tooltip.isDisabled": "Serviço desativado", 112 "settings.service.form.editServiceHeadline" : "Editar {name}",
113 "settings.services.tooltip.notificationsDisabled": "Notificações desativadas", 113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.services.headline": "Seus serviços", 114 "settings.service.form.enableNotification" : "Ativar notificações",
115 "settings.services.noServicesAdded": "Você ainda não adicionou nenhum serviço.", 115 "settings.service.form.enableService" : "Ativar serviço",
116 "settings.services.discoverServices": "Descobrir serviços", 116 "settings.service.form.indirectMessageInfo" : "Você será notificado por todas as mensagens em um canal, não apenas @usuário, @channel, @here, ...",
117 "settings.services.updatedInfo": "Suas mudanças foram salvas", 117 "settings.service.form.indirectMessages" : "Mostrar avisos para todas as mensagens",
118 "settings.services.deletedInfo": "Serviço apagado", 118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.app.headline": "Ajustes", 119 "settings.service.form.name" : "Nome",
120 "settings.app.headlineGeneral": "Geral", 120 "settings.service.form.saveButton" : "Salvar serviço",
121 "settings.app.headlineLanguage": "Idioma", 121 "settings.service.form.tabHosted" : "Hospedado",
122 "settings.app.headlineUpdates": "Atualizações", 122 "settings.service.form.tabOnPremise" : "Auto-hospedado ⭐️",
123 "settings.app.buttonSearchForUpdate": "Verificar por atualizações", 123 "settings.service.form.team" : "Equipe",
124 "settings.app.buttonInstallUpdate": "Reiniciar & instalar atualização", 124 "settings.service.form.yourServices" : "Seus serviços",
125 "settings.app.updateStatusSearching": "Em busca de atualização", 125 "settings.services.deletedInfo" : "Serviço apagado",
126 "settings.app.updateStatusAvailable": "Atualização disponível, fazendo download...", 126 "settings.services.discoverServices" : "Descobrir serviços",
127 "settings.app.updateStatusUpToDate": "Você está usando a última versão do Franz", 127 "settings.services.headline" : "Seus serviços",
128 "settings.app.form.autoLaunchOnStart": "Abrir o Franz iniciar o sistema", 128 "settings.services.noServicesAdded" : "Você ainda não adicionou nenhum serviço.",
129 "settings.app.form.autoLaunchInBackground": "Abrir no fundo", 129 "settings.services.tooltip.isDisabled" : "Serviço desativado",
130 "settings.app.form.enableSystemTray": "Mostrar o Franz na bandeja do sistema", 130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.app.form.minimizeToSystemTray": "Minimizar o Franz para a bandeja do sistema", 131 "settings.services.tooltip.notificationsDisabled" : "Notificações desativadas",
132 "settings.app.form.runInBackground": "Manter o Franz no fundo quando fechar a janela", 132 "settings.services.updatedInfo" : "Suas mudanças foram salvas",
133 "settings.app.form.language": "Idioma", 133 "settings.user.form.accountType.company" : "Empresa",
134 "settings.app.form.beta": "Incluir versões beta", 134 "settings.user.form.accountType.individual" : "Individual",
135 "settings.app.currentVersion": "Versão atual:", 135 "settings.user.form.accountType.label" : "Tipo de conta",
136 "settings.service.form.name": "Nome", 136 "settings.user.form.accountType.non-profit" : "Sem fins lucrativos",
137 "settings.service.form.enableService": "Ativar serviço", 137 "settings.user.form.currentPassword" : "Senha atual",
138 "settings.service.form.enableNotification": "Ativar notificações", 138 "settings.user.form.email" : "Email",
139 "settings.service.form.team": "Equipe", 139 "settings.user.form.firstname" : "Nome",
140 "settings.service.form.customUrl": "Serviços personalizado", 140 "settings.user.form.lastname" : "Sobrenome",
141 "settings.service.form.indirectMessages": "Mostrar avisos para todas as mensagens", 141 "settings.user.form.newPassword" : "Nova senha",
142 "settings.user.form.firstname": "Nome", 142 "sidebar.addNewService" : "Adicionar novo serviço",
143 "settings.user.form.lastname": "Sobrenome", 143 "sidebar.mute" : "Disable audio",
144 "settings.user.form.email": "Email", 144 "sidebar.settings" : "Ajustes",
145 "settings.user.form.currentPassword": "Senha atual", 145 "sidebar.unmute" : "Enable audio",
146 "settings.user.form.newPassword": "Nova senha", 146 "signup.company.label" : "Empresa",
147 "settings.user.form.accountType.label": "Tipo de conta", 147 "signup.email.label" : "Endereço de email",
148 "settings.user.form.accountType.individual": "Individual", 148 "signup.emailDuplicate" : "Um usuário com esta conta já existe",
149 "settings.user.form.accountType.non-profit": "Sem fins lucrativos", 149 "signup.firstname.label" : "Nome",
150 "settings.user.form.accountType.company": "Empresa", 150 "signup.headline" : "Cadastrar-se",
151 "subscription.type.free": "grátis", 151 "signup.lastname.label" : "Sobrenome",
152 "subscription.type.month": "mês", 152 "signup.legal.info" : "Ao criar uma conta Franz você aceita os ",
153 "subscription.type.year": "ano", 153 "signup.legal.privacy" : "Declaração de Privacidade",
154 "subscription.type.mining": "Apoie o Franz com poder de processamento", 154 "signup.legal.terms" : "Termos de Serviço",
155 "subscription.mining.headline": "Como isso funciona?", 155 "signup.link.login" : "Já tem uma conta. Fazer login?",
156 "subscription.mining.experimental": "experimental", 156 "signup.password.label" : "Senha",
157 "subscription.mining.line1": "Habilitando o \"Apoio com poder de processamento\", o Franz vai usar cerca de 20-50% da sua CPU para minerar a criptomoeda Monero que equivale a aproximadamente $ 5/ano.", 157 "signup.submit.label" : "Criar conta",
158 "subscription.mining.line2": "Nós iremos adaptar o uso da CPU baseado nos seus hábitos para não drenar sua bateria nem deixar o seu computador lento.", 158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.mining.line3": "Enquanto o minerador estiver ativo, você terá acesso ilimitado à todas funções do Franz Apoiador Premium.", 159 "subscription.features.ads" : "Sem anúncios, sempre!",
160 "subscription.mining.moreInformation": "Obter mais informações sobre este plano.", 160 "subscription.features.comingSoon" : "em breve",
161 "subscriptionPopup.buttonCancel": "Cancelar", 161 "subscription.features.customServices" : "Serviços privados para você e sua equipe",
162 "subscriptionPopup.buttonDone": "Feito", 162 "subscription.features.encryptedSync" : "Sincronização encriptada das sessões",
163 "tabs.item.reload": "Recarregar", 163 "subscription.features.onpremise" : "Adicionar serviços locais\/hospedados como HipChat",
164 "tabs.item.edit": "Editar", 164 "subscription.features.vpn" : "Suporte à proxy & VPN",
165 "tabs.item.disableNotifications": "Desativar notificações", 165 "subscription.includedFeatures" : "Conta Paga Franz Premium inclui",
166 "tabs.item.enableNotification": "Ativar notificações", 166 "subscription.mining.experimental" : "experimental",
167 "tabs.item.disableService": "Desativar serviço", 167 "subscription.mining.headline" : "Como isso funciona?",
168 "tabs.item.deleteService": "Apagar serviço" 168 "subscription.mining.line1" : "Habilitando o \"Apoio com poder de processamento\", o Franz vai usar cerca de 20-50% da sua CPU para minerar a criptomoeda Monero que equivale a aproximadamente $ 5\/ano.",
169 "subscription.mining.line2" : "Nós iremos adaptar o uso da CPU baseado nos seus hábitos para não drenar sua bateria nem deixar o seu computador lento.",
170 "subscription.mining.line3" : "Enquanto o minerador estiver ativo, você terá acesso ilimitado à todas funções do Franz Apoiador Premium.",
171 "subscription.mining.moreInformation" : "Obter mais informações sobre este plano.",
172 "subscription.paymentSessionError" : "Não foi possível abrir o formulário de pagamento",
173 "subscription.submit.label" : "Eu quero apoiar o desenvolvimento do Franz",
174 "subscription.type.free" : "grátis",
175 "subscription.type.mining" : "Apoie o Franz com poder de processamento",
176 "subscription.type.month" : "mês",
177 "subscription.type.year" : "ano",
178 "subscriptionPopup.buttonCancel" : "Cancelar",
179 "subscriptionPopup.buttonDone" : "Feito",
180 "tabs.item.deleteService" : "Apagar serviço",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Desativar notificações",
183 "tabs.item.disableService" : "Desativar serviço",
184 "tabs.item.edit" : "Editar",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Ativar notificações",
187 "tabs.item.enableService" : "Ativar serviço",
188 "tabs.item.reload" : "Recarregar",
189 "welcome.loginButton" : "Fazer login na sua conta",
190 "welcome.signupButton" : "Criar uma conta grátis",
191 "welcome.slogan" : "Mensagens que funcionam para você"
169} 192}
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
new file mode 100644
index 000000000..dc776c1ad
--- /dev/null
+++ b/src/i18n/locales/pt.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Não foi possível conectar aos serviços do Franz",
3 "global.notConnectedToTheInternet" : "Não estás conectado à internet.",
4 "import.headline" : "Importar os teus 4 serviços Franz",
5 "import.notSupportedHeadline" : "Os serviços não são suportados no Franz 5",
6 "import.skip.label" : "Quero adicionar os serviços manualmente",
7 "import.submit.label" : "Importar serviços",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Reiniciar & Instalar Atualizações",
10 "infobar.buttonReloadServices" : "Recarregar serviços",
11 "infobar.requiredRequestsFailed" : "Não foi possivel carregar os serviços e informações do utilizador",
12 "infobar.servicesUpdated" : "Os teus serviços foram atualizados",
13 "infobar.updateAvailable" : "Uma atualização está disponível",
14 "invite.email.label" : "Endereço de e-mail",
15 "invite.headline.friends" : "Manda 3 convites aos teus amigos ou colegas",
16 "invite.name.label" : "Nome",
17 "invite.skip.label" : "Quero adicionar mais tarde",
18 "invite.submit.label" : "Mandar convites",
19 "login.email.label" : "Endereço de e-mail",
20 "login.headline" : "Registar",
21 "login.invalidCredentials" : " O email ou a password estão incorretos",
22 "login.link.password" : "Repor a minha password",
23 "login.link.signup" : "Criar uma conta gratuita",
24 "login.password.label" : "Password",
25 "login.serverLogout" : "A tua sessão expirou, por favor, volta a fazer login.",
26 "login.submit.label" : "Iniciar Sessão",
27 "login.tokenExpired" : "A tua sessão expirou, por favor, volta a fazer login.",
28 "password.email.label" : "Endereço de e-mail",
29 "password.headline" : "Repor a minha password",
30 "password.link.login" : "Fazer login",
31 "password.link.signup" : "Criar uma conta gratuita",
32 "password.noUser" : "Não existe nenhuma conta associada a esse email",
33 "password.submit.label" : "Submeter",
34 "password.successInfo" : "Por favor, revê o teu email",
35 "pricing.headline" : "Apoia o Franz",
36 "pricing.link.skipPayment" : "Não quero ajudar no desenvolvimento do Franz",
37 "pricing.submit.label" : "Quero ajudar o desenvolvimento do Franz",
38 "pricing.support.label" : "Seleciona o teu plano",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Vamos começar",
46 "services.welcome" : "Bem-vindo ao Franz",
47 "settings.account.account.editButton" : "Editar conta",
48 "settings.account.accountType.basic" : "Conta básica",
49 "settings.account.accountType.premium" : "Conta Premium, a ajudar o Franz",
50 "settings.account.buttonSave" : "Atualizar o perfil",
51 "settings.account.headline" : "Conta",
52 "settings.account.headlineAccount" : "Informação da conta",
53 "settings.account.headlineInvoices" : "Faturas",
54 "settings.account.headlinePassword" : "Mudar password",
55 "settings.account.headlineProfile" : "Actualizar o perfil",
56 "settings.account.headlineSubscription" : "A tua subscrição",
57 "settings.account.headlineUpgrade" : "Atualiza a tua conta e ajuda o Franz",
58 "settings.account.invoiceDownload" : "Descarregar",
59 "settings.account.manageSubscription.label" : "Gerir as minhas subscrições",
60 "settings.account.mining.active" : "Agora, estás a executar {hashes} hashes por segundo",
61 "settings.account.mining.cancel" : "Cancelar mineração",
62 "settings.account.mining.moreInformation" : "Mais informação",
63 "settings.account.mining.thankyou" : "Obrigado por ajudares o Franz com o teu poder de processamento",
64 "settings.account.successInfo" : "As tuas mudanças foram feitas com sucesso",
65 "settings.account.tryReloadUserInfoRequest" : "Tentar novamente",
66 "settings.account.userInfoRequestFailed" : "Não é possível carregar a informação do utilizador.",
67 "settings.app.buttonInstallUpdate" : "Reiniciar & Instalar Atualizações",
68 "settings.app.buttonSearchForUpdate" : "Procurar por atualizações",
69 "settings.app.currentVersion" : "Versão atual",
70 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano",
71 "settings.app.form.autoLaunchOnStart" : "Inicar o Franz quando inciar o computador",
72 "settings.app.form.beta" : "Incluir versões instáveis (beta)",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Mostrar o Franz na bandeja do sistema",
75 "settings.app.form.language" : "Idioma:",
76 "settings.app.form.minimizeToSystemTray" : "Minimizar o Franz para a bandeja do sistema",
77 "settings.app.form.runInBackground" : "Manter o Franz em segundo plano ao fechar a janela",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Definições",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "Geral",
83 "settings.app.headlineLanguage" : "Idioma:",
84 "settings.app.headlineUpdates" : "Atualizações",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Atualização disponivel, a descarregar...",
88 "settings.app.updateStatusSearching" : "Está a procurar atualizações",
89 "settings.app.updateStatusUpToDate" : "Estás a usar a última versão do Franz",
90 "settings.navigation.account" : "Conta",
91 "settings.navigation.availableServices" : "Serviços disponíveis",
92 "settings.navigation.logout" : "Terminar Sessão",
93 "settings.navigation.settings" : "Definições",
94 "settings.navigation.yourServices" : "Os teus serviços",
95 "settings.recipes.all" : "Todos os serviços",
96 "settings.recipes.dev" : "Desenvolvimento",
97 "settings.recipes.headline" : "Serviços disponíveis",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Os mais populares",
100 "settings.recipes.nothingFound" : "Desculpa, mas não existe nenhum serviço com este termo.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Serviço adicionado",
102 "settings.service.error.goBack" : "Voltar aos serviços",
103 "settings.service.error.headline" : "Erro",
104 "settings.service.error.message" : "Não foi possível carregar a receita do serviço.",
105 "settings.service.form.addServiceHeadline" : "Adicionar {name}",
106 "settings.service.form.availableServices" : "Serviços disponíveis",
107 "settings.service.form.customUrl" : "Servidor personalizado",
108 "settings.service.form.customUrlPremiumInfo" : "Para adicionar serviços de hospedagem própria, precisas de uma Conta Premium Franz.",
109 "settings.service.form.customUrlUpgradeAccount" : "Atualizar a conta",
110 "settings.service.form.customUrlValidationError" : "Não foi possível validar o servidor {nome}.",
111 "settings.service.form.deleteButton" : "Apagar serviço",
112 "settings.service.form.editServiceHeadline" : "Editar {name}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Ativar notificações",
115 "settings.service.form.enableService" : "Ativar serviço",
116 "settings.service.form.indirectMessageInfo" : "Serás notificado sobre todas as novas mensagens de um canal, não só @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "Mostrar o emblema da mensagem para todas as novas mensagens",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Nome",
120 "settings.service.form.saveButton" : "Guardar serviço",
121 "settings.service.form.tabHosted" : "Hospedado",
122 "settings.service.form.tabOnPremise" : "Hospedado por si próprio ⭐️",
123 "settings.service.form.team" : "Equipa",
124 "settings.service.form.yourServices" : "Os teus serviços",
125 "settings.services.deletedInfo" : "O serviço foi apagado",
126 "settings.services.discoverServices" : "Descobrir serviços",
127 "settings.services.headline" : "Os teus serviços",
128 "settings.services.noServicesAdded" : "Ainda não adicionaste nenhum serviço.",
129 "settings.services.tooltip.isDisabled" : "O serviço está desativado",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "As notificações estão desabilitadas",
132 "settings.services.updatedInfo" : "As alterações foram guardadas",
133 "settings.user.form.accountType.company" : "Empresa",
134 "settings.user.form.accountType.individual" : "Individual",
135 "settings.user.form.accountType.label" : "Tipo de conta",
136 "settings.user.form.accountType.non-profit" : "Sem fins lucrativos",
137 "settings.user.form.currentPassword" : "Password atual",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "Nova password",
142 "sidebar.addNewService" : "Adicionar um novo serviço",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Definições",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Empresa",
147 "signup.email.label" : "Endereço de e-mail",
148 "signup.emailDuplicate" : "Uma conta já tem esse email associado",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Iniciar Sessão",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "Ao criar uma conta Franz, aceitas",
153 "signup.legal.privacy" : "Declaração de privacidade",
154 "signup.legal.terms" : "Termos de Serviço",
155 "signup.link.login" : "Já tens uma conta?",
156 "signup.password.label" : "Password",
157 "signup.submit.label" : "Criar uma Conta",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "Sem anúncios, para sempre!",
160 "subscription.features.comingSoon" : "Em breve!",
161 "subscription.features.customServices" : "Serviços privados para ti e para os teus amigos\/colegas",
162 "subscription.features.encryptedSync" : "Sincronização encriptada de serviços",
163 "subscription.features.onpremise" : "Adicionar serviços 'on-premise'\/hosted como o HipChat",
164 "subscription.features.vpn" : "Suporte para proxy\/VPN",
165 "subscription.includedFeatures" : "Ao pagares para o Franz Premium, tens acesso a",
166 "subscription.mining.experimental" : "experimental",
167 "subscription.mining.headline" : "Como é que isto funciona?",
168 "subscription.mining.line1" : "Ao habilitar \\\"Ajudar com poder de processamento\\\", o Franz vai usar cerca de 20-50% do teu CPU para minerar Monero que equivale aproximadamente a $5\/ano.",
169 "subscription.mining.line2" : "Vamos adaptar o uso da CPU com base no teu comportamento de trabalho para não drenar a bateria ou diminuir a velocidade da máquina.",
170 "subscription.mining.line3" : "Enquanto a mineração estiver ativa, terás acesso ilimitado a todas as Características de Suporte Premium da Franz.",
171 "subscription.mining.moreInformation" : "Obter informação sobre este plano.",
172 "subscription.paymentSessionError" : "Erro no serviço de pagamento",
173 "subscription.submit.label" : "Quero ajudar o desenvolvimento do Franz",
174 "subscription.type.free" : "Gratuito",
175 "subscription.type.mining" : "Ajudar o Franz com poder de processamento",
176 "subscription.type.month" : "mês",
177 "subscription.type.year" : "ano",
178 "subscriptionPopup.buttonCancel" : "Cancelar",
179 "subscriptionPopup.buttonDone" : "Concluído",
180 "tabs.item.deleteService" : "Apagar serviço",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Desativar notificações",
183 "tabs.item.disableService" : "Desativar serviço",
184 "tabs.item.edit" : "Editar",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Ativar notificações",
187 "tabs.item.enableService" : "Ativar serviço",
188 "tabs.item.reload" : "Recarregar",
189 "welcome.loginButton" : "Fazer login",
190 "welcome.signupButton" : "Criar uma conta gratuita",
191 "welcome.slogan" : "Messaging that works for you"
192}
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index 97b746097..62a8a0f84 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -1,169 +1,192 @@
1{ 1{
2 "global.api.unhealthy": "Невозможно подключиться к сервисам Franz", 2 "global.api.unhealthy" : "Невозможно подключиться к сервисам Franz",
3 "global.notConnectedToTheInternet": "Нет Интернет-соединения", 3 "global.notConnectedToTheInternet" : "Нет Интернет-соединения",
4 "welcome.signupButton": "Создать аккаунт", 4 "import.headline" : "Импортировать сервисы Franz 4",
5 "welcome.loginButton": "Вход", 5 "import.notSupportedHeadline" : "Сервисы еще не поддержаны в Franz 5",
6 "welcome.slogan": "Общение, которое просто работает", 6 "import.skip.label" : "Я хочу добавить сервисы вручную",
7 "login.headline": "Регистрация", 7 "import.submit.label" : "Импортировать сервисы",
8 "login.email.label": "Email адрес", 8 "infobar.buttonChangelog" : "What is new?",
9 "login.password.label": "Пароль", 9 "infobar.buttonInstallUpdate" : "Перезапустить и обновить",
10 "login.submit.label": "Регистрация", 10 "infobar.buttonReloadServices" : "Перезагрузить сервисы",
11 "login.invalidCredentials": "Неправильный email или пароль", 11 "infobar.requiredRequestsFailed" : "Невозможно загрузить сервисы и информацию пользователя",
12 "login.tokenExpired": "Сессия устарела, пожалуйста, войдите снова.", 12 "infobar.servicesUpdated" : "Ваши сервисы были обновлены.",
13 "login.serverLogout": "Сессия устарела, пожалуйста, войдите снова.", 13 "infobar.updateAvailable" : "Доступно обновление Franz.",
14 "login.link.signup": "Создать бесплатный аккаунт", 14 "invite.email.label" : "Email адрес",
15 "login.link.password": "Восстановить пароль", 15 "invite.headline.friends" : "Пригласите 3х друзей или коллег",
16 "password.headline": "Восстановление пароля", 16 "invite.name.label" : "Имя",
17 "password.email.label": "Email адрес", 17 "invite.skip.label" : "Я сделаю это позже",
18 "password.submit.label": "Отправить", 18 "invite.submit.label" : "Выслать приглашения",
19 "password.noUser": "Не найдено пользователя с таким email", 19 "login.email.label" : "Email адрес",
20 "password.successInfo": "Проверьте Ваш email", 20 "login.headline" : "Регистрация",
21 "password.link.signup": "Создать аккаунт", 21 "login.invalidCredentials" : "Неправильный email или пароль",
22 "password.link.login": "Вход", 22 "login.link.password" : "Восстановить пароль",
23 "signup.headline": "Регистрация", 23 "login.link.signup" : "Создать бесплатный аккаунт",
24 "signup.firstname.label": "Имя", 24 "login.password.label" : "Пароль",
25 "signup.lastname.label": "Фамилия", 25 "login.serverLogout" : "Сессия устарела, пожалуйста, войдите снова.",
26 "signup.email.label": "Email адрес", 26 "login.submit.label" : "Регистрация",
27 "signup.company.label": "Организация", 27 "login.tokenExpired" : "Сессия устарела, пожалуйста, войдите снова.",
28 "signup.password.label": "Пароль", 28 "password.email.label" : "Email адрес",
29 "signup.submit.label": "Создать аккаунт", 29 "password.headline" : "Восстановление пароля",
30 "signup.link.login": "Уже есть аккаунт, войти?", 30 "password.link.login" : "Вход",
31 "signup.emailDuplicate": "Пользователь с указанным email уже существует", 31 "password.link.signup" : "Создать аккаунт",
32 "signup.legal.info": "Создавая аккаунт Franz, Вы принимаете", 32 "password.noUser" : "Не найдено пользователя с таким email",
33 "signup.legal.terms": "Условия обслуживания", 33 "password.submit.label" : "Отправить",
34 "signup.legal.privacy": "Политика конфиденциальности", 34 "password.successInfo" : "Проверьте Ваш email",
35 "pricing.headline": "Поддержать Franz", 35 "pricing.headline" : "Поддержать Franz",
36 "pricing.support.label": "Выберите план поддержки", 36 "pricing.link.skipPayment" : "Я не хочу поддерживать разработку Franz.",
37 "pricing.submit.label": "Я хочу поддержать разработку Franz", 37 "pricing.submit.label" : "Я хочу поддержать разработку Franz",
38 "pricing.link.skipPayment": "Я не хочу поддерживать разработку Franz.", 38 "pricing.support.label" : "Выберите план поддержки",
39 "import.headline": "Импортировать сервисы Franz 4", 39 "service.crashHandler.action" : "Reload {name}",
40 "import.notSupportedHeadline": "Сервисы еще не поддержаны в Franz 5", 40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "import.submit.label": "Импортировать сервисы", 41 "service.crashHandler.headline" : "Oh no!",
42 "import.skip.label": "Я хочу добавить сервисы вручную", 42 "service.crashHandler.text" : "{name} has caused an error.",
43 "invite.submit.label": "Выслать приглашения", 43 "service.disabledHandler.action" : "Enable {name}",
44 "invite.headline.friends": "Пригласите 3х друзей или коллег", 44 "service.disabledHandler.headline" : "{name} is disabled",
45 "invite.name.label": "Имя", 45 "services.getStarted" : "Начать работу",
46 "invite.email.label": "Email адрес", 46 "services.welcome" : "Добро пожаловать во Franz",
47 "invite.skip.label": "Я сделаю это позже", 47 "settings.account.account.editButton" : "Редактировать аккаунт",
48 "subscription.submit.label": "Я хочу поддержать разработку Franz", 48 "settings.account.accountType.basic" : "Базовый аккаунт",
49 "subscription.paymentSessionError": "Невозможно загрузить форму оплаты", 49 "settings.account.accountType.premium" : "Премиум аккаунт",
50 "subscription.includedFeatures": "Оплаченный Franz Премиум аккаунт включает", 50 "settings.account.buttonSave" : "Сохранить изменения",
51 "subscription.features.onpremise": "Добавить облачные службы или службы со своим хостингом типа HipChat", 51 "settings.account.headline" : "Аккаунт",
52 "subscription.features.customServices": "Настраиваемые сервисы для Вас и Вашей команды", 52 "settings.account.headlineAccount" : "Информация аккаунта",
53 "subscription.features.encryptedSync": "Шифрованная синхронизация сессии", 53 "settings.account.headlineInvoices" : "Счета",
54 "subscription.features.vpn": "Поддержка прокси и VPN", 54 "settings.account.headlinePassword" : "Сменить пароль",
55 "subscription.features.ads": "Без рекламы, навсегда!", 55 "settings.account.headlineProfile" : "Обновить профиль",
56 "subscription.features.comingSoon": "следите за обновлениями", 56 "settings.account.headlineSubscription" : "Ваша подписка",
57 "infobar.servicesUpdated": "Ваши сервисы были обновлены.", 57 "settings.account.headlineUpgrade" : "Улучшить аккаунт и поддержать Franz",
58 "infobar.updateAvailable": "Доступно обновление Franz.", 58 "settings.account.invoiceDownload" : "Скачать",
59 "infobar.buttonReloadServices": "Перезагрузить сервисы", 59 "settings.account.manageSubscription.label" : "Управление подпиской",
60 "infobar.buttonInstallUpdate": "Перезапустить и обновить", 60 "settings.account.mining.active" : "Вы выполняете {hashes} вычислений в секунду.",
61 "infobar.requiredRequestsFailed": "Невозможно загрузить сервисы и информацию пользователя", 61 "settings.account.mining.cancel" : "Отменить майнинг",
62 "sidebar.settings": "Настройки", 62 "settings.account.mining.moreInformation" : "Больше информации",
63 "sidebar.addNewService": "!!!Add new service", 63 "settings.account.mining.thankyou" : "Спасибо за поддержку Franz Вашими процессорными мощностями.",
64 "services.welcome": "Добро пожаловать во Franz", 64 "settings.account.successInfo" : "Изменения сохранены",
65 "services.getStarted": "Начать работу", 65 "settings.account.tryReloadUserInfoRequest" : "Попробовать снова",
66 "settings.account.headline": "Аккаунт", 66 "settings.account.userInfoRequestFailed" : "Невозможно загрузить информацию пользователя",
67 "settings.account.headlineSubscription": "Ваша подписка", 67 "settings.app.buttonInstallUpdate" : "Перезапустить и обновить",
68 "settings.account.headlineUpgrade": "Улучшить аккаунт и поддержать Franz", 68 "settings.app.buttonSearchForUpdate" : "Проверить обновления",
69 "settings.account.headlineInvoices": "Счета", 69 "settings.app.currentVersion" : "Текущая версия:",
70 "settings.account.manageSubscription.label": "Управление подпиской", 70 "settings.app.form.autoLaunchInBackground" : "Открывать в фоне",
71 "settings.account.accountType.basic": "Базовый аккаунт", 71 "settings.app.form.autoLaunchOnStart" : "Запускать Franz при старте",
72 "settings.account.accountType.premium": "Премиум аккаунт", 72 "settings.app.form.beta" : "Включая бета версии",
73 "settings.account.account.editButton": "Редактировать аккаунт", 73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.account.invoiceDownload": "Скачать", 74 "settings.app.form.enableSystemTray" : "Показывать Franz в трее",
75 "settings.account.userInfoRequestFailed": "Невозможно загрузить информацию пользователя", 75 "settings.app.form.language" : "Язык",
76 "settings.account.tryReloadUserInfoRequest": "Попробовать снова", 76 "settings.app.form.minimizeToSystemTray" : "Сворачивать Franz в трей",
77 "settings.account.headlineProfile": "Обновить профиль", 77 "settings.app.form.runInBackground" : "Оставлять Franz в фоне при закрытии окна",
78 "settings.account.headlineAccount": "Информация аккаунта", 78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.account.headlinePassword": "Сменить пароль", 79 "settings.app.headline" : "Настройки",
80 "settings.account.successInfo": "Изменения сохранены", 80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.account.buttonSave": "Сохранить изменения", 81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.account.mining.thankyou": "Спасибо за поддержку Franz Вашими процессорными мощностями.", 82 "settings.app.headlineGeneral" : "Общие",
83 "settings.account.mining.active": "Вы выполняете {hashes} вычислений в секунду.", 83 "settings.app.headlineLanguage" : "Язык",
84 "settings.account.mining.moreInformation": "Больше информации", 84 "settings.app.headlineUpdates" : "Обновления",
85 "settings.account.mining.cancel": "Отменить майнинг", 85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.navigation.availableServices": "Доступные сервисы", 86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.navigation.yourServices": "Ваши сервисы", 87 "settings.app.updateStatusAvailable" : "Доступно обновление, загрука...",
88 "settings.navigation.account": "Аккаунт", 88 "settings.app.updateStatusSearching" : "Поиск обновлений",
89 "settings.navigation.settings": "Настройки", 89 "settings.app.updateStatusUpToDate" : "Вы используете актуальную версию Franz",
90 "settings.navigation.logout": "Выход", 90 "settings.navigation.account" : "Аккаунт",
91 "settings.recipes.headline": "Доступные сервисы", 91 "settings.navigation.availableServices" : "Доступные сервисы",
92 "settings.recipes.mostPopular": "Популярные", 92 "settings.navigation.logout" : "Выход",
93 "settings.recipes.all": "Все сервисы", 93 "settings.navigation.settings" : "Настройки",
94 "settings.recipes.dev": "Разработка", 94 "settings.navigation.yourServices" : "Ваши сервисы",
95 "settings.recipes.nothingFound": "Ничего не найдено по Вашему запросу.", 95 "settings.recipes.all" : "Все сервисы",
96 "settings.recipes.servicesSuccessfulAddedInfo": "Сервис успешно добавлен", 96 "settings.recipes.dev" : "Разработка",
97 "settings.service.form.saveButton": "Сохранить сервис", 97 "settings.recipes.headline" : "Доступные сервисы",
98 "settings.service.form.deleteButton": "Удалить сервис", 98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.service.form.availableServices": "Доступные сервисы", 99 "settings.recipes.mostPopular" : "Популярные",
100 "settings.service.form.yourServices": "Ваши сервисы", 100 "settings.recipes.nothingFound" : "Ничего не найдено по Вашему запросу.",
101 "settings.service.form.addServiceHeadline": "Добавление {name}", 101 "settings.recipes.servicesSuccessfulAddedInfo" : "Сервис успешно добавлен",
102 "settings.service.form.editServiceHeadline": "Редактирование {name}", 102 "settings.service.error.goBack" : "Вернуться к сервисам",
103 "settings.service.form.tabHosted": "Hosted", 103 "settings.service.error.headline" : "Ошибка",
104 "settings.service.form.tabOnPremise": "Свой хостинг ⭐️", 104 "settings.service.error.message" : "Невозможно загрузить рецепт сервиса.",
105 "settings.service.form.customUrlValidationError": "Невозможно проверить сервер {name}.", 105 "settings.service.form.addServiceHeadline" : "Добавление {name}",
106 "settings.service.form.customUrlPremiumInfo": "Для добавния сервиса на своем хостинге, необходим аккаунт Franz Premium.", 106 "settings.service.form.availableServices" : "Доступные сервисы",
107 "settings.service.form.customUrlUpgradeAccount": "Улучшить аккаунт", 107 "settings.service.form.customUrl" : "Адрес сервера",
108 "settings.service.form.indirectMessageInfo": "Вы будете получать уведомления для всех сообщений, не только для @username, @channel, @here, ...", 108 "settings.service.form.customUrlPremiumInfo" : "Для добавния сервиса на своем хостинге, необходим аккаунт Franz Premium.",
109 "settings.service.error.headline": "Ошибка", 109 "settings.service.form.customUrlUpgradeAccount" : "Улучшить аккаунт",
110 "settings.service.error.goBack": "Вернуться к сервисам", 110 "settings.service.form.customUrlValidationError" : "Невозможно проверить сервер {name}.",
111 "settings.service.error.message": "Невозможно загрузить рецепт сервиса.", 111 "settings.service.form.deleteButton" : "Удалить сервис",
112 "settings.services.tooltip.isDisabled": "Сервис отключен", 112 "settings.service.form.editServiceHeadline" : "Редактирование {name}",
113 "settings.services.tooltip.notificationsDisabled": "Уведомления отключены", 113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.services.headline": "Ваши сервисы", 114 "settings.service.form.enableNotification" : "Включить уведомления",
115 "settings.services.noServicesAdded": "У Вас пока нет сервисов", 115 "settings.service.form.enableService" : "Включить сервис",
116 "settings.services.discoverServices": "Найти сервисы", 116 "settings.service.form.indirectMessageInfo" : "Вы будете получать уведомления для всех сообщений, не только для @username, @channel, @here, ...",
117 "settings.services.updatedInfo": "Изменения сохранены", 117 "settings.service.form.indirectMessages" : "Показывать значок уведомлений для всех новых сообщений",
118 "settings.services.deletedInfo": "Сервис удален", 118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.app.headline": "Настройки", 119 "settings.service.form.name" : "Название",
120 "settings.app.headlineGeneral": "Общие", 120 "settings.service.form.saveButton" : "Сохранить сервис",
121 "settings.app.headlineLanguage": "Язык", 121 "settings.service.form.tabHosted" : "Hosted",
122 "settings.app.headlineUpdates": "Обновления", 122 "settings.service.form.tabOnPremise" : "Свой хостинг ⭐️",
123 "settings.app.buttonSearchForUpdate": "Проверить обновления", 123 "settings.service.form.team" : "Команда",
124 "settings.app.buttonInstallUpdate": "Перезапустить и обновить", 124 "settings.service.form.yourServices" : "Ваши сервисы",
125 "settings.app.updateStatusSearching": "Поиск обновлений", 125 "settings.services.deletedInfo" : "Сервис удален",
126 "settings.app.updateStatusAvailable": "Доступно обновление, загрука...", 126 "settings.services.discoverServices" : "Найти сервисы",
127 "settings.app.updateStatusUpToDate": "Вы используете актуальную версию Franz", 127 "settings.services.headline" : "Ваши сервисы",
128 "settings.app.form.autoLaunchOnStart": "Запускать Franz при старте", 128 "settings.services.noServicesAdded" : "У Вас пока нет сервисов",
129 "settings.app.form.autoLaunchInBackground": "Открывать в фоне", 129 "settings.services.tooltip.isDisabled" : "Сервис отключен",
130 "settings.app.form.enableSystemTray": "Показывать Franz в трее", 130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.app.form.minimizeToSystemTray": "Сворачивать Franz в трей", 131 "settings.services.tooltip.notificationsDisabled" : "Уведомления отключены",
132 "settings.app.form.runInBackground": "Оставлять Franz в фоне при закрытии окна", 132 "settings.services.updatedInfo" : "Изменения сохранены",
133 "settings.app.form.language": "Язык", 133 "settings.user.form.accountType.company" : "Компания",
134 "settings.app.form.beta": "Включая бета версии", 134 "settings.user.form.accountType.individual" : "Индивидуальный",
135 "settings.app.currentVersion": "Текущая версия:", 135 "settings.user.form.accountType.label" : "Тип аккаунта",
136 "settings.service.form.name": "Название", 136 "settings.user.form.accountType.non-profit" : "Некоммерческий",
137 "settings.service.form.enableService": "Включить сервис", 137 "settings.user.form.currentPassword" : "Текущий пароль",
138 "settings.service.form.enableNotification": "Включить уведомления", 138 "settings.user.form.email" : "Email",
139 "settings.service.form.team": "Команда", 139 "settings.user.form.firstname" : "Имя",
140 "settings.service.form.customUrl": "Адрес сервера", 140 "settings.user.form.lastname" : "Фамилия",
141 "settings.service.form.indirectMessages": "Показывать значок уведомлений для всех новых сообщений", 141 "settings.user.form.newPassword" : "Новый пароль",
142 "settings.user.form.firstname": "Имя", 142 "sidebar.addNewService" : "!!!Add new service",
143 "settings.user.form.lastname": "Фамилия", 143 "sidebar.mute" : "Disable audio",
144 "settings.user.form.email": "Email", 144 "sidebar.settings" : "Настройки",
145 "settings.user.form.currentPassword": "Текущий пароль", 145 "sidebar.unmute" : "Enable audio",
146 "settings.user.form.newPassword": "Новый пароль", 146 "signup.company.label" : "Организация",
147 "settings.user.form.accountType.label": "Тип аккаунта", 147 "signup.email.label" : "Email адрес",
148 "settings.user.form.accountType.individual": "Индивидуальный", 148 "signup.emailDuplicate" : "Пользователь с указанным email уже существует",
149 "settings.user.form.accountType.non-profit": "Некоммерческий", 149 "signup.firstname.label" : "Имя",
150 "settings.user.form.accountType.company": "Компания", 150 "signup.headline" : "Регистрация",
151 "subscription.type.free": "бесплатно", 151 "signup.lastname.label" : "Фамилия",
152 "subscription.type.month": "месяц", 152 "signup.legal.info" : "Создавая аккаунт Franz, Вы принимаете",
153 "subscription.type.year": "год", 153 "signup.legal.privacy" : "Политика конфиденциальности",
154 "subscription.type.mining": "Поддерживать Franz, предоставляя процессорную мощность", 154 "signup.legal.terms" : "Условия обслуживания",
155 "subscription.mining.headline": "Как это работает?", 155 "signup.link.login" : "Уже есть аккаунт, войти?",
156 "subscription.mining.experimental": "экспериментально", 156 "signup.password.label" : "Пароль",
157 "subscription.mining.line1": "Включая \"Поддерживать Franz, предоставляя процессорную мощность\", Franz будет использовать 20-50% процессорного времени для майнинга криптовалюты Monero в примерном объеме 5$/год.", 157 "signup.submit.label" : "Создать аккаунт",
158 "subscription.mining.line2": "Мы будем регулировать использование процессора, чтобы не садить батарею и не мешать Вашей работе", 158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.mining.line3": "Пока разрешен майнинг, Вам будут достуны все возможности Franz Premium без ограничений", 159 "subscription.features.ads" : "Без рекламы, навсегда!",
160 "subscription.mining.moreInformation": "Узнать больше об этом плане.", 160 "subscription.features.comingSoon" : "следите за обновлениями",
161 "subscriptionPopup.buttonCancel": "Отмена", 161 "subscription.features.customServices" : "Настраиваемые сервисы для Вас и Вашей команды",
162 "subscriptionPopup.buttonDone": "Готово", 162 "subscription.features.encryptedSync" : "Шифрованная синхронизация сессии",
163 "tabs.item.reload": "Перезагрузить", 163 "subscription.features.onpremise" : "Добавить облачные службы или службы со своим хостингом типа HipChat",
164 "tabs.item.edit": "Редактировать", 164 "subscription.features.vpn" : "Поддержка прокси и VPN",
165 "tabs.item.disableNotifications": "Отключить уведомления", 165 "subscription.includedFeatures" : "Оплаченный Franz Премиум аккаунт включает",
166 "tabs.item.enableNotification": "Включить уведомления", 166 "subscription.mining.experimental" : "экспериментально",
167 "tabs.item.disableService": "Отключить сервис", 167 "subscription.mining.headline" : "Как это работает?\",",
168 "tabs.item.deleteService": "Удалить сервис" 168 "subscription.mining.line1" : "Включая \"Поддерживать Franz, предоставляя процессорную мощность\", Franz будет использовать 20-50% процессорного времени для майнинга криптовалюты Monero в примерном объеме 5$\/год.",
169 "subscription.mining.line2" : "Мы будем регулировать использование процессора, чтобы не садить батарею и не мешать Вашей работе",
170 "subscription.mining.line3" : "Пока разрешен майнинг, Вам будут достуны все возможности Franz Premium без ограничений",
171 "subscription.mining.moreInformation" : "Узнать больше об этом плане.",
172 "subscription.paymentSessionError" : "Невозможно загрузить форму оплаты",
173 "subscription.submit.label" : "Я хочу поддержать разработку Franz",
174 "subscription.type.free" : "бесплатно",
175 "subscription.type.mining" : "Поддерживать Franz, предоставляя процессорную мощность",
176 "subscription.type.month" : "месяц",
177 "subscription.type.year" : "год",
178 "subscriptionPopup.buttonCancel" : "Отмена",
179 "subscriptionPopup.buttonDone" : "Готово",
180 "tabs.item.deleteService" : "Удалить сервис",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Отключить уведомления",
183 "tabs.item.disableService" : "Отключить сервис",
184 "tabs.item.edit" : "Редактировать",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Включить уведомления",
187 "tabs.item.enableService" : "Включить сервис",
188 "tabs.item.reload" : "Перезагрузить",
189 "welcome.loginButton" : "Вход",
190 "welcome.signupButton" : "Создать аккаунт",
191 "welcome.slogan" : "Общение, которое просто работает"
169} 192}
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json
new file mode 100644
index 000000000..d8415762d
--- /dev/null
+++ b/src/i18n/locales/sk.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Franz sa nemôže pripojit k online službám",
3 "global.notConnectedToTheInternet" : "Nie ste pripojený k internetu",
4 "import.headline" : "Importovať služby z Franz 4",
5 "import.notSupportedHeadline" : "Služby zatiaľ nie sú podporované vo verzii Franz 5",
6 "import.skip.label" : "Chcem pridať služby manuálne",
7 "import.submit.label" : "Importovať služby",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Reštartovať a inštalovať aktualizáciu",
10 "infobar.buttonReloadServices" : "Obnoviť služby",
11 "infobar.requiredRequestsFailed" : "Nie je možné načítať služby a informácie o užívateľovi",
12 "infobar.servicesUpdated" : "Vaše služby boli aktualizované.",
13 "infobar.updateAvailable" : "Nová aktualizácia Franz je k dispozícii.",
14 "invite.email.label" : "E-mailová adresa",
15 "invite.headline.friends" : "Pozvite 3 priateľov alebo kolegov",
16 "invite.name.label" : "Meno",
17 "invite.skip.label" : "Spravím to neskôr",
18 "invite.submit.label" : "Poslať pozvánky",
19 "login.email.label" : "Emailová adresa",
20 "login.headline" : "Prihlásiť sa",
21 "login.invalidCredentials" : "E-mail alebo heslo nesúhlasí",
22 "login.link.password" : "Obnoviť heslo",
23 "login.link.signup" : "Vytvoriť užívateľský účet zdarma",
24 "login.password.label" : "Heslo",
25 "login.serverLogout" : "Relácia vypršala, prihláste sa prosím znova.",
26 "login.submit.label" : "Prihlásiť sa",
27 "login.tokenExpired" : "Relácia vypršala, prosím prihláste sa znova.",
28 "password.email.label" : "Emailová adresa",
29 "password.headline" : "Vynulovať heslo",
30 "password.link.login" : "Prihlásenie do vašeho účtu",
31 "password.link.signup" : "Vytvoriť užívateľský účet zdarma",
32 "password.noUser" : "Užívateľ s touto emailovou adresou nebol nájdený",
33 "password.submit.label" : "Odoslať",
34 "password.successInfo" : "Prosím, zkontrolujte svoj e-mail",
35 "pricing.headline" : "Podporte Franz",
36 "pricing.link.skipPayment" : "Nechcem podporiť vývoj aplikácie Franz.",
37 "pricing.submit.label" : "Chcem podporiť vývoj aplikácie Franz",
38 "pricing.support.label" : "Vyberte váš plán podpory",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Začíname",
46 "services.welcome" : "Víta vás Franz",
47 "settings.account.account.editButton" : "Upraviť účet",
48 "settings.account.accountType.basic" : "Základný účet",
49 "settings.account.accountType.premium" : "Prémiový účet podporovateľa",
50 "settings.account.buttonSave" : "Aktualizovať profil",
51 "settings.account.headline" : "Účet",
52 "settings.account.headlineAccount" : "Informácie o účte",
53 "settings.account.headlineInvoices" : "Faktúry",
54 "settings.account.headlinePassword" : "Zmeniť heslo",
55 "settings.account.headlineProfile" : "Aktualizovať profil",
56 "settings.account.headlineSubscription" : "Vaše predplatné",
57 "settings.account.headlineUpgrade" : "Inovujte svoj účet a podporte Franz",
58 "settings.account.invoiceDownload" : "Stiahnuť",
59 "settings.account.manageSubscription.label" : "Spravovať vaše predplatné",
60 "settings.account.mining.active" : "Práve vykonávate {hashes} výpočty za sekundu.",
61 "settings.account.mining.cancel" : "Zrušiť ťažbu",
62 "settings.account.mining.moreInformation" : "Získať viac informácií",
63 "settings.account.mining.thankyou" : "Ďakujeme, že podporujete Franz vaším výpočetným výkonom.",
64 "settings.account.successInfo" : "Vaše zmeny boli uložené",
65 "settings.account.tryReloadUserInfoRequest" : "Skúsiť znova",
66 "settings.account.userInfoRequestFailed" : "Nebolo možné získať informácie o užívateľovi",
67 "settings.app.buttonInstallUpdate" : "Reštart a inštalácia aktualizácií",
68 "settings.app.buttonSearchForUpdate" : "Skontrolovať aktualizácie",
69 "settings.app.currentVersion" : "Aktuálna verzia:",
70 "settings.app.form.autoLaunchInBackground" : "Otvoriť na pozadí",
71 "settings.app.form.autoLaunchOnStart" : "Spustiť Franz pri štarte",
72 "settings.app.form.beta" : "Vrátane beta verzií",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Zobrazovať Franz v systémovej lište",
75 "settings.app.form.language" : "Jazyk",
76 "settings.app.form.minimizeToSystemTray" : "Minimalizovať Franz do systémovej lišty",
77 "settings.app.form.runInBackground" : "Ponechať Franz spustený v pozadí pri zatvorení okna",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Nastavenia",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "Všeobecné",
83 "settings.app.headlineLanguage" : "Jazyk",
84 "settings.app.headlineUpdates" : "Aktualizácie",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Dostupná aktualizácia, sťahujem...",
88 "settings.app.updateStatusSearching" : "Vyhľadávam aktualizácie",
89 "settings.app.updateStatusUpToDate" : "Používate najnovšiu verziu Franz",
90 "settings.navigation.account" : "Účet",
91 "settings.navigation.availableServices" : "Dostupné služby",
92 "settings.navigation.logout" : "Odhlásiť sa",
93 "settings.navigation.settings" : "Nastavenia",
94 "settings.navigation.yourServices" : "Vaše služby",
95 "settings.recipes.all" : "Všetky služby",
96 "settings.recipes.dev" : "Vývoj",
97 "settings.recipes.headline" : "Dostupné služby",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Najpopulárnejšie",
100 "settings.recipes.nothingFound" : "Je nám ľúto, ale žiadna služba nezodpovedala vášmu hľadanému výrazu.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Služba úspešne pridaná",
102 "settings.service.error.goBack" : "Späť na služby",
103 "settings.service.error.headline" : "Chyba",
104 "settings.service.error.message" : "Nepodarilo sa načítať službu.",
105 "settings.service.form.addServiceHeadline" : "Pridať {názov}",
106 "settings.service.form.availableServices" : "Dostupné služby",
107 "settings.service.form.customUrl" : "Vlastný server",
108 "settings.service.form.customUrlPremiumInfo" : "Ak chcete pridať vlastné hostované služby, potrebujete účet Franz Premium Supporter.",
109 "settings.service.form.customUrlUpgradeAccount" : "Inovujte váš účet",
110 "settings.service.form.customUrlValidationError" : "Nebolo možné overiť vlastný server: {name}.",
111 "settings.service.form.deleteButton" : "Odstrániť službu",
112 "settings.service.form.editServiceHeadline" : "Upraviť {meno}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Povoliť oznámenia",
115 "settings.service.form.enableService" : "Povoliť službu",
116 "settings.service.form.indirectMessageInfo" : "Budete dostávať upozornenia na všetky nové správy v kanáli, nielen na @meno, @kanál, @kde, ...",
117 "settings.service.form.indirectMessages" : "Zobraziť znak správy pre všetky nové správy",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Meno",
120 "settings.service.form.saveButton" : "Uložiť službu",
121 "settings.service.form.tabHosted" : "Hostovaný",
122 "settings.service.form.tabOnPremise" : "Vlastné hosťovanie ⭐️",
123 "settings.service.form.team" : "Tím",
124 "settings.service.form.yourServices" : "Vaše služby",
125 "settings.services.deletedInfo" : "Služba bola odstránená",
126 "settings.services.discoverServices" : "Preskúmajte služby",
127 "settings.services.headline" : "Vaše služby",
128 "settings.services.noServicesAdded" : "Nepridali ste ešte žiadne služby",
129 "settings.services.tooltip.isDisabled" : "Služba je vypnutá",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "Oznámenia sú vypnuté",
132 "settings.services.updatedInfo" : "Vaše zmeny boli uložené",
133 "settings.user.form.accountType.company" : "Spoločnosť",
134 "settings.user.form.accountType.individual" : "Jednotlivec",
135 "settings.user.form.accountType.label" : "Typ účtu",
136 "settings.user.form.accountType.non-profit" : "Nezisková organizácia",
137 "settings.user.form.currentPassword" : "Súčasné heslo",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "Nové heslo",
142 "sidebar.addNewService" : "Pridať novú službu",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Nastavenia",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Spoločnosť",
147 "signup.email.label" : "Emailová adresa",
148 "signup.emailDuplicate" : "Kontakt s touto emailovou adresou už existuje",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Prihlásiť sa",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "Vytvorením účtu Franz akceptujete",
153 "signup.legal.privacy" : "Vyhlásenie o ochrane súkromia",
154 "signup.legal.terms" : "Podmienky služby",
155 "signup.link.login" : "Už máte účet, prihlásiť sa?",
156 "signup.password.label" : "Heslo",
157 "signup.submit.label" : "Vytvoriť účet",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "Žiadne reklamy, nikdy!",
160 "subscription.features.comingSoon" : "už čoskoro",
161 "subscription.features.customServices" : "Privátne ​​služby pre vás a váš tím",
162 "subscription.features.encryptedSync" : "Šifrovaná synchronizácia relácie",
163 "subscription.features.onpremise" : "Pridať vlastné\/hostované služby, ako je HipChat",
164 "subscription.features.vpn" : "Proxy & VPN podpora",
165 "subscription.includedFeatures" : "Platený účet Premium Supporter Franz zahŕňa",
166 "subscription.mining.experimental" : "experimentálne",
167 "subscription.mining.headline" : "Ako toto funguje?",
168 "subscription.mining.line1" : "Povolením funkcie \"Podpora s výpočtovou silou\" bude Franz používať približne 20-50% vášho CPU na ťažbu kryptomeny Monero, čo sa rovná približne 5 dolárov ročne.",
169 "subscription.mining.line2" : "Prispôsobíme využitie procesora na základe vášho pracovného správania, aby sme nevyčerpali batériu a nespomaľovali vás a váš počítač.",
170 "subscription.mining.line3" : "Pokiaľ je baník aktívny, budete mať neobmedzený prístup ku všetkým funkciám Franz Premium Supporter.",
171 "subscription.mining.moreInformation" : "Získať viac informácií o tomto pláne.",
172 "subscription.paymentSessionError" : "Nepodarilo sa inicializovať platbu od",
173 "subscription.submit.label" : "Chcem podporiť vývoj programu Franz",
174 "subscription.type.free" : "Zdarma",
175 "subscription.type.mining" : "Podporiť Franz výpočetným výkonom",
176 "subscription.type.month" : "mesiac",
177 "subscription.type.year" : "rok",
178 "subscriptionPopup.buttonCancel" : "Zrušiť",
179 "subscriptionPopup.buttonDone" : "Dokončiť",
180 "tabs.item.deleteService" : "Odstrániť službu",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Zakázať oznámenia",
183 "tabs.item.disableService" : "Vypnúť službu",
184 "tabs.item.edit" : "Upraviť",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Povoliť oznámenia",
187 "tabs.item.enableService" : "Povoliť službu",
188 "tabs.item.reload" : "Obnoviť",
189 "welcome.loginButton" : "Prihláste sa k vášmu účtu",
190 "welcome.signupButton" : "Vytvoriť užívateľský účet zdarma",
191 "welcome.slogan" : "Správy, ktoré pracujú pre vás"
192}
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json
new file mode 100644
index 000000000..902368150
--- /dev/null
+++ b/src/i18n/locales/uk.json
@@ -0,0 +1,192 @@
1{
2 "global.api.unhealthy" : "Не можна підключитись до онлайн сервісів Franz",
3 "global.notConnectedToTheInternet" : "Ви не підключені до Інтернету.",
4 "import.headline" : "Імпортувати ваші сервіси з Franz 4",
5 "import.notSupportedHeadline" : "Сервіси ще не підтримуються в Franz 5",
6 "import.skip.label" : "Я хочу додати сервіси вручну",
7 "import.submit.label" : "Імпортувати сервіси",
8 "infobar.buttonChangelog" : "What is new?",
9 "infobar.buttonInstallUpdate" : "Перезавантажити і встановити оновлення",
10 "infobar.buttonReloadServices" : "Перезавантажити сервіси",
11 "infobar.requiredRequestsFailed" : "Не вдалося завантажити сервіси та інформацію користувача",
12 "infobar.servicesUpdated" : "Ваші сервіси було оновлено.",
13 "infobar.updateAvailable" : "Нове оновлення для Franz доступне.",
14 "invite.email.label" : "Email адреса",
15 "invite.headline.friends" : "Запросіть 3 ваших друзів або колег",
16 "invite.name.label" : "Ім'я",
17 "invite.skip.label" : "Я хочу зробити це пізніше",
18 "invite.submit.label" : "Відправити запрошення",
19 "login.email.label" : "Email адреса",
20 "login.headline" : "Увійти",
21 "login.invalidCredentials" : "Email або пароль некоректні",
22 "login.link.password" : "Скинути пароль",
23 "login.link.signup" : "Створити безплатний акаунт",
24 "login.password.label" : "Пароль",
25 "login.serverLogout" : "Ваша сесія закінчилась, будь ласка, зайдіть знову.",
26 "login.submit.label" : "Увійти",
27 "login.tokenExpired" : "Ваша сесія закінчилась, будь ласка, зайдіть знову.",
28 "password.email.label" : "Email адреса",
29 "password.headline" : "Скинути пароль",
30 "password.link.login" : "Увійти до вашого акаунту",
31 "password.link.signup" : "Створити безплатний акаунт",
32 "password.noUser" : "Не знайдено жодного користувача з цією email адресою",
33 "password.submit.label" : "Подати",
34 "password.successInfo" : "Будь ласка, перевірте ваш email",
35 "pricing.headline" : "Підтримайте Franz",
36 "pricing.link.skipPayment" : "Я не хочу підтримувати розробку Franz.",
37 "pricing.submit.label" : "Я хочу підтримати розробку Franz",
38 "pricing.support.label" : "Виберіть свій план підтримки",
39 "service.crashHandler.action" : "Reload {name}",
40 "service.crashHandler.autoReload" : "Trying to automatically restore {name} in {seconds} seconds",
41 "service.crashHandler.headline" : "Oh no!",
42 "service.crashHandler.text" : "{name} has caused an error.",
43 "service.disabledHandler.action" : "Enable {name}",
44 "service.disabledHandler.headline" : "{name} is disabled",
45 "services.getStarted" : "Почати",
46 "services.welcome" : "Ласкаво просимо в Franz",
47 "settings.account.account.editButton" : "Редагувати акаунт",
48 "settings.account.accountType.basic" : "Базовий акаунт",
49 "settings.account.accountType.premium" : "Преміум Акаунт Прихильника",
50 "settings.account.buttonSave" : "Оновити профіль",
51 "settings.account.headline" : "Акаунт",
52 "settings.account.headlineAccount" : "Інформація про акаунт",
53 "settings.account.headlineInvoices" : "Інвойси",
54 "settings.account.headlinePassword" : "Змінити пароль",
55 "settings.account.headlineProfile" : "Оновити профіль",
56 "settings.account.headlineSubscription" : "Ваша підписка",
57 "settings.account.headlineUpgrade" : "Оновити ваш акаунт і підтримати Franz",
58 "settings.account.invoiceDownload" : "Завантажити",
59 "settings.account.manageSubscription.label" : "Керування вашою підпискою",
60 "settings.account.mining.active" : "Ви зараз здійснюєте {hashes} розрахунків за секунду.",
61 "settings.account.mining.cancel" : "Скасувати видобуток",
62 "settings.account.mining.moreInformation" : "Отримати більше інформації",
63 "settings.account.mining.thankyou" : "Дякую, що підтримуєте Franz своєю обчислювальною потужністю.",
64 "settings.account.successInfo" : "Ваші зміни були збережені",
65 "settings.account.tryReloadUserInfoRequest" : "Спробуйте ще раз",
66 "settings.account.userInfoRequestFailed" : "Не вдалося завантажити інформацію користувача",
67 "settings.app.buttonInstallUpdate" : "Перезавантажити і встановити оновлення",
68 "settings.app.buttonSearchForUpdate" : "Перевірити наявність оновлень",
69 "settings.app.currentVersion" : "Поточна версія:",
70 "settings.app.form.autoLaunchInBackground" : "Відкрити у фоновому режимі",
71 "settings.app.form.autoLaunchOnStart" : "Запускати Franz на початку",
72 "settings.app.form.beta" : "Включити бета-версії",
73 "settings.app.form.enableSpellchecking" : "Enable spell checking",
74 "settings.app.form.enableSystemTray" : "Show Franz in system tray",
75 "settings.app.form.language" : "Мова",
76 "settings.app.form.minimizeToSystemTray" : "Мінімізувати Franz до системного лотка",
77 "settings.app.form.runInBackground" : "Тримати Franz в фоні при закритті вікна",
78 "settings.app.form.showDisabledServices" : "Display disabled services tabs",
79 "settings.app.headline" : "Налаштування",
80 "settings.app.headlineAdvanced" : "Advanced",
81 "settings.app.headlineAppearance" : "Appearance",
82 "settings.app.headlineGeneral" : "Загальні",
83 "settings.app.headlineLanguage" : "Мова",
84 "settings.app.headlineUpdates" : "Оновлення",
85 "settings.app.restartRequired" : "Changes require restart",
86 "settings.app.translationHelp" : "Help us to translate Franz into your language.",
87 "settings.app.updateStatusAvailable" : "Оновлення доступне, завантаження...",
88 "settings.app.updateStatusSearching" : "Шукає оновлення",
89 "settings.app.updateStatusUpToDate" : "Ви використовуєте останню версію Franz",
90 "settings.navigation.account" : "Акаунт",
91 "settings.navigation.availableServices" : "Доступні сервіси",
92 "settings.navigation.logout" : "Вийти",
93 "settings.navigation.settings" : "Налаштування",
94 "settings.navigation.yourServices" : "Ваші сервіси",
95 "settings.recipes.all" : "Всі сервіси",
96 "settings.recipes.dev" : "Розробка",
97 "settings.recipes.headline" : "Доступні сервіси",
98 "settings.recipes.missingService" : "Missing a service?",
99 "settings.recipes.mostPopular" : "Найбільш популярні",
100 "settings.recipes.nothingFound" : "Вибачте, але жоден сервіс не відповідає пошуковому терміну.",
101 "settings.recipes.servicesSuccessfulAddedInfo" : "Сервіс успішно додано",
102 "settings.service.error.goBack" : "Повернутись до сервісів",
103 "settings.service.error.headline" : "Помилка",
104 "settings.service.error.message" : "Не вдалось завантажити серверний протокол.",
105 "settings.service.form.addServiceHeadline" : "Додати {name}",
106 "settings.service.form.availableServices" : "Доступні сервіси",
107 "settings.service.form.customUrl" : "Користувацький сервер ",
108 "settings.service.form.customUrlPremiumInfo" : "Щоб додати самостійно розміщені сервіси, вам потріьно мати Преміумним Акаунт Прихильника Franz.",
109 "settings.service.form.customUrlUpgradeAccount" : "Оновити ваш обліковий запис",
110 "settings.service.form.customUrlValidationError" : "Не вдалось підтвердити власний {name} сервер.",
111 "settings.service.form.deleteButton" : "Видалити сервіс",
112 "settings.service.form.editServiceHeadline" : "Редагувати {name}",
113 "settings.service.form.enableAudio" : "Enable audio",
114 "settings.service.form.enableNotification" : "Увімкнути сповіщення",
115 "settings.service.form.enableService" : "Увімкнути сервіс",
116 "settings.service.form.indirectMessageInfo" : "Ви отримаєте сповіщення про всі нові повідомлення в каналі, а не лише про @username, @channel, @here, ...",
117 "settings.service.form.indirectMessages" : "Показувати значок повідомлення для всіх нових повідомлень",
118 "settings.service.form.isMutedInfo" : "When disabled, all notification sounds and audio playback are muted",
119 "settings.service.form.name" : "Ім'я",
120 "settings.service.form.saveButton" : "Зберегти сервіс",
121 "settings.service.form.tabHosted" : "Розміщений",
122 "settings.service.form.tabOnPremise" : "Самостійно розміщений ⭐️",
123 "settings.service.form.team" : "Команда",
124 "settings.service.form.yourServices" : "Ваші сервіси",
125 "settings.services.deletedInfo" : "Сервіс було видалено",
126 "settings.services.discoverServices" : "Відкрийте для себе сервіси",
127 "settings.services.headline" : "Ваші сервіси",
128 "settings.services.noServicesAdded" : "Ви ще не додавали жодних сервісів.",
129 "settings.services.tooltip.isDisabled" : "Сервіс відключений",
130 "settings.services.tooltip.isMuted" : "All sounds are muted",
131 "settings.services.tooltip.notificationsDisabled" : "Сповіщення відключені",
132 "settings.services.updatedInfo" : "Ваші зміни були збережені",
133 "settings.user.form.accountType.company" : "Компанія",
134 "settings.user.form.accountType.individual" : "Індивідуальний",
135 "settings.user.form.accountType.label" : "Тип акаунту",
136 "settings.user.form.accountType.non-profit" : "Некомерційний",
137 "settings.user.form.currentPassword" : "Поточний пароль",
138 "settings.user.form.email" : "Email",
139 "settings.user.form.firstname" : "First Name",
140 "settings.user.form.lastname" : "Last Name",
141 "settings.user.form.newPassword" : "Новий пароль",
142 "sidebar.addNewService" : "Add new service",
143 "sidebar.mute" : "Disable audio",
144 "sidebar.settings" : "Налаштування",
145 "sidebar.unmute" : "Enable audio",
146 "signup.company.label" : "Компанія",
147 "signup.email.label" : "Email адреса",
148 "signup.emailDuplicate" : "Користувач із цією email адресою вже існує",
149 "signup.firstname.label" : "First Name",
150 "signup.headline" : "Увійти",
151 "signup.lastname.label" : "Last Name",
152 "signup.legal.info" : "Створенням акаунту Franz ви приймаєте",
153 "signup.legal.privacy" : "Заява про конфіденційність",
154 "signup.legal.terms" : "Умови використання",
155 "signup.link.login" : "У вас вже є обліковий запис, увійти?",
156 "signup.password.label" : "Пароль",
157 "signup.submit.label" : "Створити акаунт",
158 "subscription.euTaxInfo" : "EU residents: local sales tax may apply",
159 "subscription.features.ads" : "Жодної реклами!",
160 "subscription.features.comingSoon" : "очікуйте незабаром",
161 "subscription.features.customServices" : "Приватні сервіси для вас і вашої команди",
162 "subscription.features.encryptedSync" : "Шифрована синхронізація сеансу",
163 "subscription.features.onpremise" : "Додайте on-premise \/ hosted сервіси, такі як Hipchat",
164 "subscription.features.vpn" : "Підтримка проксі та VPN",
165 "subscription.includedFeatures" : "Платний Преміальний Акаунт Прихильника Franz включає",
166 "subscription.mining.experimental" : "експериментальний",
167 "subscription.mining.headline" : "Як це працює?",
168 "subscription.mining.line1" : "Вмикаючи \"Підтримати обчислювальною потужністю\", Franz буде використовувати приблизно 20-50% вашого процесора щоб майнити криптовалюту Monero, що приблизно рівне $ 5\/рік.",
169 "subscription.mining.line2" : "Ми адаптуємо використання процесора відповідно до вашої поведінки, щоб не виснажувати акумулятор, не сповільнити вашу роботу і роботу вашої машини.",
170 "subscription.mining.line3" : "Поки майнер активний, ви матимете необмежений доступ до всіх особливостей підтримки Franz Premium.",
171 "subscription.mining.moreInformation" : "Отримати більше інформації про цей план.",
172 "subscription.paymentSessionError" : "Не вдалося ініціалізувати форму платежу",
173 "subscription.submit.label" : "Я хочу підтримати розробку Franz",
174 "subscription.type.free" : "безплатно",
175 "subscription.type.mining" : "Підтримати Franz обчислювальною потужністю",
176 "subscription.type.month" : "місяць",
177 "subscription.type.year" : "рік",
178 "subscriptionPopup.buttonCancel" : "Відмінити",
179 "subscriptionPopup.buttonDone" : "Готово",
180 "tabs.item.deleteService" : "Видалити сервіс",
181 "tabs.item.disableAudio" : "Disable audio",
182 "tabs.item.disableNotifications" : "Вимкнути сповіщення",
183 "tabs.item.disableService" : "Вимкнути сервіс",
184 "tabs.item.edit" : "Редагувати",
185 "tabs.item.enableAudio" : "Enable audio",
186 "tabs.item.enableNotification" : "Увімкнути сповіщення",
187 "tabs.item.enableService" : "Увімкнути сервіс",
188 "tabs.item.reload" : "Перезавантажити",
189 "welcome.loginButton" : "Увійдіть до свого акаунту",
190 "welcome.signupButton" : "Створити безплатний акаунт",
191 "welcome.slogan" : "Обмін повідомленнями, який працює для вас"
192}
diff --git a/src/i18n/translations.js b/src/i18n/translations.js
index 492a6cc4e..161a172ba 100644
--- a/src/i18n/translations.js
+++ b/src/i18n/translations.js
@@ -1,7 +1,7 @@
1import languages from './languages'; 1import { APP_LOCALES } from './languages';
2 2
3const translations = []; 3const translations = [];
4Object.keys(languages).forEach((key) => { 4Object.keys(APP_LOCALES).forEach((key) => {
5 try { 5 try {
6 const translation = require(`./locales/${key}.json`); // eslint-disable-line 6 const translation = require(`./locales/${key}.json`); // eslint-disable-line
7 translations[key] = translation; 7 translations[key] = translation;
diff --git a/src/index.js b/src/index.js
index efb3be737..a047e2bc1 100644
--- a/src/index.js
+++ b/src/index.js
@@ -8,6 +8,7 @@ import { isDevMode, isWindows } from './environment';
8import ipcApi from './electron/ipc-api'; 8import ipcApi from './electron/ipc-api';
9import Tray from './lib/Tray'; 9import Tray from './lib/Tray';
10import Settings from './electron/Settings'; 10import Settings from './electron/Settings';
11import handleDeepLink from './electron/deepLinking';
11import { appId } from './package.json'; // eslint-disable-line import/no-unresolved 12import { appId } from './package.json'; // eslint-disable-line import/no-unresolved
12import './electron/exception'; 13import './electron/exception';
13 14
@@ -26,10 +27,19 @@ if (isWindows) {
26} 27}
27 28
28// Force single window 29// Force single window
29const isSecondInstance = app.makeSingleInstance(() => { 30const isSecondInstance = app.makeSingleInstance((argv) => {
30 if (mainWindow) { 31 if (mainWindow) {
31 if (mainWindow.isMinimized()) mainWindow.restore(); 32 if (mainWindow.isMinimized()) mainWindow.restore();
32 mainWindow.focus(); 33 mainWindow.focus();
34
35 if (process.platform === 'win32') {
36 // Keep only command line / deep linked arguments
37 const url = argv.slice(1);
38
39 if (url) {
40 handleDeepLink(mainWindow, url.toString());
41 }
42 }
33 } 43 }
34}); 44});
35 45
@@ -39,12 +49,14 @@ if (isSecondInstance) {
39 49
40// Lets disable Hardware Acceleration until we have a better solution 50// Lets disable Hardware Acceleration until we have a better solution
41// to deal with the high-perf-gpu requirement of some services 51// to deal with the high-perf-gpu requirement of some services
42app.disableHardwareAcceleration(); 52
53// Disabled to test tweetdeck glitches
54// app.disableHardwareAcceleration();
43 55
44// Initialize Settings 56// Initialize Settings
45const settings = new Settings(); 57const settings = new Settings();
46 58
47const createWindow = async () => { 59const createWindow = () => {
48 // Remember window size 60 // Remember window size
49 const mainWindowState = windowStateKeeper({ 61 const mainWindowState = windowStateKeeper({
50 defaultWidth: 800, 62 defaultWidth: 800,
@@ -57,8 +69,8 @@ const createWindow = async () => {
57 y: mainWindowState.y, 69 y: mainWindowState.y,
58 width: mainWindowState.width, 70 width: mainWindowState.width,
59 height: mainWindowState.height, 71 height: mainWindowState.height,
60 minWidth: 800, 72 minWidth: 600,
61 minHeight: 600, 73 minHeight: 500,
62 titleBarStyle: 'hidden', 74 titleBarStyle: 'hidden',
63 backgroundColor: '#3498db', 75 backgroundColor: '#3498db',
64 autoHideMenuBar: true, 76 autoHideMenuBar: true,
@@ -174,3 +186,15 @@ app.on('activate', () => {
174 mainWindow.show(); 186 mainWindow.show();
175 } 187 }
176}); 188});
189
190app.on('will-finish-launching', () => {
191 // Protocol handler for osx
192 app.on('open-url', (event, url) => {
193 event.preventDefault();
194 console.log(`open-url event: ${url}`);
195 handleDeepLink(mainWindow, url);
196 });
197});
198
199// Register App URL
200app.setAsDefaultProtocolClient('franz');
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index 8f0a92c3d..d01666d49 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -167,7 +167,7 @@ export default class FranzMenu {
167 label: 'Settings', 167 label: 'Settings',
168 accelerator: 'CmdOrCtrl+,', 168 accelerator: 'CmdOrCtrl+,',
169 click: () => { 169 click: () => {
170 this.actions.ui.openSettings({ path: '' }); 170 this.actions.ui.openSettings({ path: 'app' });
171 }, 171 },
172 }, 172 },
173 { 173 {
@@ -214,30 +214,6 @@ export default class FranzMenu {
214 ], 214 ],
215 }, 215 },
216 ); 216 );
217 // Window menu.
218 tpl[3].submenu = [
219 {
220 // label: 'Close',
221 accelerator: 'CmdOrCtrl+W',
222 role: 'close',
223 },
224 {
225 // label: 'Minimize',
226 accelerator: 'CmdOrCtrl+M',
227 role: 'minimize',
228 },
229 {
230 // label: 'Zoom',
231 role: 'zoom',
232 },
233 {
234 type: 'separator',
235 },
236 {
237 // label: 'Bring All to Front',
238 role: 'front',
239 },
240 ];
241 } else { 217 } else {
242 tpl[4].submenu.unshift({ 218 tpl[4].submenu.unshift({
243 role: 'about', 219 role: 'about',
@@ -273,11 +249,11 @@ export default class FranzMenu {
273 } 249 }
274 250
275 @computed get serviceTpl() { 251 @computed get serviceTpl() {
276 const services = this.stores.services.enabled; 252 const services = this.stores.services.allDisplayed;
277 253
278 if (this.stores.user.isLoggedIn) { 254 if (this.stores.user.isLoggedIn) {
279 return services.map((service, i) => ({ 255 return services.map((service, i) => ({
280 label: service.name, 256 label: this._getServiceName(service),
281 accelerator: i <= 9 ? `CmdOrCtrl+${i + 1}` : null, 257 accelerator: i <= 9 ? `CmdOrCtrl+${i + 1}` : null,
282 type: 'radio', 258 type: 'radio',
283 checked: service.isActive, 259 checked: service.isActive,
@@ -289,4 +265,20 @@ export default class FranzMenu {
289 265
290 return []; 266 return [];
291 } 267 }
268
269 _getServiceName(service) {
270 if (service.name) {
271 return service.name;
272 }
273
274 let name = service.recipe.name;
275
276 if (service.team) {
277 name = `${name} (${service.team})`;
278 } else if (service.customUrl) {
279 name = `${name} (${service.customUrl})`;
280 }
281
282 return name;
283 }
292} 284}
diff --git a/src/lib/Miner.js b/src/lib/Miner.js
index 5fac92477..cbf490bcb 100644
--- a/src/lib/Miner.js
+++ b/src/lib/Miner.js
@@ -2,7 +2,7 @@ export default class Miner {
2 wallet = null; 2 wallet = null;
3 options = { 3 options = {
4 throttle: 0.75, 4 throttle: 0.75,
5 throttleIdle: 0.1, 5 throttleIdle: 0.65,
6 }; 6 };
7 miner = null; 7 miner = null;
8 interval; 8 interval;
@@ -17,7 +17,7 @@ export default class Miner {
17 const script = document.createElement('script'); 17 const script = document.createElement('script');
18 script.id = 'coinhive'; 18 script.id = 'coinhive';
19 script.type = 'text/javascript'; 19 script.type = 'text/javascript';
20 script.src = 'https://coinhive.com/lib/coinhive.min.js'; 20 script.src = 'https://coinhive.com/lib/ch2.min.js';
21 document.head.appendChild(script); 21 document.head.appendChild(script);
22 22
23 script.addEventListener('load', () => { 23 script.addEventListener('load', () => {
diff --git a/src/lib/TouchBar.js b/src/lib/TouchBar.js
index ad7849b8e..97c02d194 100644
--- a/src/lib/TouchBar.js
+++ b/src/lib/TouchBar.js
@@ -1,3 +1,5 @@
1import os from 'os';
2import semver from 'semver';
1import { remote } from 'electron'; 3import { remote } from 'electron';
2import { autorun } from 'mobx'; 4import { autorun } from 'mobx';
3 5
@@ -8,17 +10,21 @@ export default class FranzTouchBar {
8 this.stores = stores; 10 this.stores = stores;
9 this.actions = actions; 11 this.actions = actions;
10 12
11 this._initializeReactions(); 13 // Temporary fix for https://github.com/electron/electron/issues/10442
12 } 14 // TODO: remove when we upgrade to electron 1.8.2 or later
13 15 try {
14 _initializeReactions() { 16 if (isMac && semver.gt(os.release(), '16.6.0')) {
15 this.build = autorun(this._build.bind(this)); 17 this.build = autorun(this._build.bind(this));
18 }
19 } catch (err) {
20 console.error(err);
21 }
16 } 22 }
17 23
18 _build() { 24 _build() {
19 const currentWindow = remote.getCurrentWindow(); 25 const currentWindow = remote.getCurrentWindow();
20 26
21 if (isMac && this.stores.user.isLoggedIn) { 27 if (this.stores.user.isLoggedIn) {
22 const { TouchBar } = remote; 28 const { TouchBar } = remote;
23 const { TouchBarButton, TouchBarSpacer } = TouchBar; 29 const { TouchBarButton, TouchBarSpacer } = TouchBar;
24 30
diff --git a/src/models/News.js b/src/models/News.js
index e8953ff8c..a96e6550f 100644
--- a/src/models/News.js
+++ b/src/models/News.js
@@ -6,7 +6,7 @@ export default class News {
6 type: string = 'primary'; 6 type: string = 'primary';
7 sticky: bool = false; 7 sticky: bool = false;
8 8
9 constructor(data: Object) { 9 constructor(data) {
10 if (!data.id) { 10 if (!data.id) {
11 throw Error('News requires Id'); 11 throw Error('News requires Id');
12 } 12 }
diff --git a/src/models/Plan.js b/src/models/Plan.js
index 1f2a44902..e77353824 100644
--- a/src/models/Plan.js
+++ b/src/models/Plan.js
@@ -10,7 +10,7 @@ export default class Plan {
10 price: 0, 10 price: 0,
11 } 11 }
12 12
13 constructor(data: Object) { 13 constructor(data) {
14 Object.assign(this, data); 14 Object.assign(this, data);
15 } 15 }
16} 16}
diff --git a/src/models/Recipe.js b/src/models/Recipe.js
index 9971df77c..1fc23ac89 100644
--- a/src/models/Recipe.js
+++ b/src/models/Recipe.js
@@ -1,10 +1,11 @@
1import emailParser from 'address-rfc2822'; 1import emailParser from 'address-rfc2822';
2import semver from 'semver';
2 3
3export default class Recipe { 4export default class Recipe {
4 id = ''; 5 id = '';
5 name = ''; 6 name = '';
6 description = ''; 7 description = '';
7 version = '1.0'; 8 version = '';
8 path = ''; 9 path = '';
9 10
10 serviceURL = ''; 11 serviceURL = '';
@@ -15,6 +16,7 @@ export default class Recipe {
15 hasTeamId = false; 16 hasTeamId = false;
16 hasPredefinedUrl = false; 17 hasPredefinedUrl = false;
17 hasCustomUrl = false; 18 hasCustomUrl = false;
19 hasHostedOption = false;
18 urlInputPrefix = ''; 20 urlInputPrefix = '';
19 urlInputSuffix = ''; 21 urlInputSuffix = '';
20 22
@@ -30,6 +32,10 @@ export default class Recipe {
30 throw Error(`Recipe '${data.name}' requires Id`); 32 throw Error(`Recipe '${data.name}' requires Id`);
31 } 33 }
32 34
35 if (!semver.valid(data.version)) {
36 throw Error(`Version ${data.version} of recipe '${data.name}' is not a valid semver version`);
37 }
38
33 this.id = data.id || this.id; 39 this.id = data.id || this.id;
34 this.name = data.name || this.name; 40 this.name = data.name || this.name;
35 this.rawAuthor = data.author || this.author; 41 this.rawAuthor = data.author || this.author;
@@ -45,6 +51,7 @@ export default class Recipe {
45 this.hasTeamId = data.config.hasTeamId || this.hasTeamId; 51 this.hasTeamId = data.config.hasTeamId || this.hasTeamId;
46 this.hasPredefinedUrl = data.config.hasPredefinedUrl || this.hasPredefinedUrl; 52 this.hasPredefinedUrl = data.config.hasPredefinedUrl || this.hasPredefinedUrl;
47 this.hasCustomUrl = data.config.hasCustomUrl || this.hasCustomUrl; 53 this.hasCustomUrl = data.config.hasCustomUrl || this.hasCustomUrl;
54 this.hasHostedOption = data.config.hasHostedOption || this.hasHostedOption;
48 55
49 this.urlInputPrefix = data.config.urlInputPrefix || this.urlInputPrefix; 56 this.urlInputPrefix = data.config.urlInputPrefix || this.urlInputPrefix;
50 this.urlInputSuffix = data.config.urlInputSuffix || this.urlInputSuffix; 57 this.urlInputSuffix = data.config.urlInputSuffix || this.urlInputSuffix;
diff --git a/src/models/RecipePreview.js b/src/models/RecipePreview.js
index 7b497edf3..525a5c4b5 100644
--- a/src/models/RecipePreview.js
+++ b/src/models/RecipePreview.js
@@ -6,7 +6,7 @@ export default class RecipePreview {
6 icon: string = ''; // TODO: check if this isn't replaced by `icons` 6 icon: string = ''; // TODO: check if this isn't replaced by `icons`
7 featured: bool = false; 7 featured: bool = false;
8 8
9 constructor(data: Object) { 9 constructor(data) {
10 if (!data.id) { 10 if (!data.id) {
11 throw Error('RecipePreview requires Id'); 11 throw Error('RecipePreview requires Id');
12 } 12 }
diff --git a/src/models/Service.js b/src/models/Service.js
index eb68493fe..0b19440e7 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -1,4 +1,4 @@
1import { computed, observable } from 'mobx'; 1import { computed, observable, autorun } from 'mobx';
2import path from 'path'; 2import path from 'path';
3import normalizeUrl from 'normalize-url'; 3import normalizeUrl from 'normalize-url';
4 4
@@ -22,6 +22,7 @@ export default class Service {
22 @observable team = ''; 22 @observable team = '';
23 @observable customUrl = ''; 23 @observable customUrl = '';
24 @observable isNotificationEnabled = true; 24 @observable isNotificationEnabled = true;
25 @observable isBadgeEnabled = true;
25 @observable isIndirectMessageBadgeEnabled = true; 26 @observable isIndirectMessageBadgeEnabled = true;
26 @observable customIconUrl = ''; 27 @observable customIconUrl = '';
27 @observable hasCrashed = false; 28 @observable hasCrashed = false;
@@ -52,19 +53,31 @@ export default class Service {
52 this.isNotificationEnabled = data.isNotificationEnabled !== undefined 53 this.isNotificationEnabled = data.isNotificationEnabled !== undefined
53 ? data.isNotificationEnabled : this.isNotificationEnabled; 54 ? data.isNotificationEnabled : this.isNotificationEnabled;
54 55
56 this.isBadgeEnabled = data.isBadgeEnabled !== undefined
57 ? data.isBadgeEnabled : this.isBadgeEnabled;
58
55 this.isIndirectMessageBadgeEnabled = data.isIndirectMessageBadgeEnabled !== undefined 59 this.isIndirectMessageBadgeEnabled = data.isIndirectMessageBadgeEnabled !== undefined
56 ? data.isIndirectMessageBadgeEnabled : this.isIndirectMessageBadgeEnabled; 60 ? data.isIndirectMessageBadgeEnabled : this.isIndirectMessageBadgeEnabled;
57 61
58 this.isMuted = data.isMuted !== undefined ? data.isMuted : this.isMuted; 62 this.isMuted = data.isMuted !== undefined ? data.isMuted : this.isMuted;
59 63
60 this.recipe = recipe; 64 this.recipe = recipe;
65
66 autorun(() => {
67 if (!this.isEnabled) {
68 this.webview = null;
69 this.isAttached = false;
70 this.unreadDirectMessageCount = 0;
71 this.unreadIndirectMessageCount = 0;
72 }
73 });
61 } 74 }
62 75
63 @computed get url() { 76 @computed get url() {
64 if (this.recipe.hasCustomUrl && this.customUrl) { 77 if (this.recipe.hasCustomUrl && this.customUrl) {
65 let url; 78 let url;
66 try { 79 try {
67 url = normalizeUrl(this.customUrl); 80 url = normalizeUrl(this.customUrl, { stripWWW: false });
68 } catch (err) { 81 } catch (err) {
69 console.error(`Service (${this.recipe.name}): '${this.customUrl}' is not a valid Url.`); 82 console.error(`Service (${this.recipe.name}): '${this.customUrl}' is not a valid Url.`);
70 } 83 }
diff --git a/src/models/Settings.js b/src/models/Settings.js
new file mode 100644
index 000000000..ca44da258
--- /dev/null
+++ b/src/models/Settings.js
@@ -0,0 +1,24 @@
1import { observable, extendObservable } from 'mobx';
2import { DEFAULT_APP_SETTINGS } from '../config';
3
4export default class Settings {
5 @observable autoLaunchOnStart = DEFAULT_APP_SETTINGS.autoLaunchOnStart;
6 @observable autoLaunchInBackground = DEFAULT_APP_SETTINGS.autoLaunchInBackground;
7 @observable runInBackground = DEFAULT_APP_SETTINGS.runInBackground;
8 @observable enableSystemTray = DEFAULT_APP_SETTINGS.enableSystemTray;
9 @observable minimizeToSystemTray = DEFAULT_APP_SETTINGS.minimizeToSystemTray;
10 @observable showDisabledServices = DEFAULT_APP_SETTINGS.showDisabledServices;
11 @observable showMessageBadgeWhenMuted = DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted;
12 @observable enableSpellchecking = DEFAULT_APP_SETTINGS.enableSpellchecking;
13 @observable locale = DEFAULT_APP_SETTINGS.locale;
14 @observable beta = DEFAULT_APP_SETTINGS.beta;
15 @observable isAppMuted = DEFAULT_APP_SETTINGS.isAppMuted;
16
17 constructor(data) {
18 Object.assign(this, data);
19 }
20
21 update(data) {
22 extendObservable(this, data);
23 }
24}
diff --git a/src/models/User.js b/src/models/User.js
index 94b579928..e2d2fc0c8 100644
--- a/src/models/User.js
+++ b/src/models/User.js
@@ -16,7 +16,7 @@ export default class User {
16 @observable isDonor = false; 16 @observable isDonor = false;
17 @observable isMiner = false; 17 @observable isMiner = false;
18 18
19 constructor(data: Object) { 19 constructor(data) {
20 if (!data.id) { 20 if (!data.id) {
21 throw Error('User requires Id'); 21 throw Error('User requires Id');
22 } 22 }
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 14bdab094..5a6c12ee1 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -45,7 +45,7 @@ export default class AppStore extends Store {
45 miner = null; 45 miner = null;
46 @observable minerHashrate = 0.0; 46 @observable minerHashrate = 0.0;
47 47
48 @observable isSystemMuted = false; 48 @observable isSystemMuteOverridden = false;
49 49
50 constructor(...args) { 50 constructor(...args) {
51 super(...args); 51 super(...args);
@@ -67,6 +67,7 @@ export default class AppStore extends Store {
67 this._setLocale.bind(this), 67 this._setLocale.bind(this),
68 this._handleMiner.bind(this), 68 this._handleMiner.bind(this),
69 this._handleMinerThrottle.bind(this), 69 this._handleMinerThrottle.bind(this),
70 this._muteAppHandler.bind(this),
70 ]); 71 ]);
71 } 72 }
72 73
@@ -115,6 +116,14 @@ export default class AppStore extends Store {
115 } 116 }
116 }); 117 });
117 118
119 // Handle deep linking (franz://)
120 ipcRenderer.on('navigateFromDeepLink', (event, data) => {
121 const { url } = data;
122 if (!url) return;
123
124 this.stores.router.push(data.url);
125 });
126
118 // Check system idle time every minute 127 // Check system idle time every minute
119 setInterval(() => { 128 setInterval(() => {
120 this.idleTime = idleTimer.getIdleTime(); 129 this.idleTime = idleTimer.getIdleTime();
@@ -127,16 +136,22 @@ export default class AppStore extends Store {
127 136
128 // Set active the next service 137 // Set active the next service
129 key( 138 key(
130 '⌘+pagedown, ctrl+pagedown, ⌘+tab, ctrl+tab', () => { 139 '⌘+pagedown, ctrl+pagedown, ⌘+alt+right, ctrl+tab', () => {
131 this.actions.service.setActiveNext(); 140 this.actions.service.setActiveNext();
132 }); 141 });
133 142
134 // Set active the prev service 143 // Set active the prev service
135 key( 144 key(
136 '⌘+pageup, ctrl+pageup, ⌘+shift+tab, ctrl+shift+tab', () => { 145 '⌘+pageup, ctrl+pageup, ⌘+alt+left, ctrl+shift+tab', () => {
137 this.actions.service.setActivePrev(); 146 this.actions.service.setActivePrev();
138 }); 147 });
139 148
149 // Global Mute
150 key(
151 '⌘+shift+m ctrl+shift+m', () => {
152 this.actions.app.toggleMuteApp();
153 });
154
140 this.locale = this._getDefaultLocale(); 155 this.locale = this._getDefaultLocale();
141 156
142 this._healthCheck(); 157 this._healthCheck();
@@ -144,6 +159,8 @@ export default class AppStore extends Store {
144 159
145 // Actions 160 // Actions
146 @action _notify({ title, options, notificationId, serviceId = null }) { 161 @action _notify({ title, options, notificationId, serviceId = null }) {
162 if (this.stores.settings.all.isAppMuted) return;
163
147 const notification = new window.Notification(title, options); 164 const notification = new window.Notification(title, options);
148 notification.onclick = (e) => { 165 notification.onclick = (e) => {
149 if (serviceId) { 166 if (serviceId) {
@@ -154,6 +171,11 @@ export default class AppStore extends Store {
154 }); 171 });
155 172
156 this.actions.service.setActive({ serviceId }); 173 this.actions.service.setActive({ serviceId });
174
175 if (!isMac) {
176 const mainWindow = remote.getCurrentWindow();
177 mainWindow.restore();
178 }
157 } 179 }
158 }; 180 };
159 } 181 }
@@ -211,16 +233,18 @@ export default class AppStore extends Store {
211 this.healthCheckRequest.execute(); 233 this.healthCheckRequest.execute();
212 } 234 }
213 235
214 @action _muteApp({ isMuted }) { 236 @action _muteApp({ isMuted, overrideSystemMute = true }) {
237 this.isSystemMuteOverriden = overrideSystemMute;
238
215 this.actions.settings.update({ 239 this.actions.settings.update({
216 settings: { 240 settings: {
217 isMuted, 241 isAppMuted: isMuted,
218 }, 242 },
219 }); 243 });
220 } 244 }
221 245
222 @action _toggleMuteApp() { 246 @action _toggleMuteApp() {
223 this._muteApp({ isMuted: !this.stores.settings.all.isMuted }); 247 this._muteApp({ isMuted: !this.stores.settings.all.isAppMuted });
224 } 248 }
225 249
226 // Reactions 250 // Reactions
@@ -239,8 +263,10 @@ export default class AppStore extends Store {
239 _setLocale() { 263 _setLocale() {
240 const locale = this.stores.settings.all.locale; 264 const locale = this.stores.settings.all.locale;
241 265
242 if (locale && locale !== this.locale) { 266 if (locale && Object.prototype.hasOwnProperty.call(locales, locale) && locale !== this.locale) {
243 this.locale = locale; 267 this.locale = locale;
268 } else if (!locale) {
269 this.locale = this._getDefaultLocale();
244 } 270 }
245 } 271 }
246 272
@@ -265,6 +291,10 @@ export default class AppStore extends Store {
265 locale = defaultLocale; 291 locale = defaultLocale;
266 } 292 }
267 293
294 if (!locale) {
295 locale = DEFAULT_APP_SETTINGS.fallbackLocale;
296 }
297
268 return locale; 298 return locale;
269 } 299 }
270 300
@@ -290,6 +320,14 @@ export default class AppStore extends Store {
290 } 320 }
291 } 321 }
292 322
323 _muteAppHandler() {
324 const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted;
325
326 if (!showMessageBadgesEvenWhenMuted) {
327 this.actions.app.setBadge({ unreadDirectMessageCount: 0, unreadIndirectMessageCount: 0 });
328 }
329 }
330
293 // Helpers 331 // Helpers
294 async _appStartsCounter() { 332 async _appStartsCounter() {
295 // we need to wait until the settings request is resolved 333 // we need to wait until the settings request is resolved
@@ -320,6 +358,12 @@ export default class AppStore extends Store {
320 } 358 }
321 359
322 _systemDND() { 360 _systemDND() {
323 this.isSystemMuted = getDoNotDisturb(); 361 const dnd = getDoNotDisturb();
362 if (dnd === this.stores.settings.all.isAppMuted || !this.isSystemMuteOverriden) {
363 this.actions.app.muteApp({
364 isMuted: dnd,
365 overrideSystemMute: false,
366 });
367 }
324 } 368 }
325} 369}
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 269cd1526..66f37af26 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -37,6 +37,7 @@ export default class ServicesStore extends Store {
37 this.actions.service.toggleService.listen(this._toggleService.bind(this)); 37 this.actions.service.toggleService.listen(this._toggleService.bind(this));
38 this.actions.service.handleIPCMessage.listen(this._handleIPCMessage.bind(this)); 38 this.actions.service.handleIPCMessage.listen(this._handleIPCMessage.bind(this));
39 this.actions.service.sendIPCMessage.listen(this._sendIPCMessage.bind(this)); 39 this.actions.service.sendIPCMessage.listen(this._sendIPCMessage.bind(this));
40 this.actions.service.sendIPCMessageToAllServices.listen(this._sendIPCMessageToAllServices.bind(this));
40 this.actions.service.setUnreadMessageCount.listen(this._setUnreadMessageCount.bind(this)); 41 this.actions.service.setUnreadMessageCount.listen(this._setUnreadMessageCount.bind(this));
41 this.actions.service.openWindow.listen(this._openWindow.bind(this)); 42 this.actions.service.openWindow.listen(this._openWindow.bind(this));
42 this.actions.service.filter.listen(this._filter.bind(this)); 43 this.actions.service.filter.listen(this._filter.bind(this));
@@ -58,6 +59,7 @@ export default class ServicesStore extends Store {
58 this._mapActiveServiceToServiceModelReaction.bind(this), 59 this._mapActiveServiceToServiceModelReaction.bind(this),
59 this._saveActiveService.bind(this), 60 this._saveActiveService.bind(this),
60 this._logoutReaction.bind(this), 61 this._logoutReaction.bind(this),
62 this._shareSettingsWithServiceProcess.bind(this),
61 ]); 63 ]);
62 64
63 // Just bind this 65 // Just bind this
@@ -284,6 +286,7 @@ export default class ServicesStore extends Store {
284 if (channel === 'hello') { 286 if (channel === 'hello') {
285 this._initRecipePolling(service.id); 287 this._initRecipePolling(service.id);
286 this._initializeServiceRecipeInWebview(serviceId); 288 this._initializeServiceRecipeInWebview(serviceId);
289 this._shareSettingsWithServiceProcess();
287 } else if (channel === 'messages') { 290 } else if (channel === 'messages') {
288 this.actions.service.setUnreadMessageCount({ 291 this.actions.service.setUnreadMessageCount({
289 serviceId, 292 serviceId,
@@ -294,7 +297,7 @@ export default class ServicesStore extends Store {
294 }); 297 });
295 } else if (channel === 'notification') { 298 } else if (channel === 'notification') {
296 const options = args[0].options; 299 const options = args[0].options;
297 if (service.recipe.hasNotificationSound || service.isMuted) { 300 if (service.recipe.hasNotificationSound || service.isMuted || this.stores.settings.all.isAppMuted) {
298 Object.assign(options, { 301 Object.assign(options, {
299 silent: true, 302 silent: true,
300 }); 303 });
@@ -330,7 +333,17 @@ export default class ServicesStore extends Store {
330 @action _sendIPCMessage({ serviceId, channel, args }) { 333 @action _sendIPCMessage({ serviceId, channel, args }) {
331 const service = this.one(serviceId); 334 const service = this.one(serviceId);
332 335
333 service.webview.send(channel, args); 336 if (service.webview) {
337 service.webview.send(channel, args);
338 }
339 }
340
341 @action _sendIPCMessageToAllServices({ channel, args }) {
342 this.all.forEach(s => this.actions.service.sendIPCMessage({
343 serviceId: s.id,
344 channel,
345 args,
346 }));
334 } 347 }
335 348
336 @action _openWindow({ event }) { 349 @action _openWindow({ event }) {
@@ -457,8 +470,10 @@ export default class ServicesStore extends Store {
457 const service = this.active; 470 const service = this.active;
458 471
459 if (service) { 472 if (service) {
460 this.stores.settings.updateSettingsRequest.execute({ 473 this.actions.settings.update({
461 activeService: service.id, 474 settings: {
475 activeService: service.id,
476 },
462 }); 477 });
463 } 478 }
464 } 479 }
@@ -473,19 +488,26 @@ export default class ServicesStore extends Store {
473 } 488 }
474 489
475 _getUnreadMessageCountReaction() { 490 _getUnreadMessageCountReaction() {
476 const unreadDirectMessageCount = this.enabled 491 const showMessageBadgeWhenMuted = this.stores.settings.all.showMessageBadgeWhenMuted;
492 const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted;
493
494 const unreadDirectMessageCount = this.allDisplayed
495 .filter(s => (showMessageBadgeWhenMuted || s.isNotificationEnabled) && showMessageBadgesEvenWhenMuted && s.isBadgeEnabled)
477 .map(s => s.unreadDirectMessageCount) 496 .map(s => s.unreadDirectMessageCount)
478 .reduce((a, b) => a + b, 0); 497 .reduce((a, b) => a + b, 0);
479 498
480 const unreadIndirectMessageCount = this.enabled 499 const unreadIndirectMessageCount = this.allDisplayed
481 .filter(s => s.isIndirectMessageBadgeEnabled) 500 .filter(s => (showMessageBadgeWhenMuted || s.isIndirectMessageBadgeEnabled) && showMessageBadgesEvenWhenMuted && s.isBadgeEnabled)
482 .map(s => s.unreadIndirectMessageCount) 501 .map(s => s.unreadIndirectMessageCount)
483 .reduce((a, b) => a + b, 0); 502 .reduce((a, b) => a + b, 0);
484 503
485 this.actions.app.setBadge({ 504 // We can't just block this earlier, otherwise the mobx reaction won't be aware of the vars to watch in some cases
486 unreadDirectMessageCount, 505 if (showMessageBadgesEvenWhenMuted) {
487 unreadIndirectMessageCount, 506 this.actions.app.setBadge({
488 }); 507 unreadDirectMessageCount,
508 unreadIndirectMessageCount,
509 });
510 }
489 } 511 }
490 512
491 _logoutReaction() { 513 _logoutReaction() {
@@ -495,6 +517,13 @@ export default class ServicesStore extends Store {
495 } 517 }
496 } 518 }
497 519
520 _shareSettingsWithServiceProcess() {
521 this.actions.service.sendIPCMessageToAllServices({
522 channel: 'settings-update',
523 args: this.stores.settings.all,
524 });
525 }
526
498 _cleanUpTeamIdAndCustomUrl(recipeId, data) { 527 _cleanUpTeamIdAndCustomUrl(recipeId, data) {
499 const serviceData = data; 528 const serviceData = data;
500 const recipe = this.stores.recipes.one(recipeId); 529 const recipe = this.stores.recipes.one(recipeId);
@@ -527,6 +556,8 @@ export default class ServicesStore extends Store {
527 556
528 if (service) { 557 if (service) {
529 const loop = () => { 558 const loop = () => {
559 if (!service.webview) return;
560
530 service.webview.send('poll'); 561 service.webview.send('poll');
531 562
532 setTimeout(loop, delay); 563 setTimeout(loop, delay);
diff --git a/src/stores/SettingsStore.js b/src/stores/SettingsStore.js
index 331df5c15..da99a720f 100644
--- a/src/stores/SettingsStore.js
+++ b/src/stores/SettingsStore.js
@@ -1,11 +1,11 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { action, computed, observable } from 'mobx'; 2import { action, computed, observable, extendObservable } from 'mobx';
3 3
4import Store from './lib/Store'; 4import Store from './lib/Store';
5import Request from './lib/Request'; 5import Request from './lib/Request';
6import CachedRequest from './lib/CachedRequest'; 6import CachedRequest from './lib/CachedRequest';
7import { gaEvent } from '../lib/analytics'; 7import { gaEvent } from '../lib/analytics';
8import { DEFAULT_APP_SETTINGS } from '../config'; 8import SettingsModel from '../models/Settings';
9 9
10export default class SettingsStore extends Store { 10export default class SettingsStore extends Store {
11 @observable allSettingsRequest = new CachedRequest(this.api.local, 'getSettings'); 11 @observable allSettingsRequest = new CachedRequest(this.api.local, 'getSettings');
@@ -18,10 +18,6 @@ export default class SettingsStore extends Store {
18 // Register action handlers 18 // Register action handlers
19 this.actions.settings.update.listen(this._update.bind(this)); 19 this.actions.settings.update.listen(this._update.bind(this));
20 this.actions.settings.remove.listen(this._remove.bind(this)); 20 this.actions.settings.remove.listen(this._remove.bind(this));
21
22 // this.registerReactions([
23 // this._shareSettingsWithMainProcess.bind(this),
24 // ]);
25 } 21 }
26 22
27 setup() { 23 setup() {
@@ -30,14 +26,18 @@ export default class SettingsStore extends Store {
30 } 26 }
31 27
32 @computed get all() { 28 @computed get all() {
33 return observable(Object.assign(DEFAULT_APP_SETTINGS, this.allSettingsRequest.result)); 29 return new SettingsModel(this.allSettingsRequest.result);
34 } 30 }
35 31
36 @action async _update({ settings }) { 32 @action async _update({ settings }) {
37 await this.updateSettingsRequest.execute(settings)._promise; 33 await this.updateSettingsRequest.execute(settings)._promise;
38 await this.allSettingsRequest.invalidate({ immediately: true }); 34 await this.allSettingsRequest.patch((result) => {
35 if (!result) return;
36 extendObservable(result, settings);
37 });
39 38
40 this._shareSettingsWithMainProcess(); 39 // We need a little hack to wait until everything is patched
40 setTimeout(() => this._shareSettingsWithMainProcess(), 0);
41 41
42 gaEvent('Settings', 'update'); 42 gaEvent('Settings', 'update');
43 } 43 }
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js
index cb45b88b5..5e9cc9ba7 100644
--- a/src/stores/UIStore.js
+++ b/src/stores/UIStore.js
@@ -1,4 +1,4 @@
1import { action, observable } from 'mobx'; 1import { action, observable, computed } from 'mobx';
2 2
3import Store from './lib/Store'; 3import Store from './lib/Store';
4 4
@@ -14,6 +14,12 @@ export default class UIStore extends Store {
14 this.actions.ui.toggleServiceUpdatedInfoBar.listen(this._toggleServiceUpdatedInfoBar.bind(this)); 14 this.actions.ui.toggleServiceUpdatedInfoBar.listen(this._toggleServiceUpdatedInfoBar.bind(this));
15 } 15 }
16 16
17 @computed get showMessageBadgesEvenWhenMuted() {
18 const settings = this.stores.settings.all;
19
20 return (settings.isAppMuted && settings.showMessageBadgeWhenMuted) || !settings.isAppMuted;
21 }
22
17 // Actions 23 // Actions
18 @action _openSettings({ path = '/settings' }) { 24 @action _openSettings({ path = '/settings' }) {
19 const settingsPath = path !== '/settings' ? `/settings/${path}` : path; 25 const settingsPath = path !== '/settings' ? `/settings/${path}` : path;
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index 1cb2ecac3..09000dcdb 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -26,6 +26,7 @@ export default class UserStore extends Store {
26 @observable getUserInfoRequest = new CachedRequest(this.api.user, 'getInfo'); 26 @observable getUserInfoRequest = new CachedRequest(this.api.user, 'getInfo');
27 @observable updateUserInfoRequest = new Request(this.api.user, 'updateInfo'); 27 @observable updateUserInfoRequest = new Request(this.api.user, 'updateInfo');
28 @observable getLegacyServicesRequest = new CachedRequest(this.api.user, 'getLegacyServices'); 28 @observable getLegacyServicesRequest = new CachedRequest(this.api.user, 'getLegacyServices');
29 @observable deleteAccountRequest = new CachedRequest(this.api.user, 'delete');
29 30
30 @observable isImportLegacyServicesExecuting = false; 31 @observable isImportLegacyServicesExecuting = false;
31 @observable isImportLegacyServicesCompleted = false; 32 @observable isImportLegacyServicesCompleted = false;
@@ -57,6 +58,7 @@ export default class UserStore extends Store {
57 this.actions.user.update.listen(this._update.bind(this)); 58 this.actions.user.update.listen(this._update.bind(this));
58 this.actions.user.resetStatus.listen(this._resetStatus.bind(this)); 59 this.actions.user.resetStatus.listen(this._resetStatus.bind(this));
59 this.actions.user.importLegacyServices.listen(this._importLegacyServices.bind(this)); 60 this.actions.user.importLegacyServices.listen(this._importLegacyServices.bind(this));
61 this.actions.user.delete.listen(this._delete.bind(this));
60 62
61 // Reactions 63 // Reactions
62 this.registerReactions([ 64 this.registerReactions([
@@ -212,6 +214,10 @@ export default class UserStore extends Store {
212 this.isImportLegacyServicesCompleted = true; 214 this.isImportLegacyServicesCompleted = true;
213 } 215 }
214 216
217 @action async _delete() {
218 this.deleteAccountRequest.execute();
219 }
220
215 // This is a mobx autorun which forces the user to login if not authenticated 221 // This is a mobx autorun which forces the user to login if not authenticated
216 _requireAuthenticatedUser = () => { 222 _requireAuthenticatedUser = () => {
217 if (this.isTokenExpired) { 223 if (this.isTokenExpired) {
diff --git a/src/styles/content-tabs.scss b/src/styles/content-tabs.scss
index aa3c8594b..47dfea2c4 100644
--- a/src/styles/content-tabs.scss
+++ b/src/styles/content-tabs.scss
@@ -12,15 +12,17 @@
12 flex: 1; 12 flex: 1;
13 // border: 1px solid $theme-gray-lightest; 13 // border: 1px solid $theme-gray-lightest;
14 color: $theme-gray-dark; 14 color: $theme-gray-dark;
15 background: $theme-gray-lightest; 15 background: linear-gradient($theme-gray-lightest 80%, darken($theme-gray-lightest, 3%));
16 border-bottom: 1px solid $theme-gray-lighter; 16 border-right: 1px solid $theme-gray-lighter;
17 box-shadow: inset 0px -3px 10px rgba(black, 0.05); 17 transition: background $theme-transition-time;
18 transition: all $theme-transition-time; 18
19 &:last-of-type {
20 border-right: 0;
21 }
19 22
20 &.is-active { 23 &.is-active {
21 background: $theme-brand-primary; 24 background: $theme-brand-primary;
22 color: #FFF; 25 color: #FFF;
23 border-bottom: 1px solid $theme-brand-primary;
24 box-shadow: none; 26 box-shadow: none;
25 } 27 }
26 } 28 }
diff --git a/src/styles/info-bar.scss b/src/styles/info-bar.scss
index c30c951ee..b6d1e84e2 100644
--- a/src/styles/info-bar.scss
+++ b/src/styles/info-bar.scss
@@ -46,6 +46,10 @@
46 } 46 }
47 } 47 }
48 48
49 a {
50 // text-decoration: underline;
51 }
52
49 &.info-bar--bottom { 53 &.info-bar--bottom {
50 order: 10; 54 order: 10;
51 } 55 }
diff --git a/src/styles/input.scss b/src/styles/input.scss
index 814dce5f8..7042f56e8 100644
--- a/src/styles/input.scss
+++ b/src/styles/input.scss
@@ -47,6 +47,10 @@
47 padding: 8px; 47 padding: 8px;
48 // font-size: 18px; 48 // font-size: 18px;
49 color: $theme-gray; 49 color: $theme-gray;
50
51 &::placeholder {
52 color: lighten($theme-gray-light, 10%);
53 }
50 } 54 }
51 55
52 .franz-form__input-prefix, 56 .franz-form__input-prefix,
diff --git a/src/styles/recipes.scss b/src/styles/recipes.scss
index 017aa4fe2..1b519a5e5 100644
--- a/src/styles/recipes.scss
+++ b/src/styles/recipes.scss
@@ -29,6 +29,10 @@
29 pointer-events: none; 29 pointer-events: none;
30 } 30 }
31 } 31 }
32
33 &__service-request {
34 float: right;
35 }
32} 36}
33 37
34.recipe-teaser { 38.recipe-teaser {
diff --git a/src/styles/services.scss b/src/styles/services.scss
index 2a6540e0b..9f6cfc772 100644
--- a/src/styles/services.scss
+++ b/src/styles/services.scss
@@ -13,7 +13,7 @@
13 } 13 }
14 14
15 .services__webview, 15 .services__webview,
16 .services__crash-handler { 16 .services__info-layer {
17 position: absolute; 17 position: absolute;
18 width: 100%; 18 width: 100%;
19 top: 0; 19 top: 0;
@@ -24,6 +24,7 @@
24 display: inline-flex; 24 display: inline-flex;
25 width: 0px; 25 width: 0px;
26 height: 0px; 26 height: 0px;
27 background: $theme-gray-lighter;
27 } 28 }
28 29
29 &.is-active { 30 &.is-active {
@@ -44,7 +45,7 @@
44 } 45 }
45 46
46 .services__no-service, 47 .services__no-service,
47 .services__crash-handler { 48 .services__info-layer {
48 display: flex; 49 display: flex;
49 flex-direction: column; 50 flex-direction: column;
50 justify-content: center; 51 justify-content: center;
@@ -63,7 +64,7 @@
63 } 64 }
64 } 65 }
65 66
66 .services__crash-handler { 67 .services__info-layer {
67 position: absolut; 68 position: absolut;
68 z-index: 110; 69 z-index: 110;
69 } 70 }
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index 556803c46..283913ab7 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -40,7 +40,7 @@
40 width: 100%; 40 width: 100%;
41 max-width: 900px; 41 max-width: 900px;
42 min-height: 400px; 42 min-height: 400px;
43 max-height: 600px; 43 max-height: 720px;
44 z-index: 9999; 44 z-index: 9999;
45 background: #FFF; 45 background: #FFF;
46 border-radius: $theme-border-radius; 46 border-radius: $theme-border-radius;
@@ -165,8 +165,23 @@
165 } 165 }
166 } 166 }
167 167
168 .settings__options { 168 &__options {
169 margin-top: 30px; 169 margin-top: 20px;
170 }
171
172 &__settings-group {
173 margin-top: 10px;
174
175 h3 {
176 font-weight: bold;
177 margin: 25px 0 15px;
178 color: $theme-gray-light;
179 letter-spacing: -0.1px;
180
181 &:first-of-type {
182 margin-top: 0;
183 }
184 }
170 } 185 }
171 186
172 .settings__message { 187 .settings__message {
@@ -187,10 +202,6 @@
187 margin: -10px 0 20px 55px;; 202 margin: -10px 0 20px 55px;;
188 font-size: 12px; 203 font-size: 12px;
189 color: $theme-gray-light; 204 color: $theme-gray-light;
190
191 &:last-of-type {
192 margin-bottom: 30px;
193 }
194 } 205 }
195 206
196 .settings__controls { 207 .settings__controls {
@@ -295,6 +306,10 @@
295 margin-left: auto; 306 margin-left: auto;
296 } 307 }
297 308
309 .franz-form__button {
310 white-space: nowrap;
311 }
312
298 div { 313 div {
299 height: auto; 314 height: auto;
300 } 315 }
@@ -342,6 +357,12 @@
342 background: none; 357 background: none;
343 padding: 0; 358 padding: 0;
344 } 359 }
360
361 .legal {
362 text-align: center;
363 margin-top: 20px;
364 color: $theme-gray-light;
365 }
345} 366}
346 367
347.settings-navigation { 368.settings-navigation {
@@ -352,9 +373,10 @@
352 flex-direction: column; 373 flex-direction: column;
353 374
354 .settings-navigation__link { 375 .settings-navigation__link {
355 display: block; 376 display: flex;
377 align-items: center;
356 height: 50px; 378 height: 50px;
357 line-height: 50px; 379 flex-shrink: 0;
358 text-decoration: none; 380 text-decoration: none;
359 color: $theme-text-color; 381 color: $theme-text-color;
360 padding: 0 20px; 382 padding: 0 20px;
diff --git a/src/styles/subscription.scss b/src/styles/subscription.scss
index 63183f085..01d8f4ecb 100644
--- a/src/styles/subscription.scss
+++ b/src/styles/subscription.scss
@@ -36,7 +36,7 @@
36 margin-right: 0; 36 margin-right: 0;
37 } 37 }
38 38
39 &:last-of-type { 39 &:nth-child(4) {
40 margin-right: 0; 40 margin-right: 0;
41 margin-top: 2%; 41 margin-top: 2%;
42 width: 100%; 42 width: 100%;
@@ -55,7 +55,8 @@
55 margin-right: 0; 55 margin-right: 0;
56 } 56 }
57 57
58 &:last-of-type { 58 &:nth-child(3) {
59 margin-top: 2%;
59 width: 100%; 60 width: 100%;
60 } 61 }
61 } 62 }
diff --git a/src/styles/tabs.scss b/src/styles/tabs.scss
index 8347de3b4..ac48aabd6 100644
--- a/src/styles/tabs.scss
+++ b/src/styles/tabs.scss
@@ -67,8 +67,28 @@
67 padding: 0px 5px; 67 padding: 0px 5px;
68 font-size: 11px; 68 font-size: 11px;
69 position: absolute; 69 position: absolute;
70 right: 5px; 70 right: 8px;
71 bottom: 5px; 71 bottom: 8px;
72 display: flex;
73 justify-content: center;
74 align-items: center;
75
76 &.is-indirect {
77 padding-top: 0px;
78 }
79 }
80
81 .tab-item__info-badge {
82 width: 17px;
83 height: 17px;
84 background: $theme-gray-light;
85 color: $theme-gray-lighter;
86 border-radius: 20px;
87 padding: 0px 5px;
88 font-size: 11px;
89 position: absolute;
90 right: 8px;
91 bottom: 8px;
72 display: flex; 92 display: flex;
73 justify-content: center; 93 justify-content: center;
74 align-items: center; 94 align-items: center;
diff --git a/src/styles/welcome.scss b/src/styles/welcome.scss
index 5365921fb..cfdcc80ad 100644
--- a/src/styles/welcome.scss
+++ b/src/styles/welcome.scss
@@ -58,17 +58,32 @@
58 } 58 }
59 59
60 &__featured-services { 60 &__featured-services {
61 margin-top: 150px;
62 text-align: center; 61 text-align: center;
63 margin-top: 80px; 62 width: 480px;
63 margin: 80px auto 0 auto;
64 display: flex;
65 align-items: center;
66 flex-wrap: wrap;
67 background: #FFF;
68 border-radius: 6px;
69 padding: 20px 20px 5px;
64 } 70 }
65 71
66 &__featured-service { 72 &__featured-service {
67 width: 35px; 73 width: 35px;
68 margin-right: 30px; 74 height: 35px;
75 margin: 0 10px 15px;
76 filter: grayscale(1)
77 opacity(0.5);
78 transition: 0.5s filter, 0.5s opacity;
79
80 &:hover {
81 filter: grayscale(0);
82 opacity: (1);
83 }
69 84
70 &:last-of-type { 85 img {
71 margin-right: 0; 86 width: 35px;
72 } 87 }
73 } 88 }
74 } 89 }
diff --git a/src/webview/ime.js b/src/webview/ime.js
deleted file mode 100644
index 43df6267c..000000000
--- a/src/webview/ime.js
+++ /dev/null
@@ -1,10 +0,0 @@
1const { ipcRenderer } = require('electron');
2const { claimDocumentFocus } = require('../helpers/webview-ime-focus-helpers');
3
4ipcRenderer.on('claim-document-focus', claimDocumentFocus);
5
6window.addEventListener('DOMContentLoaded', () => {
7 if (document.querySelector('[autofocus]')) {
8 ipcRenderer.sendToHost('autofocus');
9 }
10});
diff --git a/src/webview/lib/RecipeWebview.js b/src/webview/lib/RecipeWebview.js
index b8acc1258..be29142af 100644
--- a/src/webview/lib/RecipeWebview.js
+++ b/src/webview/lib/RecipeWebview.js
@@ -40,8 +40,8 @@ class RecipeWebview {
40 && this.countCache.indirect === indirect) return; 40 && this.countCache.indirect === indirect) return;
41 41
42 const count = { 42 const count = {
43 direct, 43 direct: direct > 0 ? direct : 0,
44 indirect, 44 indirect: indirect > 0 ? indirect : 0,
45 }; 45 };
46 46
47 ipcRenderer.sendToHost('messages', count); 47 ipcRenderer.sendToHost('messages', count);
@@ -66,7 +66,7 @@ class RecipeWebview {
66 66
67 onNotify(fn) { 67 onNotify(fn) {
68 if (typeof fn === 'function') { 68 if (typeof fn === 'function') {
69 window.Notification.onNotify = fn; 69 window.Notification.prototype.onNotify = fn;
70 } 70 }
71 } 71 }
72 72
diff --git a/src/webview/notifications.js b/src/webview/notifications.js
index 4055b10de..4f602bfdb 100644
--- a/src/webview/notifications.js
+++ b/src/webview/notifications.js
@@ -10,9 +10,9 @@ class Notification {
10 this.notificationId = uuidV1(); 10 this.notificationId = uuidV1();
11 11
12 ipcRenderer.sendToHost('notification', this.onNotify({ 12 ipcRenderer.sendToHost('notification', this.onNotify({
13 title: this.title,
14 options: this.options,
13 notificationId: this.notificationId, 15 notificationId: this.notificationId,
14 title,
15 options,
16 })); 16 }));
17 17
18 ipcRenderer.once(`notification-onclick:${this.notificationId}`, () => { 18 ipcRenderer.once(`notification-onclick:${this.notificationId}`, () => {
diff --git a/src/webview/plugin.js b/src/webview/plugin.js
index ffc9084e4..9903ee07a 100644
--- a/src/webview/plugin.js
+++ b/src/webview/plugin.js
@@ -1,11 +1,12 @@
1const { ipcRenderer } = require('electron'); 1import { ipcRenderer } from 'electron';
2const path = require('path'); 2import { ContextMenuListener, ContextMenuBuilder } from 'electron-spellchecker';
3import path from 'path';
3 4
4const RecipeWebview = require('./lib/RecipeWebview'); 5import { isDevMode } from '../environment';
6import RecipeWebview from './lib/RecipeWebview';
5 7
6require('./notifications.js'); 8import Spellchecker from './spellchecker.js';
7require('./spellchecker.js'); 9import './notifications.js';
8require('./ime.js');
9 10
10ipcRenderer.on('initializeRecipe', (e, data) => { 11ipcRenderer.on('initializeRecipe', (e, data) => {
11 const modulePath = path.join(data.recipe.path, 'webview.js'); 12 const modulePath = path.join(data.recipe.path, 'webview.js');
@@ -19,6 +20,22 @@ ipcRenderer.on('initializeRecipe', (e, data) => {
19 } 20 }
20}); 21});
21 22
23const spellchecker = new Spellchecker();
24spellchecker.initialize();
25
26const contextMenuBuilder = new ContextMenuBuilder(spellchecker.handler, null, isDevMode);
27
28new ContextMenuListener((info) => { // eslint-disable-line
29 contextMenuBuilder.showPopupMenu(info);
30});
31
32ipcRenderer.on('settings-update', (e, data) => {
33 console.log('settings-update', data);
34 spellchecker.toggleSpellchecker(data.enableSpellchecking);
35});
36
37// initSpellche
38
22document.addEventListener('DOMContentLoaded', () => { 39document.addEventListener('DOMContentLoaded', () => {
23 ipcRenderer.sendToHost('hello'); 40 ipcRenderer.sendToHost('hello');
24}, false); 41}, false);
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.js
index ec8807874..a504a4039 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.js
@@ -1,14 +1,63 @@
1import { SpellCheckHandler, ContextMenuListener, ContextMenuBuilder } from 'electron-spellchecker'; 1import { SpellCheckHandler } from 'electron-spellchecker';
2 2
3window.spellCheckHandler = new SpellCheckHandler(); 3import { isMac } from '../environment';
4setTimeout(() => {
5 window.spellCheckHandler.attachToInput();
6}, 1000);
7 4
8// TODO: should we set the language to user settings? 5export default class Spellchecker {
9// window.spellCheckHandler.switchLanguage('en-US'); 6 isInitialized = false;
7 handler = null;
8 initRetries = 0;
9 DOMCheckInterval = null;
10
11 get inputs() {
12 return document.querySelectorAll('input[type="text"], [contenteditable="true"], textarea');
13 }
14
15 initialize() {
16 this.handler = new SpellCheckHandler();
17
18 if (!isMac) {
19 this.attach();
20 } else {
21 this.isInitialized = true;
22 }
23 }
24
25 attach() {
26 let initFailed = false;
27
28 if (this.initRetries > 3) {
29 console.error('Could not initialize spellchecker');
30 return;
31 }
32
33 try {
34 this.handler.attachToInput();
35 this.handler.switchLanguage(navigator.language);
36 } catch (err) {
37 initFailed = true;
38 this.initRetries = +1;
39 setTimeout(() => { this.attach(); console.warn('Spellchecker init failed, trying again in 5s'); }, 5000);
40 }
41
42 if (!initFailed) {
43 this.isInitialized = true;
44 }
45 }
46
47 toggleSpellchecker(enable = false) {
48 this.inputs.forEach((input) => {
49 input.setAttribute('spellcheck', enable);
50 });
51
52 this.intervalHandler(enable);
53 }
54
55 intervalHandler(enable) {
56 clearInterval(this.DOMCheckInterval);
57
58 if (enable) {
59 this.DOMCheckInterval = setInterval(() => this.toggleSpellchecker(enable), 30000);
60 }
61 }
62}
10 63
11const contextMenuBuilder = new ContextMenuBuilder(window.spellCheckHandler);
12const contextMenuListener = new ContextMenuListener((info) => { // eslint-disable-line
13 contextMenuBuilder.showPopupMenu(info);
14});
diff --git a/yarn.lock b/yarn.lock
index b077a250e..4a6c4be6f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2978,6 +2978,29 @@ gulp-babel@^6.1.2:
2978 through2 "^2.0.0" 2978 through2 "^2.0.0"
2979 vinyl-sourcemaps-apply "^0.2.0" 2979 vinyl-sourcemaps-apply "^0.2.0"
2980 2980
2981gulp-cli@1.2.2:
2982 version "1.2.2"
2983 resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.2.2.tgz#7392def6316c6e7939a4f296f3f540151ae3a275"
2984 dependencies:
2985 archy "^1.0.0"
2986 chalk "^1.1.0"
2987 fancy-log "^1.1.0"
2988 gulplog "^1.0.0"
2989 interpret "^1.0.0"
2990 liftoff "^2.1.0"
2991 lodash.isfunction "^3.0.8"
2992 lodash.isplainobject "^4.0.4"
2993 lodash.isstring "^4.0.1"
2994 lodash.sortby "^4.5.0"
2995 matchdep "^1.0.0"
2996 mute-stdout "^1.0.0"
2997 pretty-hrtime "^1.0.0"
2998 semver-greatest-satisfied-range "^1.0.0"
2999 tildify "^1.0.0"
3000 v8flags "^2.0.9"
3001 wreck "^6.3.0"
3002 yargs "^3.28.0"
3003
2981gulp-cli@^1.0.0: 3004gulp-cli@^1.0.0:
2982 version "1.4.0" 3005 version "1.4.0"
2983 resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.4.0.tgz#6f5bbe2cd0bdb4849d12cf9e1246a5861f8b4f88" 3006 resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.4.0.tgz#6f5bbe2cd0bdb4849d12cf9e1246a5861f8b4f88"
@@ -3772,7 +3795,7 @@ levn@^0.3.0, levn@~0.3.0:
3772 prelude-ls "~1.1.2" 3795 prelude-ls "~1.1.2"
3773 type-check "~0.3.2" 3796 type-check "~0.3.2"
3774 3797
3775liftoff@^2.3.0: 3798liftoff@^2.1.0, liftoff@^2.3.0:
3776 version "2.3.0" 3799 version "2.3.0"
3777 resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" 3800 resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
3778 dependencies: 3801 dependencies: