aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Vijay A <avijayr@protonmail.com>2021-09-01 14:20:00 +0530
committerLibravatar Vijay A <avijayr@protonmail.com>2021-09-01 14:20:00 +0530
commitd5392388c6b970fee0e930fdf8377cc323881884 (patch)
tree6b415342c1411ec2ffe5e9b6f160da6cce1c12bf
parentdocs: upgraded version to 5.6.1-beta.2 (diff)
parentdocs: updated Changelog with cumulative changes for 5.6.1-beta.3 [skip ci] (diff)
downloadferdium-app-d5392388c6b970fee0e930fdf8377cc323881884.tar.gz
ferdium-app-d5392388c6b970fee0e930fdf8377cc323881884.tar.zst
ferdium-app-d5392388c6b970fee0e930fdf8377cc323881884.zip
Merge remote-tracking branch 'origin/develop' into release
-rw-r--r--.github/workflows/dependency-updates.yml4
-rw-r--r--.github/workflows/ferdi-builds.yml12
-rw-r--r--.nvmrc2
-rw-r--r--CHANGELOG.md134
-rw-r--r--CODE_OF_CONDUCT.md2
-rw-r--r--CONTRIBUTING.md8
-rw-r--r--Dockerfile2
-rw-r--r--README.md6
-rw-r--r--misty.yml6
-rw-r--r--package-lock.json553
-rw-r--r--package.json9
m---------recipes0
-rw-r--r--src/components/layout/Sidebar.js1
-rw-r--r--src/components/services/tabs/Tabbar.js8
-rw-r--r--src/config.ts5
-rw-r--r--src/containers/settings/EditSettingsScreen.js2
-rw-r--r--src/electron/ipc-api/autoUpdate.js2
-rw-r--r--src/features/webControls/components/WebControls.js9
-rw-r--r--src/features/workspaces/components/EditWorkspaceForm.js1
-rw-r--r--src/features/workspaces/store.js38
-rw-r--r--src/i18n/locales/af.json2
-rw-r--r--src/i18n/locales/ar.json66
-rw-r--r--src/i18n/locales/be.json2
-rw-r--r--src/i18n/locales/bs.json2
-rw-r--r--src/i18n/locales/ca.json2
-rw-r--r--src/i18n/locales/cs.json2
-rw-r--r--src/i18n/locales/da.json2
-rw-r--r--src/i18n/locales/de.json2
-rw-r--r--src/i18n/locales/defaultMessages.json2
-rw-r--r--src/i18n/locales/el.json2
-rw-r--r--src/i18n/locales/en-US.json2
-rw-r--r--src/i18n/locales/es.json2
-rw-r--r--src/i18n/locales/fi.json2
-rw-r--r--src/i18n/locales/fr.json2
-rw-r--r--src/i18n/locales/ga.json2
-rw-r--r--src/i18n/locales/he.json2
-rw-r--r--src/i18n/locales/hr.json2
-rw-r--r--src/i18n/locales/hu.json2
-rw-r--r--src/i18n/locales/id.json2
-rw-r--r--src/i18n/locales/it.json2
-rw-r--r--src/i18n/locales/ja.json2
-rw-r--r--src/i18n/locales/ka.json2
-rw-r--r--src/i18n/locales/ko.json2
-rw-r--r--src/i18n/locales/nl-BE.json2
-rw-r--r--src/i18n/locales/nl.json2
-rw-r--r--src/i18n/locales/no.json2
-rw-r--r--src/i18n/locales/pl.json2
-rw-r--r--src/i18n/locales/pt-BR.json2
-rw-r--r--src/i18n/locales/pt.json2
-rw-r--r--src/i18n/locales/ro.json2
-rw-r--r--src/i18n/locales/ru.json2
-rw-r--r--src/i18n/locales/sk.json2
-rw-r--r--src/i18n/locales/sl.json2
-rw-r--r--src/i18n/locales/sr.json2
-rw-r--r--src/i18n/locales/sv.json2
-rw-r--r--src/i18n/locales/tr.json2
-rw-r--r--src/i18n/locales/uk.json2
-rw-r--r--src/i18n/locales/vi.json482
-rw-r--r--src/i18n/locales/zh-HANT.json2
-rw-r--r--src/i18n/locales/zh.json2
-rw-r--r--src/i18n/messages/src/containers/settings/EditSettingsScreen.json2
-rw-r--r--src/internal-server/app/Controllers/Http/StaticController.js16
-rw-r--r--src/stores/AppStore.js1
-rw-r--r--src/webview/badge.ts19
-rw-r--r--src/webview/lib/RecipeWebview.js9
-rw-r--r--src/webview/recipe.js2
66 files changed, 975 insertions, 502 deletions
diff --git a/.github/workflows/dependency-updates.yml b/.github/workflows/dependency-updates.yml
index a9406df23..dafcfa4d1 100644
--- a/.github/workflows/dependency-updates.yml
+++ b/.github/workflows/dependency-updates.yml
@@ -40,10 +40,10 @@ jobs:
40 restore-keys: | 40 restore-keys: |
41 ${{ runner.os }}-14.17-build-${{ env.cache-name }}- 41 ${{ runner.os }}-14.17-build-${{ env.cache-name }}-
42 ${{ runner.os }}-14.17-build- 42 ${{ runner.os }}-14.17-build-
43 - name: Use Node.js 14.17.3 43 - name: Use Node.js 14.17.5
44 uses: actions/setup-node@v2 44 uses: actions/setup-node@v2
45 with: 45 with:
46 node-version: 14.17.3 46 node-version: 14.17.5
47 - name: Uninstall locally and reinstall global npm modules 47 - name: Uninstall locally and reinstall global npm modules
48 run: | 48 run: |
49 npm uninstall node-gyp 49 npm uninstall node-gyp
diff --git a/.github/workflows/ferdi-builds.yml b/.github/workflows/ferdi-builds.yml
index 7a701758e..ec40d267c 100644
--- a/.github/workflows/ferdi-builds.yml
+++ b/.github/workflows/ferdi-builds.yml
@@ -130,10 +130,10 @@ jobs:
130 with: 130 with:
131 key: ${{ runner.os }}-${{ env.cache-name }} 131 key: ${{ runner.os }}-${{ env.cache-name }}
132 path: ${{ env.ELECTRON_BUILDER_CACHE }} 132 path: ${{ env.ELECTRON_BUILDER_CACHE }}
133 - name: Use Node.js 14.17.3 133 - name: Use Node.js 14.17.5
134 uses: actions/setup-node@v2 134 uses: actions/setup-node@v2
135 with: 135 with:
136 node-version: 14.17.3 136 node-version: 14.17.5
137 - name: Upgrade Xcode version on the macOS 10.15 default runners provided by GH Actions 137 - name: Upgrade Xcode version on the macOS 10.15 default runners provided by GH Actions
138 run: | 138 run: |
139 sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/* 139 sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/*
@@ -228,10 +228,10 @@ jobs:
228 with: 228 with:
229 key: ${{ runner.os }}-${{ env.cache-name }} 229 key: ${{ runner.os }}-${{ env.cache-name }}
230 path: ${{ env.ELECTRON_BUILDER_CACHE }} 230 path: ${{ env.ELECTRON_BUILDER_CACHE }}
231 - name: Use Node.js 14.17.3 231 - name: Use Node.js 14.17.5
232 uses: actions/setup-node@v2 232 uses: actions/setup-node@v2
233 with: 233 with:
234 node-version: 14.17.3 234 node-version: 14.17.5
235 - name: Uninstall locally and reinstall global npm modules 235 - name: Uninstall locally and reinstall global npm modules
236 run: | 236 run: |
237 npm uninstall node-gyp 237 npm uninstall node-gyp
@@ -343,10 +343,10 @@ jobs:
343 with: 343 with:
344 key: ${{ runner.os }}-${{ env.cache-name }} 344 key: ${{ runner.os }}-${{ env.cache-name }}
345 path: ${{ env.ELECTRON_BUILDER_CACHE }} 345 path: ${{ env.ELECTRON_BUILDER_CACHE }}
346 - name: Use Node.js 14.17.3 346 - name: Use Node.js 14.17.5
347 uses: actions/setup-node@v2 347 uses: actions/setup-node@v2
348 with: 348 with:
349 node-version: 14.17.3 349 node-version: 14.17.5
350 - name: Uninstall locally and reinstall global npm modules 350 - name: Uninstall locally and reinstall global npm modules
351 run: | 351 run: |
352 npm uninstall node-gyp 352 npm uninstall node-gyp
diff --git a/.nvmrc b/.nvmrc
index c6244cda0..18711d290 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
14.17.3 14.17.5
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8719e3387..9dbc909f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,135 @@
1# [v5.6.1-beta.3](https://github.com/getferdi/ferdi/compare/v5.6.1-beta.2...v5.6.1-beta.3) (2021-09-01)
2
3Please note that this is the same code as the `v5.6.1-nightly.46` tag.
4The cumulative changes since the previous beta release are:
5
6- Upgrade to [electron 13.3.0](https://github.com/electron/electron/releases/tag/v13.3.0) 💖 @vraravam
7- New services: Add `odoo`, `tinder` and `wakatime` 💖 @oda-alexandre
8- New services: Add `Google News` service 💖 @niutech
9- New services: Add `amazon web services` (getferdi/recipes#643), `binance` (getferdi/recipes#645), `ovh-cloud` (getferdi/recipes#650), `scribens` (getferdi/recipes#651), `docker hub` (getferdi/recipes#644), `bitwarden` (getferdi/recipes#647), `google translate` (getferdi/recipes#642) 💖 @oda-alexandre, @vraravam
10- Services: Remove duplicated recipes for `Outlook Web App` and `Enterprise OWA` (getferdi/recipes#523, getferdi/recipes#1808) 💖 @vraravam
11
12### Bug Fixes
13
14- Workspaces are now working. When the active workspace gets deleted, the default workspace gets auto-selected. 💖 @sad270, @vraravam
15- Fix reordering of services in vertical style layout (#1833) 💖 @vraravam
16- Fix address bar not updating (#1836) 💖 @mhatvan
17- Fix screensharing in discord (getferdi/recipes#625) 💖 @oda-alexandre
18- Per popular demand, reworded `Use Vertical style` to `Use Horizontal style` 💖 @vraravam
19
20### Internal
21
22- Use `Ferdi.safeParseInt` to ensure that parsing for unread count is done consistently in all recipes 💖 @vraravam
23- Upgraded `nodejs` to `14.17.5` 💖 @vraravam
24- Remove some leftover Franz branding 💖 @vantezzen
25- Switch from `misty` to `concurrently` (#1846) 💖 @vantezzen
26- Services: Normalized all service recipes to be `es6` compliant 💖 @vraravam
27- Services: Change entry point in the `facebookpages` service (getferdi/recipes#640) 💖 @oda-alexandre, @vraravam
28- Set the `channel` for the auto-update (check if this fixes the in-app updater) 💖 @vraravam
29- Fixing bug where the service-defaults are not merged when creating a service 💖 @vraravam
30
31# [v5.6.1-nightly.46](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.45...v5.6.1-nightly.46) (2021-09-01)
32
33### Bug Fixes
34
35- Workspaces are now working. When the active workspace gets deleted, the default workspace gets auto-selected. 💖 @sad270, @vraravam
36
37# [v5.6.1-nightly.45](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.43...v5.6.1-nightly.45) (2021-09-01)
38
39- Upgrade to [electron 13.3.0](https://github.com/electron/electron/releases/tag/v13.3.0) 💖 @vraravam
40- Services: Add `odoo` and `wakatime` 💖 @oda-alexandre
41
42### Internal
43
44- Use `Ferdi.safeParseInt` to ensure that parsing for unread count is done consistently in all recipes 💖 @vraravam
45
46# [v5.6.1-nightly.43](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.42...v5.6.1-nightly.43) (2021-08-30)
47
48- Services: Remove duplicated recipes for `Outlook Web App` and `Enterprise OWA` (getferdi/recipes#523 getferdi/recipes#1808) 💖 @vraravam
49
50# [v5.6.1-nightly.42](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.41...v5.6.1-nightly.42) (2021-08-29)
51
52- Upgraded to [electron 13.2.3](https://github.com/electron/electron/releases/tag/v13.2.3) 💖 @vraravam
53- New services: amazon web services (getferdi/recipes#643), binance (getferdi/recipes#645), ovh-cloud (getferdi/recipes#650), scribens (getferdi/recipes#651), docker hub (getferdi/recipes#644), bitwarden (getferdi/recipes#647), google translate (getferdi/recipes#642) 💖 @oda-alexandre, @vraravam
54
55# [v5.6.1-nightly.41](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.40...v5.6.1-nightly.41) (2021-08-28)
56
57- Services: Add 'tinder' service (getferdi/recipes#641) 💖 @oda-alexandre
58
59### Internal
60
61- Upgraded 'nodejs' to '14.17.5' 💖 @vraravam
62- Remove some leftover Franz branding 💖 @vantezzen
63- Switch from `misty` to `concurrently` (#1846) 💖 @vantezzen
64- Services: Normalized all service recipes to be es6 compliant 💖 @vraravam
65- Services: Change entry point in the 'facebookpages' service (getferdi/recipes#640) 💖 @oda-alexandre, @vraravam
66
67# [v5.6.1-nightly.40](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.38...v5.6.1-nightly.40) (2021-08-27)
68
69### Bug Fixes
70
71- Fix reordering of services in vertical style layout (#1833) 💖 @vraravam
72- Fix address bar not updating (#1836) 💖 @mhatvan
73- Fix screensharing in discord (getferdi/recipes#625) 💖 @oda-alexandre
74- Per popular demand, reworded `Use Vertical style` to `Use Horizontal style` 💖 @vraravam
75
76### Internal
77
78- Set the `channel` for the auto-update (check if this fixes the in-app updater) 💖 @vraravam
79
80# [v5.6.1-nightly.38](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.37...v5.6.1-nightly.38) (2021-08-25)
81
82- Added `Google News` service 💖 @niutech
83
84### Bug Fixes
85
86### Internal
87
88- Fixing bug where the service-defaults are not merged when creating a service 💖 @vraravam
89
90# [v5.6.1-beta.2](https://github.com/getferdi/ferdi/compare/v5.6.1-beta.1...v5.6.1-beta.2) (2021-08-24)
91
92Please note that this is the same code as the `v5.6.1-nightly.37` tag.
93The cumulative changes since the previous beta release are:
94
95- Upgraded to [electron 13.2.2](https://github.com/electron/electron/releases/tag/v13.2.2) 💖 @vraravam
96- Remove checks that refers to paid subscription since Ferdi is always free 💖 @vraravam
97- Remove 'shareFranz' feature since its always turned off for Ferdi 💖 @vraravam
98- Sorted the recipes according to their service name in the 'Add new Service' screen 💖 @vraravam
99- Moved some npm dependencies that were incorrectly classified as runtime deps. This has saved approx 16MB from the installed file (on macos) 💖 @vraravam, @mhatvan
100- Add buttons in the 'Advanced' section of preferences to allow users to quickly open the ferdi profile in their file explorer 💖 @vraravam
101- [Security] Refactored Url helpers to ensure that theres a single place for vetting and opening external urls as recommended by [this article](https://benjamin-altpeter.de/shell-openexternal-dangers/) (#1789) 💖 @vraravam
102- Catch up with minor changes in Franz 5.7.0
103- Add entitlements for screen-capture-permissions 💖 @vraravam
104
105### Bug Fixes
106
107- Fixed bug where the service-defaults were not merged when creating a service 💖 @vraravam
108- Audio toggle is now decoupled from notification toggle (#1691) 💖 @vraravam
109- Incorrect position while adding a new service when there were pre-existing services (#1820) 💖 @vraravam
110- Fixed issue with some shortcuts not working on macos (those that either used `alt` or `shift` keys) 💖 @vraravam
111- Fix app focus detection 💖 @vraravam
112- Fix beta channel release for snap 💖 @mhatvan
113
114### Internal
115
116- [Perf] Removed double nested looping while deactivating service (#1824) 💖 @vraravam
117- Upgraded `electron-builder` to `22.12.1` which will allow converion from `npm` to `pnpm` 💖 @mhatvan
118- Typescript conversion 💖 @vraravam
119- Set stricter rules for typescript conversion 💖 @vraravam
120- Move build-time js files out of 'src' and into 'scripts' 💖 @vraravam
121- Check if default app protocol is different before overriding it (#1818) 💖 @ayxos, @vraravam
122- Minor cleanup of 'NaN' logic when loading recipe badges 💖 @vraravam
123- Completed plumbing required for conversion from javascript to typescript 💖 @vraravam
124- npm upgrades 💖 @vraravam
125- Started typescript conversion of some simple scripts 💖 @vraravam
126- Added animations step in gulp to transpile scss and copy to build 💖 @mhatvan
127- Generated '.gitignore' from gitignore.io 💖 @vraravam
128- Setting some config rules for typescript (in preparation for external contributors during hacktoberfest) 💖 @vraravam
129- Moved 'gulp'-related packages to 'devDependencies' resulting in slimming down the installation file considerably (8MB on macos) 💖 @vraravam
130- Use destructured 'import' 💖 @vraravam
131- Replace old '@meetfranz/electron-notification-state' with 'macos-notification-state' 💖 @vraravam
132
1# [v5.6.1-nightly.37](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.36...v5.6.1-nightly.37) (2021-08-24) 133# [v5.6.1-nightly.37](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.36...v5.6.1-nightly.37) (2021-08-24)
2 134
3- Upgraded to [electron 13.2.2](https://github.com/electron/electron/releases/tag/v13.2.2) 💖 @vraravam 135- Upgraded to [electron 13.2.2](https://github.com/electron/electron/releases/tag/v13.2.2) 💖 @vraravam
@@ -113,7 +245,7 @@
113- Use destructured 'import' 💖 @vraravam 245- Use destructured 'import' 💖 @vraravam
114- Refactor to reuse already defined constants 💖 @vraravam 246- Refactor to reuse already defined constants 💖 @vraravam
115- Use exported default object 💖 @vraravam 247- Use exported default object 💖 @vraravam
116- Replace old '@meetfranz/electron-notification-state' with 'mac 💖 @vraravam 248- Replace old '@meetfranz/electron-notification-state' with 'macos-notification-state' 💖 @vraravam
117 249
118# [v5.6.1-nightly.24](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.23...v5.6.1-nightly.24) (2021-08-13) 250# [v5.6.1-nightly.24](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.23...v5.6.1-nightly.24) (2021-08-13)
119 251
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 0b41fc123..f85cb2205 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -8,4 +8,4 @@ We promise to extend courtesy and respect to everyone involved in this project r
8 8
9If any member of the community violates this code of conduct, the maintainers of the Ferdi project may take action, removing issues, comments, and PRs or blocking accounts as deemed appropriate. 9If any member of the community violates this code of conduct, the maintainers of the Ferdi project may take action, removing issues, comments, and PRs or blocking accounts as deemed appropriate.
10 10
11If you are subject to or witness unacceptable behavior, or have any other concerns, please open an issue or send an email to [Stefan](stefan@adlk.io). 11If you are subject to or witness unacceptable behavior, or have any other concerns, please open an issue or send an email to [our contact mail](hello@getferdi.com).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1c3fb977f..b79432d43 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -38,7 +38,7 @@
38 38
39## Code of Conduct 39## Code of Conduct
40 40
41This project and everyone participating in it is governed by the [Ferdi Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [stefan@adlk.io](mailto:stefan@adlk.io). 41This project and everyone participating in it is governed by the [Ferdi Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [hello@getferdi.com](mailto:hello@getferdi.com).
42 42
43## What should I know before I get started? 43## What should I know before I get started?
44 44
@@ -60,7 +60,7 @@ Currently, these are the combinations of system dependencies that work for MacOS
60 60
61```bash 61```bash
62node -v 62node -v
63v14.17.3 63v14.17.5
64npm -v 64npm -v
656.14.13 656.14.13
66``` 66```
@@ -195,10 +195,10 @@ npm run dev
195DEBUG=Ferdi:* npm run start 195DEBUG=Ferdi:* npm run start
196``` 196```
197 197
198- Optionally, you can run both commands in one terminal with [misty](https://github.com/adlk/misty) (see [misty.yml](https://github.com/getferdi/ferdi/blob/develop/misty.yml)): 198- Optionally, you can run both commands in one terminal with [concurrently](https://www.npmjs.com/package/concurrently):
199 199
200```bash 200```bash
201DEBUG=Ferdi:* npx misty 201DEBUG=Ferdi:* npm run start:all-dev
202``` 202```
203 203
204Note: please prefer [`debug()`](https://github.com/visionmedia/debug) over `console.log()`. 204Note: please prefer [`debug()`](https://github.com/visionmedia/debug) over `console.log()`.
diff --git a/Dockerfile b/Dockerfile
index 7fd79fb3a..e69babe2b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
1# Note: Before running this file, you should have already cloned the git repo + submodules on the host machine. This is used when actively developing on your local machine, but you want to build for a different architecture 1# Note: Before running this file, you should have already cloned the git repo + submodules on the host machine. This is used when actively developing on your local machine, but you want to build for a different architecture
2 2
3FROM node:14.17.3-buster as builder 3FROM node:14.17.5-buster as builder
4 4
5# TODO: Need to setup a non-root user for security purposes 5# TODO: Need to setup a non-root user for security purposes
6 6
diff --git a/README.md b/README.md
index f23c0cb30..1824a0894 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ Ferdi is a desktop app that helps you organize how you use your favourite apps b
65## Features 65## Features
66 66
67- [x] Ferdi puts all your web apps into one place 67- [x] Ferdi puts all your web apps into one place
68- [x] Native support for 100+ services 68- [x] Native support for 189 services
69- [x] Workspaces to keep your personal and work life separated 69- [x] Workspaces to keep your personal and work life separated
70- [x] Support for multiple accounts on any service 70- [x] Support for multiple accounts on any service
71- [x] Dark Mode support for all of your services 71- [x] Dark Mode support for all of your services
@@ -77,7 +77,7 @@ Ferdi is a desktop app that helps you organize how you use your favourite apps b
77 77
78...and best of all: 78...and best of all:
79 79
80- [x] Its completely free! There are no restrictions on features, no paywalls 80- [x] Its completely free! There are no restrictions on features, no paywalls, no ads
81 81
82## What does Ferdi look like? 82## What does Ferdi look like?
83 83
@@ -226,7 +226,7 @@ If you use an AUR Helper e.g. yay, simply install it via `yay -S ferdi`.
226 226
227### Adds internal changes 227### Adds internal changes
228 228
229- [x] Upgrades to Electron 13.2.2 229- [x] Upgrades to Electron 13.3.0
230- [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size 230- [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size
231- [x] Minifies build files to improve app size 231- [x] Minifies build files to improve app size
232- [x] Adds "npm run prepare-code" command for development to lint and beautify code 232- [x] Adds "npm run prepare-code" command for development to lint and beautify code
diff --git a/misty.yml b/misty.yml
deleted file mode 100644
index f1184287d..000000000
--- a/misty.yml
+++ /dev/null
@@ -1,6 +0,0 @@
1code:
2 cmd: npm run dev
3
4app:
5 cmd: npm start
6 waitOn: http://localhost:8080
diff --git a/package-lock.json b/package-lock.json
index 7c3e0f24d..269c2b585 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
1{ 1{
2 "name": "ferdi", 2 "name": "ferdi",
3 "version": "5.6.1-beta.2", 3 "version": "5.6.1-nightly.46",
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
@@ -45,6 +45,57 @@
45 "supports-color": "^5.3.0" 45 "supports-color": "^5.3.0"
46 } 46 }
47 }, 47 },
48 "cliui": {
49 "version": "4.1.0",
50 "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
51 "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
52 "dev": true,
53 "requires": {
54 "string-width": "^2.1.1",
55 "strip-ansi": "^4.0.0",
56 "wrap-ansi": "^2.0.0"
57 }
58 },
59 "concurrently": {
60 "version": "4.1.2",
61 "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.2.tgz",
62 "integrity": "sha512-Kim9SFrNr2jd8/0yNYqDTFALzUX1tvimmwFWxmp/D4mRI+kbqIIwE2RkBDrxS2ic25O1UgQMI5AtBqdtX3ynYg==",
63 "dev": true,
64 "requires": {
65 "chalk": "^2.4.2",
66 "date-fns": "^1.30.1",
67 "lodash": "^4.17.15",
68 "read-pkg": "^4.0.1",
69 "rxjs": "^6.5.2",
70 "spawn-command": "^0.0.2-1",
71 "supports-color": "^4.5.0",
72 "tree-kill": "^1.2.1",
73 "yargs": "^12.0.5"
74 },
75 "dependencies": {
76 "supports-color": {
77 "version": "4.5.0",
78 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
79 "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
80 "dev": true,
81 "requires": {
82 "has-flag": "^2.0.0"
83 }
84 }
85 }
86 },
87 "date-fns": {
88 "version": "1.30.1",
89 "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
90 "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
91 "dev": true
92 },
93 "has-flag": {
94 "version": "2.0.0",
95 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
96 "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
97 "dev": true
98 },
48 "js-yaml": { 99 "js-yaml": {
49 "version": "3.14.1", 100 "version": "3.14.1",
50 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 101 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
@@ -54,6 +105,66 @@
54 "argparse": "^1.0.7", 105 "argparse": "^1.0.7",
55 "esprima": "^4.0.0" 106 "esprima": "^4.0.0"
56 } 107 }
108 },
109 "pify": {
110 "version": "3.0.0",
111 "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
112 "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
113 "dev": true
114 },
115 "read-pkg": {
116 "version": "4.0.1",
117 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
118 "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
119 "dev": true,
120 "requires": {
121 "normalize-package-data": "^2.3.2",
122 "parse-json": "^4.0.0",
123 "pify": "^3.0.0"
124 }
125 },
126 "wait-on": {
127 "version": "3.3.0",
128 "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.3.0.tgz",
129 "integrity": "sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ==",
130 "dev": true,
131 "requires": {
132 "@hapi/joi": "^15.0.3",
133 "core-js": "^2.6.5",
134 "minimist": "^1.2.0",
135 "request": "^2.88.0",
136 "rx": "^4.1.0"
137 }
138 },
139 "yargs": {
140 "version": "12.0.5",
141 "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
142 "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
143 "dev": true,
144 "requires": {
145 "cliui": "^4.0.0",
146 "decamelize": "^1.2.0",
147 "find-up": "^3.0.0",
148 "get-caller-file": "^1.0.1",
149 "os-locale": "^3.0.0",
150 "require-directory": "^2.1.1",
151 "require-main-filename": "^1.0.1",
152 "set-blocking": "^2.0.0",
153 "string-width": "^2.0.0",
154 "which-module": "^2.0.0",
155 "y18n": "^3.2.1 || ^4.0.0",
156 "yargs-parser": "^11.1.1"
157 }
158 },
159 "yargs-parser": {
160 "version": "11.1.1",
161 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
162 "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
163 "dev": true,
164 "requires": {
165 "camelcase": "^5.0.0",
166 "decamelize": "^1.2.0"
167 }
57 } 168 }
58 } 169 }
59 }, 170 },
@@ -2548,9 +2659,9 @@
2548 "dev": true 2659 "dev": true
2549 }, 2660 },
2550 "@hapi/hoek": { 2661 "@hapi/hoek": {
2551 "version": "8.5.1", 2662 "version": "9.2.0",
2552 "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", 2663 "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
2553 "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", 2664 "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==",
2554 "dev": true 2665 "dev": true
2555 }, 2666 },
2556 "@hapi/joi": { 2667 "@hapi/joi": {
@@ -2563,15 +2674,32 @@
2563 "@hapi/bourne": "1.x.x", 2674 "@hapi/bourne": "1.x.x",
2564 "@hapi/hoek": "8.x.x", 2675 "@hapi/hoek": "8.x.x",
2565 "@hapi/topo": "3.x.x" 2676 "@hapi/topo": "3.x.x"
2677 },
2678 "dependencies": {
2679 "@hapi/hoek": {
2680 "version": "8.5.1",
2681 "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
2682 "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==",
2683 "dev": true
2684 },
2685 "@hapi/topo": {
2686 "version": "3.1.6",
2687 "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
2688 "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
2689 "dev": true,
2690 "requires": {
2691 "@hapi/hoek": "^8.3.0"
2692 }
2693 }
2566 } 2694 }
2567 }, 2695 },
2568 "@hapi/topo": { 2696 "@hapi/topo": {
2569 "version": "3.1.6", 2697 "version": "5.1.0",
2570 "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", 2698 "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
2571 "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", 2699 "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
2572 "dev": true, 2700 "dev": true,
2573 "requires": { 2701 "requires": {
2574 "@hapi/hoek": "^8.3.0" 2702 "@hapi/hoek": "^9.0.0"
2575 } 2703 }
2576 }, 2704 },
2577 "@humanwhocodes/config-array": { 2705 "@humanwhocodes/config-array": {
@@ -6359,6 +6487,27 @@
6359 } 6487 }
6360 } 6488 }
6361 }, 6489 },
6490 "@sideway/address": {
6491 "version": "4.1.2",
6492 "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz",
6493 "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==",
6494 "dev": true,
6495 "requires": {
6496 "@hapi/hoek": "^9.0.0"
6497 }
6498 },
6499 "@sideway/formula": {
6500 "version": "3.0.0",
6501 "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
6502 "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==",
6503 "dev": true
6504 },
6505 "@sideway/pinpoint": {
6506 "version": "2.0.0",
6507 "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
6508 "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
6509 "dev": true
6510 },
6362 "@sindresorhus/is": { 6511 "@sindresorhus/is": {
6363 "version": "0.14.0", 6512 "version": "0.14.0",
6364 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 6513 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -8463,6 +8612,15 @@
8463 "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==", 8612 "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==",
8464 "dev": true 8613 "dev": true
8465 }, 8614 },
8615 "axios": {
8616 "version": "0.21.1",
8617 "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
8618 "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
8619 "dev": true,
8620 "requires": {
8621 "follow-redirects": "^1.10.0"
8622 }
8623 },
8466 "axobject-query": { 8624 "axobject-query": {
8467 "version": "2.2.0", 8625 "version": "2.2.0",
8468 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", 8626 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
@@ -9706,9 +9864,9 @@
9706 } 9864 }
9707 }, 9865 },
9708 "caniuse-lite": { 9866 "caniuse-lite": {
9709 "version": "1.0.30001251", 9867 "version": "1.0.30001252",
9710 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", 9868 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz",
9711 "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", 9869 "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==",
9712 "dev": true 9870 "dev": true
9713 }, 9871 },
9714 "caseless": { 9872 "caseless": {
@@ -9995,14 +10153,83 @@
9995 "dev": true 10153 "dev": true
9996 }, 10154 },
9997 "cliui": { 10155 "cliui": {
9998 "version": "4.1.0", 10156 "version": "7.0.4",
9999 "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", 10157 "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
10000 "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", 10158 "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
10001 "dev": true, 10159 "dev": true,
10002 "requires": { 10160 "requires": {
10003 "string-width": "^2.1.1", 10161 "string-width": "^4.2.0",
10004 "strip-ansi": "^4.0.0", 10162 "strip-ansi": "^6.0.0",
10005 "wrap-ansi": "^2.0.0" 10163 "wrap-ansi": "^7.0.0"
10164 },
10165 "dependencies": {
10166 "ansi-regex": {
10167 "version": "5.0.0",
10168 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
10169 "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
10170 "dev": true
10171 },
10172 "ansi-styles": {
10173 "version": "4.3.0",
10174 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
10175 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
10176 "dev": true,
10177 "requires": {
10178 "color-convert": "^2.0.1"
10179 }
10180 },
10181 "color-convert": {
10182 "version": "2.0.1",
10183 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
10184 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
10185 "dev": true,
10186 "requires": {
10187 "color-name": "~1.1.4"
10188 }
10189 },
10190 "color-name": {
10191 "version": "1.1.4",
10192 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
10193 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
10194 "dev": true
10195 },
10196 "is-fullwidth-code-point": {
10197 "version": "3.0.0",
10198 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
10199 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
10200 "dev": true
10201 },
10202 "string-width": {
10203 "version": "4.2.2",
10204 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
10205 "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
10206 "dev": true,
10207 "requires": {
10208 "emoji-regex": "^8.0.0",
10209 "is-fullwidth-code-point": "^3.0.0",
10210 "strip-ansi": "^6.0.0"
10211 }
10212 },
10213 "strip-ansi": {
10214 "version": "6.0.0",
10215 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
10216 "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
10217 "dev": true,
10218 "requires": {
10219 "ansi-regex": "^5.0.0"
10220 }
10221 },
10222 "wrap-ansi": {
10223 "version": "7.0.0",
10224 "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
10225 "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
10226 "dev": true,
10227 "requires": {
10228 "ansi-styles": "^4.0.0",
10229 "string-width": "^4.1.0",
10230 "strip-ansi": "^6.0.0"
10231 }
10232 }
10006 } 10233 }
10007 }, 10234 },
10008 "clone": { 10235 "clone": {
@@ -10569,59 +10796,80 @@
10569 } 10796 }
10570 }, 10797 },
10571 "concurrently": { 10798 "concurrently": {
10572 "version": "4.1.2", 10799 "version": "6.2.1",
10573 "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.2.tgz", 10800 "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz",
10574 "integrity": "sha512-Kim9SFrNr2jd8/0yNYqDTFALzUX1tvimmwFWxmp/D4mRI+kbqIIwE2RkBDrxS2ic25O1UgQMI5AtBqdtX3ynYg==", 10801 "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==",
10575 "dev": true, 10802 "dev": true,
10576 "requires": { 10803 "requires": {
10577 "chalk": "^2.4.2", 10804 "chalk": "^4.1.0",
10578 "date-fns": "^1.30.1", 10805 "date-fns": "^2.16.1",
10579 "lodash": "^4.17.15", 10806 "lodash": "^4.17.21",
10580 "read-pkg": "^4.0.1", 10807 "read-pkg": "^5.2.0",
10581 "rxjs": "^6.5.2", 10808 "rxjs": "^6.6.3",
10582 "spawn-command": "^0.0.2-1", 10809 "spawn-command": "^0.0.2-1",
10583 "supports-color": "^4.5.0", 10810 "supports-color": "^8.1.0",
10584 "tree-kill": "^1.2.1", 10811 "tree-kill": "^1.2.2",
10585 "yargs": "^12.0.5" 10812 "yargs": "^16.2.0"
10586 }, 10813 },
10587 "dependencies": { 10814 "dependencies": {
10815 "ansi-styles": {
10816 "version": "4.3.0",
10817 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
10818 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
10819 "dev": true,
10820 "requires": {
10821 "color-convert": "^2.0.1"
10822 }
10823 },
10588 "chalk": { 10824 "chalk": {
10589 "version": "2.4.2", 10825 "version": "4.1.2",
10590 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 10826 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
10591 "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 10827 "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
10592 "dev": true, 10828 "dev": true,
10593 "requires": { 10829 "requires": {
10594 "ansi-styles": "^3.2.1", 10830 "ansi-styles": "^4.1.0",
10595 "escape-string-regexp": "^1.0.5", 10831 "supports-color": "^7.1.0"
10596 "supports-color": "^5.3.0"
10597 }, 10832 },
10598 "dependencies": { 10833 "dependencies": {
10599 "supports-color": { 10834 "supports-color": {
10600 "version": "5.5.0", 10835 "version": "7.2.0",
10601 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 10836 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
10602 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 10837 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
10603 "dev": true, 10838 "dev": true,
10604 "requires": { 10839 "requires": {
10605 "has-flag": "^3.0.0" 10840 "has-flag": "^4.0.0"
10606 } 10841 }
10607 } 10842 }
10608 } 10843 }
10609 }, 10844 },
10845 "color-convert": {
10846 "version": "2.0.1",
10847 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
10848 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
10849 "dev": true,
10850 "requires": {
10851 "color-name": "~1.1.4"
10852 }
10853 },
10854 "color-name": {
10855 "version": "1.1.4",
10856 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
10857 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
10858 "dev": true
10859 },
10860 "has-flag": {
10861 "version": "4.0.0",
10862 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
10863 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
10864 "dev": true
10865 },
10610 "supports-color": { 10866 "supports-color": {
10611 "version": "4.5.0", 10867 "version": "8.1.1",
10612 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 10868 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
10613 "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 10869 "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
10614 "dev": true, 10870 "dev": true,
10615 "requires": { 10871 "requires": {
10616 "has-flag": "^2.0.0" 10872 "has-flag": "^4.0.0"
10617 },
10618 "dependencies": {
10619 "has-flag": {
10620 "version": "2.0.0",
10621 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
10622 "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
10623 "dev": true
10624 }
10625 } 10873 }
10626 } 10874 }
10627 } 10875 }
@@ -11645,9 +11893,9 @@
11645 } 11893 }
11646 }, 11894 },
11647 "date-fns": { 11895 "date-fns": {
11648 "version": "1.30.1", 11896 "version": "2.23.0",
11649 "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", 11897 "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz",
11650 "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", 11898 "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==",
11651 "dev": true 11899 "dev": true
11652 }, 11900 },
11653 "dateformat": { 11901 "dateformat": {
@@ -12405,9 +12653,9 @@
12405 } 12653 }
12406 }, 12654 },
12407 "electron": { 12655 "electron": {
12408 "version": "13.2.2", 12656 "version": "13.3.0",
12409 "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.2.tgz", 12657 "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz",
12410 "integrity": "sha512-thGq2YaZqQWK1HexRghxdb26a8hA7ZSebukUSHlnHrY9+Sx9rW7e3uEHbibk/seRXVoXO76HndjKdHyObP9/Kw==", 12658 "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==",
12411 "dev": true, 12659 "dev": true,
12412 "requires": { 12660 "requires": {
12413 "@electron/get": "^1.0.1", 12661 "@electron/get": "^1.0.1",
@@ -15479,9 +15727,9 @@
15479 }, 15727 },
15480 "dependencies": { 15728 "dependencies": {
15481 "core-js": { 15729 "core-js": {
15482 "version": "3.16.2", 15730 "version": "3.16.4",
15483 "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.2.tgz", 15731 "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.4.tgz",
15484 "integrity": "sha512-P0KPukO6OjMpjBtHSceAZEWlDD1M2Cpzpg6dBbrjFqFhBHe/BwhxaP820xKOjRn/lZRQirrCusIpLS/n2sgXLQ==", 15732 "integrity": "sha512-Tq4GVE6XCjE+hcyW6hPy0ofN3hwtLudz5ZRdrlCnsnD/xkm/PWQRudzYHiKgZKUcefV6Q57fhDHjZHJP5dpfSg==",
15485 "dev": true, 15733 "dev": true,
15486 "optional": true 15734 "optional": true
15487 } 15735 }
@@ -19459,6 +19707,19 @@
19459 } 19707 }
19460 } 19708 }
19461 }, 19709 },
19710 "joi": {
19711 "version": "17.4.2",
19712 "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz",
19713 "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==",
19714 "dev": true,
19715 "requires": {
19716 "@hapi/hoek": "^9.0.0",
19717 "@hapi/topo": "^5.0.0",
19718 "@sideway/address": "^4.1.0",
19719 "@sideway/formula": "^3.0.0",
19720 "@sideway/pinpoint": "^2.0.0"
19721 }
19722 },
19462 "js-tokens": { 19723 "js-tokens": {
19463 "version": "4.0.0", 19724 "version": "4.0.0",
19464 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 19725 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -25111,20 +25372,33 @@
25111 } 25372 }
25112 }, 25373 },
25113 "read-pkg": { 25374 "read-pkg": {
25114 "version": "4.0.1", 25375 "version": "5.2.0",
25115 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", 25376 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
25116 "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", 25377 "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
25117 "dev": true, 25378 "dev": true,
25118 "requires": { 25379 "requires": {
25119 "normalize-package-data": "^2.3.2", 25380 "@types/normalize-package-data": "^2.4.0",
25120 "parse-json": "^4.0.0", 25381 "normalize-package-data": "^2.5.0",
25121 "pify": "^3.0.0" 25382 "parse-json": "^5.0.0",
25383 "type-fest": "^0.6.0"
25122 }, 25384 },
25123 "dependencies": { 25385 "dependencies": {
25124 "pify": { 25386 "parse-json": {
25125 "version": "3.0.0", 25387 "version": "5.2.0",
25126 "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 25388 "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
25127 "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 25389 "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
25390 "dev": true,
25391 "requires": {
25392 "@babel/code-frame": "^7.0.0",
25393 "error-ex": "^1.3.1",
25394 "json-parse-even-better-errors": "^2.3.0",
25395 "lines-and-columns": "^1.1.6"
25396 }
25397 },
25398 "type-fest": {
25399 "version": "0.6.0",
25400 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
25401 "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
25128 "dev": true 25402 "dev": true
25129 } 25403 }
25130 } 25404 }
@@ -27485,19 +27759,24 @@
27485 "dev": true 27759 "dev": true
27486 }, 27760 },
27487 "tar": { 27761 "tar": {
27488 "version": "4.4.15", 27762 "version": "4.4.18",
27489 "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.15.tgz", 27763 "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.18.tgz",
27490 "integrity": "sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA==", 27764 "integrity": "sha512-ZuOtqqmkV9RE1+4odd+MhBpibmCxNP6PJhH/h2OqNuotTX7/XHPZQJv2pKvWMplFH9SIZZhitehh6vBH6LO8Pg==",
27491 "requires": { 27765 "requires": {
27492 "chownr": "^1.1.1", 27766 "chownr": "^1.1.4",
27493 "fs-minipass": "^1.2.5", 27767 "fs-minipass": "^1.2.7",
27494 "minipass": "^2.8.6", 27768 "minipass": "^2.9.0",
27495 "minizlib": "^1.2.1", 27769 "minizlib": "^1.3.3",
27496 "mkdirp": "^0.5.0", 27770 "mkdirp": "^0.5.5",
27497 "safe-buffer": "^5.1.2", 27771 "safe-buffer": "^5.2.1",
27498 "yallist": "^3.0.3" 27772 "yallist": "^3.1.1"
27499 }, 27773 },
27500 "dependencies": { 27774 "dependencies": {
27775 "safe-buffer": {
27776 "version": "5.2.1",
27777 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
27778 "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
27779 },
27501 "yallist": { 27780 "yallist": {
27502 "version": "3.1.1", 27781 "version": "3.1.1",
27503 "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 27782 "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -29034,16 +29313,33 @@
29034 } 29313 }
29035 }, 29314 },
29036 "wait-on": { 29315 "wait-on": {
29037 "version": "3.3.0", 29316 "version": "6.0.0",
29038 "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.3.0.tgz", 29317 "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz",
29039 "integrity": "sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ==", 29318 "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==",
29040 "dev": true, 29319 "dev": true,
29041 "requires": { 29320 "requires": {
29042 "@hapi/joi": "^15.0.3", 29321 "axios": "^0.21.1",
29043 "core-js": "^2.6.5", 29322 "joi": "^17.4.0",
29044 "minimist": "^1.2.0", 29323 "lodash": "^4.17.21",
29045 "request": "^2.88.0", 29324 "minimist": "^1.2.5",
29046 "rx": "^4.1.0" 29325 "rxjs": "^7.1.0"
29326 },
29327 "dependencies": {
29328 "rxjs": {
29329 "version": "7.3.0",
29330 "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz",
29331 "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==",
29332 "dev": true,
29333 "requires": {
29334 "tslib": "~2.1.0"
29335 }
29336 },
29337 "tslib": {
29338 "version": "2.1.0",
29339 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
29340 "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
29341 "dev": true
29342 }
29047 } 29343 }
29048 }, 29344 },
29049 "walker": { 29345 "walker": {
@@ -30328,34 +30624,71 @@
30328 "dev": true 30624 "dev": true
30329 }, 30625 },
30330 "yargs": { 30626 "yargs": {
30331 "version": "12.0.5", 30627 "version": "16.2.0",
30332 "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", 30628 "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
30333 "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", 30629 "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
30334 "dev": true, 30630 "dev": true,
30335 "requires": { 30631 "requires": {
30336 "cliui": "^4.0.0", 30632 "cliui": "^7.0.2",
30337 "decamelize": "^1.2.0", 30633 "escalade": "^3.1.1",
30338 "find-up": "^3.0.0", 30634 "get-caller-file": "^2.0.5",
30339 "get-caller-file": "^1.0.1",
30340 "os-locale": "^3.0.0",
30341 "require-directory": "^2.1.1", 30635 "require-directory": "^2.1.1",
30342 "require-main-filename": "^1.0.1", 30636 "string-width": "^4.2.0",
30343 "set-blocking": "^2.0.0", 30637 "y18n": "^5.0.5",
30344 "string-width": "^2.0.0", 30638 "yargs-parser": "^20.2.2"
30345 "which-module": "^2.0.0", 30639 },
30346 "y18n": "^3.2.1 || ^4.0.0", 30640 "dependencies": {
30347 "yargs-parser": "^11.1.1" 30641 "ansi-regex": {
30642 "version": "5.0.0",
30643 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
30644 "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
30645 "dev": true
30646 },
30647 "get-caller-file": {
30648 "version": "2.0.5",
30649 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
30650 "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
30651 "dev": true
30652 },
30653 "is-fullwidth-code-point": {
30654 "version": "3.0.0",
30655 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
30656 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
30657 "dev": true
30658 },
30659 "string-width": {
30660 "version": "4.2.2",
30661 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
30662 "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
30663 "dev": true,
30664 "requires": {
30665 "emoji-regex": "^8.0.0",
30666 "is-fullwidth-code-point": "^3.0.0",
30667 "strip-ansi": "^6.0.0"
30668 }
30669 },
30670 "strip-ansi": {
30671 "version": "6.0.0",
30672 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
30673 "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
30674 "dev": true,
30675 "requires": {
30676 "ansi-regex": "^5.0.0"
30677 }
30678 },
30679 "y18n": {
30680 "version": "5.0.8",
30681 "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
30682 "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
30683 "dev": true
30684 }
30348 } 30685 }
30349 }, 30686 },
30350 "yargs-parser": { 30687 "yargs-parser": {
30351 "version": "11.1.1", 30688 "version": "20.2.9",
30352 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", 30689 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
30353 "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", 30690 "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
30354 "dev": true, 30691 "dev": true
30355 "requires": {
30356 "camelcase": "^5.0.0",
30357 "decamelize": "^1.2.0"
30358 }
30359 }, 30692 },
30360 "yargs-unparser": { 30693 "yargs-unparser": {
30361 "version": "2.0.0", 30694 "version": "2.0.0",
diff --git a/package.json b/package.json
index 01323c1dc..9682738ce 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
3 "productName": "Ferdi", 3 "productName": "Ferdi",
4 "desktopName": "ferdi.desktop", 4 "desktopName": "ferdi.desktop",
5 "appId": "com.kytwb.ferdi", 5 "appId": "com.kytwb.ferdi",
6 "version": "5.6.1-beta.2", 6 "version": "5.6.1-nightly.46",
7 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", 7 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.",
8 "copyright": "kytwb", 8 "copyright": "kytwb",
9 "main": "index.js", 9 "main": "index.js",
@@ -21,6 +21,7 @@
21 "start": "electron ./build", 21 "start": "electron ./build",
22 "start:local": "cross-env USE_LOCAL_API=1 npm start", 22 "start:local": "cross-env USE_LOCAL_API=1 npm start",
23 "start:live": "cross-env USE_LIVE_API=1 npm start", 23 "start:live": "cross-env USE_LIVE_API=1 npm start",
24 "start:all-dev": "concurrently \"npm run dev\" \"wait-on http://localhost:8080 && npm start\"",
24 "dev": "cross-env NODE_ENV=development gulp dev", 25 "dev": "cross-env NODE_ENV=development gulp dev",
25 "test": "jest", 26 "test": "jest",
26 "test:watch": "jest --watch", 27 "test:watch": "jest --watch",
@@ -123,7 +124,7 @@
123 "route-parser": "0.0.5", 124 "route-parser": "0.0.5",
124 "semver": "7.3.5", 125 "semver": "7.3.5",
125 "sqlite3": "5.0.0", 126 "sqlite3": "5.0.0",
126 "tar": "4.4.15", 127 "tar": "4.4.18",
127 "tslib": "2.3.1", 128 "tslib": "2.3.1",
128 "useragent-generator": "1.1.1-amkt-22079-finish.0", 129 "useragent-generator": "1.1.1-amkt-22079-finish.0",
129 "uuid": "3.3.3", 130 "uuid": "3.3.3",
@@ -161,11 +162,12 @@
161 "all-contributors-cli": "6.20.0", 162 "all-contributors-cli": "6.20.0",
162 "babel-plugin-react-intl": "3.5.1", 163 "babel-plugin-react-intl": "3.5.1",
163 "commitizen": "4.2.4", 164 "commitizen": "4.2.4",
165 "concurrently": "6.2.1",
164 "conventional-changelog-cli": "2.1.1", 166 "conventional-changelog-cli": "2.1.1",
165 "cross-env": "7.0.3", 167 "cross-env": "7.0.3",
166 "cz-conventional-changelog": "3.3.0", 168 "cz-conventional-changelog": "3.3.0",
167 "dotenv": "10.0.0", 169 "dotenv": "10.0.0",
168 "electron": "13.2.2", 170 "electron": "13.3.0",
169 "electron-builder": "22.12.1", 171 "electron-builder": "22.12.1",
170 "electron-notarize": "1.1.0", 172 "electron-notarize": "1.1.0",
171 "eslint": "7.32.0", 173 "eslint": "7.32.0",
@@ -206,6 +208,7 @@
206 "terser": "4.8.0", 208 "terser": "4.8.0",
207 "ts-loader": "5.4.5", 209 "ts-loader": "5.4.5",
208 "typescript": "3.9.10", 210 "typescript": "3.9.10",
211 "wait-on": "6.0.0",
209 "webpack": "4.46.0", 212 "webpack": "4.46.0",
210 "webpack-cli": "3.3.12", 213 "webpack-cli": "3.3.12",
211 "webpack-dev-server": "3.11.2" 214 "webpack-dev-server": "3.11.2"
diff --git a/recipes b/recipes
Subproject 4929cbff010712f109f5805027c140f434e7703 Subproject 2486fbbd72f08b759a2781913f388e91149e79e
diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js
index a9fb73f33..a1a4ab64f 100644
--- a/src/components/layout/Sidebar.js
+++ b/src/components/layout/Sidebar.js
@@ -134,6 +134,7 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp
134 {...this.props} 134 {...this.props}
135 enableToolTip={() => this.enableToolTip()} 135 enableToolTip={() => this.enableToolTip()}
136 disableToolTip={() => this.disableToolTip()} 136 disableToolTip={() => this.disableToolTip()}
137 useVerticalStyle={stores.settings.all.app.useVerticalStyle}
137 /> 138 />
138 { isLoggedIn ? ( 139 { isLoggedIn ? (
139 <> 140 <>
diff --git a/src/components/services/tabs/Tabbar.js b/src/components/services/tabs/Tabbar.js
index ab1e46c9f..c1421a2b1 100644
--- a/src/components/services/tabs/Tabbar.js
+++ b/src/components/services/tabs/Tabbar.js
@@ -20,6 +20,7 @@ export default @observer class TabBar extends Component {
20 updateService: PropTypes.func.isRequired, 20 updateService: PropTypes.func.isRequired,
21 hibernateService: PropTypes.func.isRequired, 21 hibernateService: PropTypes.func.isRequired,
22 wakeUpService: PropTypes.func.isRequired, 22 wakeUpService: PropTypes.func.isRequired,
23 useVerticalStyle: PropTypes.bool.isRequired,
23 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired, 24 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
24 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, 25 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
25 }; 26 };
@@ -81,10 +82,13 @@ export default @observer class TabBar extends Component {
81 toggleAudio, 82 toggleAudio,
82 toggleDarkMode, 83 toggleDarkMode,
83 deleteService, 84 deleteService,
85 useVerticalStyle,
84 showMessageBadgeWhenMutedSetting, 86 showMessageBadgeWhenMutedSetting,
85 showMessageBadgesEvenWhenMuted, 87 showMessageBadgesEvenWhenMuted,
86 } = this.props; 88 } = this.props;
87 89
90 const axis = useVerticalStyle ? 'x' : 'y';
91
88 return ( 92 return (
89 <div> 93 <div>
90 <TabBarSortableList 94 <TabBarSortableList
@@ -104,8 +108,8 @@ export default @observer class TabBar extends Component {
104 wakeUpService={(args) => this.wakeUpService(args)} 108 wakeUpService={(args) => this.wakeUpService(args)}
105 openSettings={openSettings} 109 openSettings={openSettings}
106 distance={20} 110 distance={20}
107 axis="y" 111 axis={axis}
108 lockAxis="y" 112 lockAxis={axis}
109 helperClass="is-reordering" 113 helperClass="is-reordering"
110 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting} 114 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
111 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted} 115 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
diff --git a/src/config.ts b/src/config.ts
index 0647b8f52..835d130da 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -134,10 +134,11 @@ export const ICON_SIZES = {
134export const iconSizeBias = 20; 134export const iconSizeBias = 20;
135 135
136export const DEFAULT_FEATURES_CONFIG = { 136export const DEFAULT_FEATURES_CONFIG = {
137 isServiceProxyEnabled: false, 137 isServiceProxyEnabled: true,
138 isAnnouncementsEnabled: true, 138 isAnnouncementsEnabled: true,
139 isWorkspaceEnabled: false, 139 isWorkspaceEnabled: true,
140 isTodosEnabled: true, 140 isTodosEnabled: true,
141 isSettingsWSEnabled: false,
141}; 142};
142 143
143export const DEFAULT_WINDOW_OPTIONS = { 144export const DEFAULT_WINDOW_OPTIONS = {
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index 0d718489a..d65d8d5d5 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -163,7 +163,7 @@ const messages = defineMessages({
163 }, 163 },
164 useVerticalStyle: { 164 useVerticalStyle: {
165 id: 'settings.app.form.useVerticalStyle', 165 id: 'settings.app.form.useVerticalStyle',
166 defaultMessage: '!!!Use vertical style', 166 defaultMessage: '!!!Use horizontal style',
167 }, 167 },
168 alwaysShowWorkspaces: { 168 alwaysShowWorkspaces: {
169 id: 'settings.app.form.alwaysShowWorkspaces', 169 id: 'settings.app.form.alwaysShowWorkspaces',
diff --git a/src/electron/ipc-api/autoUpdate.js b/src/electron/ipc-api/autoUpdate.js
index 5305d5618..255595b9e 100644
--- a/src/electron/ipc-api/autoUpdate.js
+++ b/src/electron/ipc-api/autoUpdate.js
@@ -17,9 +17,11 @@ export default (params) => {
17 try { 17 try {
18 autoUpdater.autoInstallOnAppQuit = false; 18 autoUpdater.autoInstallOnAppQuit = false;
19 autoUpdater.allowPrerelease = Boolean(params.settings.app.get('beta')); 19 autoUpdater.allowPrerelease = Boolean(params.settings.app.get('beta'));
20 autoUpdater.channel = autoUpdater.allowPrerelease ? 'beta' : 'latest';
20 21
21 if (params.settings.app.get('nightly')) { 22 if (params.settings.app.get('nightly')) {
22 autoUpdater.allowPrerelease = Boolean(params.settings.app.get('nightly')); 23 autoUpdater.allowPrerelease = Boolean(params.settings.app.get('nightly'));
24 autoUpdater.channel = 'alpha';
23 autoUpdater.setFeedURL({ 25 autoUpdater.setFeedURL({
24 provider: 'github', 26 provider: 'github',
25 owner: GITHUB_ORG_NAME, 27 owner: GITHUB_ORG_NAME,
diff --git a/src/features/webControls/components/WebControls.js b/src/features/webControls/components/WebControls.js
index 9a95eb2d2..bebf52c08 100644
--- a/src/features/webControls/components/WebControls.js
+++ b/src/features/webControls/components/WebControls.js
@@ -199,12 +199,17 @@ class WebControls extends Component {
199 }) 199 })
200 } 200 }
201 onFocus={event => { 201 onFocus={event => {
202 console.log('on focus event');
203 event.target.select(); 202 event.target.select();
204 this.setState({ 203 this.setState({
205 editUrl: true, 204 editUrl: true,
206 }); 205 });
207 }} 206 }}
207 onBlur={event => {
208 event.target.blur();
209 this.setState({
210 editUrl: false,
211 });
212 }}
208 onKeyDown={event => { 213 onKeyDown={event => {
209 if (event.key === 'Enter') { 214 if (event.key === 'Enter') {
210 this.setState({ 215 this.setState({
@@ -217,7 +222,7 @@ class WebControls extends Component {
217 editUrl: false, 222 editUrl: false,
218 inputUrl: url, 223 inputUrl: url,
219 }); 224 });
220 event.target.blur(); 225 this.inputRef.current.blur();
221 } 226 }
222 }} 227 }}
223 ref={this.inputRef} 228 ref={this.inputRef}
diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js
index 0ff836cba..c97d4bd9c 100644
--- a/src/features/workspaces/components/EditWorkspaceForm.js
+++ b/src/features/workspaces/components/EditWorkspaceForm.js
@@ -224,6 +224,7 @@ class EditWorkspaceForm extends Component {
224 busy={isSaving} 224 busy={isSaving}
225 buttonType={isSaving ? 'secondary' : 'primary'} 225 buttonType={isSaving ? 'secondary' : 'primary'}
226 onClick={this.save.bind(this, form)} 226 onClick={this.save.bind(this, form)}
227 // TODO: Need to disable if no services have been added to this workspace
227 disabled={isSaving} 228 disabled={isSaving}
228 /> 229 />
229 </div> 230 </div>
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js
index 8c73516bc..ec9d7ee7f 100644
--- a/src/features/workspaces/store.js
+++ b/src/features/workspaces/store.js
@@ -155,38 +155,26 @@ export default class WorkspacesStore extends FeatureStore {
155 }; 155 };
156 156
157 @action _create = async ({ name }) => { 157 @action _create = async ({ name }) => {
158 // eslint-disable-next-line no-useless-catch 158 const workspace = await createWorkspaceRequest.execute(name);
159 try { 159 await getUserWorkspacesRequest.result.push(workspace);
160 const workspace = await createWorkspaceRequest.execute(name); 160 this._edit({ workspace });
161 await getUserWorkspacesRequest.result.push(workspace);
162 this._edit({ workspace });
163 } catch (error) {
164 throw error;
165 }
166 }; 161 };
167 162
168 @action _delete = async ({ workspace }) => { 163 @action _delete = async ({ workspace }) => {
169 // eslint-disable-next-line no-useless-catch 164 await deleteWorkspaceRequest.execute(workspace);
170 try { 165 await getUserWorkspacesRequest.result.remove(workspace);
171 await deleteWorkspaceRequest.execute(workspace); 166 this.stores.router.push('/settings/workspaces');
172 await getUserWorkspacesRequest.result.remove(workspace); 167 if (this.activeWorkspace === workspace) {
173 this.stores.router.push('/settings/workspaces'); 168 this._deactivateActiveWorkspace();
174 } catch (error) {
175 throw error;
176 } 169 }
177 }; 170 };
178 171
179 @action _update = async ({ workspace }) => { 172 @action _update = async ({ workspace }) => {
180 // eslint-disable-next-line no-useless-catch 173 await updateWorkspaceRequest.execute(workspace);
181 try { 174 // Path local result optimistically
182 await updateWorkspaceRequest.execute(workspace); 175 const localWorkspace = this._getWorkspaceById(workspace.id);
183 // Path local result optimistically 176 Object.assign(localWorkspace, workspace);
184 const localWorkspace = this._getWorkspaceById(workspace.id); 177 this.stores.router.push('/settings/workspaces');
185 Object.assign(localWorkspace, workspace);
186 this.stores.router.push('/settings/workspaces');
187 } catch (error) {
188 throw error;
189 }
190 }; 178 };
191 179
192 @action _setActiveWorkspace = ({ workspace }) => { 180 @action _setActiveWorkspace = ({ workspace }) => {
diff --git a/src/i18n/locales/af.json b/src/i18n/locales/af.json
index 89060b506..ff3ed1486 100644
--- a/src/i18n/locales/af.json
+++ b/src/i18n/locales/af.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Settings", 254 "settings.app.headline": "Settings",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json
index e5caabd2b..ded4a1913 100644
--- a/src/i18n/locales/ar.json
+++ b/src/i18n/locales/ar.json
@@ -5,17 +5,17 @@
5 "changeserver.headline": "تغيير الخادم", 5 "changeserver.headline": "تغيير الخادم",
6 "changeserver.label": "خادم", 6 "changeserver.label": "خادم",
7 "changeserver.submit": "إرسال", 7 "changeserver.submit": "إرسال",
8 "changeserver.urlError": "Enter a valid URL", 8 "changeserver.urlError": "الرجاء إدخال URL صحيح",
9 "changeserver.warning": "Extra settings offered by Ferdi will not be saved", 9 "changeserver.warning": "لن يتم حفظ الإعدادات الإضافية التي يوفرها فردي",
10 "connectionLostBanner.cta": "إعادة تحميل الخدمة", 10 "connectionLostBanner.cta": "إعادة تحميل الخدمة",
11 "connectionLostBanner.informationLink": "ماذا حدث؟", 11 "connectionLostBanner.informationLink": "ماذا حدث؟",
12 "connectionLostBanner.message": "أوه لا! فقد فردي الاتصال بـ.", 12 "connectionLostBanner.message": "أوه لا! فقد فردي الاتصال بـ.",
13 "feature.announcements.changelog.headline": "تغيرات في فريدي {version}", 13 "feature.announcements.changelog.headline": "تغيرات في فريدي {version}",
14 "feature.debugger.title": "نشر معلومات تصحيح الأخطاء", 14 "feature.debugger.title": "نشر معلومات تصحيح الأخطاء",
15 "feature.nightlyBuilds.activate": "Activate", 15 "feature.nightlyBuilds.activate": "تفعيل",
16 "feature.nightlyBuilds.cancel": "إلغاء", 16 "feature.nightlyBuilds.cancel": "إلغاء",
17 "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", 17 "feature.nightlyBuilds.info": "الإصدارات الليلية هي إصدارات تجريبية للغاية من فردي والتي قد تحتوي على ميزات غير مصقولة أو غير كاملة. يتم استخدام هذه الإنشاءات الليلية بشكل أساسي من قبل المطورين لاختبار ميزاتهم المطورة حديثًا وكيفية أدائهم في التصميم النهائي. إذا كنت لا تعرف ما تفعله ، فنقترح عدم تنشيط الإنشاءات الليلية.",
18 "feature.nightlyBuilds.title": "Nightly Builds", 18 "feature.nightlyBuilds.title": "المباني الليلية",
19 "feature.publishDebugInfo.error": "حدث خطأ أثناء محاولة نشر معلومات التصحيح. الرجاء المحاولة مرة أخرى لاحقاً أو عرض وحدة التحكم لمزيد من المعلومات.", 19 "feature.publishDebugInfo.error": "حدث خطأ أثناء محاولة نشر معلومات التصحيح. الرجاء المحاولة مرة أخرى لاحقاً أو عرض وحدة التحكم لمزيد من المعلومات.",
20 "feature.publishDebugInfo.info": "نشر معلومات التصحيح الخاصة بك يساعدنا على العثور على المشاكل والأخطاء في فردي. بنشر معلومات التصحيح الخاصة بك فإنك تقبل سياسة الخصوصية وشروط خدمة مصحح فيردي", 20 "feature.publishDebugInfo.info": "نشر معلومات التصحيح الخاصة بك يساعدنا على العثور على المشاكل والأخطاء في فردي. بنشر معلومات التصحيح الخاصة بك فإنك تقبل سياسة الخصوصية وشروط خدمة مصحح فيردي",
21 "feature.publishDebugInfo.privacy": "سياسة الخصوصية", 21 "feature.publishDebugInfo.privacy": "سياسة الخصوصية",
@@ -32,8 +32,8 @@
32 "global.spellchecking.autodetect": "الكشف عن اللغة تلقائياً", 32 "global.spellchecking.autodetect": "الكشف عن اللغة تلقائياً",
33 "global.spellchecking.autodetect.short": "تلقائي", 33 "global.spellchecking.autodetect.short": "تلقائي",
34 "global.spellchecking.language": "لغة التدقيق الإملائي", 34 "global.spellchecking.language": "لغة التدقيق الإملائي",
35 "global.userAgentHelp": "Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", 35 "global.userAgentHelp": "استخدم 'https://whatmyuseragent.com/' (لاكتشاف) أو 'https://developers.whatismybrowser.com/useragents/explore/' (لاختار) وكيل المستخدم المنشود و نسخه لصقه هنا.",
36 "global.userAgentPref": "User Agent", 36 "global.userAgentPref": "وكيل المستخدم",
37 "import.headline": "استيراد خدمات فردي الأربع", 37 "import.headline": "استيراد خدمات فردي الأربع",
38 "import.notSupportedHeadline": "الخدمات غير مدعومة بعد في فردي الإصدار 5", 38 "import.notSupportedHeadline": "الخدمات غير مدعومة بعد في فردي الإصدار 5",
39 "import.skip.label": "أريد أن أضيف الخدمات يدوياً", 39 "import.skip.label": "أريد أن أضيف الخدمات يدوياً",
@@ -46,7 +46,7 @@
46 "infobar.requiredRequestsFailed": "تعذر تحميل الخدمات ومعلومات المستخدم", 46 "infobar.requiredRequestsFailed": "تعذر تحميل الخدمات ومعلومات المستخدم",
47 "infobar.servicesUpdated": "تم تحديث خدماتك.", 47 "infobar.servicesUpdated": "تم تحديث خدماتك.",
48 "infobar.updateAvailable": "يتوفر تحديث جديد لفردي.", 48 "infobar.updateAvailable": "يتوفر تحديث جديد لفردي.",
49 "infobox.dismiss": "Dismiss", 49 "infobox.dismiss": "تجاهل",
50 "invite.email.label": "البريد الإلكتروني", 50 "invite.email.label": "البريد الإلكتروني",
51 "invite.headline.friends": "قم بدعوة 3 من أصدقائك أو زملائك", 51 "invite.headline.friends": "قم بدعوة 3 من أصدقائك أو زملائك",
52 "invite.name.label": "الاسم", 52 "invite.name.label": "الاسم",
@@ -80,32 +80,32 @@
80 "menu.app.autohideMenuBar": "إخفاء شريط القوائم تلقائيا", 80 "menu.app.autohideMenuBar": "إخفاء شريط القوائم تلقائيا",
81 "menu.app.checkForUpdates": "التحقق من وجود تحديثات", 81 "menu.app.checkForUpdates": "التحقق من وجود تحديثات",
82 "menu.app.hide": "إخفاء", 82 "menu.app.hide": "إخفاء",
83 "menu.app.hideOthers": "Hide Others", 83 "menu.app.hideOthers": "إخفاء الآخرين",
84 "menu.app.quit": "Quit", 84 "menu.app.quit": "خروج",
85 "menu.app.settings": "الإعدادات", 85 "menu.app.settings": "الإعدادات",
86 "menu.app.unhide": "Unhide", 86 "menu.app.unhide": "إظهار",
87 "menu.edit": "تعديل", 87 "menu.edit": "تعديل",
88 "menu.edit.copy": "Copy", 88 "menu.edit.copy": "نسخ",
89 "menu.edit.cut": "Cut", 89 "menu.edit.cut": "قطع",
90 "menu.edit.delete": "حذف", 90 "menu.edit.delete": "حذف",
91 "menu.edit.emojiSymbols": "الابتسامات والرموز التعبيرية", 91 "menu.edit.emojiSymbols": "الابتسامات والرموز التعبيرية",
92 "menu.edit.findInPage": "البحث في الصفحة", 92 "menu.edit.findInPage": "البحث في الصفحة",
93 "menu.edit.paste": "Paste", 93 "menu.edit.paste": "لصق",
94 "menu.edit.pasteAndMatchStyle": "Paste And Match Style", 94 "menu.edit.pasteAndMatchStyle": "لصق ومطابقة النمط",
95 "menu.edit.redo": "Redo", 95 "menu.edit.redo": "إعادة",
96 "menu.edit.selectAll": "Select All", 96 "menu.edit.selectAll": "إختر الكل",
97 "menu.edit.speech": "الحديث", 97 "menu.edit.speech": "الحديث",
98 "menu.edit.startDictation": "بدء الإملاء", 98 "menu.edit.startDictation": "بدء الإملاء",
99 "menu.edit.startSpeaking": "بدء الحديث", 99 "menu.edit.startSpeaking": "بدء الحديث",
100 "menu.edit.stopSpeaking": "إيقاف الحديث", 100 "menu.edit.stopSpeaking": "إيقاف الحديث",
101 "menu.edit.undo": "Undo", 101 "menu.edit.undo": "تراجع",
102 "menu.file": "الملف", 102 "menu.file": "الملف",
103 "menu.help": "Help", 103 "menu.help": "مساعدة",
104 "menu.help.changelog": "سِجل التغيرات", 104 "menu.help.changelog": "سِجل التغيرات",
105 "menu.help.debugInfo": "نسخ معلومات تصحيح الأخطاء", 105 "menu.help.debugInfo": "نسخ معلومات تصحيح الأخطاء",
106 "menu.help.debugInfoCopiedBody": "تم نسخ معلومات تصحيح الأخطاء الخاصة بك إلى الحافظة.", 106 "menu.help.debugInfoCopiedBody": "تم نسخ معلومات تصحيح الأخطاء الخاصة بك إلى الحافظة.",
107 "menu.help.debugInfoCopiedHeadline": "معلومات تصحيح الأخطاء لفردي", 107 "menu.help.debugInfoCopiedHeadline": "معلومات تصحيح الأخطاء لفردي",
108 "menu.help.importExportData": "Import/Export Configuration Data", 108 "menu.help.importExportData": "استيراد/تصدير بيانات التكوين",
109 "menu.help.learnMore": "معرفة المزيد", 109 "menu.help.learnMore": "معرفة المزيد",
110 "menu.help.privacy": "بيان الخصوصية", 110 "menu.help.privacy": "بيان الخصوصية",
111 "menu.help.publishDebugInfo": "نشر معلومات تصحيح الأخطاء", 111 "menu.help.publishDebugInfo": "نشر معلومات تصحيح الأخطاء",
@@ -113,7 +113,7 @@
113 "menu.help.tos": "شروط الخدمة", 113 "menu.help.tos": "شروط الخدمة",
114 "menu.services": "الخدمات", 114 "menu.services": "الخدمات",
115 "menu.services.activatePreviousService": "تفعيل الخدمة السابقة", 115 "menu.services.activatePreviousService": "تفعيل الخدمة السابقة",
116 "menu.services.addNewService": "Add New Service", 116 "menu.services.addNewService": "إضافة خدمة جديدة",
117 "menu.services.goHome": "الرئيسية", 117 "menu.services.goHome": "الرئيسية",
118 "menu.services.setNextServiceActive": "تفعيل الخدمة التالية", 118 "menu.services.setNextServiceActive": "تفعيل الخدمة التالية",
119 "menu.todos": "المهام", 119 "menu.todos": "المهام",
@@ -123,20 +123,20 @@
123 "menu.view.forward": "تقدم", 123 "menu.view.forward": "تقدم",
124 "menu.view.lockFerdi": "قفل فردي", 124 "menu.view.lockFerdi": "قفل فردي",
125 "menu.view.openQuickSwitch": "فتح التبديل السريع", 125 "menu.view.openQuickSwitch": "فتح التبديل السريع",
126 "menu.view.reloadFerdi": "Reload Ferdi", 126 "menu.view.reloadFerdi": "إعادة فردي",
127 "menu.view.reloadService": "إعادة تحميل الخدمة", 127 "menu.view.reloadService": "إعادة تحميل الخدمة",
128 "menu.view.reloadTodos": "Reload ToDos", 128 "menu.view.reloadTodos": "Reload ToDos",
129 "menu.view.resetZoom": "Actual Size", 129 "menu.view.resetZoom": "الحجم الأصلي",
130 "menu.view.toggleDarkMode": "تفعيل الوضع المظلم", 130 "menu.view.toggleDarkMode": "تفعيل الوضع المظلم",
131 "menu.view.toggleDevTools": "فتح أدوات المطور", 131 "menu.view.toggleDevTools": "فتح أدوات المطور",
132 "menu.view.toggleFullScreen": "Toggle Full Screen", 132 "menu.view.toggleFullScreen": "تفعيل وضع ملء الشاشة",
133 "menu.view.toggleServiceDevTools": "فتح أدوات المطور للخدمة", 133 "menu.view.toggleServiceDevTools": "فتح أدوات المطور للخدمة",
134 "menu.view.toggleTodosDevTools": "ادخل إلى أدوات مطوري تودوس", 134 "menu.view.toggleTodosDevTools": "ادخل إلى أدوات مطوري تودوس",
135 "menu.view.zoomIn": "Zoom In", 135 "menu.view.zoomIn": "تكبير",
136 "menu.view.zoomOut": "Zoom Out", 136 "menu.view.zoomOut": "تصغير",
137 "menu.window": "Window", 137 "menu.window": "النافذة",
138 "menu.window.close": "Close", 138 "menu.window.close": "إغلاق",
139 "menu.window.minimize": "Minimize", 139 "menu.window.minimize": "تصغير النافذة",
140 "menu.workspaces": "مساحاتُ العمل", 140 "menu.workspaces": "مساحاتُ العمل",
141 "menu.workspaces.addNewWorkspace": "إضافة مساحة عمل جديدة...", 141 "menu.workspaces.addNewWorkspace": "إضافة مساحة عمل جديدة...",
142 "menu.workspaces.closeWorkspaceDrawer": "غلقُ دُرجِ مساحة العمل", 142 "menu.workspaces.closeWorkspaceDrawer": "غلقُ دُرجِ مساحة العمل",
@@ -198,12 +198,12 @@
198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
199 "settings.app.buttonClearAllCache": "مسح ذاكرة التخزين المؤقت", 199 "settings.app.buttonClearAllCache": "مسح ذاكرة التخزين المؤقت",
200 "settings.app.buttonInstallUpdate": "إعادة التشغيل وتثبيت التحديث", 200 "settings.app.buttonInstallUpdate": "إعادة التشغيل وتثبيت التحديث",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder", 201 "settings.app.buttonOpenFerdiProfileFolder": "فتح مجلد الملف الشخصي",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder", 202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
203 "settings.app.buttonSearchForUpdate": "التحقق من وجود تحديثات", 203 "settings.app.buttonSearchForUpdate": "التحقق من وجود تحديثات",
204 "settings.app.cacheInfo": "التخزين المؤقت لفردي يستخدم حاليا {size} من مساحة القرص.", 204 "settings.app.cacheInfo": "التخزين المؤقت لفردي يستخدم حاليا {size} من مساحة القرص.",
205 "settings.app.cacheNotCleared": "تعذر مسح كل ذاكرة التخزين المؤقت", 205 "settings.app.cacheNotCleared": "تعذر مسح كل ذاكرة التخزين المؤقت",
206 "settings.app.closeSettings": "Close settings", 206 "settings.app.closeSettings": "إغلاق الإعدادات",
207 "settings.app.currentVersion": "الإصدار الحالي:", 207 "settings.app.currentVersion": "الإصدار الحالي:",
208 "settings.app.form.accentColor": "لون التمييز", 208 "settings.app.form.accentColor": "لون التمييز",
209 "settings.app.form.adaptableDarkMode": "مزامنة الوضع المظلم مع إعداد الوضع المظلم لنظام التشغيل الخاص بي", 209 "settings.app.form.adaptableDarkMode": "مزامنة الوضع المظلم مع إعداد الوضع المظلم لنظام التشغيل الخاص بي",
@@ -232,7 +232,7 @@
232 "settings.app.form.minimizeToSystemTray": "تصغير النافذة إلى جانب شريط المهام", 232 "settings.app.form.minimizeToSystemTray": "تصغير النافذة إلى جانب شريط المهام",
233 "settings.app.form.navigationBarBehaviour": "سلوك شريط التنقل", 233 "settings.app.form.navigationBarBehaviour": "سلوك شريط التنقل",
234 "settings.app.form.notifyTaskBarOnMessage": "Notify TaskBar/Dock on new message", 234 "settings.app.form.notifyTaskBarOnMessage": "Notify TaskBar/Dock on new message",
235 "settings.app.form.passwordToggle": "Password toggle", 235 "settings.app.form.passwordToggle": "تبديل كلمة المرور",
236 "settings.app.form.predefinedTodoServer": "خادم Todo", 236 "settings.app.form.predefinedTodoServer": "خادم Todo",
237 "settings.app.form.privateNotifications": "عدم إظهار محتوى الرسالة في الإشعارات", 237 "settings.app.form.privateNotifications": "عدم إظهار محتوى الرسالة في الإشعارات",
238 "settings.app.form.reloadAfterResume": "إعادة تحميل فيردي بعد أعادة تشغيل النظام", 238 "settings.app.form.reloadAfterResume": "إعادة تحميل فيردي بعد أعادة تشغيل النظام",
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "البدء بنافذة مصغرة", 249 "settings.app.form.startMinimized": "البدء بنافذة مصغرة",
250 "settings.app.form.universalDarkMode": "تمكين الوضع المظلم الكامل", 250 "settings.app.form.universalDarkMode": "تمكين الوضع المظلم الكامل",
251 "settings.app.form.useTouchIdToUnlock": "السماح باستخدام TouchID لفتح فردي", 251 "settings.app.form.useTouchIdToUnlock": "السماح باستخدام TouchID لفتح فردي",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "استخدام النمط الأفقي",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "الإعدادات", 254 "settings.app.headline": "الإعدادات",
255 "settings.app.headlineAdvanced": "متقدم", 255 "settings.app.headlineAdvanced": "متقدم",
diff --git a/src/i18n/locales/be.json b/src/i18n/locales/be.json
index 78b5f362e..30fae6dd8 100644
--- a/src/i18n/locales/be.json
+++ b/src/i18n/locales/be.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Settings", 254 "settings.app.headline": "Settings",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/bs.json b/src/i18n/locales/bs.json
index 89060b506..ff3ed1486 100644
--- a/src/i18n/locales/bs.json
+++ b/src/i18n/locales/bs.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Settings", 254 "settings.app.headline": "Settings",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json
index 0d57b5b19..96741e317 100644
--- a/src/i18n/locales/ca.json
+++ b/src/i18n/locales/ca.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Configuració", 254 "settings.app.headline": "Configuració",
255 "settings.app.headlineAdvanced": "Avançat", 255 "settings.app.headlineAdvanced": "Avançat",
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json
index be17c2b00..a1326c772 100644
--- a/src/i18n/locales/cs.json
+++ b/src/i18n/locales/cs.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Nastavení", 254 "settings.app.headline": "Nastavení",
255 "settings.app.headlineAdvanced": "Pokročilé", 255 "settings.app.headlineAdvanced": "Pokročilé",
diff --git a/src/i18n/locales/da.json b/src/i18n/locales/da.json
index 596e6400e..48fe12245 100644
--- a/src/i18n/locales/da.json
+++ b/src/i18n/locales/da.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimeret", 249 "settings.app.form.startMinimized": "Start minimeret",
250 "settings.app.form.universalDarkMode": "Aktiver universel mørk tilstand", 250 "settings.app.form.universalDarkMode": "Aktiver universel mørk tilstand",
251 "settings.app.form.useTouchIdToUnlock": "Tillad brug af TouchID for at låse Ferdi op", 251 "settings.app.form.useTouchIdToUnlock": "Tillad brug af TouchID for at låse Ferdi op",
252 "settings.app.form.useVerticalStyle": "Brug lodret stil", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Indstillinger", 254 "settings.app.headline": "Indstillinger",
255 "settings.app.headlineAdvanced": "Avanceret", 255 "settings.app.headlineAdvanced": "Avanceret",
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index 20f55e851..5390ef35c 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Minimiert starten", 249 "settings.app.form.startMinimized": "Minimiert starten",
250 "settings.app.form.universalDarkMode": "Universellen Dark Mode aktivieren", 250 "settings.app.form.universalDarkMode": "Universellen Dark Mode aktivieren",
251 "settings.app.form.useTouchIdToUnlock": "Verwenden von Touch ID zum Entsperren von Ferdi erlauben", 251 "settings.app.form.useTouchIdToUnlock": "Verwenden von Touch ID zum Entsperren von Ferdi erlauben",
252 "settings.app.form.useVerticalStyle": "Vertikalen Stil verwenden", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Einstellungen", 254 "settings.app.headline": "Einstellungen",
255 "settings.app.headlineAdvanced": "Erweitert", 255 "settings.app.headlineAdvanced": "Erweitert",
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 418bf6bea..7aff45503 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -4679,7 +4679,7 @@
4679 } 4679 }
4680 }, 4680 },
4681 { 4681 {
4682 "defaultMessage": "!!!Use vertical style", 4682 "defaultMessage": "!!!Use horizontal style",
4683 "end": { 4683 "end": {
4684 "column": 3, 4684 "column": 3,
4685 "line": 167 4685 "line": 167
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json
index 0735df434..679720748 100644
--- a/src/i18n/locales/el.json
+++ b/src/i18n/locales/el.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Ρυθμίσεις", 254 "settings.app.headline": "Ρυθμίσεις",
255 "settings.app.headlineAdvanced": "Για προχωρημένους", 255 "settings.app.headlineAdvanced": "Για προχωρημένους",
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index fe2eb6ec3..f7e3d662a 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Settings", 254 "settings.app.headline": "Settings",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index 32c7ef601..ae558c98f 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Iniciar minimizado", 249 "settings.app.form.startMinimized": "Iniciar minimizado",
250 "settings.app.form.universalDarkMode": "Activar modo oscuro universal", 250 "settings.app.form.universalDarkMode": "Activar modo oscuro universal",
251 "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi",
252 "settings.app.form.useVerticalStyle": "Usar estilo vertical", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Configuración", 254 "settings.app.headline": "Configuración",
255 "settings.app.headlineAdvanced": "Avanzado", 255 "settings.app.headlineAdvanced": "Avanzado",
diff --git a/src/i18n/locales/fi.json b/src/i18n/locales/fi.json
index 8cd5a23af..544c54c77 100644
--- a/src/i18n/locales/fi.json
+++ b/src/i18n/locales/fi.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Käynnistä pienennettynä", 249 "settings.app.form.startMinimized": "Käynnistä pienennettynä",
250 "settings.app.form.universalDarkMode": "Ota käyttöön yleinen tumma tila", 250 "settings.app.form.universalDarkMode": "Ota käyttöön yleinen tumma tila",
251 "settings.app.form.useTouchIdToUnlock": "Salli TouchID:n käyttö Ferdin avaamiseksi", 251 "settings.app.form.useTouchIdToUnlock": "Salli TouchID:n käyttö Ferdin avaamiseksi",
252 "settings.app.form.useVerticalStyle": "Käytä pystysuoraa tyyl", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Asetukset", 254 "settings.app.headline": "Asetukset",
255 "settings.app.headlineAdvanced": "Lisäasetukset", 255 "settings.app.headlineAdvanced": "Lisäasetukset",
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 9b513eaeb..c3968b2c0 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Démarrage minimisé", 249 "settings.app.form.startMinimized": "Démarrage minimisé",
250 "settings.app.form.universalDarkMode": "Activer le mode sombre universel", 250 "settings.app.form.universalDarkMode": "Activer le mode sombre universel",
251 "settings.app.form.useTouchIdToUnlock": "Autoriser l'utilisation de TouchID pour déverrouiller Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Autoriser l'utilisation de TouchID pour déverrouiller Ferdi",
252 "settings.app.form.useVerticalStyle": "Utiliser le style vertical", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Paramètres", 254 "settings.app.headline": "Paramètres",
255 "settings.app.headlineAdvanced": "Paramètres avancés", 255 "settings.app.headlineAdvanced": "Paramètres avancés",
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json
index 52d5b89fb..da1f17bca 100644
--- a/src/i18n/locales/ga.json
+++ b/src/i18n/locales/ga.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Socruithe", 254 "settings.app.headline": "Socruithe",
255 "settings.app.headlineAdvanced": "Casta", 255 "settings.app.headlineAdvanced": "Casta",
diff --git a/src/i18n/locales/he.json b/src/i18n/locales/he.json
index 1ddcd2677..427e60640 100644
--- a/src/i18n/locales/he.json
+++ b/src/i18n/locales/he.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "התחלה במצב ממוזער", 249 "settings.app.form.startMinimized": "התחלה במצב ממוזער",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "הגדרות", 254 "settings.app.headline": "הגדרות",
255 "settings.app.headlineAdvanced": "מתקדם", 255 "settings.app.headlineAdvanced": "מתקדם",
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json
index 79b71986e..80cce61fa 100644
--- a/src/i18n/locales/hr.json
+++ b/src/i18n/locales/hr.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Postavke", 254 "settings.app.headline": "Postavke",
255 "settings.app.headlineAdvanced": "Napredne alatke", 255 "settings.app.headlineAdvanced": "Napredne alatke",
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
index 19ff83876..b542fcddf 100644
--- a/src/i18n/locales/hu.json
+++ b/src/i18n/locales/hu.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Indítás minimalizálva", 249 "settings.app.form.startMinimized": "Indítás minimalizálva",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Beállítások", 254 "settings.app.headline": "Beállítások",
255 "settings.app.headlineAdvanced": "Haladó", 255 "settings.app.headlineAdvanced": "Haladó",
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
index 0e6e3b951..330fb8122 100644
--- a/src/i18n/locales/id.json
+++ b/src/i18n/locales/id.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Pengaturan", 254 "settings.app.headline": "Pengaturan",
255 "settings.app.headlineAdvanced": "Tingkat Lanjut", 255 "settings.app.headlineAdvanced": "Tingkat Lanjut",
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index d07a9bffd..163f62b21 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Avvio ridotto a icona", 249 "settings.app.form.startMinimized": "Avvio ridotto a icona",
250 "settings.app.form.universalDarkMode": "Abilita la modalità scura universale", 250 "settings.app.form.universalDarkMode": "Abilita la modalità scura universale",
251 "settings.app.form.useTouchIdToUnlock": "Consenti l'utilizzo di TouchID per sbloccare Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Consenti l'utilizzo di TouchID per sbloccare Ferdi",
252 "settings.app.form.useVerticalStyle": "Usa stile verticale", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Impostazioni", 254 "settings.app.headline": "Impostazioni",
255 "settings.app.headlineAdvanced": "Avanzate", 255 "settings.app.headlineAdvanced": "Avanzate",
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 34d4c81cf..bb9157717 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "最小化して起動", 249 "settings.app.form.startMinimized": "最小化して起動",
250 "settings.app.form.universalDarkMode": "ユニバーサルダークモードを有効にする", 250 "settings.app.form.universalDarkMode": "ユニバーサルダークモードを有効にする",
251 "settings.app.form.useTouchIdToUnlock": "Touch IDを使用してFerdiのロックを解除する", 251 "settings.app.form.useTouchIdToUnlock": "Touch IDを使用してFerdiのロックを解除する",
252 "settings.app.form.useVerticalStyle": "垂直レイアウトを使用する", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "起動方法", 253 "settings.app.form.wakeUpStrategy": "起動方法",
254 "settings.app.headline": "設定", 254 "settings.app.headline": "設定",
255 "settings.app.headlineAdvanced": "詳細", 255 "settings.app.headlineAdvanced": "詳細",
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json
index af5e5eb7c..ed74ed22b 100644
--- a/src/i18n/locales/ka.json
+++ b/src/i18n/locales/ka.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "პარამეტრები", 254 "settings.app.headline": "პარამეტრები",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json
index 147e81647..573bcce19 100644
--- a/src/i18n/locales/ko.json
+++ b/src/i18n/locales/ko.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "최소화 된 상태로 시작", 249 "settings.app.form.startMinimized": "최소화 된 상태로 시작",
250 "settings.app.form.universalDarkMode": "전체 다크 모드 활성화", 250 "settings.app.form.universalDarkMode": "전체 다크 모드 활성화",
251 "settings.app.form.useTouchIdToUnlock": "TouchID로 Ferdi 여는 것을 허용", 251 "settings.app.form.useTouchIdToUnlock": "TouchID로 Ferdi 여는 것을 허용",
252 "settings.app.form.useVerticalStyle": "수직 스타일 사용", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "설정", 254 "settings.app.headline": "설정",
255 "settings.app.headlineAdvanced": "고급", 255 "settings.app.headlineAdvanced": "고급",
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index a5a3601f7..e38a06004 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Instellingen", 254 "settings.app.headline": "Instellingen",
255 "settings.app.headlineAdvanced": "Geavanceerd", 255 "settings.app.headlineAdvanced": "Geavanceerd",
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index 7f1088849..35359f542 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Instellingen", 254 "settings.app.headline": "Instellingen",
255 "settings.app.headlineAdvanced": "Geavanceerd", 255 "settings.app.headlineAdvanced": "Geavanceerd",
diff --git a/src/i18n/locales/no.json b/src/i18n/locales/no.json
index 9c3184edf..ea5d4465a 100644
--- a/src/i18n/locales/no.json
+++ b/src/i18n/locales/no.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimert", 249 "settings.app.form.startMinimized": "Start minimert",
250 "settings.app.form.universalDarkMode": "Aktiver universelt mørkt tema", 250 "settings.app.form.universalDarkMode": "Aktiver universelt mørkt tema",
251 "settings.app.form.useTouchIdToUnlock": "Tillat å bruke TouchID for å låse opp Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Tillat å bruke TouchID for å låse opp Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Innstillinger", 254 "settings.app.headline": "Innstillinger",
255 "settings.app.headlineAdvanced": "Avansert", 255 "settings.app.headlineAdvanced": "Avansert",
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index 2bf259c66..2757914e5 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Uruchom zminimalizowany", 249 "settings.app.form.startMinimized": "Uruchom zminimalizowany",
250 "settings.app.form.universalDarkMode": "Włącz uniwersalny tryb ciemny", 250 "settings.app.form.universalDarkMode": "Włącz uniwersalny tryb ciemny",
251 "settings.app.form.useTouchIdToUnlock": "Zezwól na odblokowanie Ferdi przez Touch ID", 251 "settings.app.form.useTouchIdToUnlock": "Zezwól na odblokowanie Ferdi przez Touch ID",
252 "settings.app.form.useVerticalStyle": "Użyj stylu pionowego", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Ustawienia", 254 "settings.app.headline": "Ustawienia",
255 "settings.app.headlineAdvanced": "Zaawansowane", 255 "settings.app.headlineAdvanced": "Zaawansowane",
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index b8865630e..fa76e582a 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Iniciar minimizado", 249 "settings.app.form.startMinimized": "Iniciar minimizado",
250 "settings.app.form.universalDarkMode": "Habilitar modo noturno universal", 250 "settings.app.form.universalDarkMode": "Habilitar modo noturno universal",
251 "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi",
252 "settings.app.form.useVerticalStyle": "Usar estilo vertical", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Estratégia de despertar", 253 "settings.app.form.wakeUpStrategy": "Estratégia de despertar",
254 "settings.app.headline": "Configurações", 254 "settings.app.headline": "Configurações",
255 "settings.app.headlineAdvanced": "Avançado", 255 "settings.app.headlineAdvanced": "Avançado",
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index 56661cdfd..9bea37357 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Iniciar minimizado", 249 "settings.app.form.startMinimized": "Iniciar minimizado",
250 "settings.app.form.universalDarkMode": "Ativar o Modo Noturno Universal", 250 "settings.app.form.universalDarkMode": "Ativar o Modo Noturno Universal",
251 "settings.app.form.useTouchIdToUnlock": "Permite usar o TouchID para desbloquear Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Permite usar o TouchID para desbloquear Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Configurações", 254 "settings.app.headline": "Configurações",
255 "settings.app.headlineAdvanced": "Avançado", 255 "settings.app.headlineAdvanced": "Avançado",
diff --git a/src/i18n/locales/ro.json b/src/i18n/locales/ro.json
index 056e41e4e..855576db4 100644
--- a/src/i18n/locales/ro.json
+++ b/src/i18n/locales/ro.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Settings", 254 "settings.app.headline": "Settings",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index dc63aaf2c..78654554b 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Запускать свернутым", 249 "settings.app.form.startMinimized": "Запускать свернутым",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Настройки", 254 "settings.app.headline": "Настройки",
255 "settings.app.headlineAdvanced": "Дополнительно", 255 "settings.app.headlineAdvanced": "Дополнительно",
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json
index a5ddfaea2..d41ab866c 100644
--- a/src/i18n/locales/sk.json
+++ b/src/i18n/locales/sk.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Nastavenia", 254 "settings.app.headline": "Nastavenia",
255 "settings.app.headlineAdvanced": "Pokročilé", 255 "settings.app.headlineAdvanced": "Pokročilé",
diff --git a/src/i18n/locales/sl.json b/src/i18n/locales/sl.json
index 89060b506..ff3ed1486 100644
--- a/src/i18n/locales/sl.json
+++ b/src/i18n/locales/sl.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Settings", 254 "settings.app.headline": "Settings",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json
index 54045d340..6eca2d9c2 100644
--- a/src/i18n/locales/sr.json
+++ b/src/i18n/locales/sr.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Postavke", 254 "settings.app.headline": "Postavke",
255 "settings.app.headlineAdvanced": "Napredne alatke", 255 "settings.app.headlineAdvanced": "Napredne alatke",
diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json
index 5dcd42154..f6dfdd4ad 100644
--- a/src/i18n/locales/sv.json
+++ b/src/i18n/locales/sv.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Starta i minimerat läge", 249 "settings.app.form.startMinimized": "Starta i minimerat läge",
250 "settings.app.form.universalDarkMode": "Aktivera globalt mörkt läge", 250 "settings.app.form.universalDarkMode": "Aktivera globalt mörkt läge",
251 "settings.app.form.useTouchIdToUnlock": "Tillåt att TouchID används för att låsa upp Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Tillåt att TouchID används för att låsa upp Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Inställningar", 254 "settings.app.headline": "Inställningar",
255 "settings.app.headlineAdvanced": "Avancerat", 255 "settings.app.headlineAdvanced": "Avancerat",
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json
index b29ab81fc..f1094a69d 100644
--- a/src/i18n/locales/tr.json
+++ b/src/i18n/locales/tr.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Ayarlar", 254 "settings.app.headline": "Ayarlar",
255 "settings.app.headlineAdvanced": "Gelişmiş", 255 "settings.app.headlineAdvanced": "Gelişmiş",
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json
index 7a1609dfb..69c62629c 100644
--- a/src/i18n/locales/uk.json
+++ b/src/i18n/locales/uk.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Запускати згорнутим", 249 "settings.app.form.startMinimized": "Запускати згорнутим",
250 "settings.app.form.universalDarkMode": "Увімкнути універсальний темний режим", 250 "settings.app.form.universalDarkMode": "Увімкнути універсальний темний режим",
251 "settings.app.form.useTouchIdToUnlock": "Дозволити використання TouchID для розблокування Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Дозволити використання TouchID для розблокування Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "Налаштування", 254 "settings.app.headline": "Налаштування",
255 "settings.app.headlineAdvanced": "Додаткові налаштування", 255 "settings.app.headlineAdvanced": "Додаткові налаштування",
diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json
index 01512a522..b860ad8c8 100644
--- a/src/i18n/locales/vi.json
+++ b/src/i18n/locales/vi.json
@@ -1,7 +1,7 @@
1{ 1{
2 "app.errorHandler.action": "Tải lại", 2 "app.errorHandler.action": "Tải lại",
3 "app.errorHandler.headline": "Đã xảy ra lỗi", 3 "app.errorHandler.headline": "Đã xảy ra lỗi",
4 "changeserver.customServerLabel": "Custom server", 4 "changeserver.customServerLabel": "Máy chủ tùy chỉnh",
5 "changeserver.headline": "Thay đổi máy chủ", 5 "changeserver.headline": "Thay đổi máy chủ",
6 "changeserver.label": "Máy chủ", 6 "changeserver.label": "Máy chủ",
7 "changeserver.submit": "Gửi", 7 "changeserver.submit": "Gửi",
@@ -16,45 +16,45 @@
16 "feature.nightlyBuilds.cancel": "Hủy", 16 "feature.nightlyBuilds.cancel": "Hủy",
17 "feature.nightlyBuilds.info": "Các bản Nightly là các phiên bản Ferdi mang tính thử nghiệm có thể chứa các tính năng chưa được hoàn thiện. Các bản Nightly chủ yếu được các nhà phát triển sử dụng để kiểm tra các tính năng mới được phát triển của họ và cách chúng sẽ hoạt động trong bản dựng cuối cùng. Nếu bạn không biết mình đang làm gì, chúng tôi khuyên bạn không nên kích hoạt các bản dựng hàng đêm.", 17 "feature.nightlyBuilds.info": "Các bản Nightly là các phiên bản Ferdi mang tính thử nghiệm có thể chứa các tính năng chưa được hoàn thiện. Các bản Nightly chủ yếu được các nhà phát triển sử dụng để kiểm tra các tính năng mới được phát triển của họ và cách chúng sẽ hoạt động trong bản dựng cuối cùng. Nếu bạn không biết mình đang làm gì, chúng tôi khuyên bạn không nên kích hoạt các bản dựng hàng đêm.",
18 "feature.nightlyBuilds.title": "Phiên bản Nightly", 18 "feature.nightlyBuilds.title": "Phiên bản Nightly",
19 "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.", 19 "feature.publishDebugInfo.error": "Đã xảy ra lỗi khi cố gắng xuất bản thông tin gỡ lỗi. Vui lòng thử lại sau hoặc xem bảng điều khiển để biết thêm thông tin.",
20 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", 20 "feature.publishDebugInfo.info": "Việc xuất bản thông tin gỡ lỗi của bạn sẽ giúp chúng tôi tìm ra các vấn đề và lỗi trong Ferdi. Bằng cách xuất bản thông tin gỡ lỗi của bạn, bạn chấp nhận chính sách bảo mật và điều khoản dịch vụ của Trình gỡ lỗi Ferdi",
21 "feature.publishDebugInfo.privacy": "Chính sách", 21 "feature.publishDebugInfo.privacy": "Chính sách",
22 "feature.publishDebugInfo.publish": "Chấp nhận và xuất bản", 22 "feature.publishDebugInfo.publish": "Chấp nhận và xuất bản",
23 "feature.publishDebugInfo.published": "Your debug log was published and is now availible at", 23 "feature.publishDebugInfo.published": "Nhật ký gỡ lỗi của bạn đã được xuất bản và hiện có sẵn tại",
24 "feature.publishDebugInfo.terms": "Terms of service", 24 "feature.publishDebugInfo.terms": "Điều khoản dịch vụ",
25 "feature.publishDebugInfo.title": "Publish debug information", 25 "feature.publishDebugInfo.title": "Xuất bản thông tin gỡ lỗi",
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Chọn một dịch v với TAB, ↑ ↓. Mở một dịch vụ bằng ENTER.",
27 "feature.quickSwitch.search": "Tìm kiếm...", 27 "feature.quickSwitch.search": "Tìm kiếm...",
28 "feature.quickSwitch.title": "Chuyển đổi nhanh", 28 "feature.quickSwitch.title": "Chuyển đổi nhanh",
29 "global.api.unhealthy": "Không thể kết nối đến máy chủ trực tuyến của Ferdi", 29 "global.api.unhealthy": "Không thể kết nối đến máy chủ trực tuyến của Ferdi",
30 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "Bạn không kết nối với Internet.",
31 "global.spellchecker.useDefault": "Dùng mặc định hệ thống ({default})", 31 "global.spellchecker.useDefault": "Dùng mặc định hệ thống ({default})",
32 "global.spellchecking.autodetect": "Tự động phát hiện ngôn ngữ", 32 "global.spellchecking.autodetect": "Tự động phát hiện ngôn ngữ",
33 "global.spellchecking.autodetect.short": "Tự động", 33 "global.spellchecking.autodetect.short": "Tự động",
34 "global.spellchecking.language": "Spell checking language", 34 "global.spellchecking.language": "Ngôn ng kiểm tra chính tả",
35 "global.userAgentHelp": "Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", 35 "global.userAgentHelp": "Sử dụng 'https://whatmyuseragent.com/' (để khám phá) hoặc 'https://developers.whatismybrowser.com/useragents/explore/' (để chọn) tác nhân người dùng mong muốn của bạn và sao chép-dán nó vào đây.",
36 "global.userAgentPref": "User Agent", 36 "global.userAgentPref": "Tác nhân Người dùng",
37 "import.headline": "Import your Ferdi 4 services", 37 "import.headline": "Nhập các dịch vụ Ferdi 4 của bạn",
38 "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", 38 "import.notSupportedHeadline": "Các dịch vchưa được hỗ trợ trong Ferdi 5",
39 "import.skip.label": "I want to add services manually", 39 "import.skip.label": "Tôi muốn thêm dịch vụ theo cách thủ công",
40 "import.submit.label": "Nhập Dịch vụ", 40 "import.submit.label": "Nhập Dịch vụ",
41 "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 41 "infobar.authRequestFailed": "Đã xảy ra lỗi khi cố gắng thực hiện một yêu cầu đã xác thực. Vui lòng thử đăng xuất và đăng nhập lại nếu lỗi này vẫn tiếp diễn.",
42 "infobar.buttonChangelog": "Có gì mới?", 42 "infobar.buttonChangelog": "Có gì mới?",
43 "infobar.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật", 43 "infobar.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật",
44 "infobar.buttonReloadServices": "Tải lại dịch vụ", 44 "infobar.buttonReloadServices": "Tải lại dịch vụ",
45 "infobar.hide": "Ẩn", 45 "infobar.hide": "Ẩn",
46 "infobar.requiredRequestsFailed": "Could not load services and user information", 46 "infobar.requiredRequestsFailed": "Không thể tải dịch v thông tin ngườing",
47 "infobar.servicesUpdated": "Your services have been updated.", 47 "infobar.servicesUpdated": "c dịch v của bn đã được cập nhật.",
48 "infobar.updateAvailable": "A new update for Ferdi is available.", 48 "infobar.updateAvailable": "Đã có bản cập nhật mới cho Ferdi.",
49 "infobox.dismiss": "Dismiss", 49 "infobox.dismiss": "Bỏ qua",
50 "invite.email.label": "Địa chỉ E-mail", 50 "invite.email.label": "Địa chỉ E-mail",
51 "invite.headline.friends": "Invite 3 of your friends or colleagues", 51 "invite.headline.friends": "Mời 3 người bạn hoặc đồng nghiệp ca bạn",
52 "invite.name.label": "Tên", 52 "invite.name.label": "Tên",
53 "invite.skip.label": "Tôi sẽ thực hiện sau này", 53 "invite.skip.label": "Tôi sẽ thực hiện sau này",
54 "invite.submit.label": "Gửi lời mời", 54 "invite.submit.label": "Gửi lời mời",
55 "invite.successInfo": "Lời mời đã được gửi thành công", 55 "invite.successInfo": "Lời mời đã được gửi thành công",
56 "locked.headline": "Đã khóa", 56 "locked.headline": "Đã khóa",
57 "locked.info": "Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.", 57 "locked.info": "Ferdi hiện đang bị khóa. Vui lòng mở khóa Ferdi bằng mật khẩu của bạn để xem tin nhắn của bạn.",
58 "locked.invalidCredentials": "Mật khẩu không hợp lệ", 58 "locked.invalidCredentials": "Mật khẩu không hợp lệ",
59 "locked.password.label": "Mật khẩu", 59 "locked.password.label": "Mật khẩu",
60 "locked.submit.label": "Mở khoá", 60 "locked.submit.label": "Mở khoá",
@@ -80,68 +80,68 @@
80 "menu.app.autohideMenuBar": "Tự động ẩn thanh Menu", 80 "menu.app.autohideMenuBar": "Tự động ẩn thanh Menu",
81 "menu.app.checkForUpdates": "Kiểm tra cập nhật", 81 "menu.app.checkForUpdates": "Kiểm tra cập nhật",
82 "menu.app.hide": "Ẩn", 82 "menu.app.hide": "Ẩn",
83 "menu.app.hideOthers": "Hide Others", 83 "menu.app.hideOthers": "Ẩn các mục khác",
84 "menu.app.quit": "Quit", 84 "menu.app.quit": "Thoát",
85 "menu.app.settings": "Các thiết lập", 85 "menu.app.settings": "Các thiết lập",
86 "menu.app.unhide": "Unhide", 86 "menu.app.unhide": "Bỏ ẩn",
87 "menu.edit": "Chỉnh sửa", 87 "menu.edit": "Chỉnh sửa",
88 "menu.edit.copy": "Copy", 88 "menu.edit.copy": "Sao chép",
89 "menu.edit.cut": "Cut", 89 "menu.edit.cut": "Cắt",
90 "menu.edit.delete": "Xóa", 90 "menu.edit.delete": "Xóa",
91 "menu.edit.emojiSymbols": "Biểu tượng cảm xúc", 91 "menu.edit.emojiSymbols": "Biểu tượng cảm xúc",
92 "menu.edit.findInPage": "Tìm trong trang", 92 "menu.edit.findInPage": "Tìm trong trang",
93 "menu.edit.paste": "Paste", 93 "menu.edit.paste": "Dán",
94 "menu.edit.pasteAndMatchStyle": "Paste And Match Style", 94 "menu.edit.pasteAndMatchStyle": "n và Khớp Kiểu",
95 "menu.edit.redo": "Redo", 95 "menu.edit.redo": "Làm lại",
96 "menu.edit.selectAll": "Select All", 96 "menu.edit.selectAll": "Chọn tất cả",
97 "menu.edit.speech": "Nói", 97 "menu.edit.speech": "Nói",
98 "menu.edit.startDictation": "Bắt đầu đăng kí", 98 "menu.edit.startDictation": "Bắt đầu đăng kí",
99 "menu.edit.startSpeaking": "Bắt đầu nói", 99 "menu.edit.startSpeaking": "Bắt đầu nói",
100 "menu.edit.stopSpeaking": "Dừng Nói", 100 "menu.edit.stopSpeaking": "Dừng Nói",
101 "menu.edit.undo": "Undo", 101 "menu.edit.undo": "Hoàn tác",
102 "menu.file": "Tập tin", 102 "menu.file": "Tập tin",
103 "menu.help": "Help", 103 "menu.help": "Hỗ trợ",
104 "menu.help.changelog": "Nhật ký thay đổi", 104 "menu.help.changelog": "Nhật ký thay đổi",
105 "menu.help.debugInfo": "Sao chép thông tin gỡ lỗi", 105 "menu.help.debugInfo": "Sao chép thông tin gỡ lỗi",
106 "menu.help.debugInfoCopiedBody": "Thông tin sản phẩm đã được sao chép vào bộ nhớ tạm của bạn.", 106 "menu.help.debugInfoCopiedBody": "Thông tin sản phẩm đã được sao chép vào bộ nhớ tạm của bạn.",
107 "menu.help.debugInfoCopiedHeadline": "Thông tin gỡ lỗi", 107 "menu.help.debugInfoCopiedHeadline": "Thông tin gỡ lỗi",
108 "menu.help.importExportData": "Import/Export Configuration Data", 108 "menu.help.importExportData": "Nhập/Xuất dữ liu cấu hình",
109 "menu.help.learnMore": "Tìm Hiểu Thêm", 109 "menu.help.learnMore": "Tìm Hiểu Thêm",
110 "menu.help.privacy": "Privacy Statement", 110 "menu.help.privacy": "Cam kết Bảo mt",
111 "menu.help.publishDebugInfo": "Gửi thông tin gỡ lỗi", 111 "menu.help.publishDebugInfo": "Gửi thông tin gỡ lỗi",
112 "menu.help.support": "Hỗ trợ", 112 "menu.help.support": "Hỗ trợ",
113 "menu.help.tos": "Terms of Service", 113 "menu.help.tos": "Điều khoản Dịch vụ",
114 "menu.services": "Dịch vụ", 114 "menu.services": "Dịch vụ",
115 "menu.services.activatePreviousService": "Activate previous service", 115 "menu.services.activatePreviousService": "ch hoạt dịch v trước đó",
116 "menu.services.addNewService": "Thêm Dịch vụ mới", 116 "menu.services.addNewService": "Thêm Dịch vụ mới",
117 "menu.services.goHome": "Trang chủ", 117 "menu.services.goHome": "Trang chủ",
118 "menu.services.setNextServiceActive": "Activate next service", 118 "menu.services.setNextServiceActive": "ch hoạt dịch vụ tiếp theo",
119 "menu.todos": "Danh sách cần làm", 119 "menu.todos": "Danh sách cần làm",
120 "menu.todos.enableTodos": "Mở danh sách cần làm", 120 "menu.todos.enableTodos": "Mở danh sách cần làm",
121 "menu.view": "View", 121 "menu.view": "Hiển thị",
122 "menu.view.back": "Quay lại", 122 "menu.view.back": "Quay lại",
123 "menu.view.forward": "Tới trước", 123 "menu.view.forward": "Tới trước",
124 "menu.view.lockFerdi": "Khoá ứng dụng", 124 "menu.view.lockFerdi": "Khoá ứng dụng",
125 "menu.view.openQuickSwitch": "Mở chuyển nhanh", 125 "menu.view.openQuickSwitch": "Mở chuyển nhanh",
126 "menu.view.reloadFerdi": "Reload Ferdi", 126 "menu.view.reloadFerdi": "Tải lại Ferdi",
127 "menu.view.reloadService": "Tải lại dịch vụ", 127 "menu.view.reloadService": "Tải lại dịch vụ",
128 "menu.view.reloadTodos": "Làm mới lại ds cần làm", 128 "menu.view.reloadTodos": "Làm mới lại ds cần làm",
129 "menu.view.resetZoom": "Actual Size", 129 "menu.view.resetZoom": "ch thước thật",
130 "menu.view.toggleDarkMode": "Chuyển sang Chế độ nền tối", 130 "menu.view.toggleDarkMode": "Chuyển sang Chế độ nền tối",
131 "menu.view.toggleDevTools": "Chuyển sang Công cụ dành cho nhà phát triển", 131 "menu.view.toggleDevTools": "Chuyển sang Công cụ dành cho nhà phát triển",
132 "menu.view.toggleFullScreen": "Toggle Full Screen", 132 "menu.view.toggleFullScreen": "Chuyển sang Chế độ toàn màn hình",
133 "menu.view.toggleServiceDevTools": "Toggle Service Developer Tools", 133 "menu.view.toggleServiceDevTools": "Chuyển sang công c dành cho nhà phát triển dịch vụ",
134 "menu.view.toggleTodosDevTools": "Toggle Todos Developer Tools", 134 "menu.view.toggleTodosDevTools": "Chuyển sang Công cụ dành cho nhà phát triển Todos",
135 "menu.view.zoomIn": "Zoom In", 135 "menu.view.zoomIn": "Phóng to",
136 "menu.view.zoomOut": "Zoom Out", 136 "menu.view.zoomOut": "Thu nhỏ",
137 "menu.window": "Window", 137 "menu.window": "Cửa sổ",
138 "menu.window.close": "Close", 138 "menu.window.close": "Đóng",
139 "menu.window.minimize": "Minimize", 139 "menu.window.minimize": "Thu nhỏ",
140 "menu.workspaces": "Không gian làm việc", 140 "menu.workspaces": "Không gian làm việc",
141 "menu.workspaces.addNewWorkspace": "Thêm mới Không gian làm việc...", 141 "menu.workspaces.addNewWorkspace": "Thêm mới Không gian làm việc...",
142 "menu.workspaces.closeWorkspaceDrawer": "Close workspace drawer", 142 "menu.workspaces.closeWorkspaceDrawer": "Đóng không gian làm việc",
143 "menu.workspaces.defaultWorkspace": "Tất cả Dịch vụ", 143 "menu.workspaces.defaultWorkspace": "Tất cả Dịch vụ",
144 "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", 144 "menu.workspaces.openWorkspaceDrawer": "Mở không gian làm việc",
145 "password.email.label": "Địa chỉ E-mail", 145 "password.email.label": "Địa chỉ E-mail",
146 "password.headline": "Đặt lại mật khẩu", 146 "password.headline": "Đặt lại mật khẩu",
147 "password.link.login": "Đăng nhập Tài khoản", 147 "password.link.login": "Đăng nhập Tài khoản",
@@ -152,38 +152,38 @@
152 "pricing.features.accountSync": "Đồng bộ hóa Tài khoản", 152 "pricing.features.accountSync": "Đồng bộ hóa Tài khoản",
153 "pricing.features.customWebsites": "Thêm Trang web tùy chỉnh", 153 "pricing.features.customWebsites": "Thêm Trang web tùy chỉnh",
154 "pricing.features.desktopNotifications": "Thông báo", 154 "pricing.features.desktopNotifications": "Thông báo",
155 "pricing.features.onPremise": "On-premise & other Hosted Services", 155 "pricing.features.onPremise": "Tại chỗ & các dịch vụ được lưu trữ khác",
156 "pricing.features.recipes": "Choose from more than 70 Services", 156 "pricing.features.recipes": "Chọn thơn 70 Dịch vụ",
157 "pricing.features.serviceProxies": "Service Proxies", 157 "pricing.features.serviceProxies": "c Proxy Dịch vụ",
158 "pricing.features.spellchecker": "Spellchecker support", 158 "pricing.features.spellchecker": "Hỗ trợ Công ckiểm tra chính t",
159 "pricing.features.teamManagement": "Team Management", 159 "pricing.features.teamManagement": "Quản nm",
160 "pricing.features.thirdPartyServices": "Install 3rd party services", 160 "pricing.features.thirdPartyServices": "Cài đặt dịch vụ của bên thứ 3",
161 "pricing.features.unlimitedServices": "Thêm dịch vụ không giới hạn", 161 "pricing.features.unlimitedServices": "Thêm dịch vụ không giới hạn",
162 "pricing.features.workspaces": "Không gian làm việc", 162 "pricing.features.workspaces": "Không gian làm việc",
163 "service.crashHandler.action": "Reload {name}", 163 "service.crashHandler.action": "Tải lại {name}",
164 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", 164 "service.crashHandler.autoReload": "Đang cố gắng tự động khôi phục {name} sau {seconds} giây",
165 "service.crashHandler.headline": "Ồ không!", 165 "service.crashHandler.headline": "Ồ không!",
166 "service.crashHandler.text": "{name} has caused an error.", 166 "service.crashHandler.text": "{name} đã gây ra lỗi.",
167 "service.disabledHandler.action": "Enable {name}", 167 "service.disabledHandler.action": "Bật {name}",
168 "service.disabledHandler.headline": "{name} is disabled", 168 "service.disabledHandler.headline": "{name} đã bị vô hiệu hóa",
169 "service.errorHandler.action": "Reload {name}", 169 "service.errorHandler.action": "Tải lại {name}",
170 "service.errorHandler.editAction": "Chỉnh sửa {name}", 170 "service.errorHandler.editAction": "Chỉnh sửa {name}",
171 "service.errorHandler.headline": "Ồ không!", 171 "service.errorHandler.headline": "Ồ không!",
172 "service.errorHandler.message": "Lỗi", 172 "service.errorHandler.message": "Lỗi",
173 "service.errorHandler.text": "{name} has failed to load.", 173 "service.errorHandler.text": "Không tải được {name}.",
174 "service.webviewLoader.loading": "Đang tải {service}", 174 "service.webviewLoader.loading": "Đang tải {service}",
175 "services.getStarted": "Bắt đầu", 175 "services.getStarted": "Bắt đầu",
176 "services.login": "Vui lòng đăng nhập để sử dụng Ferdi.", 176 "services.login": "Vui lòng đăng nhập để sử dụng Ferdi.",
177 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!", 177 "services.serverInfo": "Theo tùy chọn, bạn có thể thay đổi máy chủ Ferdi của mình bằng cách nhấp vào bánh răng ở góc dưới cùng bên trái. Nếu bạn đang chuyển qua (từ một trong các máy chủ được lưu trữ) sang sử dụng Ferdi mà không có tài khoản, vui lòng thông báo rằng bạn có thể xuất dữ liệu của mình từ máy chủ đó và sau đó nhập dữ liệu đó bằng menu Trợ giúp để phục hồi tất cả không gian làm việc và dịch vụ đã định cấu hình của bạn!",
178 "services.serverless": "Sử dụng Ferdi không cần Đăng nhập Tài khoản", 178 "services.serverless": "Sử dụng Ferdi không cần Đăng nhập Tài khoản",
179 "services.welcome": "Chào mừng bạn đến với Ferdi", 179 "services.welcome": "Chào mừng bạn đến với Ferdi",
180 "settings.account.account.editButton": "Chỉnh sửa Tài khoản", 180 "settings.account.account.editButton": "Chỉnh sửa Tài khoản",
181 "settings.account.accountUnavailable": "Tài khoản không hợp lệ", 181 "settings.account.accountUnavailable": "Tài khoản không hợp lệ",
182 "settings.account.accountUnavailableInfo": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", 182 "settings.account.accountUnavailableInfo": "Bạn đang sử dụng Ferdi mà không có tài khoản. Nếu bạn muốn sử dụng Ferdi với một tài khoản và giữ cho các dịch vụ của mình được đồng bộ hóa giữa các bản cài đặt, vui lòng chọn một máy chủ trong tab Cài đặt rồi đăng nhập.",
183 "settings.account.buttonSave": "Cập nhật Hồ sơ", 183 "settings.account.buttonSave": "Cập nhật Hồ sơ",
184 "settings.account.deleteAccount": "Xóa Tài khoản", 184 "settings.account.deleteAccount": "Xóa Tài khoản",
185 "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 185 "settings.account.deleteEmailSent": "Bạn đã nhận được một email có liên kết để xác nhận việc xóa tài khoản của bạn. Tài khoản và dữ liệu của bạn không thể được khôi phục!",
186 "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", 186 "settings.account.deleteInfo": "Nếu bạn không cần tài khoản Ferdi nữa, bạn có thể xóa tài khoản của mình và tất cả dữ liệu liên quan tại đây.",
187 "settings.account.headline": "Tài khoản", 187 "settings.account.headline": "Tài khoản",
188 "settings.account.headlineAccount": "Thông tin Tài khoản", 188 "settings.account.headlineAccount": "Thông tin Tài khoản",
189 "settings.account.headlineDangerZone": "Vùng Nguy hiểm", 189 "settings.account.headlineDangerZone": "Vùng Nguy hiểm",
@@ -195,270 +195,270 @@
195 "settings.account.tryReloadUserInfoRequest": "Thử lại", 195 "settings.account.tryReloadUserInfoRequest": "Thử lại",
196 "settings.account.userInfoRequestFailed": "Không thể tải được thông tin người dùng", 196 "settings.account.userInfoRequestFailed": "Không thể tải được thông tin người dùng",
197 "settings.account.yourLicense": "Giấy phép Ferdi của bạn", 197 "settings.account.yourLicense": "Giấy phép Ferdi của bạn",
198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Viết màu nhấn của bạn ở định dạng tương thích với CSS. (Mặc định: {defaultAccentColor})",
199 "settings.app.buttonClearAllCache": "Xóa bộ nhớ cache", 199 "settings.app.buttonClearAllCache": "Xóa bộ nhớ cache",
200 "settings.app.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật", 200 "settings.app.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder", 201 "settings.app.buttonOpenFerdiProfileFolder": "Mở thư mục Hồ sơ",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder", 202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Mở thư mục Công thức dịch vụ",
203 "settings.app.buttonSearchForUpdate": "Kiểm tra cập nhật", 203 "settings.app.buttonSearchForUpdate": "Kiểm tra cập nhật",
204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Bộ nhớ đệm Ferdi hiện đang sử dụng {size} dung lượng ổ đĩa.",
205 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Không thể a tất cả bộ nhớ cache",
206 "settings.app.closeSettings": "Close settings", 206 "settings.app.closeSettings": "Đóng cài đặt",
207 "settings.app.currentVersion": "Phiên bản hiện tại:", 207 "settings.app.currentVersion": "Phiên bản hiện tại:",
208 "settings.app.form.accentColor": "Màu Accent", 208 "settings.app.form.accentColor": "Màu Accent",
209 "settings.app.form.adaptableDarkMode": "Synchronize dark mode with my OS's dark mode setting", 209 "settings.app.form.adaptableDarkMode": "Đồng bộ hóa chế độ tối với cài đặt chế độ tối trên Hệ điều hành của tôi",
210 "settings.app.form.alwaysShowWorkspaces": "Always show workspace drawer", 210 "settings.app.form.alwaysShowWorkspaces": "Luôn hiển thị không gian làm việc",
211 "settings.app.form.autoLaunchInBackground": "Mở trong nền", 211 "settings.app.form.autoLaunchInBackground": "Mở trong nền",
212 "settings.app.form.autoLaunchOnStart": "Mở Ferdi khi khởi động máy", 212 "settings.app.form.autoLaunchOnStart": "Mở Ferdi khi khởi động máy",
213 "settings.app.form.automaticUpdates": "Cho phép cập nhật", 213 "settings.app.form.automaticUpdates": "Cho phép cập nhật",
214 "settings.app.form.beta": "Bao gồm phiên bản thử nghiệp", 214 "settings.app.form.beta": "Bao gồm phiên bản thử nghiệp",
215 "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", 215 "settings.app.form.clipboardNotifications": "Không hiển thị tng o cho các sự kiện khay nhớ tạm",
216 "settings.app.form.closeToSystemTray": "Thu nhỏ Ferdi xuống khay hệ thống", 216 "settings.app.form.closeToSystemTray": "Thu nhỏ Ferdi xuống khay hệ thống",
217 "settings.app.form.customTodoServer": "Tùy chỉnh Server Todo", 217 "settings.app.form.customTodoServer": "Tùy chỉnh Server Todo",
218 "settings.app.form.darkMode": "Cho phép Chế độ nền tối", 218 "settings.app.form.darkMode": "Cho phép Chế độ nền tối",
219 "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", 219 "settings.app.form.enableGPUAcceleration": "Bật Tăng tốc GPU",
220 "settings.app.form.enableLock": "Cho phép khóa bằng mật khẩu", 220 "settings.app.form.enableLock": "Cho phép khóa bằng mật khẩu",
221 "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", 221 "settings.app.form.enableMenuBar": "Luôn hiển thị Ferdi trong Menu Bar",
222 "settings.app.form.enableSpellchecking": "Enable spell checking", 222 "settings.app.form.enableSpellchecking": "Kích hoạt tính năng kiểm tra chính tả",
223 "settings.app.form.enableSystemTray": "Show Ferdi in system tray", 223 "settings.app.form.enableSystemTray": "Hiển th Ferdi trong khay hệ thống",
224 "settings.app.form.enableTodos": "Cho phép Ferdi Todos", 224 "settings.app.form.enableTodos": "Cho phép Ferdi Todos",
225 "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", 225 "settings.app.form.hibernateOnStartup": "Giữ các dịch vụ ở chế độ ngủ đông khi khởi động",
226 "settings.app.form.hibernationStrategy": "Hibernation strategy", 226 "settings.app.form.hibernationStrategy": "Chiến lược ngủ đông",
227 "settings.app.form.iconSize": "Kích thước icon Dịch vụ", 227 "settings.app.form.iconSize": "Kích thước icon Dịch vụ",
228 "settings.app.form.inactivityLock": "Khóa khi không hoạt động", 228 "settings.app.form.inactivityLock": "Khóa khi không hoạt động",
229 "settings.app.form.keepAllWorkspacesLoaded": "Keep all workspaces loaded", 229 "settings.app.form.keepAllWorkspacesLoaded": "Luôn tải tất cả các không gian làm việc",
230 "settings.app.form.language": "Ngôn ngữ", 230 "settings.app.form.language": "Ngôn ngữ",
231 "settings.app.form.lockPassword": "Mật khẩu", 231 "settings.app.form.lockPassword": "Mật khẩu",
232 "settings.app.form.minimizeToSystemTray": "Minimize Ferdi to system tray", 232 "settings.app.form.minimizeToSystemTray": "Thu nhỏ Ferdi xuống khay hệ thống",
233 "settings.app.form.navigationBarBehaviour": "Navigation bar behaviour", 233 "settings.app.form.navigationBarBehaviour": "Hành vi của thanh điu hướng",
234 "settings.app.form.notifyTaskBarOnMessage": "Notify TaskBar/Dock on new message", 234 "settings.app.form.notifyTaskBarOnMessage": "Thông báo Thanh Tác vụ/Dock khi có tin nhắn mới",
235 "settings.app.form.passwordToggle": "Password toggle", 235 "settings.app.form.passwordToggle": "Chuyển đổi mật khẩu",
236 "settings.app.form.predefinedTodoServer": "Máy chủ Todo", 236 "settings.app.form.predefinedTodoServer": "Máy chủ Todo",
237 "settings.app.form.privateNotifications": "Don't show message content in notifications", 237 "settings.app.form.privateNotifications": "Không hiển thị nội dung tin nhắn trong thông báo",
238 "settings.app.form.reloadAfterResume": "Reload Ferdi after system resume", 238 "settings.app.form.reloadAfterResume": "Tải lại Ferdi sau khi hệ thống hoạt động trở lại",
239 "settings.app.form.runInBackground": "Keep Ferdi in background when closing the window", 239 "settings.app.form.runInBackground": "Giữ Ferdi chế độ nền khi đóng cửa sổ",
240 "settings.app.form.scheduledDNDEnabled": "Enable scheduled Do-not-Disturb", 240 "settings.app.form.scheduledDNDEnabled": "Bật chế độ Không làm phiền đã lên lịch",
241 "settings.app.form.scheduledDNDEnd": "Đến", 241 "settings.app.form.scheduledDNDEnd": "Đến",
242 "settings.app.form.scheduledDNDStart": "Từ", 242 "settings.app.form.scheduledDNDStart": "Từ",
243 "settings.app.form.searchEngine": "Search engine", 243 "settings.app.form.searchEngine": "ng cụ tìm kiếm",
244 "settings.app.form.sentry": "Send telemetry data", 244 "settings.app.form.sentry": "Gửi d liệu đo từ xa",
245 "settings.app.form.serviceRibbonWidth": "Chiều rộng Sidebar", 245 "settings.app.form.serviceRibbonWidth": "Chiều rộng Sidebar",
246 "settings.app.form.showDisabledServices": "Display disabled services tabs", 246 "settings.app.form.showDisabledServices": "Hiển thị các tab dịch vụ bị vô hiệu a",
247 "settings.app.form.showDragArea": "Show draggable area on window", 247 "settings.app.form.showDragArea": "Hiển th khu vực có thể kéo trên cửa sổ",
248 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 248 "settings.app.form.showMessagesBadgesWhenMuted": "Hiển th huy hiệu tin nhn ca đọc khi tắt thông báo",
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Bắt đầu thu nhỏ",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Bật Chế độ tối chung",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Cho phép sử dụng TouchID để mở khóa Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Sử dụng kiểu ngang",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Chiến lược đánh thức",
254 "settings.app.headline": "Các thiết lập", 254 "settings.app.headline": "Các thiết lập",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "ng cao",
256 "settings.app.headlineAppearance": "Giao diện", 256 "settings.app.headlineAppearance": "Giao diện",
257 "settings.app.headlineGeneral": "Chung", 257 "settings.app.headlineGeneral": "Chung",
258 "settings.app.headlineLanguage": "Ngôn ngữ", 258 "settings.app.headlineLanguage": "Ngôn ngữ",
259 "settings.app.headlinePrivacy": "Privacy", 259 "settings.app.headlinePrivacy": "Riêng tư",
260 "settings.app.headlineUpdates": "Cập nhật", 260 "settings.app.headlineUpdates": "Cập nhật",
261 "settings.app.hibernateInfo": "By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", 261 "settings.app.hibernateInfo": "Theo mặc định, Ferdi sẽ giữ cho tất cả các dịch vụ của bạn luôn mở và được tải ở chế độ nền để chúng luôn sẵn sàng khi bạn muốn sử dụng. Service Hibernation sẽ dỡ bỏ các dịch vụ của bạn sau một khoảng thời gian cụ thể. Điều này rất hữu ích để tiết kiệm RAM hoặc giữ cho các dịch vụ không làm chậm máy tính của bạn.",
262 "settings.app.inactivityLockInfo": "Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", 262 "settings.app.inactivityLockInfo": "Vài phút không hoạt động, sau đó Ferdi sẽ tự động khóa. Sử dụng 0 để tắt",
263 "settings.app.languageDisclaimer": "Official translations are English & German. All other languages are community based translations.", 263 "settings.app.languageDisclaimer": "Bản dịch chính thức là tiếng Anh và tiếng Đức. Tất cả các ngôn ngữ khác là bản dịch dựa trên cộng đồng.",
264 "settings.app.lockInfo": "Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.", 264 "settings.app.lockInfo": "Khóa mật khẩu cho phép bạn bảo vệ tin nhắn của mình.\nSử dụng Khóa mật khẩu, bạn sẽ được nhắc nhập mật khẩu của mình mỗi khi khởi động Ferdi hoặc tự khóa Ferdi bằng biểu tượng ổ khóa ở góc dưới cùng bên trái hoặc phím tắt {lockShortcut}.",
265 "settings.app.lockedPassword": "Mật khẩu", 265 "settings.app.lockedPassword": "Mật khẩu",
266 "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 266 "settings.app.lockedPasswordInfo": "Hãy chắc chắn rằng bạn đã đặt mật khẩu mà bạn sẽ nhớ.\nNếu bạn mất mật khẩu này, bạn sẽ phải cài đặt lại Ferdi.",
267 "settings.app.restartRequired": "Changes require restart", 267 "settings.app.restartRequired": "Các thay đổi yêu cầu khởi động lại",
268 "settings.app.scheduledDNDInfo": "Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", 268 "settings.app.scheduledDNDInfo": "Theo lịch trình Không làm phiền cho phép bạn xác định khoảng thời gian mà bạn không muốn nhận Thông báo từ Ferdi.",
269 "settings.app.scheduledDNDTimeInfo": "Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", 269 "settings.app.scheduledDNDTimeInfo": "Thời gian ở định dạng 24 giờ. Thời gian kết thúc có thể trước thời gian bắt đầu (ví dụ: bắt đầu từ 17:00, kết thúc lúc 09:00) để bật chế độ Không làm phiền qua đêm.",
270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Việc gửi dữ liệu đo từ xa cho phép chúng tôi tìm ra lỗi trong Ferdi - chúng tôi sẽ không gửi bất kỳ thông tin cá nhân nào như dữ liệu tin nhắn của bạn!",
271 "settings.app.spellCheckerLanguageInfo": "Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi sử dụng trình kiểm tra chính tả tích hợp trên máy Mac của bạn để kiểm tra lỗi chính tả. Nếu bạn muốn thay đổi ngôn ngữ mà trình kiểm tra chính tả kiểm tra, bạn có thể làm như vậy trong Tùy chọn hệ thống của máy Mac.",
272 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Bộ nhớ đệm",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile", 273 "settings.app.subheadlineFerdiProfile": "Hồ sơ Ferdi",
274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "Máy ch này sẽ được sdụng cho tính năng \"Ferdi Todo\".",
275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Giúp chúng tôi dịch Ferdi sang ngôn ngữ của bạn.",
276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Chế độ tối chung cố gắng tạo động các kiểu chế độ tối cho các dịch vụ hiện không được hỗ trợ.",
277 "settings.app.updateStatusAvailable": "Bản cập nhật phù hợp, đang tải...", 277 "settings.app.updateStatusAvailable": "Bản cập nhật phù hợp, đang tải...",
278 "settings.app.updateStatusSearching": "Đang tìm bản cập nhật", 278 "settings.app.updateStatusSearching": "Đang tìm bản cập nhật",
279 "settings.app.updateStatusUpToDate": "You are using the latest version of Ferdi", 279 "settings.app.updateStatusUpToDate": "Bạn đang sử dụng phiên bản mới nhất của Ferdi",
280 "settings.invite.headline": "Mời bạn bè", 280 "settings.invite.headline": "Mời bạn bè",
281 "settings.navigation.account": "Tài khoản", 281 "settings.navigation.account": "Tài khoản",
282 "settings.navigation.availableServices": "Available services", 282 "settings.navigation.availableServices": "Các dịch vcó sẵn",
283 "settings.navigation.logout": "Đăng xuất", 283 "settings.navigation.logout": "Đăng xuất",
284 "settings.navigation.settings": "Các thiết lập", 284 "settings.navigation.settings": "Các thiết lập",
285 "settings.navigation.supportFerdi": "Giới thiệu về phần mềm Ferdi", 285 "settings.navigation.supportFerdi": "Giới thiệu về phần mềm Ferdi",
286 "settings.navigation.team": "Quản lý Nhóm", 286 "settings.navigation.team": "Quản lý Nhóm",
287 "settings.navigation.yourServices": "Dịch vụ của bạn", 287 "settings.navigation.yourServices": "Dịch vụ của bạn",
288 "settings.navigation.yourWorkspaces": "Your workspaces", 288 "settings.navigation.yourWorkspaces": "Không gian làm việc của bạn",
289 "settings.recipes.all": "Tất cả Dịch vụ", 289 "settings.recipes.all": "Tất cả Dịch vụ",
290 "settings.recipes.custom": "Custom Services", 290 "settings.recipes.custom": "Các dịch vụ tùy chỉnh",
291 "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", 291 "settings.recipes.customService.headline.communityRecipes": "Công thức của cộng đồng bên thứ 3",
292 "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes", 292 "settings.recipes.customService.headline.customRecipes": "Công thức của tùy chỉnh bên thứ 3",
293 "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", 293 "settings.recipes.customService.headline.devRecipes": "Công thức dịch vpt triển của bạn",
294 "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", 294 "settings.recipes.customService.intro": "Để thêm một dịch vụ tùy chỉnh, hãy sao chép công thức dịch vụ vào:",
295 "settings.recipes.customService.openDevDocs": "Developer Documentation", 295 "settings.recipes.customService.openDevDocs": "Tài liệu dành cho nhà phát trin",
296 "settings.recipes.customService.openFolder": "Mở thư mục", 296 "settings.recipes.customService.openFolder": "Mở thư mục",
297 "settings.recipes.headline": "Available services", 297 "settings.recipes.headline": "Các dịch vcó sẵn",
298 "settings.recipes.missingService": "Missing a service?", 298 "settings.recipes.missingService": "Thiếu một dịch vụ?",
299 "settings.recipes.nothingFound": "Sorry, but no service matched your search term - but you can still probably add it using the \"Custom Website\" option. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.", 299 "settings.recipes.nothingFound": "Xin lỗi, không có dịch vụ nào phù hợp với cụm từ tìm kiếm của bạn - nhưng bạn vẫn có thể thêm nó bằng cách sử dụng tùy chọn \"Trang web tùy chỉnh\". Xin lưu ý rằng trang web có thể hiển thị nhiều dịch vụ hơn đã được thêm vào Ferdi kể từ phiên bản bạn đang sử dụng. Để nhận các dịch vụ mới đó, vui lòng xem xét nâng cấp lên phiên bản Ferdi mới hơn.",
300 "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", 300 "settings.recipes.servicesSuccessfulAddedInfo": "Đã thêm dịch vụ thành công",
301 "settings.searchService": "Tìm kiếm dịch vụ", 301 "settings.searchService": "Tìm kiếm dịch vụ",
302 "settings.service.error.goBack": "Back to services", 302 "settings.service.error.goBack": "Quay lại dịch vụ",
303 "settings.service.error.headline": "Lỗi", 303 "settings.service.error.headline": "Lỗi",
304 "settings.service.error.message": "Could not load service recipe.", 304 "settings.service.error.message": "Không thể tải công thức dịch vụ.",
305 "settings.service.form.addServiceHeadline": "Add {name}", 305 "settings.service.form.addServiceHeadline": "Thêm {name}",
306 "settings.service.form.availableServices": "Available services", 306 "settings.service.form.availableServices": "Các dịch vcó sẵn",
307 "settings.service.form.customUrl": "Custom server", 307 "settings.service.form.customUrl": "Máy chủ tùy chỉnh",
308 "settings.service.form.customUrlValidationError": "Could not validate custom {name} server.", 308 "settings.service.form.customUrlValidationError": "Không thể c thực máy chủ {name} tùy chỉnh.",
309 "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", 309 "settings.service.form.darkReaderBrightness": "Độ sáng trình đọc tối",
310 "settings.service.form.darkReaderContrast": "Dark Reader Contrast", 310 "settings.service.form.darkReaderContrast": "Độ tương phản trình đọc tối",
311 "settings.service.form.darkReaderSepia": "Dark Reader Sepia", 311 "settings.service.form.darkReaderSepia": "Màu nâu đỏ của trình đọc tối",
312 "settings.service.form.deleteButton": "Xóa dịch vụ", 312 "settings.service.form.deleteButton": "Xóa dịch vụ",
313 "settings.service.form.editServiceHeadline": "Chỉnh sửa {name}", 313 "settings.service.form.editServiceHeadline": "Chỉnh sửa {name}",
314 "settings.service.form.enableAudio": "Cho phép âm thanh", 314 "settings.service.form.enableAudio": "Cho phép âm thanh",
315 "settings.service.form.enableBadge": "Show unread message badges", 315 "settings.service.form.enableBadge": "Hiển th huy hiệu tin nhắn chưa đọc",
316 "settings.service.form.enableDarkMode": "Cho phép chế độ nền tối", 316 "settings.service.form.enableDarkMode": "Cho phép chế độ nền tối",
317 "settings.service.form.enableHibernation": "Enable hibernation", 317 "settings.service.form.enableHibernation": "Kích hoạt ngủ đông",
318 "settings.service.form.enableNotification": "Enable notifications", 318 "settings.service.form.enableNotification": "Kích hot tng báo",
319 "settings.service.form.enableService": "Enable service", 319 "settings.service.form.enableService": "Kích hoạt dịch vụ",
320 "settings.service.form.headlineBadges": "Unread message badges", 320 "settings.service.form.headlineBadges": "Huy hiệu tin nhắn chưa đọc",
321 "settings.service.form.headlineDarkReaderSettings": "Dark Reader Settings", 321 "settings.service.form.headlineDarkReaderSettings": "Cài đặt trình đọc ti",
322 "settings.service.form.headlineGeneral": "Chung", 322 "settings.service.form.headlineGeneral": "Chung",
323 "settings.service.form.headlineNotifications": "Thông báo", 323 "settings.service.form.headlineNotifications": "Thông báo",
324 "settings.service.form.icon": "Tùy chỉnh icon", 324 "settings.service.form.icon": "Tùy chỉnh icon",
325 "settings.service.form.iconDelete": "Xóa", 325 "settings.service.form.iconDelete": "Xóa",
326 "settings.service.form.iconUpload": "Drop your image, or click here", 326 "settings.service.form.iconUpload": "Thả hình ảnh của bạn hoặc bấm vào đây",
327 "settings.service.form.indirectMessageInfo": "You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", 327 "settings.service.form.indirectMessageInfo": "Bạn sẽ được thông báo về tất cả các tin nhắn mới trong một kênh, không chỉ @username, @channel, @here, ...",
328 "settings.service.form.indirectMessages": "Show message badge for all new messages", 328 "settings.service.form.indirectMessages": "Hiển th huy hiệu tin nhắn cho tất cả các tin nhắn mới",
329 "settings.service.form.isHibernatedEnabledInfo": "When enabled, a service will be shut down after a period of time to save system resources.", 329 "settings.service.form.isHibernatedEnabledInfo": "Khi được kích hoạt, một dịch vụ sẽ bị tắt sau một khoảng thời gian để tiết kiệm tài nguyên hệ thống.",
330 "settings.service.form.isMutedInfo": "When disabled, all notification sounds and audio playback are muted", 330 "settings.service.form.isMutedInfo": "Khi bị vô hiệu hóa, tất cả âm thanh thông báo và phát lại âm thanh sẽ bị tắt tiếng",
331 "settings.service.form.name": "Tên", 331 "settings.service.form.name": "Tên",
332 "settings.service.form.openDarkmodeCss": "Open darkmode.css", 332 "settings.service.form.openDarkmodeCss": "Mở darkmode.css",
333 "settings.service.form.openUserCss": "Open user.css", 333 "settings.service.form.openUserCss": "Mở user.css",
334 "settings.service.form.openUserJs": "Open user.js", 334 "settings.service.form.openUserJs": "Mở user.js",
335 "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", 335 "settings.service.form.proxy.headline": "Cài đặt Proxy HTTP / HTTPS",
336 "settings.service.form.proxy.host": "Proxy Host/IP", 336 "settings.service.form.proxy.host": "Máy chủ Proxy/IP",
337 "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", 337 "settings.service.form.proxy.info": "Cài đặt proxy sẽ không được đồng bộ hóa với máy ch Ferdi.",
338 "settings.service.form.proxy.isEnabled": "Use Proxy", 338 "settings.service.form.proxy.isEnabled": "Sử dụng Proxy",
339 "settings.service.form.proxy.password": "Password (optional)", 339 "settings.service.form.proxy.password": "Mật khẩu (tùy chọn)",
340 "settings.service.form.proxy.port": "Cổng", 340 "settings.service.form.proxy.port": "Cổng",
341 "settings.service.form.proxy.restartInfo": "Please restart Ferdi after changing proxy Settings.", 341 "settings.service.form.proxy.restartInfo": "Vui lòng khởi động lại Ferdi sau khi thay đổi Cài đặt proxy.",
342 "settings.service.form.proxy.user": "User (optional)", 342 "settings.service.form.proxy.user": "Người dùng (tùy chọn)",
343 "settings.service.form.recipeFileInfo": "Your user files will be inserted into the webpage so you can customize services in any way you like. User files are only stored locally and are not transferred to other computers using the same account.", 343 "settings.service.form.recipeFileInfo": "Các tệp người dùng của bạn sẽ được chèn vào trang web để bạn có thể tùy chỉnh các dịch vụ theo bất kỳ cách nào bạn muốn. Các tệp người dùng chỉ được lưu trữ cục bộ và không được chuyển sang các máy tính khác sử dụng cùng một tài khoản.",
344 "settings.service.form.saveButton": "Save service", 344 "settings.service.form.saveButton": "Lưu dịch vụ",
345 "settings.service.form.tabHosted": "Hosted", 345 "settings.service.form.tabHosted": "Trở thành host",
346 "settings.service.form.tabOnPremise": "Self hosted ⭐️", 346 "settings.service.form.tabOnPremise": "Tự trở thành host ⭐️",
347 "settings.service.form.team": "Team", 347 "settings.service.form.team": "Nhóm",
348 "settings.service.form.useHostedService": "Use the hosted {name} service.", 348 "settings.service.form.useHostedService": "Sử dụng dịch vụ {name} được lưu trữ.",
349 "settings.service.form.yourServices": "Dịch vụ của bạn", 349 "settings.service.form.yourServices": "Dịch vụ của bạn",
350 "settings.services.deletedInfo": "Service has been deleted", 350 "settings.services.deletedInfo": "Dịch vụ đã b xóa",
351 "settings.services.discoverServices": "Discover services", 351 "settings.services.discoverServices": "Khám phá các dịch vụ",
352 "settings.services.headline": "Dịch vụ của bạn", 352 "settings.services.headline": "Dịch vụ của bạn",
353 "settings.services.noServicesAdded": "Start by adding a service.", 353 "settings.services.noServicesAdded": "Bắt đầu bằng cách thêm một dịch vụ.",
354 "settings.services.servicesRequestFailed": "Could not load your services", 354 "settings.services.servicesRequestFailed": "Không thể tải các dịch vcủa bạn",
355 "settings.services.tooltip.isDisabled": "Dịch vụ bị vô hiệu hóa", 355 "settings.services.tooltip.isDisabled": "Dịch vụ bị vô hiệu hóa",
356 "settings.services.tooltip.isMuted": "All sounds are muted", 356 "settings.services.tooltip.isMuted": "Tất cả âm thanh đều bị tắt tiếng",
357 "settings.services.tooltip.notificationsDisabled": "Notifications are disabled", 357 "settings.services.tooltip.notificationsDisabled": "Thông báo bị vô hiệu hoá",
358 "settings.services.updatedInfo": "Mọi thay đổi đã được lưu lại", 358 "settings.services.updatedInfo": "Mọi thay đổi đã được lưu lại",
359 "settings.supportFerdi.aboutIntro": "<p>Ferdi is an open-source and a community-lead application.</p><p>Thanks to the people who make this possbile:</p>", 359 "settings.supportFerdi.aboutIntro": "<p>Ferdi là một ứng dụng mã nguồn mở và dẫn dắt cộng đồng.</p><p>Cảm ơn những người tạo nên sự khả thi này:</p>",
360 "settings.supportFerdi.bannerText": "Do you want to help us improve Ferdi?", 360 "settings.supportFerdi.bannerText": "Bạn muốn giúp chúng tôi cải thiện Ferdi không?",
361 "settings.supportFerdi.headline": "Giới thiệu về phần mềm Ferdi", 361 "settings.supportFerdi.headline": "Giới thiệu về phần mềm Ferdi",
362 "settings.supportFerdi.openSurvey": "Open survey", 362 "settings.supportFerdi.openSurvey": "Mở khảo sát",
363 "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", 363 "settings.supportFerdi.textDonation": "Nếu bạn cảm thấy muốn hỗ trợ sự phát triển của Ferdi bằng một khoản đóng góp, bạn có thể làm như vậy trên cả hai,",
364 "settings.supportFerdi.textDonationAnd": "và", 364 "settings.supportFerdi.textDonationAnd": "và",
365 "settings.supportFerdi.textExpenses": "While volunteers do most of the work, we still need to pay for servers and certificates. As a community, we are fully transparent on funds we collect and spend - see our", 365 "settings.supportFerdi.textExpenses": "Trong khi các tình nguyện viên thực hiện hầu hết công việc, chúng tôi vẫn cần trả tiền cho các máy chủ và chứng chỉ. Là một cộng đồng, chúng tôi hoàn toàn minh bạch về các khoản tiền mà chúng tôi thu thập và chi tiêu - hãy xem",
366 "settings.supportFerdi.textGitHubSponsors": "Tài trợ bởi GitHub", 366 "settings.supportFerdi.textGitHubSponsors": "Tài trợ bởi GitHub",
367 "settings.supportFerdi.textListContributors": "Toàn danh sách người đóng góp", 367 "settings.supportFerdi.textListContributors": "Toàn danh sách người đóng góp",
368 "settings.supportFerdi.textListContributorsHere": "tại đây", 368 "settings.supportFerdi.textListContributorsHere": "tại đây",
369 "settings.supportFerdi.textOpenCollective": "Open Collective", 369 "settings.supportFerdi.textOpenCollective": "Mở Cộng đồng",
370 "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", 370 "settings.supportFerdi.textSupportWelcome": "Hỗ trợ luôn được chào đón. Bạn có thể tìm thấy danh sách trợ giúp mà chúng tôi cần",
371 "settings.supportFerdi.textSupportWelcomeHere": "tại đây", 371 "settings.supportFerdi.textSupportWelcomeHere": "tại đây",
372 "settings.supportFerdi.textVolunteers": "The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.", 372 "settings.supportFerdi.textVolunteers": "Sự phát triển của Ferdi được thực hiện bởi các tình nguyện viên. Những người sử dụng Ferdi như bạn. Họ bảo trì, sửa chữa và cải tiến Ferdi trong thời gian rảnh rỗi.",
373 "settings.supportFerdi.title": "Bạn có thích Ferdi không?", 373 "settings.supportFerdi.title": "Bạn có thích Ferdi không?",
374 "settings.team.contentHeadline": "Franz Team Management", 374 "settings.team.contentHeadline": "Quản nm Franz",
375 "settings.team.copy": "Franz's Team Management allows you to manage Franz Subscriptions for multiple users. Please keep in mind that having a Franz Premium subscription will give you no advantages in using Ferdi: The only reason you still have access to Team Management is so you can manage your legacy Franz Teams and so that you don't loose any functionality in managing your account.", 375 "settings.team.copy": "Quản lý nhóm của Franz cho phép bạn quản lý Đăng ký Franz cho nhiều người dùng. Xin lưu ý rằng việc đăng ký Franz Premium sẽ không mang lại lợi ích gì cho bạn khi sử dụng Ferdi: Lý do duy nhất bạn vẫn có quyền truy cập vào Quản lý nhóm là để bạn có thể quản lý Nhóm Franz cũ của mình và để bạn không mất bất kỳ chức năng nào trong việc quản lý tài khoản của bạn.",
376 "settings.team.headline": "Team", 376 "settings.team.headline": "Nhóm",
377 "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", 377 "settings.team.intro": "Bạn hiện đang sử dụng Máy chủ Franz, đó là lý do bạn có quyền truy cập vào Quản lý nhóm.",
378 "settings.team.manageAction": "Manage your Team on meetfranz.com", 378 "settings.team.manageAction": "Quản Nhóm của bạn trên meetfranz.com",
379 "settings.team.teamsUnavailable": "Teams are unavailable", 379 "settings.team.teamsUnavailable": "Các đội không có sẵn",
380 "settings.team.teamsUnavailableInfo": "Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.", 380 "settings.team.teamsUnavailableInfo": "Nhóm hiện chỉ khả dụng khi sử dụng Máy chủ Franz và sau khi thanh toán cho Franz Professional. Vui lòng thay đổi máy chủ của bạn thành https://api.franzinfra.com để sử dụng nhóm.",
381 "settings.user.form.accountType.company": "Company", 381 "settings.user.form.accountType.company": "Công ty",
382 "settings.user.form.accountType.individual": "Individual", 382 "settings.user.form.accountType.individual": "nhân",
383 "settings.user.form.accountType.label": "Loại tài khoản", 383 "settings.user.form.accountType.label": "Loại tài khoản",
384 "settings.user.form.accountType.non-profit": "Non-Profit", 384 "settings.user.form.accountType.non-profit": "Phi lợi nhuận",
385 "settings.user.form.currentPassword": "Mật khẩu hiện tại", 385 "settings.user.form.currentPassword": "Mật khẩu hiện tại",
386 "settings.user.form.email": "E-mail", 386 "settings.user.form.email": "E-mail",
387 "settings.user.form.firstname": "Tên", 387 "settings.user.form.firstname": "Tên",
388 "settings.user.form.lastname": "Họ, tên đệm", 388 "settings.user.form.lastname": "Họ, tên đệm",
389 "settings.user.form.newPassword": "Mật khẩu mới", 389 "settings.user.form.newPassword": "Mật khẩu mới",
390 "settings.workspace.add.form.name": "Tên", 390 "settings.workspace.add.form.name": "Tên",
391 "settings.workspace.add.form.submitButton": "Create workspace", 391 "settings.workspace.add.form.submitButton": "Tạo không gian làm việc",
392 "settings.workspace.form.buttonDelete": "Delete workspace", 392 "settings.workspace.form.buttonDelete": "Xoá không gian làm việc",
393 "settings.workspace.form.buttonSave": "Save workspace", 393 "settings.workspace.form.buttonSave": "Lưu không gian làm việc",
394 "settings.workspace.form.keepLoaded": "Keep this workspace loaded*", 394 "settings.workspace.form.keepLoaded": "Luôn ti không gian làm việc này*",
395 "settings.workspace.form.keepLoadedInfo": "*This option will be overwritten by the global \"Keep all workspaces loaded\" option.", 395 "settings.workspace.form.keepLoadedInfo": "* Tùy chọn này sẽ bị ghi đè bởi tùy chọn chung \"Giữ tất cả không gian làm việc được tải\".",
396 "settings.workspace.form.name": "Tên", 396 "settings.workspace.form.name": "Tên",
397 "settings.workspace.form.servicesInWorkspaceHeadline": "Services in this Workspace", 397 "settings.workspace.form.servicesInWorkspaceHeadline": "c dịch vụ trong Không gian làm việc này",
398 "settings.workspace.form.yourWorkspaces": "Your workspaces", 398 "settings.workspace.form.yourWorkspaces": "Không gian làm việc của bạn",
399 "settings.workspaces.deletedInfo": "Workspace has been deleted", 399 "settings.workspaces.deletedInfo": "Không gian làm việc đã b xóa",
400 "settings.workspaces.headline": "Your workspaces", 400 "settings.workspaces.headline": "Không gian làm việc của bạn",
401 "settings.workspaces.noWorkspacesAdded": "You haven't created any workspaces yet.", 401 "settings.workspaces.noWorkspacesAdded": "Bạn chưa tạo bất kỳ không gian làm việc nào.",
402 "settings.workspaces.tryReloadWorkspaces": "Thử lại", 402 "settings.workspaces.tryReloadWorkspaces": "Thử lại",
403 "settings.workspaces.updatedInfo": "Mọi thay đổi đã được lưu lại", 403 "settings.workspaces.updatedInfo": "Mọi thay đổi đã được lưu lại",
404 "settings.workspaces.workspaceFeatureHeadline": "Less is More: Introducing Ferdi Workspaces", 404 "settings.workspaces.workspaceFeatureHeadline": "Ít hơn là Nhiều hơn: Giới thiệu Không gian làm việc Ferdi",
405 "settings.workspaces.workspaceFeatureInfo": "Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time. You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.", 405 "settings.workspaces.workspaceFeatureInfo": "Không gian làm việc Ferdi cho phép bạn tập trung vào những gì quan trọng ngay bây giờ. Thiết lập các nhóm dịch vụ khác nhau và dễ dàng chuyển đổi giữa chúng bất kỳ lúc nào. Bạn quyết định dịch vụ nào bạn cần khi nào và ở đâu, vì vậy chúng tôi có thể giúp bạn luôn cập nhật trò chơi của mình - hoặc dễ dàng tắt công việc bất cứ khi nào bạn muốn.",
406 "settings.workspaces.workspacesRequestFailed": "Could not load your workspaces", 406 "settings.workspaces.workspacesRequestFailed": "Không thể tải không gian làm việc của bạn",
407 "setupAssistant.headline": "Let's get started", 407 "setupAssistant.headline": "Bắt đầu nào",
408 "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", 408 "setupAssistant.subheadline": "Chọn từ các dịch vụ được sử dụng nhiều nhất của chúng tôi và nhận lại tin nhắn của bạn ngay bây giờ.",
409 "setupAssistant.submit.label": "Let's go", 409 "setupAssistant.submit.label": "Bắt đầu nào",
410 "sidebar.addNewService": "Add new service", 410 "sidebar.addNewService": "Thêm Dịch vụ mới",
411 "sidebar.closeTodosDrawer": "Close Ferdi Todos", 411 "sidebar.closeTodosDrawer": "Đóng Ferdi Todos",
412 "sidebar.closeWorkspaceDrawer": "Close workspace drawer", 412 "sidebar.closeWorkspaceDrawer": "Đóng không gian làm việc",
413 "sidebar.lockFerdi": "Khoá ứng dụng", 413 "sidebar.lockFerdi": "Khoá ứng dụng",
414 "sidebar.muteApp": "Disable notifications & audio", 414 "sidebar.muteApp": "Tắt tng báo và âm thanh",
415 "sidebar.openTodosDrawer": "Open Ferdi Todos", 415 "sidebar.openTodosDrawer": "Mở Ferdi Todos",
416 "sidebar.openWorkspaceDrawer": "Open workspace drawer", 416 "sidebar.openWorkspaceDrawer": "Mở không gian làm việc",
417 "sidebar.settings": "Các thiết lập", 417 "sidebar.settings": "Các thiết lập",
418 "sidebar.unmuteApp": "Enable notifications & audio", 418 "sidebar.unmuteApp": "Bật tng báo và âm thanh",
419 "signup.email.label": "Địa chỉ E-mail", 419 "signup.email.label": "Địa chỉ E-mail",
420 "signup.emailDuplicate": "A user with that email address already exists", 420 "signup.emailDuplicate": "Một người dùng với địa chỉ email đó đã tồn tại",
421 "signup.firstname.label": "Tên", 421 "signup.firstname.label": "Tên",
422 "signup.headline": "Đăng ký", 422 "signup.headline": "Đăng ký",
423 "signup.lastname.label": "Họ, tên đệm", 423 "signup.lastname.label": "Họ, tên đệm",
424 "signup.legal.info": "By creating a Ferdi account you accept the", 424 "signup.legal.info": "Bằng cách tạo tài khoản Ferdi, bạn chấp nhận",
425 "signup.legal.privacy": "Privacy Statement", 425 "signup.legal.privacy": "Cam kết Bảo mt",
426 "signup.legal.terms": "Terms of service", 426 "signup.legal.terms": "Điều khoản dịch vụ",
427 "signup.link.login": "Already have an account, sign in?", 427 "signup.link.login": "Đã tài khon, Đăng nhập?",
428 "signup.password.label": "Mật khẩu", 428 "signup.password.label": "Mật khẩu",
429 "signup.submit.label": "Tạo Tài khoản", 429 "signup.submit.label": "Tạo Tài khoản",
430 "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", 430 "tabs.item.confirmDeleteService": "Bạn thực sự muốn xóa dịch vụ {serviceName} không?",
431 "tabs.item.deleteService": "Xóa dịch vụ", 431 "tabs.item.deleteService": "Xóa dịch vụ",
432 "tabs.item.disableAudio": "Disable audio", 432 "tabs.item.disableAudio": "Vô hiệu hóa âm thanh",
433 "tabs.item.disableDarkMode": "Disable Dark mode", 433 "tabs.item.disableDarkMode": "Vô hiệu a chế độ tối",
434 "tabs.item.disableNotifications": "Disable notifications", 434 "tabs.item.disableNotifications": " hiệu hóa tng báo",
435 "tabs.item.disableService": "Disable service", 435 "tabs.item.disableService": "Vô hiệu hóa dịch vụ",
436 "tabs.item.edit": "Chỉnh sửa", 436 "tabs.item.edit": "Chỉnh sửa",
437 "tabs.item.enableAudio": "Cho phép âm thanh", 437 "tabs.item.enableAudio": "Cho phép âm thanh",
438 "tabs.item.enableDarkMode": "Enable Dark mode", 438 "tabs.item.enableDarkMode": "Kích hoạt chế độ tối",
439 "tabs.item.enableNotification": "Enable notifications", 439 "tabs.item.enableNotification": "Kích hot tng báo",
440 "tabs.item.enableService": "Enable service", 440 "tabs.item.enableService": "Kích hoạt dịch vụ",
441 "tabs.item.hibernateService": "Hibernate service", 441 "tabs.item.hibernateService": "Đưa dịch vụ vào trạng thái ngủ đông",
442 "tabs.item.reload": "Tải lại", 442 "tabs.item.reload": "Tải lại",
443 "tabs.item.wakeUpService": "Wake up service", 443 "tabs.item.wakeUpService": "Đánh thức dịch vụ",
444 "validation.email": "{field} is not valid", 444 "validation.email": "{field} không hợp l",
445 "validation.minLength": "{field} should be at least {length} characters long", 445 "validation.minLength": "{field} phải dài ít nhất {length} tự",
446 "validation.oneRequired": "At least one is required", 446 "validation.oneRequired": "Ít nhất một i được yêu cầu",
447 "validation.required": "{field} is required", 447 "validation.required": "{field} bắt buộc",
448 "validation.url": "{field} is not a valid URL", 448 "validation.url": "{field} không phải là URL hợp lệ",
449 "webControls.back": "Quay lại", 449 "webControls.back": "Quay lại",
450 "webControls.forward": "Tới trước", 450 "webControls.forward": "Tới trước",
451 "webControls.goHome": "Trang chủ", 451 "webControls.goHome": "Trang chủ",
452 "webControls.openInBrowser": "Open in Browser", 452 "webControls.openInBrowser": "Mở trong trình duyệt",
453 "webControls.reload": "Tải lại", 453 "webControls.reload": "Tải lại",
454 "welcome.loginButton": "Login to your account", 454 "welcome.loginButton": "Đăng nhập o tài khoản của bạn",
455 "welcome.signupButton": "Tạo tài khoản miễn phí", 455 "welcome.signupButton": "Tạo tài khoản miễn phí",
456 "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", 456 "workspaceDrawer.addNewWorkspaceLabel": "Thêm Không gian làm việc mới",
457 "workspaceDrawer.allServices": "Tất cả Dịch vụ", 457 "workspaceDrawer.allServices": "Tất cả Dịch vụ",
458 "workspaceDrawer.headline": "Không gian làm việc", 458 "workspaceDrawer.headline": "Không gian làm việc",
459 "workspaceDrawer.item.contextMenuEdit": "chỉnh sửa", 459 "workspaceDrawer.item.contextMenuEdit": "chỉnh sửa",
460 "workspaceDrawer.item.noServicesAddedYet": "No services added yet", 460 "workspaceDrawer.item.noServicesAddedYet": "Không có dịch vụ bổ sung",
461 "workspaceDrawer.workspaceFeatureInfo": "<p>Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>", 461 "workspaceDrawer.workspaceFeatureInfo": "<p> Ferdi Workspaces cho phép bạn tập trung vào những gì quan trọng ngay bây giờ. Thiết lập các nhóm dịch vụ khác nhau và dễ dàng chuyển đổi giữa chúng bất kỳ lúc nào. </p> <p> Bạn quyết định dịch vụ nào bạn cần khi nào và ở đâu, vì vậy chúng tôi có thể giúp bạn luôn cập nhật trò chơi của mình - hoặc dễ dàng tắt khỏi công việc bất cứ khi nào bạn muốn. </p>",
462 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 462 "workspaceDrawer.workspacesSettingsTooltip": "Chỉnh sa cài đặt không gian làm việc",
463 "workspaces.switchingIndicator.switchingTo": "Switching to" 463 "workspaces.switchingIndicator.switchingTo": "Chuyển sang"
464} 464}
diff --git a/src/i18n/locales/zh-HANT.json b/src/i18n/locales/zh-HANT.json
index 407f134cb..ff96a4107 100644
--- a/src/i18n/locales/zh-HANT.json
+++ b/src/i18n/locales/zh-HANT.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "設置", 254 "settings.app.headline": "設置",
255 "settings.app.headlineAdvanced": "高級設置", 255 "settings.app.headlineAdvanced": "高級設置",
diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json
index f33f67f8f..de9d937e3 100644
--- a/src/i18n/locales/zh.json
+++ b/src/i18n/locales/zh.json
@@ -249,7 +249,7 @@
249 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Start minimized",
250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
252 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use horizontal style",
253 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Wake up strategy",
254 "settings.app.headline": "设置", 254 "settings.app.headline": "设置",
255 "settings.app.headlineAdvanced": "Advanced", 255 "settings.app.headlineAdvanced": "Advanced",
diff --git a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json
index b98c54d7d..9a4a8de64 100644
--- a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json
+++ b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json
@@ -430,7 +430,7 @@
430 }, 430 },
431 { 431 {
432 "id": "settings.app.form.useVerticalStyle", 432 "id": "settings.app.form.useVerticalStyle",
433 "defaultMessage": "!!!Use vertical style", 433 "defaultMessage": "!!!Use horizontal style",
434 "file": "src/containers/settings/EditSettingsScreen.js", 434 "file": "src/containers/settings/EditSettingsScreen.js",
435 "start": { 435 "start": {
436 "line": 164, 436 "line": 164,
diff --git a/src/internal-server/app/Controllers/Http/StaticController.js b/src/internal-server/app/Controllers/Http/StaticController.js
index b9a145061..28c5389a9 100644
--- a/src/internal-server/app/Controllers/Http/StaticController.js
+++ b/src/internal-server/app/Controllers/Http/StaticController.js
@@ -2,21 +2,15 @@
2 * Controller for routes with static responses 2 * Controller for routes with static responses
3 */ 3 */
4 4
5import { DEFAULT_FEATURES_CONFIG } from '../../../../config';
6
7// TODO: This endpoint and associated code needs to be remoeved as cleanup
5class StaticController { 8class StaticController {
6 // Enable all features 9 // Enable all features
7 features({ 10 features({
8 response, 11 response,
9 }) { 12 }) {
10 return response.send({ 13 return response.send(DEFAULT_FEATURES_CONFIG);
11 isServiceProxyEnabled: true,
12 isWorkspaceEnabled: true,
13 isAnnouncementsEnabled: true,
14 isSettingsWSEnabled: false,
15 isMagicBarEnabled: true,
16 isTodosEnabled: true,
17 subscribeURL: 'https://getferdi.com',
18 hasInlineCheckout: true,
19 });
20 } 14 }
21 15
22 // Return an empty array 16 // Return an empty array
@@ -34,4 +28,4 @@ class StaticController {
34 } 28 }
35} 29}
36 30
37module.exports = StaticController; 31export default StaticController;
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 9c8cce679..cb8c71268 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -567,7 +567,6 @@ export default class AppStore extends Store {
567 debug('Checking if Do Not Disturb Mode is on'); 567 debug('Checking if Do Not Disturb Mode is on');
568 const dnd = await ipcRenderer.invoke('get-dnd'); 568 const dnd = await ipcRenderer.invoke('get-dnd');
569 debug('Do not disturb mode is', dnd); 569 debug('Do not disturb mode is', dnd);
570 // ipcRenderer.on('autoUpdate', (event, data) => {
571 if ( 570 if (
572 dnd !== this.stores.settings.all.app.isAppMuted 571 dnd !== this.stores.settings.all.app.isAppMuted
573 && !this.isSystemMuteOverridden 572 && !this.isSystemMuteOverridden
diff --git a/src/webview/badge.ts b/src/webview/badge.ts
index fc420b903..753e90fef 100644
--- a/src/webview/badge.ts
+++ b/src/webview/badge.ts
@@ -12,24 +12,29 @@ export class BadgeHandler {
12 }; 12 };
13 } 13 }
14 14
15 _normalizeNumber(count: string | number) { 15 // TODO: Need to extract this into a utility class and reuse outside of the recipes
16 safeParseInt(text: string | number | undefined | null) {
17 if (text === undefined || text === null) {
18 return 0;
19 }
20
16 // Parse number to integer 21 // Parse number to integer
17 // This will correct errors that recipes may introduce, e.g. 22 // This will correct errors that recipes may introduce, e.g.
18 // by sending a String instead of an integer 23 // by sending a String instead of an integer
19 const parsedNumber = parseInt(count.toString(), 10); 24 const parsedNumber = parseInt(text.toString(), 10);
20 const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber; 25 const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber;
21 return Math.max(adjustedNumber, 0); 26 return Math.max(adjustedNumber, 0);
22 } 27 }
23 28
24 setBadge(direct: number, indirect: number) { 29 setBadge(direct: string | number, indirect: string | number) {
25 if (this.countCache.direct === direct 30 if (this.countCache.direct.toString() === direct.toString()
26 && this.countCache.indirect === indirect) { 31 && this.countCache.indirect.toString() === indirect.toString()) {
27 return; 32 return;
28 } 33 }
29 34
30 const count = { 35 const count = {
31 direct: this._normalizeNumber(direct), 36 direct: this.safeParseInt(direct),
32 indirect: this._normalizeNumber(indirect), 37 indirect: this.safeParseInt(indirect),
33 }; 38 };
34 39
35 debug('Sending badge count to host', count); 40 debug('Sending badge count to host', count);
diff --git a/src/webview/lib/RecipeWebview.js b/src/webview/lib/RecipeWebview.js
index 96caa125e..2bd6bad8d 100644
--- a/src/webview/lib/RecipeWebview.js
+++ b/src/webview/lib/RecipeWebview.js
@@ -47,6 +47,15 @@ class RecipeWebview {
47 } 47 }
48 48
49 /** 49 /**
50 * Safely parse the given text into an integer
51 *
52 * @param {string | number | undefined | null} text to be parsed
53 */
54 safeParseInt(text) {
55 return this.badgeHandler.safeParseInt(text);
56 }
57
58 /**
50 * Injects the contents of a CSS file into the current webview 59 * Injects the contents of a CSS file into the current webview
51 * 60 *
52 * @param {Array} files CSS files that should be injected. This must 61 * @param {Array} files CSS files that should be injected. This must
diff --git a/src/webview/recipe.js b/src/webview/recipe.js
index f88b94cfe..1981c8731 100644
--- a/src/webview/recipe.js
+++ b/src/webview/recipe.js
@@ -102,6 +102,8 @@ contextBridge.exposeInMainWorld('ferdi', {
102 open: window.open, 102 open: window.open,
103 setBadge: (direct, indirect) => 103 setBadge: (direct, indirect) =>
104 badgeHandler.setBadge(direct, indirect), 104 badgeHandler.setBadge(direct, indirect),
105 safeParseInt: (text) =>
106 badgeHandler.safeParseInt(text),
105 displayNotification: (title, options) => 107 displayNotification: (title, options) =>
106 notificationsHandler.displayNotification(title, options), 108 notificationsHandler.displayNotification(title, options),
107 getDisplayMediaSelector, 109 getDisplayMediaSelector,