From aba769a073e31ba380dacd0ae3fd11ef2b96737d Mon Sep 17 00:00:00 2001 From: Vijay A Date: Mon, 13 Sep 2021 17:17:54 +0530 Subject: Bumped up version to: 5.6.3-nightly.0 [skip ci] --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index c70ae5634..8188513d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ferdi", - "version": "5.6.2-nightly.2", + "version": "5.6.3-nightly.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1d38d0039..f4ee15e34 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Ferdi", "desktopName": "ferdi.desktop", "appId": "com.kytwb.ferdi", - "version": "5.6.2-nightly.2", + "version": "5.6.3-nightly.0", "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", "copyright": "kytwb", "main": "index.js", -- cgit v1.2.3-70-g09d2 From 537697a6e9757f118d09d9e76362ba1ff617e2c6 Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Mon, 13 Sep 2021 14:45:46 +0200 Subject: chore: upgrade intl dependencies (#1920) --- .eslintrc | 31 +- babel.config.json | 12 +- package-lock.json | 943 ++- package.json | 11 +- src/I18n.js | 10 +- src/components/AppUpdateInfoBar.js | 16 +- src/components/auth/AuthLayout.js | 12 +- src/components/auth/ChangeServer.js | 79 +- src/components/auth/Import.js | 43 +- src/components/auth/Invite.js | 52 +- src/components/auth/Locked.js | 97 +- src/components/auth/Login.js | 132 +- src/components/auth/Password.js | 77 +- src/components/auth/SetupAssistant.js | 18 +- src/components/auth/Signup.js | 127 +- src/components/auth/Welcome.js | 57 +- src/components/layout/AppLayout.js | 18 +- src/components/layout/Sidebar.js | 108 +- .../services/content/ConnectionLostBanner.js | 16 +- .../content/ErrorHandlers/WebviewErrorHandler.js | 38 +- src/components/services/content/ServiceDisabled.js | 17 +- src/components/services/content/ServiceView.js | 43 +- src/components/services/content/Services.js | 103 +- .../services/content/WebviewCrashHandler.js | 26 +- src/components/services/tabs/TabItem.js | 46 +- src/components/services/tabs/Tabbar.js | 20 +- src/components/settings/SettingsLayout.js | 13 +- .../settings/account/AccountDashboard.js | 37 +- .../settings/navigation/SettingsNavigation.js | 49 +- src/components/settings/recipes/RecipeItem.js | 17 +- .../settings/recipes/RecipesDashboard.js | 83 +- .../settings/services/EditServiceForm.js | 157 +- src/components/settings/services/ServiceError.js | 26 +- src/components/settings/services/ServiceItem.js | 48 +- .../settings/services/ServicesDashboard.js | 52 +- .../settings/settings/EditSettingsForm.js | 527 +- .../settings/supportFerdi/SupportFerdiDashboard.js | 141 +- src/components/settings/team/TeamDashboard.js | 54 +- src/components/settings/user/EditUserForm.js | 39 +- src/components/ui/AppLoader/index.js | 10 +- src/components/ui/Button.js | 14 +- src/components/ui/FAB.js | 17 +- src/components/ui/FeatureList.js | 44 +- src/components/ui/FullscreenLoader/index.js | 23 +- src/components/ui/ImageUpload.js | 13 +- src/components/ui/InfoBar.js | 13 +- src/components/ui/Infobox.js | 13 +- src/components/ui/Input.js | 25 +- src/components/ui/Link.js | 14 +- src/components/ui/Loader.js | 17 +- src/components/ui/Modal/index.js | 19 +- src/components/ui/Radio.js | 26 +- src/components/ui/SearchInput.js | 30 +- src/components/ui/Select.js | 30 +- src/components/ui/Slider.js | 104 +- src/components/ui/StatusBarTargetUrl.js | 14 +- src/components/ui/Tabs/Tabs.js | 5 +- src/components/ui/Toggle.js | 20 +- src/components/ui/ToggleRaw.js | 20 +- src/components/ui/WebviewLoader/index.js | 16 +- src/components/util/ErrorBoundary/index.js | 19 +- src/containers/auth/AuthLayoutContainer.js | 3 +- src/containers/auth/ChangeServerScreen.js | 11 +- src/containers/auth/ImportScreen.js | 4 +- src/containers/auth/InviteScreen.js | 13 +- src/containers/auth/LockedScreen.js | 6 +- src/containers/auth/LoginScreen.js | 8 +- src/containers/auth/PasswordScreen.js | 4 +- src/containers/auth/SetupAssistantScreen.js | 3 +- src/containers/auth/SignupScreen.js | 8 +- src/containers/auth/WelcomeScreen.js | 6 +- src/containers/layout/AppLayoutContainer.js | 3 +- src/containers/settings/AccountScreen.js | 11 +- src/containers/settings/EditServiceScreen.js | 121 +- src/containers/settings/EditSettingsScreen.js | 166 +- src/containers/settings/EditUserScreen.js | 60 +- src/containers/settings/InviteScreen.js | 8 +- src/containers/settings/RecipesScreen.js | 92 +- src/containers/settings/ServicesScreen.js | 17 +- src/containers/settings/SettingsWindow.js | 21 +- src/containers/settings/SupportScreen.js | 9 +- src/containers/settings/TeamScreen.js | 11 +- src/features/basicAuth/Component.js | 41 +- src/features/nightlyBuilds/Component.js | 26 +- src/features/publishDebugInfo/Component.js | 94 +- src/features/quickSwitch/Component.js | 67 +- src/features/webControls/components/WebControls.js | 20 +- .../workspaces/components/CreateWorkspaceForm.js | 21 +- .../workspaces/components/EditWorkspaceForm.js | 34 +- .../workspaces/components/WorkspaceDrawer.js | 54 +- .../workspaces/components/WorkspaceDrawerItem.js | 21 +- .../workspaces/components/WorkspaceItem.js | 14 +- .../components/WorkspaceSwitchingIndicator.js | 12 +- .../workspaces/components/WorkspacesDashboard.js | 26 +- src/helpers/validation-helpers.js | 50 +- src/i18n/apply-branding.js | 9 +- src/i18n/globalMessages.js | 38 +- src/i18n/locales/defaultMessages.json | 6862 -------------------- src/i18n/locales/en-US.json | 115 +- src/i18n/manage-translations.js | 9 - .../messages/src/components/AppUpdateInfoBar.json | 41 - .../messages/src/components/auth/ChangeServer.json | 67 - src/i18n/messages/src/components/auth/Import.json | 54 - src/i18n/messages/src/components/auth/Invite.json | 93 - src/i18n/messages/src/components/auth/Locked.json | 106 - src/i18n/messages/src/components/auth/Login.json | 171 - .../messages/src/components/auth/Password.json | 80 - .../src/components/auth/ServiceAssistant.json | 93 - .../src/components/auth/SetupAssistant.json | 54 - src/i18n/messages/src/components/auth/Signup.json | 171 - src/i18n/messages/src/components/auth/Welcome.json | 41 - .../messages/src/components/layout/AppLayout.json | 54 - .../messages/src/components/layout/Sidebar.json | 106 - .../services/content/ConnectionBanner.json | 67 - .../services/content/ConnectionLost.json | 67 - .../services/content/ConnectionLostBanner.json | 41 - .../content/ErrorHandlers/WebviewErrorHandler.json | 67 - .../services/content/ServiceDisabled.json | 28 - .../src/components/services/content/Services.json | 67 - .../components/services/content/WebControls.json | 67 - .../services/content/WebviewCrashHandler.json | 54 - .../src/components/services/tabs/TabItem.json | 171 - .../src/components/settings/SettingsLayout.json | 15 - .../settings/account/AccountDashboard.json | 158 - .../settings/navigation/SettingsNavigation.json | 93 - .../settings/recipes/RecipesDashboard.json | 171 - .../settings/services/EditServiceForm.json | 340 - .../components/settings/services/ServiceError.json | 54 - .../components/settings/services/ServiceItem.json | 41 - .../settings/services/ServicesDashboard.json | 119 - .../settings/settings/EditSettingsForm.json | 444 -- .../supportFerdi/SupportFerdiDashboard.json | 197 - .../components/settings/team/TeamDashboard.json | 93 - .../src/components/settings/user/EditUserForm.json | 80 - .../messages/src/components/ui/FeatureList.json | 145 - src/i18n/messages/src/components/ui/InfoBar.json | 15 - src/i18n/messages/src/components/ui/Infobox.json | 15 - src/i18n/messages/src/components/ui/Input.json | 15 - .../src/components/ui/WebviewLoader/index.json | 15 - .../src/components/util/ErrorBoundary/index.json | 28 - .../src/containers/settings/EditServiceScreen.json | 249 - .../containers/settings/EditSettingsScreen.json | 600 -- .../src/containers/settings/EditUserScreen.json | 119 - .../messages/src/features/basicAuth/Component.json | 15 - .../messages/src/features/debugger/Component.json | 15 - .../src/features/nightlyBuilds/Component.json | 41 - .../src/features/publishDebugInfo/Component.json | 93 - .../src/features/quickSwitch/Component.json | 41 - .../components/WebControls.json | 67 - .../webControls/components/WebControls.json | 67 - .../workspaces/components/CreateWorkspaceForm.json | 28 - .../workspaces/components/EditWorkspaceForm.json | 119 - .../workspaces/components/WorkspaceDrawer.json | 67 - .../workspaces/components/WorkspaceDrawerItem.json | 28 - .../components/WorkspaceSwitchingIndicator.json | 15 - .../workspaces/components/WorkspacesDashboard.json | 106 - .../messages/src/helpers/validation-helpers.json | 67 - src/i18n/messages/src/i18n/globalMessages.json | 236 - src/i18n/messages/src/lib/Menu.json | 912 --- src/lib/Menu.js | 145 +- src/routes.js | 3 +- 161 files changed, 3117 insertions(+), 15713 deletions(-) delete mode 100644 src/i18n/locales/defaultMessages.json delete mode 100644 src/i18n/manage-translations.js delete mode 100644 src/i18n/messages/src/components/AppUpdateInfoBar.json delete mode 100644 src/i18n/messages/src/components/auth/ChangeServer.json delete mode 100644 src/i18n/messages/src/components/auth/Import.json delete mode 100644 src/i18n/messages/src/components/auth/Invite.json delete mode 100644 src/i18n/messages/src/components/auth/Locked.json delete mode 100644 src/i18n/messages/src/components/auth/Login.json delete mode 100644 src/i18n/messages/src/components/auth/Password.json delete mode 100644 src/i18n/messages/src/components/auth/ServiceAssistant.json delete mode 100644 src/i18n/messages/src/components/auth/SetupAssistant.json delete mode 100644 src/i18n/messages/src/components/auth/Signup.json delete mode 100644 src/i18n/messages/src/components/auth/Welcome.json delete mode 100644 src/i18n/messages/src/components/layout/AppLayout.json delete mode 100644 src/i18n/messages/src/components/layout/Sidebar.json delete mode 100644 src/i18n/messages/src/components/services/content/ConnectionBanner.json delete mode 100644 src/i18n/messages/src/components/services/content/ConnectionLost.json delete mode 100644 src/i18n/messages/src/components/services/content/ConnectionLostBanner.json delete mode 100644 src/i18n/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json delete mode 100644 src/i18n/messages/src/components/services/content/ServiceDisabled.json delete mode 100644 src/i18n/messages/src/components/services/content/Services.json delete mode 100644 src/i18n/messages/src/components/services/content/WebControls.json delete mode 100644 src/i18n/messages/src/components/services/content/WebviewCrashHandler.json delete mode 100644 src/i18n/messages/src/components/services/tabs/TabItem.json delete mode 100644 src/i18n/messages/src/components/settings/SettingsLayout.json delete mode 100644 src/i18n/messages/src/components/settings/account/AccountDashboard.json delete mode 100644 src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json delete mode 100644 src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json delete mode 100644 src/i18n/messages/src/components/settings/services/EditServiceForm.json delete mode 100644 src/i18n/messages/src/components/settings/services/ServiceError.json delete mode 100644 src/i18n/messages/src/components/settings/services/ServiceItem.json delete mode 100644 src/i18n/messages/src/components/settings/services/ServicesDashboard.json delete mode 100644 src/i18n/messages/src/components/settings/settings/EditSettingsForm.json delete mode 100644 src/i18n/messages/src/components/settings/supportFerdi/SupportFerdiDashboard.json delete mode 100644 src/i18n/messages/src/components/settings/team/TeamDashboard.json delete mode 100644 src/i18n/messages/src/components/settings/user/EditUserForm.json delete mode 100644 src/i18n/messages/src/components/ui/FeatureList.json delete mode 100644 src/i18n/messages/src/components/ui/InfoBar.json delete mode 100644 src/i18n/messages/src/components/ui/Infobox.json delete mode 100644 src/i18n/messages/src/components/ui/Input.json delete mode 100644 src/i18n/messages/src/components/ui/WebviewLoader/index.json delete mode 100644 src/i18n/messages/src/components/util/ErrorBoundary/index.json delete mode 100644 src/i18n/messages/src/containers/settings/EditServiceScreen.json delete mode 100644 src/i18n/messages/src/containers/settings/EditSettingsScreen.json delete mode 100644 src/i18n/messages/src/containers/settings/EditUserScreen.json delete mode 100644 src/i18n/messages/src/features/basicAuth/Component.json delete mode 100644 src/i18n/messages/src/features/debugger/Component.json delete mode 100644 src/i18n/messages/src/features/nightlyBuilds/Component.json delete mode 100644 src/i18n/messages/src/features/publishDebugInfo/Component.json delete mode 100644 src/i18n/messages/src/features/quickSwitch/Component.json delete mode 100644 src/i18n/messages/src/features/recipeConnectionLost/components/WebControls.json delete mode 100644 src/i18n/messages/src/features/webControls/components/WebControls.json delete mode 100644 src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json delete mode 100644 src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json delete mode 100644 src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json delete mode 100644 src/i18n/messages/src/features/workspaces/components/WorkspaceDrawerItem.json delete mode 100644 src/i18n/messages/src/features/workspaces/components/WorkspaceSwitchingIndicator.json delete mode 100644 src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json delete mode 100644 src/i18n/messages/src/helpers/validation-helpers.json delete mode 100644 src/i18n/messages/src/i18n/globalMessages.json delete mode 100644 src/i18n/messages/src/lib/Menu.json diff --git a/.eslintrc b/.eslintrc index 47811e7be..121f28eda 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,23 +2,16 @@ "root": true, "parser": "@babel/eslint-parser", "extends": "eslint-config-airbnb", - "plugins": [ - "jest" - ], + "plugins": ["jest"], "overrides": [ { - "files": [ - "**/*.ts", - "**/*.tsx" - ], + "files": ["**/*.ts", "**/*.tsx"], "env": { "browser": true, "es6": true, "node": true }, - "extends": [ - "airbnb-typescript" - ], + "extends": ["airbnb-typescript"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { @@ -28,9 +21,7 @@ "sourceType": "module", "project": "./tsconfig.json" }, - "plugins": [ - "@typescript-eslint" - ], + "plugins": ["@typescript-eslint"], "rules": { // eslint "arrow-parens": 0, @@ -79,13 +70,9 @@ "jsx-a11y/label-has-for": [ 2, { - "components": [ - "Label" - ], + "components": ["Label"], "required": { - "every": [ - "id" - ] + "every": ["id"] }, "allowChildren": false } @@ -126,10 +113,7 @@ "no-console": [ 1, { - "allow": [ - "warn", - "error" - ] + "allow": ["warn", "error"] } ], "no-param-reassign": 1, @@ -152,6 +136,7 @@ "react/jsx-no-bind": 1, "react/jsx-props-no-spreading": 0, "react/prefer-stateless-function": 1, + "react/prop-types": 0, "react/static-property-placement": 0, "react/state-in-constructor": 1, "react/sort-comp": 0, diff --git a/babel.config.json b/babel.config.json index 034e51ce5..d24207a8c 100644 --- a/babel.config.json +++ b/babel.config.json @@ -1,8 +1,5 @@ { - "babelrcRoots": [ - ".", - "packages/*" - ], + "babelrcRoots": [".", "packages/*"], "presets": [ [ "@babel/preset-env", @@ -31,11 +28,10 @@ "@babel/proposal-throw-expressions", "@babel/syntax-dynamic-import", [ - "react-intl", + "formatjs", { - "messagesDir": "./src/i18n/messages/", - "enforceDescriptions": false, - "extractSourceLocation": true + "idInterpolationPattern": "[sha512:contenthash:base64:6]", + "ast": true } ], [ diff --git a/package-lock.json b/package-lock.json index 8188513d5..56dd732c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2488,6 +2488,233 @@ } } }, + "@formatjs/cli": { + "version": "4.2.33", + "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-4.2.33.tgz", + "integrity": "sha512-4Lg+KZ5QhXgF6+zjHyZlxMG8I0D3m3PZyrj3hRl97vdZ6rAWKVFWw8fkTO/iyhUCP2iC47Eh9r+ZTgGARX9Teg==", + "dev": true, + "requires": { + "@formatjs/icu-messageformat-parser": "2.0.11", + "@formatjs/ts-transformer": "3.4.10", + "@types/estree": "^0.0.50", + "@types/fs-extra": "^9.0.1", + "@types/json-stable-stringify": "^1.0.32", + "@types/node": "14", + "@vue/compiler-core": "^3.0.5", + "@vue/compiler-sfc": "^3.0.5", + "chalk": "^4.0.0", + "commander": "8", + "fast-glob": "^3.2.7", + "fs-extra": "10", + "json-stable-stringify": "^1.0.1", + "loud-rejection": "^2.2.0", + "tslib": "^2.1.0", + "typescript": "4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true + } + } + }, + "@formatjs/ecma402-abstract": { + "version": "1.9.8", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.9.8.tgz", + "integrity": "sha512-2U4n11bLmTij/k4ePCEFKJILPYwdMcJTdnKVBi+JMWBgu5O1N+XhCazlE6QXqVO1Agh2Doh0b/9Jf1mSmSVfhA==", + "requires": { + "@formatjs/intl-localematcher": "0.2.20", + "tslib": "^2.1.0" + } + }, + "@formatjs/fast-memoize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.0.tgz", + "integrity": "sha512-fObitP9Tlc31SKrPHgkPgQpGo4+4yXfQQITTCNH8AZdEqB7Mq4nPrjpUL/tNGN3lEeJcFxDbi0haX8HM7QvQ8w==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.11.tgz", + "integrity": "sha512-5mWb8U8aulYGwnDZWrr+vdgn5PilvtrqQYQ1pvpgzQes/osi85TwmL2GqTGLlKIvBKD2XNA61kAqXYY95w4LWg==", + "requires": { + "@formatjs/ecma402-abstract": "1.9.8", + "@formatjs/icu-skeleton-parser": "1.2.12", + "tslib": "^2.1.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.2.12.tgz", + "integrity": "sha512-DTFxWmEA02ZNW6fsYjGYSADvtrqqjCYF7DSgCmMfaaE0gLP4pCdAgOPE+lkXXU+jP8iCw/YhMT2Seyk/C5lBWg==", + "requires": { + "@formatjs/ecma402-abstract": "1.9.8", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-1.14.1.tgz", + "integrity": "sha512-mtL8oBgFwTu0GHFnxaF93fk/zNzNkPzl+27Fwg5AZ88pWHWb7037dpODzoCBnaIVk4FBO5emUn/6jI9Byj8hOw==", + "requires": { + "@formatjs/ecma402-abstract": "1.9.8", + "@formatjs/fast-memoize": "1.2.0", + "@formatjs/icu-messageformat-parser": "2.0.11", + "@formatjs/intl-displaynames": "5.2.3", + "@formatjs/intl-listformat": "6.3.3", + "intl-messageformat": "9.9.1", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-displaynames": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.2.3.tgz", + "integrity": "sha512-5BmhSurLbfgdeo0OBcNPPkIS8ikMMYaHe2NclxEQZqcMvrnQzNMNnUE2dDF5vZx+mkvKq77aQYzpc8RfqVsRCQ==", + "requires": { + "@formatjs/ecma402-abstract": "1.9.8", + "@formatjs/intl-localematcher": "0.2.20", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-listformat": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.3.3.tgz", + "integrity": "sha512-3nzAKgVS5rePDa5HiH0OwZgAhqxLtzlMc9Pg4QgajRHSP1TqFiMmQnnn52wd3+xVTb7cjZVm3JBnTv51/MhTOg==", + "requires": { + "@formatjs/ecma402-abstract": "1.9.8", + "@formatjs/intl-localematcher": "0.2.20", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.20.tgz", + "integrity": "sha512-/Ro85goRZnCojzxOegANFYL0LaDIpdPjAukR7xMTjOtRx+3yyjR0ifGTOW3/Kjhmab3t6GnyHBYWZSudxEOxPA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@formatjs/ts-transformer": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.4.10.tgz", + "integrity": "sha512-5fu8x+8CtyrFe8zdwHvFsYLx9TEPjeJSODRS1ZJxkMVpTBHaNsPqsPkN1TuTk5x3+tSczxXmN1LGrAzUxNN3nQ==", + "dev": true, + "requires": { + "@formatjs/icu-messageformat-parser": "2.0.11", + "chalk": "^4.0.0", + "tslib": "^2.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@hapi/hoek": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", @@ -6414,6 +6641,15 @@ "@babel/types": "^7.0.0" } }, + "@types/babel__helper-plugin-utils": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@types/babel__helper-plugin-utils/-/babel__helper-plugin-utils-7.10.0.tgz", + "integrity": "sha512-60YtHzhQ9HAkToHVV+TB4VLzBn9lrfgrsOjiJMtbv/c1jPdekBxaByd6DMsGBzROXWoIL6U3lEFvvbu69RkUoA==", + "dev": true, + "requires": { + "@types/babel__core": "*" + } + }, "@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", @@ -6472,6 +6708,12 @@ "integrity": "sha512-vwNP+pzkI1ipznek2fCA4xj1kQyL9EJcfdBezD9eToe9eP2IgT3WLEBrVqiXal34LOyiAs8xCQKwugEYOKcMkw==", "dev": true }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, "@types/expect.js": { "version": "0.3.29", "resolved": "https://registry.npmjs.org/@types/expect.js/-/expect.js-0.3.29.tgz", @@ -6506,6 +6748,15 @@ "@types/node": "*" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/html-minifier-terser": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", @@ -6542,6 +6793,12 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/json-stable-stringify": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.33.tgz", + "integrity": "sha512-qEWiQff6q2tA5gcJGWwzplQcXdJtm+0oy6IHGHzlOf3eFAkGE/FIPXZK9ofWgNSHVp8AFFI33PJJshS0ei3Gvw==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -6625,14 +6882,12 @@ "@types/prop-types": { "version": "15.7.4", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", - "dev": true + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "@types/react": { "version": "16.14.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.6.tgz", "integrity": "sha512-Ol/aFKune+P0FSFKIgf+XbhGzYGyz0p7g5befSt4rmbzfGLaZR0q7jPew9k7d3bvrcuaL8dPy9Oz3XGZmf9n+w==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -6657,8 +6912,7 @@ "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/semver": { "version": "7.3.8", @@ -7011,6 +7265,121 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@vue/compiler-core": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.11.tgz", + "integrity": "sha512-bcbsLx5XyQg8WDDEGwmpX0BfEfv82wIs9fWFelpyVhNRGMaABvUTalYINyfhVT+jOqNaD4JBhJiVKd/8TmsHWg==", + "dev": true, + "requires": { + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "@vue/shared": "3.2.11", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@vue/compiler-dom": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.11.tgz", + "integrity": "sha512-DNvhUHI/1Hn0/+ZYDYGAuDGasUm+XHKC3FE4GqkNCTO/fcLaJMRg/7eT1m1lkc7jPffUwwfh1rZru5mwzOjrNw==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.2.11", + "@vue/shared": "3.2.11" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.11.tgz", + "integrity": "sha512-cUIaS8mgJrQ6yucj2AupWAwBRITK3W/a8wCOn9g5fJGtOl8h4APY8vN3lzP8HIJDyEeRF3I8SfRhL+oX97kSnw==", + "dev": true, + "requires": { + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "@types/estree": "^0.0.48", + "@vue/compiler-core": "3.2.11", + "@vue/compiler-dom": "3.2.11", + "@vue/compiler-ssr": "3.2.11", + "@vue/ref-transform": "3.2.11", + "@vue/shared": "3.2.11", + "consolidate": "^0.16.0", + "estree-walker": "^2.0.2", + "hash-sum": "^2.0.0", + "lru-cache": "^5.1.1", + "magic-string": "^0.25.7", + "merge-source-map": "^1.1.0", + "postcss": "^8.1.10", + "postcss-modules": "^4.0.0", + "postcss-selector-parser": "^6.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", + "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.11.tgz", + "integrity": "sha512-+ptAdUlFDij+Z0VGCbRRkxQlNev5LkbZAntvkxrFjc08CTMhZmiV4Js48n2hAmuSXaKNEpmGkDGU26c/vf1+xw==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.2.11", + "@vue/shared": "3.2.11" + } + }, + "@vue/ref-transform": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.11.tgz", + "integrity": "sha512-7rX0YsfYb7+1PeKPME1tQyUQcQgt0sIXRRnPD1Vw8Zs2KIo90YLy9CrvwalcRCxGw0ScsjBEhVjJtWIT79TElg==", + "dev": true, + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.11", + "@vue/shared": "3.2.11", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/shared": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.11.tgz", + "integrity": "sha512-ovfXAsSsCvV9JVceWjkqC/7OF5HbgLOtCWjCIosmPGG8lxbPuavhIxRH1dTx4Dg9xLgRTNLvI3pVxG4ItQZekg==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -8105,6 +8474,12 @@ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -8543,6 +8918,86 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-formatjs": { + "version": "10.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-formatjs/-/babel-plugin-formatjs-10.3.8.tgz", + "integrity": "sha512-pLryt/Q5zmoQWRrybzwiaZ9i0M9I1JJwshHqOuyxn+MlqcxArp2N0E7/X9fhIC1X9yEdDV0zfGbY00J+krmZzQ==", + "dev": true, + "requires": { + "@babel/core": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "7", + "@babel/traverse": "7", + "@babel/types": "^7.12.11", + "@formatjs/icu-messageformat-parser": "2.0.11", + "@formatjs/ts-transformer": "3.4.10", + "@types/babel__core": "^7.1.7", + "@types/babel__helper-plugin-utils": "^7.10.0", + "tslib": "^2.1.0" + }, + "dependencies": { + "@formatjs/ts-transformer": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.4.10.tgz", + "integrity": "sha512-5fu8x+8CtyrFe8zdwHvFsYLx9TEPjeJSODRS1ZJxkMVpTBHaNsPqsPkN1TuTk5x3+tSczxXmN1LGrAzUxNN3nQ==", + "dev": true, + "requires": { + "@formatjs/icu-messageformat-parser": "2.0.11", + "chalk": "^4.0.0", + "tslib": "^2.1.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "babel-plugin-istanbul": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", @@ -8606,38 +9061,6 @@ "@babel/helper-define-polyfill-provider": "^0.2.2" } }, - "babel-plugin-react-intl": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-3.5.1.tgz", - "integrity": "sha512-1jlEJCSmLaJM4tjIKpu64UZ833COCHmwR77bFJDOye+zlwf80uR1b8p41l4tClx1QsrfI+qV6w/5AiPYQgaMUQ==", - "dev": true, - "requires": { - "@babel/core": "^7.4.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@types/babel__core": "^7.1.2", - "fs-extra": "^8.0.1", - "intl-messageformat-parser": "^1.8.1" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "intl-messageformat-parser": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz", - "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==", - "dev": true - } - } - }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -9921,6 +10344,31 @@ "node-addon-api": "*", "rimraf": "^2.4.0", "underscore": "^1.6.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + } } }, "clean-css": { @@ -10807,6 +11255,15 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, + "consolidate": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", + "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", + "dev": true, + "requires": { + "bluebird": "^3.7.2" + } + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -11282,6 +11739,31 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "copy-descriptor": { @@ -11609,6 +12091,12 @@ "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -11646,6 +12134,15 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -12024,6 +12521,15 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -14001,6 +14507,12 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -15177,6 +15689,31 @@ "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "optional": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "function-bind": { @@ -15238,6 +15775,15 @@ } } }, + "generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -16440,6 +16986,12 @@ } } }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -16848,6 +17400,18 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -17214,30 +17778,14 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "intl-format-cache": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-2.2.9.tgz", - "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==" - }, "intl-messageformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", - "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=", - "requires": { - "intl-messageformat-parser": "1.4.0" - } - }, - "intl-messageformat-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", - "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=" - }, - "intl-relativeformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz", - "integrity": "sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw==", + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.9.1.tgz", + "integrity": "sha512-cuzS/XKHn//hvKka77JKU2dseiVY2dofQjIOZv6ZFxFt4Z9sPXnZ7KQ9Ak2r+4XBCjI04MqJ1PhKs/3X22AkfA==", "requires": { - "intl-messageformat": "^2.0.0" + "@formatjs/fast-memoize": "1.2.0", + "@formatjs/icu-messageformat-parser": "2.0.11", + "tslib": "^2.1.0" } }, "invariant": { @@ -20505,6 +21053,16 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loud-rejection": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz", + "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.2" + } + }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -20574,6 +21132,15 @@ } } }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -20879,6 +21446,23 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -21686,6 +22270,31 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "ms": { @@ -22010,6 +22619,15 @@ "path-is-absolute": "^1.0.0" } }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", @@ -22150,6 +22768,19 @@ "tar": "^4" }, "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "nopt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", @@ -22159,6 +22790,14 @@ "osenv": "^0.1.4" } }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -22335,6 +22974,17 @@ "semver": "^5.7.1", "tar": "^4.4.12", "which": "^1.3.1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "nopt": { @@ -23619,6 +24269,84 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "requires": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -24577,48 +25305,30 @@ } }, "react-intl": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-2.7.2.tgz", - "integrity": "sha512-3dcNGLqEw2FKkX+1L2WYLgjP0MVJkvWuVd1uLcnwifIQe8JQvnd9Bss4hb4Gvg/YhBIRcs4LM6C2bAgyklucjw==", - "requires": { - "hoist-non-react-statics": "^2.5.5", - "intl-format-cache": "^2.0.5", - "intl-messageformat": "^2.1.0", - "intl-relativeformat": "^2.1.0", - "invariant": "^2.1.1" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-intl-translations-manager": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz", - "integrity": "sha512-EfBeugnOGFcdUbQyY9TqBMbuauQ8wm73ZqFr0UqCljhbXl7YDHQcVzclWFRkVmlUffzxitLQFhAZEVVeRNQSwA==", - "dev": true, - "requires": { - "chalk": "^2.3.2", - "glob": "^7.1.2", - "json-stable-stringify": "^1.0.1", - "mkdirp": "^0.5.1" + "version": "5.20.10", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.20.10.tgz", + "integrity": "sha512-zy0ZQhpjkGsKcK1BFo2HbGM/q8GBVovzoXZGQ76DowR0yr6UzQuPLkrlIrObL2zxIYiDaxaz+hUJaoa2a1xqOQ==", + "requires": { + "@formatjs/ecma402-abstract": "1.9.8", + "@formatjs/icu-messageformat-parser": "2.0.11", + "@formatjs/intl": "1.14.1", + "@formatjs/intl-displaynames": "5.2.3", + "@formatjs/intl-listformat": "6.3.3", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "17", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "9.9.1", + "tslib": "^2.1.0" }, "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "@types/react": { + "version": "17.0.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.20.tgz", + "integrity": "sha512-wWZrPlihslrPpcKyCSlmIlruakxr57/buQN1RjlIeaaTWDLtJkTtRW429MoQJergvVKc4IWBpRhWw7YNh/7GVA==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } } } @@ -25567,9 +26277,10 @@ "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" }, @@ -25578,6 +26289,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26522,6 +27234,12 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -26557,6 +27275,12 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", @@ -26961,6 +27685,12 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -27503,6 +28233,17 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "glob": { diff --git a/package.json b/package.json index f4ee15e34..f95116218 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,9 @@ "test": "jest", "test:watch": "jest --watch", "lint": "eslint \"{src,scripts,packages,uidev}/**/*.{js,jsx,ts,tsx}\" --quiet --fix", - "manage-translations": "node ./src/i18n/manage-translations.js", + "extract": "formatjs extract 'src/**/*.{js,ts}' --out-file temp.json --flatten --id-interpolation-pattern '[sha512:contenthash:base64:6]'", + "compile": "formatjs compile 'temp.json' --out-file src/i18n/locales/en-US.json", + "manage-translations": "npm run extract && npm run compile && rimraf temp.json", "prebuild": "preval-build-info-cli && gulp build", "build": "electron-builder", "commit": "git-cz", @@ -114,7 +116,7 @@ "react-dom": "16.14.0", "react-dropzone": "11.3.4", "react-electron-web-view": "2.0.1", - "react-intl": "2.7.2", + "react-intl": "5.20.10", "react-jss": "8.6.1", "react-loader": "2.4.7", "react-modal": "3.14.3", @@ -146,6 +148,7 @@ "@babel/register": "7.15.3", "@commitlint/cli": "13.1.0", "@commitlint/config-conventional": "13.1.0", + "@formatjs/cli": "4.2.33", "@tsconfig/node14": "1.0.1", "@types/color": "3.0.2", "@types/du": "1.0.1", @@ -163,7 +166,7 @@ "@typescript-eslint/eslint-plugin": "4.30.0", "@typescript-eslint/parser": "4.29.1", "all-contributors-cli": "6.20.0", - "babel-plugin-react-intl": "3.5.1", + "babel-plugin-formatjs": "10.3.8", "commitizen": "4.2.4", "concurrently": "6.2.1", "conventional-changelog-cli": "2.1.1", @@ -205,7 +208,7 @@ "node-abi": "2.30.0", "prettier": "2.3.2", "preval-build-info": "1.0.3", - "react-intl-translations-manager": "5.0.3", + "rimraf": "3.0.2", "sass": "1.37.5", "simple-git": "2.45.0", "terser": "4.8.0", diff --git a/src/I18n.js b/src/I18n.js index 13513fe73..6fb4cdc61 100644 --- a/src/I18n.js +++ b/src/I18n.js @@ -8,7 +8,9 @@ import translations from './i18n/translations'; import UserStore from './stores/UserStore'; import AppStore from './stores/AppStore'; -export default @inject('stores') @observer class I18N extends Component { +@inject('stores') +@observer +class I18N extends Component { componentDidUpdate() { window.ferdi.menu.rebuild(); } @@ -19,7 +21,9 @@ export default @inject('stores') @observer class I18N extends Component { return ( { window.ferdi.intl = intlProvider ? intlProvider.getChildContext().intl : null; }} + ref={intlProvider => { + window.ferdi.intl = intlProvider ? intlProvider.state.intl : null; + }} > {children} @@ -34,3 +38,5 @@ I18N.wrappedComponent.propTypes = { }).isRequired, children: oneOrManyChildElements.isRequired, }; + +export default I18N; diff --git a/src/components/AppUpdateInfoBar.js b/src/components/AppUpdateInfoBar.js index 30804262a..9dc86bd1d 100644 --- a/src/components/AppUpdateInfoBar.js +++ b/src/components/AppUpdateInfoBar.js @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import InfoBar from './ui/InfoBar'; import { GITHUB_FERDI_URL } from '../config'; @@ -9,15 +9,15 @@ import { openExternalUrl } from '../helpers/url-helpers'; const messages = defineMessages({ updateAvailable: { id: 'infobar.updateAvailable', - defaultMessage: '!!!A new update for Ferdi is available.', + defaultMessage: 'A new update for Ferdi is available.', }, changelog: { id: 'infobar.buttonChangelog', - defaultMessage: '!!!Changelog', + defaultMessage: 'Changelog', }, buttonInstallUpdate: { id: 'infobar.buttonInstallUpdate', - defaultMessage: '!!!Restart & install update', + defaultMessage: 'Restart & install update', }, }); @@ -27,12 +27,8 @@ class AppUpdateInfoBar extends Component { onHide: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { - const { intl } = this.context; + const { intl } = this.props; const { onInstallUpdate, onHide } = this.props; return ( @@ -61,4 +57,4 @@ class AppUpdateInfoBar extends Component { } } -export default AppUpdateInfoBar; +export default injectIntl(AppUpdateInfoBar); diff --git a/src/components/auth/AuthLayout.js b/src/components/auth/AuthLayout.js index 8235932c2..3e2b75731 100644 --- a/src/components/auth/AuthLayout.js +++ b/src/components/auth/AuthLayout.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { intlShape } from 'react-intl'; import { TitleBar } from 'electron-react-titlebar'; +import { injectIntl } from 'react-intl'; import Link from '../ui/Link'; import InfoBar from '../ui/InfoBar'; @@ -17,7 +17,6 @@ import { isWindows } from '../../environment'; import AppUpdateInfoBar from '../AppUpdateInfoBar'; import { GITHUB_FERDI_URL } from '../../config'; -export default @observer class AuthLayout extends Component { static propTypes = { @@ -36,10 +35,6 @@ class AuthLayout extends Component { shouldShowAppUpdateInfoBar: true, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { children, @@ -52,7 +47,8 @@ class AuthLayout extends Component { installAppUpdate, appUpdateIsDownloaded, } = this.props; - const { intl } = this.context; + + const { intl } = this.props; return ( <> @@ -108,3 +104,5 @@ class AuthLayout extends Component { ); } } + +export default injectIntl(AuthLayout); diff --git a/src/components/auth/ChangeServer.js b/src/components/auth/ChangeServer.js index 8e8a7af32..b98fb50f7 100644 --- a/src/components/auth/ChangeServer.js +++ b/src/components/auth/ChangeServer.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import Form from '../../lib/Form'; import Input from '../ui/Input'; import Select from '../ui/Select'; @@ -14,56 +14,65 @@ import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ headline: { id: 'changeserver.headline', - defaultMessage: '!!!Change server', + defaultMessage: 'Change server', }, label: { id: 'changeserver.label', - defaultMessage: '!!!Server', + defaultMessage: 'Server', }, warning: { id: 'changeserver.warning', - defaultMessage: '!!!Extra settings offered by Ferdi will not be saved', + defaultMessage: 'Extra settings offered by Ferdi will not be saved', }, customServerLabel: { id: 'changeserver.customServerLabel', - defaultMessage: '!!!Custom server', + defaultMessage: 'Custom server', }, urlError: { id: 'changeserver.urlError', - defaultMessage: '!!!Enter a valid URL', + defaultMessage: 'Enter a valid URL', }, }); -export default @observer class ChangeServer extends Component { +@observer +class ChangeServer extends Component { static propTypes = { onSubmit: PropTypes.func.isRequired, server: PropTypes.string.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - - ferdiServer=LIVE_FERDI_API; + ferdiServer = LIVE_FERDI_API; - franzServer=LIVE_FRANZ_API; + franzServer = LIVE_FRANZ_API; - defaultServers=[this.franzServer, this.ferdiServer]; + defaultServers = [this.franzServer, this.ferdiServer]; - form = new Form({ - fields: { - server: { - label: this.context.intl.formatMessage(messages.label), - value: this.props.server, - options: [{ value: this.ferdiServer, label: 'Ferdi' }, { value: this.franzServer, label: 'Franz' }, { value: this.defaultServers.includes(this.props.server) ? '' : this.props.server, label: 'Custom' }], - }, - customServer: { - label: this.context.intl.formatMessage(messages.customServerLabel), - value: '', - validators: [url, required], + form = new Form( + { + fields: { + server: { + label: this.props.intl.formatMessage(messages.label), + value: this.props.server, + options: [ + { value: this.ferdiServer, label: 'Ferdi' }, + { value: this.franzServer, label: 'Franz' }, + { + value: this.defaultServers.includes(this.props.server) + ? '' + : this.props.server, + label: 'Custom', + }, + ], + }, + customServer: { + label: this.props.intl.formatMessage(messages.customServerLabel), + value: '', + validators: [url, required], + }, }, }, - }, this.context.intl); + this.props.intl, + ); componentDidMount() { if (this.defaultServers.includes(this.props.server)) { @@ -77,13 +86,13 @@ export default @observer class ChangeServer extends Component { submit(e) { e.preventDefault(); this.form.submit({ - onSuccess: (form) => { + onSuccess: form => { if (!this.defaultServers.includes(form.values().server)) { form.$('server').onChange(form.values().customServer); } this.props.onSubmit(form.values()); }, - onError: (form) => { + onError: form => { if (this.defaultServers.includes(form.values().server)) { this.props.onSubmit(form.values()); } @@ -93,23 +102,21 @@ export default @observer class ChangeServer extends Component { render() { const { form } = this; - const { intl } = this.context; + const { intl } = this.props; return (
-
this.submit(e)}> + this.submit(e)}>

{intl.formatMessage(messages.headline)}

- {form.$('server').value === this.franzServer - && ( + {form.$('server').value === this.franzServer && ( {intl.formatMessage(messages.warning)} )} this.submit(e)} + onChange={e => this.submit(e)} field={form.$('customServer')} /> )} @@ -123,3 +130,5 @@ export default @observer class ChangeServer extends Component { ); } } + +export default injectIntl(ChangeServer); diff --git a/src/components/auth/Import.js b/src/components/auth/Import.js index 3073cad73..44cb7e791 100644 --- a/src/components/auth/Import.js +++ b/src/components/auth/Import.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router'; import classnames from 'classnames'; @@ -12,23 +12,22 @@ import Button from '../ui/Button'; const messages = defineMessages({ headline: { id: 'import.headline', - defaultMessage: '!!!Import your Ferdi 4 services', + defaultMessage: 'Import your Ferdi 4 services', }, notSupportedHeadline: { id: 'import.notSupportedHeadline', - defaultMessage: '!!!Services not yet supported in Ferdi 5', + defaultMessage: 'Services not yet supported in Ferdi 5', }, submitButtonLabel: { id: 'import.submit.label', - defaultMessage: '!!!Import {count} services', + defaultMessage: 'Import {count} services', }, skipButtonLabel: { id: 'import.skip.label', - defaultMessage: '!!!I want to add services manually', + defaultMessage: 'I want to add services manually', }, }); -export default @observer class Import extends Component { static propTypes = { @@ -38,17 +37,13 @@ class Import extends Component { inviteRoute: PropTypes.string.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - componentDidMount() { const config = { fields: { import: [ ...this.props.services - .filter((s) => s.recipe) - .map((s) => ({ + .filter(s => s.recipe) + .map(s => ({ fields: { add: { default: true, @@ -60,20 +55,20 @@ class Import extends Component { }, }; - this.form = new Form(config, this.context.intl); + this.form = new Form(config, this.props.intl); } submit(e) { const { services } = this.props; e.preventDefault(); this.form.submit({ - onSuccess: (form) => { + onSuccess: form => { const servicesImport = form .values() .import.map( - (value, i) => !value.add || services.filter((s) => s.recipe)[i], + (value, i) => !value.add || services.filter(s => s.recipe)[i], ) - .filter((s) => typeof s !== 'boolean'); + .filter(s => typeof s !== 'boolean'); this.props.onSubmit({ services: servicesImport }); }, @@ -82,18 +77,18 @@ class Import extends Component { } render() { - const { intl } = this.context; + const { intl } = this.props; const { services, isSubmitting, inviteRoute } = this.props; - const availableServices = services.filter((s) => s.recipe); - const unavailableServices = services.filter((s) => !s.recipe); + const availableServices = services.filter(s => s.recipe); + const unavailableServices = services.filter(s => !s.recipe); return (
this.submit(e)} + onSubmit={e => this.submit(e)} >

{intl.formatMessage(messages.headline)}

@@ -107,8 +102,8 @@ class Import extends Component {

{services - .filter((s) => !s.recipe) + .filter(s => !s.recipe) .map((service, i) => ( {service.name !== '' ? service.name : service.service} @@ -170,3 +165,5 @@ class Import extends Component { ); } } + +export default injectIntl(Import); diff --git a/src/components/auth/Invite.js b/src/components/auth/Invite.js index 4b4d63a6b..519691ede 100644 --- a/src/components/auth/Invite.js +++ b/src/components/auth/Invite.js @@ -1,7 +1,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router'; import classnames from 'classnames'; @@ -15,35 +15,34 @@ import Button from '../ui/Button'; const messages = defineMessages({ settingsHeadline: { id: 'settings.invite.headline', - defaultMessage: '!!!Invite Friends', + defaultMessage: 'Invite Friends', }, headline: { id: 'invite.headline.friends', - defaultMessage: '!!!Invite 3 of your friends or colleagues', + defaultMessage: 'Invite 3 of your friends or colleagues', }, nameLabel: { id: 'invite.name.label', - defaultMessage: '!!!Name', + defaultMessage: 'Name', }, emailLabel: { id: 'invite.email.label', - defaultMessage: '!!!Email address', + defaultMessage: 'Email address', }, submitButtonLabel: { id: 'invite.submit.label', - defaultMessage: '!!!Send invites', + defaultMessage: 'Send invites', }, skipButtonLabel: { id: 'invite.skip.label', - defaultMessage: '!!!I want to do this later', + defaultMessage: 'I want to do this later', }, inviteSuccessInfo: { id: 'invite.successInfo', - defaultMessage: '!!!Invitations sent successfully', + defaultMessage: 'Invitations sent successfully', }, }); -export default @observer class Invite extends Component { static propTypes = { @@ -59,10 +58,6 @@ class Invite extends Component { isLoadingInvite: false, }; - static contextTypes = { - intl: intlShape, - }; - state = { showSuccessInfo: false }; componentDidMount() { @@ -73,8 +68,8 @@ class Invite extends Component { ...Array(3).fill({ fields: { name: { - label: this.context.intl.formatMessage(messages.nameLabel), - placeholder: this.context.intl.formatMessage( + label: this.props.intl.formatMessage(messages.nameLabel), + placeholder: this.props.intl.formatMessage( messages.nameLabel, ), onChange: () => { @@ -83,8 +78,8 @@ class Invite extends Component { // related: ['invite.0.email'], // path accepted but does not work }, email: { - label: this.context.intl.formatMessage(messages.emailLabel), - placeholder: this.context.intl.formatMessage( + label: this.props.intl.formatMessage(messages.emailLabel), + placeholder: this.props.intl.formatMessage( messages.emailLabel, ), onChange: () => { @@ -97,7 +92,7 @@ class Invite extends Component { ], }, }, - this.context.intl, + this.props.intl, ); document.querySelector('input:first-child').focus(); @@ -107,7 +102,7 @@ class Invite extends Component { e.preventDefault(); this.form.submit({ - onSuccess: (form) => { + onSuccess: form => { this.props.onSubmit({ invites: form.values().invite }); this.form.clear(); @@ -121,13 +116,13 @@ class Invite extends Component { render() { const { form } = this; - const { intl } = this.context; + const { intl } = this.props; const { embed, isInviteSuccessful, isLoadingInvite } = this.props; const atLeastOneEmailAddress = form .$('invite') - .map((invite) => invite.$('email').value) - .some((emailValue) => emailValue.trim() !== ''); + .map(invite => invite.$('email').value) + .some(emailValue => emailValue.trim() !== ''); const sendButtonClassName = classnames({ auth__button: true, @@ -148,17 +143,14 @@ class Invite extends Component { )} - this.submit(e)} - > + this.submit(e)}> {!embed && ( )}

{intl.formatMessage(messages.headline)}

- {form.$('invite').map((invite) => ( + {form.$('invite').map(invite => (
@@ -193,9 +185,7 @@ class Invite extends Component { > {embed && (
-

- {this.context.intl.formatMessage(messages.settingsHeadline)} -

+

{this.props.intl.formatMessage(messages.settingsHeadline)}

)} {!embed ? ( @@ -207,3 +197,5 @@ class Invite extends Component { ); } } + +export default injectIntl(Invite); diff --git a/src/components/auth/Locked.js b/src/components/auth/Locked.js index 2ad8a2409..a507ba140 100644 --- a/src/components/auth/Locked.js +++ b/src/components/auth/Locked.js @@ -2,7 +2,7 @@ import { systemPreferences } from '@electron/remote'; import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import Form from '../../lib/Form'; import Input from '../ui/Input'; @@ -15,39 +15,41 @@ import { globalError as globalErrorPropType } from '../../prop-types'; const messages = defineMessages({ headline: { id: 'locked.headline', - defaultMessage: '!!!Locked', + defaultMessage: 'Locked', }, info: { id: 'locked.info', - defaultMessage: '!!!Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.', + defaultMessage: + 'Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.', }, touchId: { id: 'locked.touchId', - defaultMessage: '!!!Unlock with Touch ID', + defaultMessage: 'Unlock with Touch ID', }, touchIdPrompt: { id: 'locked.touchIdPrompt', - defaultMessage: '!!!unlock via Touch ID', + defaultMessage: 'unlock via Touch ID', }, passwordLabel: { id: 'locked.password.label', - defaultMessage: '!!!Password', + defaultMessage: 'Password', }, submitButtonLabel: { id: 'locked.submit.label', - defaultMessage: '!!!Unlock', + defaultMessage: 'Unlock', }, unlockWithPassword: { id: 'locked.unlockWithPassword', - defaultMessage: '!!!Unlock with Password', + defaultMessage: 'Unlock with Password', }, invalidCredentials: { id: 'locked.invalidCredentials', - defaultMessage: '!!!Password invalid', + defaultMessage: 'Password invalid', }, }); -export default @observer class Locked extends Component { +@observer +class Locked extends Component { static propTypes = { onSubmit: PropTypes.func.isRequired, unlock: PropTypes.func.isRequired, @@ -56,62 +58,57 @@ export default @observer class Locked extends Component { error: globalErrorPropType.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - - form = new Form({ - fields: { - password: { - label: this.context.intl.formatMessage(messages.passwordLabel), - value: '', - type: 'password', + form = new Form( + { + fields: { + password: { + label: this.props.intl.formatMessage(messages.passwordLabel), + value: '', + type: 'password', + }, }, }, - }, this.context.intl); + this.props.intl, + ); submit(e) { e.preventDefault(); this.form.submit({ - onSuccess: (form) => { + onSuccess: form => { this.props.onSubmit(form.values()); }, - onError: () => { }, + onError: () => {}, }); } touchIdUnlock() { - const { intl } = this.context; + const { intl } = this.props; - systemPreferences.promptTouchID(intl.formatMessage(messages.touchIdPrompt)).then(() => { - this.props.unlock(); - }); + systemPreferences + .promptTouchID(intl.formatMessage(messages.touchIdPrompt)) + .then(() => { + this.props.unlock(); + }); } render() { const { form } = this; - const { intl } = this.context; - const { - isSubmitting, - error, - useTouchIdToUnlock, - } = this.props; + const { intl } = this.props; + const { isSubmitting, error, useTouchIdToUnlock } = this.props; - const touchIdEnabled = isMac ? (useTouchIdToUnlock && systemPreferences.canPromptTouchID()) : false; - const submitButtonLabel = touchIdEnabled ? intl.formatMessage(messages.unlockWithPassword) : intl.formatMessage(messages.submitButtonLabel); + const touchIdEnabled = isMac + ? useTouchIdToUnlock && systemPreferences.canPromptTouchID() + : false; + const submitButtonLabel = touchIdEnabled + ? intl.formatMessage(messages.unlockWithPassword) + : intl.formatMessage(messages.submitButtonLabel); return (
- this.submit(e)}> - + this.submit(e)}> +

{intl.formatMessage(messages.headline)}

- - {intl.formatMessage(messages.info)} - + {intl.formatMessage(messages.info)} {touchIdEnabled && ( <> @@ -125,13 +122,11 @@ export default @observer class Locked extends Component { )} - + {error.code === 'invalid-credentials' && ( -

{intl.formatMessage(messages.invalidCredentials)}

+

+ {intl.formatMessage(messages.invalidCredentials)} +

)} {isSubmitting ? (
); } } + +export default injectIntl(Password); diff --git a/src/components/auth/SetupAssistant.js b/src/components/auth/SetupAssistant.js index ded36bbe7..299c40c63 100644 --- a/src/components/auth/SetupAssistant.js +++ b/src/components/auth/SetupAssistant.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import injectSheet from 'react-jss'; import classnames from 'classnames'; @@ -19,20 +19,20 @@ const SLACK_ID = 'slack'; const messages = defineMessages({ headline: { id: 'setupAssistant.headline', - defaultMessage: "!!!Let's get started", + defaultMessage: "Let's get started", }, subHeadline: { id: 'setupAssistant.subheadline', defaultMessage: - '!!!Choose from our most used services and get back on top of your messaging now.', + 'Choose from our most used services and get back on top of your messaging now.', }, submitButtonLabel: { id: 'setupAssistant.submit.label', - defaultMessage: "!!!Let's go", + defaultMessage: "Let's go", }, inviteSuccessInfo: { id: 'invite.successInfo', - defaultMessage: '!!!Invitations sent successfully', + defaultMessage: 'Invitations sent successfully', }, }); @@ -145,10 +145,6 @@ class SetupAssistant extends Component { isInviteSuccessful: false, }; - static contextTypes = { - intl: intlShape, - }; - state = { services: [ { @@ -189,7 +185,7 @@ class SetupAssistant extends Component { } render() { - const { intl } = this.context; + const { intl } = this.props; const { classes, isInviteSuccessful, @@ -330,4 +326,4 @@ class SetupAssistant extends Component { } } -export default SetupAssistant; +export default injectIntl(SetupAssistant); diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js index 6fb41a164..4d39835a2 100644 --- a/src/components/auth/Signup.js +++ b/src/components/auth/Signup.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, inject } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { isDevMode, useLiveAPI } from '../../environment'; import Form from '../../lib/Form'; @@ -19,63 +19,65 @@ import { termsBase } from '../../api/apiBase'; const messages = defineMessages({ headline: { id: 'signup.headline', - defaultMessage: '!!!Sign up', + defaultMessage: 'Sign up', }, firstnameLabel: { id: 'signup.firstname.label', - defaultMessage: '!!!Firstname', + defaultMessage: 'Firstname', }, lastnameLabel: { id: 'signup.lastname.label', - defaultMessage: '!!!Lastname', + defaultMessage: 'Lastname', }, emailLabel: { id: 'signup.email.label', - defaultMessage: '!!!Email address', + defaultMessage: 'Email address', }, // companyLabel: { // id: 'signup.company.label', - // defaultMessage: '!!!Company', + // defaultMessage: 'Company', // }, passwordLabel: { id: 'signup.password.label', - defaultMessage: '!!!Password', + defaultMessage: 'Password', }, legalInfo: { id: 'signup.legal.info', - defaultMessage: '!!!By creating a Ferdi account you accept the', + defaultMessage: 'By creating a Ferdi account you accept the', }, terms: { id: 'signup.legal.terms', - defaultMessage: '!!!Terms of service', + defaultMessage: 'Terms of service', }, privacy: { id: 'signup.legal.privacy', - defaultMessage: '!!!Privacy Statement', + defaultMessage: 'Privacy Statement', }, submitButtonLabel: { id: 'signup.submit.label', - defaultMessage: '!!!Create account', + defaultMessage: 'Create account', }, loginLink: { id: 'signup.link.login', - defaultMessage: '!!!Already have an account, sign in?', + defaultMessage: 'Already have an account, sign in?', }, changeServer: { id: 'login.changeServer', - defaultMessage: '!!!Change server', + defaultMessage: 'Change server', }, serverless: { id: 'services.serverless', - defaultMessage: '!!!Use Ferdi without an Account', + defaultMessage: 'Use Ferdi without an Account', }, emailDuplicate: { id: 'signup.emailDuplicate', - defaultMessage: '!!!A user with that email address already exists', + defaultMessage: 'A user with that email address already exists', }, }); -export default @inject('actions') @observer class Signup extends Component { +@inject('actions') +@observer +class Signup extends Component { static propTypes = { onSubmit: PropTypes.func.isRequired, isSubmitting: PropTypes.bool.isRequired, @@ -85,40 +87,39 @@ export default @inject('actions') @observer class Signup extends Component { actions: PropTypes.object.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - - form = new Form({ - fields: { - firstname: { - label: this.context.intl.formatMessage(messages.firstnameLabel), - value: '', - validators: [required], - }, - lastname: { - label: this.context.intl.formatMessage(messages.lastnameLabel), - value: '', - validators: [required], - }, - email: { - label: this.context.intl.formatMessage(messages.emailLabel), - value: '', - validators: [required, email], - }, - password: { - label: this.context.intl.formatMessage(messages.passwordLabel), - value: '', - validators: [required, minLength(6)], - type: 'password', + form = new Form( + { + fields: { + firstname: { + label: this.props.intl.formatMessage(messages.firstnameLabel), + value: '', + validators: [required], + }, + lastname: { + label: this.props.intl.formatMessage(messages.lastnameLabel), + value: '', + validators: [required], + }, + email: { + label: this.props.intl.formatMessage(messages.emailLabel), + value: '', + validators: [required, email], + }, + password: { + label: this.props.intl.formatMessage(messages.passwordLabel), + value: '', + validators: [required, minLength(6)], + type: 'password', + }, }, }, - }, this.context.intl); + this.props.intl, + ); submit(e) { e.preventDefault(); this.form.submit({ - onSuccess: (form) => { + onSuccess: form => { this.props.onSubmit(form.values()); }, onError: () => {}, @@ -131,24 +132,22 @@ export default @inject('actions') @observer class Signup extends Component { render() { const { form } = this; - const { intl } = this.context; - const { - isSubmitting, loginRoute, error, changeServerRoute, - } = this.props; + const { intl } = this.props; + const { isSubmitting, loginRoute, error, changeServerRoute } = this.props; return (
- this.submit(e)}> - + this.submit(e)} + > +

{intl.formatMessage(messages.headline)}

{isDevMode && !useLiveAPI && ( - In Dev Mode your data is not persistent. Please use the live app for accesing the production API. + In Dev Mode your data is not persistent. Please use the live app + for accesing the production API. )}
@@ -162,7 +161,9 @@ export default @inject('actions') @observer class Signup extends Component { scorePassword /> {error.code === 'email-duplicate' && ( -

{intl.formatMessage(messages.emailDuplicate)}

+

+ {intl.formatMessage(messages.emailDuplicate)} +

)} {isSubmitting ? (
); } } + +export default injectIntl(Signup); diff --git a/src/components/auth/Welcome.js b/src/components/auth/Welcome.js index cb522e26e..2d2e2ab28 100644 --- a/src/components/auth/Welcome.js +++ b/src/components/auth/Welcome.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import serverlessLogin from '../../helpers/serverless-helpers'; import Link from '../ui/Link'; @@ -10,19 +10,21 @@ import Link from '../ui/Link'; const messages = defineMessages({ signupButton: { id: 'welcome.signupButton', - defaultMessage: '!!!Create a free account', + defaultMessage: 'Create a free account', }, loginButton: { id: 'welcome.loginButton', - defaultMessage: '!!!Login to your account', + defaultMessage: 'Login to your account', }, serverless: { id: 'services.serverless', - defaultMessage: '!!!Use Ferdi without an Account', + defaultMessage: 'Use Ferdi without an Account', }, }); -export default @inject('actions') @observer class Login extends Component { +@inject('actions') +@observer +class Login extends Component { static propTypes = { loginRoute: PropTypes.string.isRequired, signupRoute: PropTypes.string.isRequired, @@ -31,27 +33,22 @@ export default @inject('actions') @observer class Login extends Component { actions: PropTypes.object.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - useLocalServer() { serverlessLogin(this.props.actions); } render() { - const { intl } = this.context; - const { - loginRoute, - signupRoute, - changeServerRoute, - recipes, - } = this.props; + const { intl } = this.props; + const { loginRoute, signupRoute, changeServerRoute, recipes } = this.props; return (
- + {/* */}

Ferdi

@@ -73,27 +70,21 @@ export default @inject('actions') @observer class Login extends Component {
- Change server
- {recipes.map((recipe) => ( -
- + {recipes.map(recipe => ( +
+
))}
@@ -101,3 +92,5 @@ export default @inject('actions') @observer class Login extends Component { ); } } + +export default injectIntl(Login); diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js index e6e5d40fe..83e037083 100644 --- a/src/components/layout/AppLayout.js +++ b/src/components/layout/AppLayout.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { TitleBar } from 'electron-react-titlebar'; import injectSheet from 'react-jss'; @@ -27,20 +27,20 @@ function createMarkup(HTMLString) { const messages = defineMessages({ servicesUpdated: { id: 'infobar.servicesUpdated', - defaultMessage: '!!!Your services have been updated.', + defaultMessage: 'Your services have been updated.', }, buttonReloadServices: { id: 'infobar.buttonReloadServices', - defaultMessage: '!!!Reload services', + defaultMessage: 'Reload services', }, requiredRequestsFailed: { id: 'infobar.requiredRequestsFailed', - defaultMessage: '!!!Could not load services and user information', + defaultMessage: 'Could not load services and user information', }, authRequestFailed: { id: 'infobar.authRequestFailed', defaultMessage: - '!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.', + 'There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.', }, }); @@ -94,10 +94,6 @@ class AppLayout extends Component { children: [], }; - static contextTypes = { - intl: intlShape, - }; - render() { const { classes, @@ -119,7 +115,7 @@ class AppLayout extends Component { areRequiredRequestsLoading, } = this.props; - const { intl } = this.context; + const { intl } = this.props; return ( @@ -213,4 +209,4 @@ class AppLayout extends Component { } } -export default AppLayout; +export default injectIntl(AppLayout); diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js index 1ee7733b9..87233f7ca 100644 --- a/src/components/layout/Sidebar.js +++ b/src/components/layout/Sidebar.js @@ -1,12 +1,19 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import ReactTooltip from 'react-tooltip'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { inject, observer } from 'mobx-react'; import { Link } from 'react-router'; import Tabbar from '../services/tabs/Tabbar'; -import { settingsShortcutKey, lockFerdiShortcutKey, todosToggleShortcutKey, workspaceToggleShortcutKey, addNewServiceShortcutKey, muteFerdiShortcutKey } from '../../environment'; +import { + settingsShortcutKey, + lockFerdiShortcutKey, + todosToggleShortcutKey, + workspaceToggleShortcutKey, + addNewServiceShortcutKey, + muteFerdiShortcutKey, +} from '../../environment'; import { workspaceStore } from '../../features/workspaces'; import { todosStore } from '../../features/todos'; import { todoActions } from '../../features/todos/actions'; @@ -17,39 +24,41 @@ import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ addNewService: { id: 'sidebar.addNewService', - defaultMessage: '!!!Add new service', + defaultMessage: 'Add new service', }, mute: { id: 'sidebar.muteApp', - defaultMessage: '!!!Disable notifications & audio', + defaultMessage: 'Disable notifications & audio', }, unmute: { id: 'sidebar.unmuteApp', - defaultMessage: '!!!Enable notifications & audio', + defaultMessage: 'Enable notifications & audio', }, openWorkspaceDrawer: { id: 'sidebar.openWorkspaceDrawer', - defaultMessage: '!!!Open workspace drawer', + defaultMessage: 'Open workspace drawer', }, closeWorkspaceDrawer: { id: 'sidebar.closeWorkspaceDrawer', - defaultMessage: '!!!Close workspace drawer', + defaultMessage: 'Close workspace drawer', }, openTodosDrawer: { id: 'sidebar.openTodosDrawer', - defaultMessage: '!!!Open Ferdi Todos', + defaultMessage: 'Open Ferdi Todos', }, closeTodosDrawer: { id: 'sidebar.closeTodosDrawer', - defaultMessage: '!!!Close Ferdi Todos', + defaultMessage: 'Close Ferdi Todos', }, lockFerdi: { id: 'sidebar.lockFerdi', - defaultMessage: '!!!Lock Ferdi', + defaultMessage: 'Lock Ferdi', }, }); -export default @inject('stores', 'actions') @observer class Sidebar extends Component { +@inject('stores', 'actions') +@observer +class Sidebar extends Component { static propTypes = { openSettings: PropTypes.func.isRequired, closeSettings: PropTypes.func.isRequired, @@ -79,10 +88,6 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp }).isRequired, }; - static contextTypes = { - intl: intlShape, - }; - state = { tooltipEnabled: true, }; @@ -115,14 +120,14 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp actions, isTodosServiceActive, } = this.props; - const { intl } = this.context; - const todosToggleMessage = ( - todosStore.isTodosPanelVisible ? messages.closeTodosDrawer : messages.openTodosDrawer - ); + const { intl } = this.props; + const todosToggleMessage = todosStore.isTodosPanelVisible + ? messages.closeTodosDrawer + : messages.openTodosDrawer; - const workspaceToggleMessage = ( - isWorkspaceDrawerOpen ? messages.closeWorkspaceDrawer : messages.openWorkspaceDrawer - ); + const workspaceToggleMessage = isWorkspaceDrawerOpen + ? messages.closeWorkspaceDrawer + : messages.openWorkspaceDrawer; const isLoggedIn = Boolean(localStorage.getItem('authToken')); return ( @@ -133,9 +138,9 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp disableToolTip={() => this.disableToolTip()} useVerticalStyle={stores.settings.all.app.useVerticalStyle} /> - { isLoggedIn ? ( + {isLoggedIn ? ( <> - { stores.settings.all.app.lockingFeatureEnabled ? ( + {stores.settings.all.app.lockingFeatureEnabled ? ( ) : null} - {todosStore.isFeatureEnabled && todosStore.isFeatureEnabledByUser ? ( + {todosStore.isFeatureEnabled && + todosStore.isFeatureEnabledByUser ? ( - ) : null} + ) : null} {workspaceStore.isFeatureEnabled ? ( @@ -185,8 +201,12 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp toggleMuteApp(); this.updateToolTip(); }} - className={`sidebar__button sidebar__button--audio ${isAppMuted ? 'is-muted' : ''}`} - data-tip={`${intl.formatMessage(isAppMuted ? messages.unmute : messages.mute)} (${muteFerdiShortcutKey(false)})`} + className={`sidebar__button sidebar__button--audio ${ + isAppMuted ? 'is-muted' : '' + }`} + data-tip={`${intl.formatMessage( + isAppMuted ? messages.unmute : messages.mute, + )} (${muteFerdiShortcutKey(false)})`} > @@ -194,7 +214,9 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp type="button" onClick={() => openSettings({ path: 'recipes' })} className="sidebar__button sidebar__button--new-service" - data-tip={`${intl.formatMessage(messages.addNewService)} (${addNewServiceShortcutKey(false)})`} + data-tip={`${intl.formatMessage( + messages.addNewService, + )} (${addNewServiceShortcutKey(false)})`} > @@ -212,15 +234,17 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp type="button" onClick={() => openSettings({ path: 'app' })} className="sidebar__button sidebar__button--settings" - data-tip={`${intl.formatMessage(globalMessages.settings)} (${settingsShortcutKey(false)})`} + data-tip={`${intl.formatMessage( + globalMessages.settings, + )} (${settingsShortcutKey(false)})`} > - { (this.props.stores.app.updateStatus === this.props.stores.app.updateStatusTypes.AVAILABLE - || this.props.stores.app.updateStatus === this.props.stores.app.updateStatusTypes.DOWNLOADED) && ( - - • - - ) } + {(this.props.stores.app.updateStatus === + this.props.stores.app.updateStatusTypes.AVAILABLE || + this.props.stores.app.updateStatus === + this.props.stores.app.updateStatusTypes.DOWNLOADED) && ( + + )} {this.state.tooltipEnabled && ( @@ -229,3 +253,5 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp ); } } + +export default injectIntl(Sidebar); diff --git a/src/components/services/content/ConnectionLostBanner.js b/src/components/services/content/ConnectionLostBanner.js index ebe863333..423edb3c7 100644 --- a/src/components/services/content/ConnectionLostBanner.js +++ b/src/components/services/content/ConnectionLostBanner.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import injectSheet from 'react-jss'; import { Icon } from '@meetfranz/ui'; -import { intlShape, defineMessages } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { mdiAlert } from '@mdi/js'; import { LIVE_API_FERDI_WEBSITE } from '../../../config'; @@ -12,15 +12,15 @@ import { LIVE_API_FERDI_WEBSITE } from '../../../config'; const messages = defineMessages({ text: { id: 'connectionLostBanner.message', - defaultMessage: '!!!Oh no! Ferdi lost the connection to {name}.', + defaultMessage: 'Oh no! Ferdi lost the connection to {name}.', }, moreInformation: { id: 'connectionLostBanner.informationLink', - defaultMessage: '!!!What happened?', + defaultMessage: 'What happened?', }, cta: { id: 'connectionLostBanner.cta', - defaultMessage: '!!!Reload Service', + defaultMessage: 'Reload Service', }, }); @@ -78,16 +78,12 @@ class ConnectionLostBanner extends Component { reload: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - inputRef = React.createRef(); render() { const { classes, name, reload } = this.props; - const { intl } = this.context; + const { intl } = this.props; return (
@@ -110,4 +106,4 @@ class ConnectionLostBanner extends Component { } } -export default ConnectionLostBanner; +export default injectIntl(ConnectionLostBanner); diff --git a/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js b/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js index 36e0ac418..41d84c0b0 100644 --- a/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js +++ b/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import injectSheet from 'react-jss'; import Button from '../../../ui/Button'; @@ -11,27 +11,29 @@ import styles from './styles'; const messages = defineMessages({ headline: { id: 'service.errorHandler.headline', - defaultMessage: '!!!Oh no!', + defaultMessage: 'Oh no!', }, text: { id: 'service.errorHandler.text', - defaultMessage: '!!!{name} has failed to load.', + defaultMessage: '{name} has failed to load.', }, action: { id: 'service.errorHandler.action', - defaultMessage: '!!!Reload {name}', + defaultMessage: 'Reload {name}', }, editAction: { id: 'service.errorHandler.editAction', - defaultMessage: '!!!Edit {name}', + defaultMessage: 'Edit {name}', }, errorMessage: { id: 'service.errorHandler.message', - defaultMessage: '!!!Error:', + defaultMessage: 'Error:', }, }); -export default @injectSheet(styles) @observer class WebviewErrorHandler extends Component { +@injectSheet(styles) +@observer +class WebviewErrorHandler extends Component { static propTypes = { name: PropTypes.string.isRequired, reload: PropTypes.func.isRequired, @@ -40,30 +42,16 @@ export default @injectSheet(styles) @observer class WebviewErrorHandler extends classes: PropTypes.object.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { - const { - name, - reload, - edit, - errorMessage, - classes, - } = this.props; - const { intl } = this.context; + const { name, reload, edit, errorMessage, classes } = this.props; + const { intl } = this.props; return (

{intl.formatMessage(messages.headline)}

{intl.formatMessage(messages.text, { name })}

- - {intl.formatMessage(messages.errorMessage)} - : - - {' '} + {intl.formatMessage(messages.errorMessage)}:{' '} {errorMessage}

@@ -82,3 +70,5 @@ export default @injectSheet(styles) @observer class WebviewErrorHandler extends ); } } + +export default injectIntl(WebviewErrorHandler); diff --git a/src/components/services/content/ServiceDisabled.js b/src/components/services/content/ServiceDisabled.js index d0f12256e..e59ed58bd 100644 --- a/src/components/services/content/ServiceDisabled.js +++ b/src/components/services/content/ServiceDisabled.js @@ -1,38 +1,35 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import Button from '../../ui/Button'; const messages = defineMessages({ headline: { id: 'service.disabledHandler.headline', - defaultMessage: '!!!{name} is disabled', + defaultMessage: '{name} is disabled', }, action: { id: 'service.disabledHandler.action', - defaultMessage: '!!!Enable {name}', + defaultMessage: 'Enable {name}', }, }); -export default @observer class ServiceDisabled extends Component { +@observer +class ServiceDisabled extends Component { static propTypes = { name: PropTypes.string.isRequired, enable: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - countdownInterval = null; countdownIntervalTimeout = 1000; render() { const { name, enable } = this.props; - const { intl } = this.context; + const { intl } = this.props; return (
@@ -46,3 +43,5 @@ export default @observer class ServiceDisabled extends Component { ); } } + +export default injectIntl(ServiceDisabled); diff --git a/src/components/services/content/ServiceView.js b/src/components/services/content/ServiceView.js index 3fc084ff0..fa866e153 100644 --- a/src/components/services/content/ServiceView.js +++ b/src/components/services/content/ServiceView.js @@ -15,7 +15,9 @@ import SettingsStore from '../../../stores/SettingsStore'; import WebControlsScreen from '../../../features/webControls/containers/WebControlsScreen'; import { CUSTOM_WEBSITE_RECIPE_ID } from '../../../config'; -export default @inject('stores', 'actions') @observer class ServiceView extends Component { +@inject('stores', 'actions') +@observer +class ServiceView extends Component { static propTypes = { service: PropTypes.instanceOf(ServiceModel).isRequired, setWebviewReference: PropTypes.func.isRequired, @@ -63,7 +65,7 @@ export default @inject('stores', 'actions') @observer class ServiceView extends clearTimeout(this.hibernationTimer); } - updateTargetUrl = (event) => { + updateTargetUrl = event => { let visible = true; if (event.url === '' || event.url === '#') { visible = false; @@ -86,11 +88,12 @@ export default @inject('stores', 'actions') @observer class ServiceView extends isSpellcheckerEnabled, } = this.props; - const { - navigationBarBehaviour, - } = stores.settings.app; + const { navigationBarBehaviour } = stores.settings.app; - const showNavBar = navigationBarBehaviour === 'always' || (navigationBarBehaviour === 'custom' && service.recipe.id === CUSTOM_WEBSITE_RECIPE_ID); + const showNavBar = + navigationBarBehaviour === 'always' || + (navigationBarBehaviour === 'custom' && + service.recipe.id === CUSTOM_WEBSITE_RECIPE_ID); const webviewClasses = classnames({ services__webview: true, @@ -101,9 +104,7 @@ export default @inject('stores', 'actions') @observer class ServiceView extends let statusBar = null; if (this.state.statusBarVisible) { - statusBar = ( - - ); + statusBar = ; } return ( @@ -117,11 +118,11 @@ export default @inject('stores', 'actions') @observer class ServiceView extends reload={reload} /> )} - {service.isEnabled && service.isLoading && service.isFirstLoad && !service.isServiceAccessRestricted && ( - + {service.isEnabled && + service.isLoading && + service.isFirstLoad && + !service.isServiceAccessRestricted && ( + )} {service.isError && ( {!service.isHibernating ? ( <> - {showNavBar && ( - - )} + {showNavBar && } ) : (
- 😴 - {' '} - This service is currently hibernating. If this page doesn't close soon, please try reloading Ferdi. + + 😴 + {' '} + This service is currently hibernating. If this page doesn't + close soon, please try reloading Ferdi.
)} @@ -171,3 +172,5 @@ export default @inject('stores', 'actions') @observer class ServiceView extends ); } } + +export default ServiceView; diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js index bb93ff7d4..fb43fb816 100644 --- a/src/components/services/content/Services.js +++ b/src/components/services/content/Services.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; import { Link } from 'react-router'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import Confetti from 'react-confetti'; import ms from 'ms'; import injectSheet from 'react-jss'; @@ -14,23 +14,24 @@ import serverlessLogin from '../../../helpers/serverless-helpers'; const messages = defineMessages({ welcome: { id: 'services.welcome', - defaultMessage: '!!!Welcome to Ferdi', + defaultMessage: 'Welcome to Ferdi', }, getStarted: { id: 'services.getStarted', - defaultMessage: '!!!Get started', + defaultMessage: 'Get started', }, login: { id: 'services.login', - defaultMessage: '!!!Please login to use Ferdi.', + defaultMessage: 'Please login to use Ferdi.', }, serverless: { id: 'services.serverless', - defaultMessage: '!!!Use Ferdi without an Account', + defaultMessage: 'Use Ferdi without an Account', }, serverInfo: { id: 'services.serverInfo', - defaultMessage: '!!!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!', + defaultMessage: + '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!', }, }); @@ -43,7 +44,10 @@ const styles = { }, }; -export default @injectSheet(styles) @inject('actions') @observer class Services extends Component { +@injectSheet(styles) +@inject('actions') +@observer +class Services extends Component { static propTypes = { services: MobxPropTypes.arrayOrObservableArray, setWebviewReference: PropTypes.func.isRequired, @@ -63,10 +67,6 @@ export default @injectSheet(styles) @inject('actions') @observer class Services services: [], }; - static contextTypes = { - intl: intlShape, - }; - state = { showConfetti: true, }; @@ -112,11 +112,9 @@ export default @injectSheet(styles) @inject('actions') @observer class Services isSpellcheckerEnabled, } = this.props; - const { - showConfetti, - } = this.state; + const { showConfetti } = this.state; - const { intl } = this.context; + const { intl } = this.props; const isLoggedIn = Boolean(localStorage.getItem('authToken')); return ( @@ -131,25 +129,28 @@ export default @injectSheet(styles) @inject('actions') @observer class Services
)} {services.length === 0 && ( - +
- Logo + Logo

{intl.formatMessage(messages.welcome)}

- { !isLoggedIn && ( + {!isLoggedIn && ( <>

{intl.formatMessage(messages.login)}

{intl.formatMessage(messages.serverInfo)}

- ) } - - - { isLoggedIn ? intl.formatMessage(messages.getStarted) : 'Login' } + )} + + + {isLoggedIn + ? intl.formatMessage(messages.getStarted) + : 'Login'} {!isLoggedIn && (
); } } + +export default injectIntl(Services); diff --git a/src/components/services/content/WebviewCrashHandler.js b/src/components/services/content/WebviewCrashHandler.js index 10ff0bbbb..a332602be 100644 --- a/src/components/services/content/WebviewCrashHandler.js +++ b/src/components/services/content/WebviewCrashHandler.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import ms from 'ms'; import Button from '../../ui/Button'; @@ -9,35 +9,33 @@ import Button from '../../ui/Button'; const messages = defineMessages({ headline: { id: 'service.crashHandler.headline', - defaultMessage: '!!!Oh no!', + defaultMessage: 'Oh no!', }, text: { id: 'service.crashHandler.text', - defaultMessage: '!!!{name} has caused an error.', + defaultMessage: '{name} has caused an error.', }, action: { id: 'service.crashHandler.action', - defaultMessage: '!!!Reload {name}', + defaultMessage: 'Reload {name}', }, autoReload: { id: 'service.crashHandler.autoReload', - defaultMessage: '!!!Trying to automatically restore {name} in {seconds} seconds', + defaultMessage: + 'Trying to automatically restore {name} in {seconds} seconds', }, }); -export default @observer class WebviewCrashHandler extends Component { +@observer +class WebviewCrashHandler extends Component { static propTypes = { name: PropTypes.string.isRequired, reload: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - state = { countdown: ms('10s'), - } + }; countdownInterval = null; @@ -47,7 +45,7 @@ export default @observer class WebviewCrashHandler extends Component { const { reload } = this.props; this.countdownInterval = setInterval(() => { - this.setState((prevState) => ({ + this.setState(prevState => ({ countdown: prevState.countdown - this.countdownIntervalTimeout, })); @@ -60,7 +58,7 @@ export default @observer class WebviewCrashHandler extends Component { render() { const { name, reload } = this.props; - const { intl } = this.context; + const { intl } = this.props; return (
@@ -82,3 +80,5 @@ export default @observer class WebviewCrashHandler extends Component { ); } } + +export default injectIntl(WebviewCrashHandler); diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js index e5892be5d..b1a3ffbbb 100644 --- a/src/components/services/tabs/TabItem.js +++ b/src/components/services/tabs/TabItem.js @@ -1,6 +1,6 @@ import { Menu, dialog, app, getCurrentWindow } from '@electron/remote'; import React, { Component } from 'react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -20,56 +20,55 @@ const IS_SERVICE_DEBUGGING_ENABLED = ( const messages = defineMessages({ reload: { id: 'tabs.item.reload', - defaultMessage: '!!!Reload', + defaultMessage: 'Reload', }, disableNotifications: { id: 'tabs.item.disableNotifications', - defaultMessage: '!!!Disable notifications', + defaultMessage: 'Disable notifications', }, enableNotifications: { id: 'tabs.item.enableNotification', - defaultMessage: '!!!Enable notifications', + defaultMessage: 'Enable notifications', }, disableAudio: { id: 'tabs.item.disableAudio', - defaultMessage: '!!!Disable audio', + defaultMessage: 'Disable audio', }, enableAudio: { id: 'tabs.item.enableAudio', - defaultMessage: '!!!Enable audio', + defaultMessage: 'Enable audio', }, enableDarkMode: { id: 'tabs.item.enableDarkMode', - defaultMessage: '!!!Enable Dark mode', + defaultMessage: 'Enable Dark mode', }, disableDarkMode: { id: 'tabs.item.disableDarkMode', - defaultMessage: '!!!Disable Dark mode', + defaultMessage: 'Disable Dark mode', }, disableService: { id: 'tabs.item.disableService', - defaultMessage: '!!!Disable Service', + defaultMessage: 'Disable Service', }, enableService: { id: 'tabs.item.enableService', - defaultMessage: '!!!Enable Service', + defaultMessage: 'Enable Service', }, hibernateService: { id: 'tabs.item.hibernateService', - defaultMessage: '!!!Hibernate Service', + defaultMessage: 'Hibernate Service', }, wakeUpService: { id: 'tabs.item.wakeUpService', - defaultMessage: '!!!Wake Up Service', + defaultMessage: 'Wake Up Service', }, deleteService: { id: 'tabs.item.deleteService', - defaultMessage: '!!!Delete Service', + defaultMessage: 'Delete Service', }, confirmDeleteService: { id: 'tabs.item.confirmDeleteService', - defaultMessage: - '!!!Do you really want to delete the {serviceName} service?', + defaultMessage: 'Do you really want to delete the {serviceName} service?', }, }); @@ -134,10 +133,6 @@ class TabItem extends Component { showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - @observable isPolled = false; @observable isPollAnswered = false; @@ -185,7 +180,7 @@ class TabItem extends Component { showMessageBadgeWhenMutedSetting, showMessageBadgesEvenWhenMuted, } = this.props; - const { intl } = this.context; + const { intl } = this.props; const menuTemplate = [ { @@ -256,7 +251,10 @@ class TabItem extends Component { detail: intl.formatMessage(messages.confirmDeleteService, { serviceName: service.name || service.recipe.name, }), - buttons: [intl.formatMessage(globalMessages.yes), intl.formatMessage(globalMessages.no)], + buttons: [ + intl.formatMessage(globalMessages.yes), + intl.formatMessage(globalMessages.no), + ], }); if (selection === 0) { deleteService(); @@ -304,7 +302,9 @@ class TabItem extends Component { onClick={clickHandler} onContextMenu={() => menu.popup(getCurrentWindow())} data-tip={`${service.name} ${ - shortcutIndex <= 9 ? `(${cmdOrCtrlShortcutKey(false)}+${shortcutIndex})` : '' + shortcutIndex <= 9 + ? `(${cmdOrCtrlShortcutKey(false)}+${shortcutIndex})` + : '' }`} > @@ -332,4 +332,4 @@ class TabItem extends Component { } } -export default SortableElement(TabItem); +export default injectIntl(SortableElement(TabItem)); diff --git a/src/components/services/tabs/Tabbar.js b/src/components/services/tabs/Tabbar.js index c1421a2b1..a77799819 100644 --- a/src/components/services/tabs/Tabbar.js +++ b/src/components/services/tabs/Tabbar.js @@ -4,7 +4,8 @@ import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; import TabBarSortableList from './TabBarSortableList'; -export default @observer class TabBar extends Component { +@observer +class TabBar extends Component { static propTypes = { services: MobxPropTypes.arrayOrObservableArray.isRequired, setActive: PropTypes.func.isRequired, @@ -26,16 +27,13 @@ export default @observer class TabBar extends Component { }; onSortEnd = ({ oldIndex, newIndex }) => { - const { - enableToolTip, - reorder, - } = this.props; + const { enableToolTip, reorder } = this.props; enableToolTip(); reorder({ oldIndex, newIndex }); }; - shouldPreventSorting = (event) => event.target.tagName !== 'LI'; + shouldPreventSorting = event => event.target.tagName !== 'LI'; toggleService = ({ serviceId, isEnabled }) => { const { updateService } = this.props; @@ -102,10 +100,10 @@ export default @observer class TabBar extends Component { toggleAudio={toggleAudio} toggleDarkMode={toggleDarkMode} deleteService={deleteService} - disableService={(args) => this.disableService(args)} - enableService={(args) => this.enableService(args)} - hibernateService={(args) => this.hibernateService(args)} - wakeUpService={(args) => this.wakeUpService(args)} + disableService={args => this.disableService(args)} + enableService={args => this.enableService(args)} + hibernateService={args => this.hibernateService(args)} + wakeUpService={args => this.wakeUpService(args)} openSettings={openSettings} distance={20} axis={axis} @@ -118,3 +116,5 @@ export default @observer class TabBar extends Component { ); } } + +export default TabBar; diff --git a/src/components/settings/SettingsLayout.js b/src/components/settings/SettingsLayout.js index 5b3b754fa..0574b3765 100644 --- a/src/components/settings/SettingsLayout.js +++ b/src/components/settings/SettingsLayout.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import ErrorBoundary from '../util/ErrorBoundary'; import { oneOrManyChildElements } from '../../prop-types'; @@ -10,11 +10,10 @@ import Appear from '../ui/effects/Appear'; const messages = defineMessages({ closeSettings: { id: 'settings.app.closeSettings', - defaultMessage: '!!!Close settings', + defaultMessage: 'Close settings', }, }); -export default @observer class SettingsLayout extends Component { static propTypes = { @@ -23,10 +22,6 @@ class SettingsLayout extends Component { closeSettings: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - componentDidMount() { document.addEventListener('keydown', this.handleKeyDown.bind(this), false); } @@ -49,7 +44,7 @@ class SettingsLayout extends Component { render() { const { navigation, children, closeSettings } = this.props; - const { intl } = this.context; + const { intl } = this.props; return ( @@ -77,3 +72,5 @@ class SettingsLayout extends Component { ); } } + +export default injectIntl(SettingsLayout); diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index ef7748343..933d47d12 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import ReactTooltip from 'react-tooltip'; import { H1, H2 } from '@meetfranz/ui'; @@ -13,7 +13,7 @@ import { LOCAL_SERVER, LIVE_FRANZ_API } from '../../../config'; const messages = defineMessages({ headline: { id: 'settings.account.headline', - defaultMessage: '!!!Account', + defaultMessage: 'Account', }, headlineDangerZone: { id: 'settings.account.headlineDangerZone', @@ -21,7 +21,7 @@ const messages = defineMessages({ }, accountEditButton: { id: 'settings.account.account.editButton', - defaultMessage: '!!!Edit Account', + defaultMessage: 'Edit Account', }, invoicesButton: { id: 'settings.account.headlineInvoices', @@ -29,29 +29,29 @@ const messages = defineMessages({ }, userInfoRequestFailed: { id: 'settings.account.userInfoRequestFailed', - defaultMessage: '!!!Could not load user information', + defaultMessage: 'Could not load user information', }, tryReloadUserInfoRequest: { id: 'settings.account.tryReloadUserInfoRequest', - defaultMessage: '!!!Try again', + defaultMessage: 'Try again', }, deleteAccount: { id: 'settings.account.deleteAccount', - defaultMessage: '!!!Delete account', + defaultMessage: 'Delete account', }, deleteInfo: { id: 'settings.account.deleteInfo', defaultMessage: - "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", + "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", }, deleteEmailSent: { id: 'settings.account.deleteEmailSent', defaultMessage: - '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', + 'You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', }, yourLicense: { id: 'settings.account.yourLicense', - defaultMessage: '!!!Your Franz License:', + defaultMessage: 'Your Franz License:', }, accountUnavailable: { id: 'settings.account.accountUnavailable', @@ -59,7 +59,8 @@ const messages = defineMessages({ }, accountUnavailableInfo: { id: 'settings.account.accountUnavailableInfo', - defaultMessage: '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.', + defaultMessage: + '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.', }, }); @@ -78,10 +79,6 @@ class AccountDashboard extends Component { server: PropTypes.string.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { user, @@ -95,7 +92,7 @@ class AccountDashboard extends Component { openInvoices, server, } = this.props; - const { intl } = this.context; + const { intl } = this.props; const isUsingWithoutAccount = server === LOCAL_SERVER; const isUsingFranzServer = server === LIVE_FRANZ_API; @@ -182,9 +179,7 @@ class AccountDashboard extends Component {

{intl.formatMessage(messages.yourLicense)}

-

- Franz -

+

Franz

); } } + +export default injectIntl(SettingsNavigation); diff --git a/src/components/settings/recipes/RecipeItem.js b/src/components/settings/recipes/RecipeItem.js index 55f415bd5..ca188aa99 100644 --- a/src/components/settings/recipes/RecipeItem.js +++ b/src/components/settings/recipes/RecipeItem.js @@ -4,7 +4,8 @@ import { observer } from 'mobx-react'; import RecipePreviewModel from '../../../models/RecipePreview'; -export default @observer class RecipeItem extends Component { +@observer +class RecipeItem extends Component { static propTypes = { recipe: PropTypes.instanceOf(RecipePreviewModel).isRequired, onClick: PropTypes.func.isRequired, @@ -14,19 +15,11 @@ export default @observer class RecipeItem extends Component { const { recipe, onClick } = this.props; return ( -
@@ -201,13 +205,9 @@ export default @injectSheet(styles) @observer class RecipesDashboard extends Com <> {recipeFilter === 'dev' && ( <> -

- {intl.formatMessage(messages.headlineCustomRecipes)} -

+

{intl.formatMessage(messages.headlineCustomRecipes)}

-

- {intl.formatMessage(messages.customRecipeIntro)} -

+

{intl.formatMessage(messages.customRecipeIntro)}

-

{intl.formatMessage(messages.nothingFound)}

+

+ {intl.formatMessage(messages.nothingFound)} +

isLoggedIn && showAddServiceInterface({ recipeId: customWebsiteRecipe.id })} + onClick={() => + isLoggedIn && + showAddServiceInterface({ + recipeId: customWebsiteRecipe.id, + }) + } />
)} @@ -251,7 +258,10 @@ export default @injectSheet(styles) @observer class RecipesDashboard extends Com isLoggedIn && showAddServiceInterface({ recipeId: recipe.id })} + onClick={() => + isLoggedIn && + showAddServiceInterface({ recipeId: recipe.id }) + } /> ))}
@@ -263,7 +273,10 @@ export default @injectSheet(styles) @observer class RecipesDashboard extends Com isLoggedIn && showAddServiceInterface({ recipeId: recipe.id })} + onClick={() => + isLoggedIn && + showAddServiceInterface({ recipeId: recipe.id }) + } /> ))}
@@ -276,3 +289,5 @@ export default @injectSheet(styles) @observer class RecipesDashboard extends Com ); } } + +export default injectIntl(RecipesDashboard); diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index c41cdd56a..3fbb57cbb 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import { Link } from 'react-router'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import normalizeUrl from 'normalize-url'; import Form from '../../../lib/Form'; @@ -22,111 +22,117 @@ import globalMessages from '../../../i18n/globalMessages'; const messages = defineMessages({ saveService: { id: 'settings.service.form.saveButton', - defaultMessage: '!!!Save service', + defaultMessage: 'Save service', }, deleteService: { id: 'settings.service.form.deleteButton', - defaultMessage: '!!!Delete Service', + defaultMessage: 'Delete Service', }, openDarkmodeCss: { id: 'settings.service.form.openDarkmodeCss', - defaultMessage: '!!!Open darkmode.css', + defaultMessage: 'Open darkmode.css', }, openUserCss: { id: 'settings.service.form.openUserCss', - defaultMessage: '!!!Open user.css', + defaultMessage: 'Open user.css', }, openUserJs: { id: 'settings.service.form.openUserJs', - defaultMessage: '!!!Open user.js', + defaultMessage: 'Open user.js', }, recipeFileInfo: { id: 'settings.service.form.recipeFileInfo', - defaultMessage: '!!!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.', + defaultMessage: + '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.', }, availableServices: { id: 'settings.service.form.availableServices', - defaultMessage: '!!!Available services', + defaultMessage: 'Available services', }, yourServices: { id: 'settings.service.form.yourServices', - defaultMessage: '!!!Your services', + defaultMessage: 'Your services', }, addServiceHeadline: { id: 'settings.service.form.addServiceHeadline', - defaultMessage: '!!!Add {name}', + defaultMessage: 'Add {name}', }, editServiceHeadline: { id: 'settings.service.form.editServiceHeadline', - defaultMessage: '!!!Edit {name}', + defaultMessage: 'Edit {name}', }, tabHosted: { id: 'settings.service.form.tabHosted', - defaultMessage: '!!!Hosted', + defaultMessage: 'Hosted', }, tabOnPremise: { id: 'settings.service.form.tabOnPremise', - defaultMessage: '!!!Self hosted ⭐️', + defaultMessage: 'Self hosted ⭐️', }, useHostedService: { id: 'settings.service.form.useHostedService', - defaultMessage: '!!!Use the hosted {name} service.', + defaultMessage: 'Use the hosted {name} service.', }, customUrlValidationError: { id: 'settings.service.form.customUrlValidationError', - defaultMessage: '!!!Could not validate custom {name} server.', + defaultMessage: 'Could not validate custom {name} server.', }, indirectMessageInfo: { id: 'settings.service.form.indirectMessageInfo', - defaultMessage: '!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...', + defaultMessage: + 'You will be notified about all new messages in a channel, not just @username, @channel, @here, ...', }, isMutedInfo: { id: 'settings.service.form.isMutedInfo', - defaultMessage: '!!!When disabled, all notification sounds and audio playback are muted', + defaultMessage: + 'When disabled, all notification sounds and audio playback are muted', }, isHibernationEnabledInfo: { id: 'settings.service.form.isHibernatedEnabledInfo', - defaultMessage: '!!!When enabled, a service will be shut down after a period of time to save system resources.', + defaultMessage: + 'When enabled, a service will be shut down after a period of time to save system resources.', }, headlineNotifications: { id: 'settings.service.form.headlineNotifications', - defaultMessage: '!!!Notifications', + defaultMessage: 'Notifications', }, headlineBadges: { id: 'settings.service.form.headlineBadges', - defaultMessage: '!!!Unread message badges', + defaultMessage: 'Unread message badges', }, headlineGeneral: { id: 'settings.service.form.headlineGeneral', - defaultMessage: '!!!General', + defaultMessage: 'General', }, headlineDarkReaderSettings: { id: 'settings.service.form.headlineDarkReaderSettings', - defaultMessage: '!!!Dark Reader Settings', + defaultMessage: 'Dark Reader Settings', }, iconDelete: { id: 'settings.service.form.iconDelete', - defaultMessage: '!!!Delete', + defaultMessage: 'Delete', }, iconUpload: { id: 'settings.service.form.iconUpload', - defaultMessage: '!!!Drop your image, or click here', + defaultMessage: 'Drop your image, or click here', }, headlineProxy: { id: 'settings.service.form.proxy.headline', - defaultMessage: '!!!HTTP/HTTPS Proxy Settings', + defaultMessage: 'HTTP/HTTPS Proxy Settings', }, proxyRestartInfo: { id: 'settings.service.form.proxy.restartInfo', - defaultMessage: '!!!Please restart Ferdi after changing proxy Settings.', + defaultMessage: 'Please restart Ferdi after changing proxy Settings.', }, proxyInfo: { id: 'settings.service.form.proxy.info', - defaultMessage: '!!!Proxy settings will not be synchronized with the Ferdi servers.', + defaultMessage: + 'Proxy settings will not be synchronized with the Ferdi servers.', }, }); -export default @observer class EditServiceForm extends Component { +@observer +class EditServiceForm extends Component { static propTypes = { recipe: PropTypes.instanceOf(Recipe).isRequired, service(props, propName) { @@ -151,20 +157,16 @@ export default @observer class EditServiceForm extends Component { service: {}, }; - static contextTypes = { - intl: intlShape, - }; - state = { isValidatingCustomUrl: false, - } + }; submit(e) { const { recipe } = this.props; e.preventDefault(); this.props.form.submit({ - onSuccess: async (form) => { + onSuccess: async form => { const values = form.values(); let isValid = true; @@ -176,7 +178,10 @@ export default @observer class EditServiceForm extends Component { if (recipe.validateUrl && values.customUrl) { this.setState({ isValidatingCustomUrl: true }); try { - values.customUrl = normalizeUrl(values.customUrl, { stripWWW: false, removeTrailingSlash: false }); + values.customUrl = normalizeUrl(values.customUrl, { + stripWWW: false, + removeTrailingSlash: false, + }); isValid = await recipe.validateUrl(values.customUrl); } catch (err) { console.warn('ValidateURL', err); @@ -208,7 +213,7 @@ export default @observer class EditServiceForm extends Component { openRecipeFile, isProxyFeatureEnabled, } = this.props; - const { intl } = this.context; + const { intl } = this.props; const { isValidatingCustomUrl } = this.state; @@ -236,7 +241,8 @@ export default @observer class EditServiceForm extends Component { activeTabIndex = 2; } - const requiresUserInput = !recipe.hasHostedOption && (recipe.hasTeamId || recipe.hasCustomUrl); + const requiresUserInput = + !recipe.hasHostedOption && (recipe.hasTeamId || recipe.hasCustomUrl); return (
@@ -254,29 +260,27 @@ export default @observer class EditServiceForm extends Component { - {action === 'add' ? ( - intl.formatMessage(messages.addServiceHeadline, { + {action === 'add' + ? intl.formatMessage(messages.addServiceHeadline, { name: recipe.name, }) - ) : ( - intl.formatMessage(messages.editServiceHeadline, { + : intl.formatMessage(messages.editServiceHeadline, { name: service.name !== '' ? service.name : recipe.name, - }) - )} + })}
-
this.submit(e)} id="form"> + this.submit(e)} id="form">
{(recipe.hasTeamId || recipe.hasCustomUrl) && ( - + {recipe.hasHostedOption && ( - {intl.formatMessage(messages.useHostedService, { name: recipe.name })} + {intl.formatMessage(messages.useHostedService, { + name: recipe.name, + })} )} {recipe.hasTeamId && ( @@ -293,7 +297,9 @@ export default @observer class EditServiceForm extends Component { {form.error === 'url-validation-error' && (

- {intl.formatMessage(messages.customUrlValidationError, { name: recipe.name })} + {intl.formatMessage(messages.customUrlValidationError, { + name: recipe.name, + })}

)} @@ -326,13 +332,16 @@ export default @observer class EditServiceForm extends Component {

{intl.formatMessage(messages.headlineBadges)}

- {recipe.hasIndirectMessages && form.$('isBadgeEnabled').value && ( - <> - -

- {intl.formatMessage(messages.indirectMessageInfo)} -

- + {recipe.hasIndirectMessages && + form.$('isBadgeEnabled').value && ( + <> + +

+ {intl.formatMessage(messages.indirectMessageInfo)} +

+ )}
@@ -344,15 +353,18 @@ export default @observer class EditServiceForm extends Component { {intl.formatMessage(messages.isHibernationEnabledInfo)}

- {form.$('isDarkModeEnabled').value - && ( - <> -

{intl.formatMessage(messages.headlineDarkReaderSettings)}

- - - - - )} + {form.$('isDarkModeEnabled').value && ( + <> +

+ {intl.formatMessage( + messages.headlineDarkReaderSettings, + )} +

+ + + + + )}
@@ -381,7 +393,10 @@ export default @observer class EditServiceForm extends Component { <>
- +
@@ -409,7 +424,9 @@ export default @observer class EditServiceForm extends Component {
-

{intl.formatMessage(globalMessages.userAgentHelp)}

+

+ {intl.formatMessage(globalMessages.userAgentHelp)} +

@@ -464,7 +481,9 @@ export default @observer class EditServiceForm extends Component { type="submit" label={intl.formatMessage(messages.saveService)} htmlForm="form" - disabled={action !== 'edit' && (form.isPristine && requiresUserInput)} + disabled={ + action !== 'edit' && form.isPristine && requiresUserInput + } /> )}
@@ -472,3 +491,5 @@ export default @observer class EditServiceForm extends Component { ); } } + +export default injectIntl(EditServiceForm); diff --git a/src/components/settings/services/ServiceError.js b/src/components/settings/services/ServiceError.js index 3cfc080d6..d16d76db2 100644 --- a/src/components/settings/services/ServiceError.js +++ b/src/components/settings/services/ServiceError.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { observer } from 'mobx-react'; import { Link } from 'react-router'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import Infobox from '../../ui/Infobox'; import Button from '../../ui/Button'; @@ -9,29 +9,26 @@ import Button from '../../ui/Button'; const messages = defineMessages({ headline: { id: 'settings.service.error.headline', - defaultMessage: '!!!Error', + defaultMessage: 'Error', }, goBack: { id: 'settings.service.error.goBack', - defaultMessage: '!!!Back to services', + defaultMessage: 'Back to services', }, availableServices: { id: 'settings.service.form.availableServices', - defaultMessage: '!!!Available services', + defaultMessage: 'Available services', }, errorMessage: { id: 'settings.service.error.message', - defaultMessage: '!!!Could not load service recipe.', + defaultMessage: 'Could not load service recipe.', }, }); -export default @observer class ServiceError extends Component { - static contextTypes = { - intl: intlShape, - }; - +@observer +class ServiceError extends Component { render() { - const { intl } = this.context; + const { intl } = this.props; return (
@@ -47,10 +44,7 @@ export default @observer class ServiceError extends Component {
- + {intl.formatMessage(messages.errorMessage)}
@@ -65,3 +59,5 @@ export default @observer class ServiceError extends Component { ); } } + +export default injectIntl(ServiceError); diff --git a/src/components/settings/services/ServiceItem.js b/src/components/settings/services/ServiceItem.js index ebc618a00..4916e4ecc 100644 --- a/src/components/settings/services/ServiceItem.js +++ b/src/components/settings/services/ServiceItem.js @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import ReactTooltip from 'react-tooltip'; import { observer } from 'mobx-react'; import classnames from 'classnames'; @@ -10,35 +10,32 @@ import ServiceModel from '../../../models/Service'; const messages = defineMessages({ tooltipIsDisabled: { id: 'settings.services.tooltip.isDisabled', - defaultMessage: '!!!Service is disabled', + defaultMessage: 'Service is disabled', }, tooltipNotificationsDisabled: { id: 'settings.services.tooltip.notificationsDisabled', - defaultMessage: '!!!Notifications are disabled', + defaultMessage: 'Notifications are disabled', }, tooltipIsMuted: { id: 'settings.services.tooltip.isMuted', - defaultMessage: '!!!All sounds are muted', + defaultMessage: 'All sounds are muted', }, }); -export default @observer class ServiceItem extends Component { +@observer +class ServiceItem extends Component { static propTypes = { service: PropTypes.instanceOf(ServiceModel).isRequired, goToServiceForm: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { service, // toggleAction, goToServiceForm, } = this.props; - const { intl } = this.context; + const { intl } = this.props; return ( - + - + {service.name !== '' ? service.name : service.recipe.name} - + {service.isMuted && ( )} - + {!service.isEnabled && ( )} - + {!service.isNotificationEnabled && ( )} @@ -104,3 +88,5 @@ export default @observer class ServiceItem extends Component { ); } } + +export default injectIntl(ServiceItem); diff --git a/src/components/settings/services/ServicesDashboard.js b/src/components/settings/services/ServicesDashboard.js index 11d3eaa79..847f2ea06 100644 --- a/src/components/settings/services/ServicesDashboard.js +++ b/src/components/settings/services/ServicesDashboard.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; import { Link } from 'react-router'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import SearchInput from '../../ui/SearchInput'; import Infobox from '../../ui/Infobox'; @@ -14,43 +14,45 @@ import Appear from '../../ui/effects/Appear'; const messages = defineMessages({ headline: { id: 'settings.services.headline', - defaultMessage: '!!!Your services', + defaultMessage: 'Your services', }, searchService: { id: 'settings.searchService', - defaultMessage: '!!!Search service', + defaultMessage: 'Search service', }, noServicesAdded: { id: 'settings.services.noServicesAdded', - defaultMessage: '!!!Start by adding a service.', + defaultMessage: 'Start by adding a service.', }, noServiceFound: { id: 'settings.recipes.nothingFound', - defaultMessage: '!!!Sorry, but no service matched your search term. 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.', + defaultMessage: + 'Sorry, but no service matched your search term. 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.', }, discoverServices: { id: 'settings.services.discoverServices', - defaultMessage: '!!!Discover services', + defaultMessage: 'Discover services', }, servicesRequestFailed: { id: 'settings.services.servicesRequestFailed', - defaultMessage: '!!!Could not load your services', + defaultMessage: 'Could not load your services', }, tryReloadServices: { id: 'settings.account.tryReloadServices', - defaultMessage: '!!!Try again', + defaultMessage: 'Try again', }, updatedInfo: { id: 'settings.services.updatedInfo', - defaultMessage: '!!!Your changes have been saved', + defaultMessage: 'Your changes have been saved', }, deletedInfo: { id: 'settings.services.deletedInfo', - defaultMessage: '!!!Service has been deleted', + defaultMessage: 'Service has been deleted', }, }); -export default @observer class ServicesDashboard extends Component { +@observer +class ServicesDashboard extends Component { static propTypes = { services: MobxPropTypes.arrayOrObservableArray.isRequired, isLoading: PropTypes.bool.isRequired, @@ -68,10 +70,6 @@ export default @observer class ServicesDashboard extends Component { searchNeedle: '', }; - static contextTypes = { - intl: intlShape, - }; - render() { const { services, @@ -85,7 +83,7 @@ export default @observer class ServicesDashboard extends Component { status, searchNeedle, } = this.props; - const { intl } = this.context; + const { intl } = this.props; return (
@@ -96,7 +94,7 @@ export default @observer class ServicesDashboard extends Component { {(services.length !== 0 || searchNeedle) && !isLoading && ( filterServices({ needle })} + onChange={needle => filterServices({ needle })} onReset={() => resetFilter()} autoFocus /> @@ -145,7 +143,9 @@ export default @observer class ServicesDashboard extends Component { {intl.formatMessage(messages.noServicesAdded)}

- {intl.formatMessage(messages.discoverServices)} + + {intl.formatMessage(messages.discoverServices)} +
)} {!isLoading && services.length === 0 && searchNeedle && ( @@ -163,12 +163,16 @@ export default @observer class ServicesDashboard extends Component { ) : ( - {services.map((service) => ( + {services.map(service => ( toggleService({ serviceId: service.id })} - goToServiceForm={() => goTo(`/settings/services/edit/${service.id}`)} + toggleAction={() => + toggleService({ serviceId: service.id }) + } + goToServiceForm={() => + goTo(`/settings/services/edit/${service.id}`) + } /> ))} @@ -176,12 +180,12 @@ export default @observer class ServicesDashboard extends Component { )} - - + - + + ); } } + +export default injectIntl(ServicesDashboard); diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 6a919b902..0a468e342 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -3,7 +3,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import prettyBytes from 'pretty-bytes'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import Form from '../../../lib/Form'; import Button from '../../ui/Button'; @@ -13,154 +13,173 @@ import Select from '../../ui/Select'; import Input from '../../ui/Input'; import { FRANZ_TRANSLATION, GITHUB_FRANZ_URL } from '../../../config'; -import { DEFAULT_APP_SETTINGS, ferdiVersion, isMac, isWindows, lockFerdiShortcutKey, userDataPath, userDataRecipesPath } from '../../../environment'; +import { + DEFAULT_APP_SETTINGS, + ferdiVersion, + isMac, + isWindows, + lockFerdiShortcutKey, + userDataPath, + userDataRecipesPath, +} from '../../../environment'; import { openPath } from '../../../helpers/url-helpers'; import globalMessages from '../../../i18n/globalMessages'; const messages = defineMessages({ headlineGeneral: { id: 'settings.app.headlineGeneral', - defaultMessage: '!!!General', + defaultMessage: 'General', }, sentryInfo: { id: 'settings.app.sentryInfo', - defaultMessage: '!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!', + defaultMessage: + 'Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!', }, hibernateInfo: { id: 'settings.app.hibernateInfo', - defaultMessage: '!!!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.', + defaultMessage: + '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.', }, inactivityLockInfo: { id: 'settings.app.inactivityLockInfo', - defaultMessage: '!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable', + defaultMessage: + 'Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable', }, todoServerInfo: { id: 'settings.app.todoServerInfo', - defaultMessage: '!!!This server will be used for the "Franz Todo" feature. (default: https://app.franztodos.com)', + defaultMessage: + 'This server will be used for the "Franz Todo" feature. (default: https://app.franztodos.com)', }, lockedPassword: { id: 'settings.app.lockedPassword', - defaultMessage: '!!!Password', + defaultMessage: 'Password', }, lockedPasswordInfo: { id: 'settings.app.lockedPasswordInfo', - defaultMessage: '!!!Please make sure to set a password you\'ll remember.\nIf you loose this password, you will have to reinstall Ferdi.', + defaultMessage: + "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", }, lockInfo: { id: 'settings.app.lockInfo', - defaultMessage: '!!!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}.', + defaultMessage: + '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}.', }, scheduledDNDTimeInfo: { id: 'settings.app.scheduledDNDTimeInfo', - defaultMessage: '!!!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.', + defaultMessage: + '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.', }, scheduledDNDInfo: { id: 'settings.app.scheduledDNDInfo', - defaultMessage: '!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.', + defaultMessage: + 'Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.', }, headlineLanguage: { id: 'settings.app.headlineLanguage', - defaultMessage: '!!!Language', + defaultMessage: 'Language', }, headlineUpdates: { id: 'settings.app.headlineUpdates', - defaultMessage: '!!!Updates', + defaultMessage: 'Updates', }, headlineAppearance: { id: 'settings.app.headlineAppearance', - defaultMessage: '!!!Appearance', + defaultMessage: 'Appearance', }, universalDarkModeInfo: { id: 'settings.app.universalDarkModeInfo', - defaultMessage: '!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.', + defaultMessage: + 'Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.', }, accentColorInfo: { id: 'settings.app.accentColorInfo', - defaultMessage: '!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})', + defaultMessage: + 'Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})', }, headlinePrivacy: { id: 'settings.app.headlinePrivacy', - defaultMessage: '!!!Privacy', + defaultMessage: 'Privacy', }, headlineAdvanced: { id: 'settings.app.headlineAdvanced', - defaultMessage: '!!!Advanced', + defaultMessage: 'Advanced', }, translationHelp: { id: 'settings.app.translationHelp', - defaultMessage: '!!!Help us to translate Ferdi into your language.', + defaultMessage: 'Help us to translate Ferdi into your language.', }, spellCheckerLanguageInfo: { id: 'settings.app.spellCheckerLanguageInfo', - defaultMessage: '!!!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.', + defaultMessage: + "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.", }, subheadlineCache: { id: 'settings.app.subheadlineCache', - defaultMessage: '!!!Cache', + defaultMessage: 'Cache', }, cacheInfo: { id: 'settings.app.cacheInfo', - defaultMessage: '!!!Ferdi cache is currently using {size} of disk space.', + defaultMessage: 'Ferdi cache is currently using {size} of disk space.', }, cacheNotCleared: { id: 'settings.app.cacheNotCleared', - defaultMessage: '!!!Couldn\'t clear all cache', + defaultMessage: "Couldn't clear all cache", }, buttonClearAllCache: { id: 'settings.app.buttonClearAllCache', - defaultMessage: '!!!Clear cache', + defaultMessage: 'Clear cache', }, subheadlineFerdiProfile: { id: 'settings.app.subheadlineFerdiProfile', - defaultMessage: '!!!Ferdi Profile', + defaultMessage: 'Ferdi Profile', }, buttonOpenFerdiProfileFolder: { id: 'settings.app.buttonOpenFerdiProfileFolder', - defaultMessage: '!!!Open Profile folder', + defaultMessage: 'Open Profile folder', }, buttonOpenFerdiServiceRecipesFolder: { id: 'settings.app.buttonOpenFerdiServiceRecipesFolder', - defaultMessage: '!!!Open Service Recipes folder', + defaultMessage: 'Open Service Recipes folder', }, buttonSearchForUpdate: { id: 'settings.app.buttonSearchForUpdate', - defaultMessage: '!!!Check for updates', + defaultMessage: 'Check for updates', }, buttonInstallUpdate: { id: 'settings.app.buttonInstallUpdate', - defaultMessage: '!!!Restart & install update', + defaultMessage: 'Restart & install update', }, updateStatusSearching: { id: 'settings.app.updateStatusSearching', - defaultMessage: '!!!Is searching for update', + defaultMessage: 'Is searching for update', }, updateStatusAvailable: { id: 'settings.app.updateStatusAvailable', - defaultMessage: '!!!Update available, downloading...', + defaultMessage: 'Update available, downloading...', }, updateStatusUpToDate: { id: 'settings.app.updateStatusUpToDate', - defaultMessage: '!!!You are using the latest version of Ferdi', + defaultMessage: 'You are using the latest version of Ferdi', }, currentVersion: { id: 'settings.app.currentVersion', - defaultMessage: '!!!Current version:', + defaultMessage: 'Current version:', }, appRestartRequired: { id: 'settings.app.restartRequired', - defaultMessage: '!!!Changes require restart', + defaultMessage: 'Changes require restart', }, languageDisclaimer: { id: 'settings.app.languageDisclaimer', - defaultMessage: '!!!Official translations are English & German. All other languages are community based translations.', + defaultMessage: + 'Official translations are English & German. All other languages are community based translations.', }, }); -const Hr = () => ( -
-); +const Hr = () =>
; -export default @observer class EditSettingsForm extends Component { +@observer +class EditSettingsForm extends Component { static propTypes = { checkForUpdates: PropTypes.func.isRequired, installUpdate: PropTypes.func.isRequired, @@ -184,14 +203,10 @@ export default @observer class EditSettingsForm extends Component { isOnline: PropTypes.bool.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - state = { activeSetttingsTab: 'general', clearCacheButtonClicked: false, - } + }; setActiveSettingsTab(tab) { this.setState({ @@ -199,14 +214,14 @@ export default @observer class EditSettingsForm extends Component { }); } - onClearCacheClicked=() => { + onClearCacheClicked = () => { this.setState({ clearCacheButtonClicked: true }); - } + }; submit(e) { e.preventDefault(); this.props.form.submit({ - onSuccess: (form) => { + onSuccess: form => { const values = form.values(); this.props.onSubmit(values); }, @@ -236,7 +251,7 @@ export default @observer class EditSettingsForm extends Component { hasAddedTodosAsService, isOnline, } = this.props; - const { intl } = this.context; + const { intl } = this.props; let updateButtonLabelMessage = messages.buttonSearchForUpdate; if (isCheckingForUpdates) { @@ -247,10 +262,8 @@ export default @observer class EditSettingsForm extends Component { updateButtonLabelMessage = messages.buttonSearchForUpdate; } - const { - lockingFeatureEnabled, - scheduledDNDEnabled, - } = window.ferdi.stores.settings.all.app; + const { lockingFeatureEnabled, scheduledDNDEnabled } = + window.ferdi.stores.settings.all.app; let cacheSize; let notCleared; @@ -258,7 +271,10 @@ export default @observer class EditSettingsForm extends Component { const cacheSizeBytes = getCacheSize(); if (typeof cacheSizeBytes === 'number') { cacheSize = prettyBytes(cacheSizeBytes); - notCleared = this.state.clearCacheButtonClicked && isClearingAllCache === false && cacheSizeBytes !== 0; + notCleared = + this.state.clearCacheButtonClicked && + isClearingAllCache === false && + cacheSizeBytes !== 0; } else { cacheSize = '…'; notCleared = false; @@ -275,58 +291,94 @@ export default @observer class EditSettingsForm extends Component {
this.submit(e)} - onChange={(e) => this.submit(e)} + onSubmit={e => this.submit(e)} + onChange={e => this.submit(e)} id="form" > {/* Titles */}

{ this.setActiveSettingsTab('general'); }} + className={ + this.state.activeSetttingsTab === 'general' + ? 'badge badge--primary' + : 'badge' + } + onClick={() => { + this.setActiveSettingsTab('general'); + }} > {intl.formatMessage(messages.headlineGeneral)}

{ this.setActiveSettingsTab('appearance'); }} + className={ + this.state.activeSetttingsTab === 'appearance' + ? 'badge badge--primary' + : 'badge' + } + onClick={() => { + this.setActiveSettingsTab('appearance'); + }} > {intl.formatMessage(messages.headlineAppearance)}

{ this.setActiveSettingsTab('privacy'); }} + className={ + this.state.activeSetttingsTab === 'privacy' + ? 'badge badge--primary' + : 'badge' + } + onClick={() => { + this.setActiveSettingsTab('privacy'); + }} > {intl.formatMessage(messages.headlinePrivacy)}

{ this.setActiveSettingsTab('language'); }} + className={ + this.state.activeSetttingsTab === 'language' + ? 'badge badge--primary' + : 'badge' + } + onClick={() => { + this.setActiveSettingsTab('language'); + }} > {intl.formatMessage(messages.headlineLanguage)}

{ this.setActiveSettingsTab('advanced'); }} + className={ + this.state.activeSetttingsTab === 'advanced' + ? 'badge badge--primary' + : 'badge' + } + onClick={() => { + this.setActiveSettingsTab('advanced'); + }} > {intl.formatMessage(messages.headlineAdvanced)}

{ this.setActiveSettingsTab('updates'); }} + className={ + this.state.activeSetttingsTab === 'updates' + ? 'badge badge--primary' + : 'badge' + } + onClick={() => { + this.setActiveSettingsTab('updates'); + }} > {intl.formatMessage(messages.headlineUpdates)}

{/* General */} - { this.state.activeSetttingsTab === 'general' && ( + {this.state.activeSetttingsTab === 'general' && (
@@ -334,12 +386,8 @@ export default @observer class EditSettingsForm extends Component { - {isWindows && ( - - )} - {isWindows && ( - - )} + {isWindows && } + {isWindows && } @@ -374,20 +423,24 @@ export default @observer class EditSettingsForm extends Component { {isTodosActivated && (
this.submit(e)} + onChange={e => this.submit(e)} field={form.$('customTodoServer')} />

- { intl.formatMessage(messages.todoServerInfo) } + {intl.formatMessage(messages.todoServerInfo)}

)} @@ -400,56 +453,58 @@ export default @observer class EditSettingsForm extends Component { {scheduledDNDEnabled && ( <> -
-
+
this.submit(e)} + onChange={e => this.submit(e)} field={form.$('scheduledDNDStart')} type="time" />
-
this.submit(e)} + onChange={e => this.submit(e)} field={form.$('scheduledDNDEnd')} type="time" />
-

- { intl.formatMessage(messages.scheduledDNDTimeInfo) } -

+

{intl.formatMessage(messages.scheduledDNDTimeInfo)}

)}

- - { intl.formatMessage(messages.scheduledDNDInfo) } - + {intl.formatMessage(messages.scheduledDNDInfo)}

)} {/* Appearance */} - { this.state.activeSetttingsTab === 'appearance' && ( + {this.state.activeSetttingsTab === 'appearance' && (
@@ -459,21 +514,26 @@ export default @observer class EditSettingsForm extends Component {
- {!isAdaptableDarkModeEnabled && } + {!isAdaptableDarkModeEnabled && ( + + )} {(isDarkmodeEnabled || isAdaptableDarkModeEnabled) && ( - <> - -

- - { intl.formatMessage(messages.universalDarkModeInfo) } - -

- + <> + +

+ + {intl.formatMessage(messages.universalDarkModeInfo)} + +

+ )}
@@ -491,23 +551,25 @@ export default @observer class EditSettingsForm extends Component { this.submit(e)} + onChange={e => this.submit(e)} field={form.$('accentColor')} />

- {intl.formatMessage(messages.accentColorInfo, - { defaultAccentColor: DEFAULT_APP_SETTINGS.accentColor })} + {intl.formatMessage(messages.accentColorInfo, { + defaultAccentColor: DEFAULT_APP_SETTINGS.accentColor, + })}

)} {/* Privacy */} - { this.state.activeSetttingsTab === 'privacy' && ( + {this.state.activeSetttingsTab === 'privacy' && (
{(isWindows || isMac) && ( - )} + + )}
@@ -516,8 +578,12 @@ export default @observer class EditSettingsForm extends Component {
-

{intl.formatMessage(messages.sentryInfo)}

-

{intl.formatMessage(messages.appRestartRequired)}

+

+ {intl.formatMessage(messages.sentryInfo)} +

+

+ {intl.formatMessage(messages.appRestartRequired)} +


@@ -530,57 +596,60 @@ export default @observer class EditSettingsForm extends Component { this.submit(e)} + onChange={e => this.submit(e)} field={form.$('lockedPassword')} type="password" scorePassword showPasswordToggle /> -

- { intl.formatMessage(messages.lockedPasswordInfo) } -

+

{intl.formatMessage(messages.lockedPasswordInfo)}

this.submit(e)} + onChange={e => this.submit(e)} field={form.$('inactivityLock')} autoFocus /> -

- { intl.formatMessage(messages.inactivityLockInfo) } -

+

{intl.formatMessage(messages.inactivityLockInfo)}

)}

- { intl.formatMessage(messages.lockInfo, { lockShortcut: `${lockFerdiShortcutKey(false)}` }) } + {intl.formatMessage(messages.lockInfo, { + lockShortcut: `${lockFerdiShortcutKey(false)}`, + })}

)} {/* Language */} - { this.state.activeSetttingsTab === 'language' && ( + {this.state.activeSetttingsTab === 'language' && (
)} {isMac && form.$('enableSpellchecking').value && ( -

{intl.formatMessage(messages.spellCheckerLanguageInfo)}

+

+ {intl.formatMessage(messages.spellCheckerLanguageInfo)} +

)} -

{intl.formatMessage(messages.appRestartRequired)}

+

+ {intl.formatMessage(messages.appRestartRequired)} +


@@ -590,52 +659,54 @@ export default @observer class EditSettingsForm extends Component { className="link" rel="noreferrer" > - {intl.formatMessage(messages.translationHelp)} - {' '} + {intl.formatMessage(messages.translationHelp)}{' '}
)} {/* Advanced */} - { this.state.activeSetttingsTab === 'advanced' && ( + {this.state.activeSetttingsTab === 'advanced' && (
-

{intl.formatMessage(messages.appRestartRequired)}

+

+ {intl.formatMessage(messages.appRestartRequired)} +


this.submit(e)} + onChange={e => this.submit(e)} field={form.$('userAgentPref')} /> -

{intl.formatMessage(globalMessages.userAgentHelp)}

-

{intl.formatMessage(messages.appRestartRequired)}

+

+ {intl.formatMessage(globalMessages.userAgentHelp)} +

+

+ {intl.formatMessage(messages.appRestartRequired)} +


-

- {intl.formatMessage(messages.subheadlineCache)} -

+

{intl.formatMessage(messages.subheadlineCache)}

{intl.formatMessage(messages.cacheInfo, { size: cacheSize, })}

- { - notCleared && ( -

- {intl.formatMessage(messages.cacheNotCleared)} -

- ) - } + {notCleared && ( +

{intl.formatMessage(messages.cacheNotCleared)}

+ )}

+ )} + {intl.formatMessage(messages.currentVersion)} {ferdiVersion} + {noUpdateAvailable && ( + <> +
+
+ {intl.formatMessage(messages.updateStatusUpToDate)} + )} -
+

+ + + Ferdi is based on{' '} + + Franz + + , a project published under the{' '} + + Apache-2.0 License + + +
+ + {intl.formatMessage(messages.languageDisclaimer)} +

- )} - {intl.formatMessage(messages.currentVersion)} - {' '} - {ferdiVersion} - {noUpdateAvailable && ( - <> -
-
- {intl.formatMessage(messages.updateStatusUpToDate)} - - )} -

- - - - Ferdi is based on - {' '} - Franz - - , a project published - under the - {' '} - Apache-2.0 License - -
- - {intl.formatMessage(messages.languageDisclaimer)} -

-
)}
@@ -736,3 +823,5 @@ export default @observer class EditSettingsForm extends Component { ); } } + +export default injectIntl(EditSettingsForm); diff --git a/src/components/settings/supportFerdi/SupportFerdiDashboard.js b/src/components/settings/supportFerdi/SupportFerdiDashboard.js index b84e06739..c4d4bd72f 100644 --- a/src/components/settings/supportFerdi/SupportFerdiDashboard.js +++ b/src/components/settings/supportFerdi/SupportFerdiDashboard.js @@ -1,76 +1,77 @@ import React, { Component } from 'react'; -import { defineMessages, FormattedHTMLMessage, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { BrowserWindow } from '@electron/remote'; import InfoBar from '../../ui/InfoBar'; const messages = defineMessages({ headline: { id: 'settings.supportFerdi.headline', - defaultMessage: '!!!About Ferdi', + defaultMessage: 'About Ferdi', }, title: { id: 'settings.supportFerdi.title', - defaultMessage: '!!!Do you like Ferdi?', + defaultMessage: 'Do you like Ferdi?', }, aboutIntro: { id: 'settings.supportFerdi.aboutIntro', - defaultMessage: '!!!

Ferdi is an open-source and a community-lead application.

Thanks to the people who make this possbile:

', + defaultMessage: + '

Ferdi is an open-source and a community-lead application.

Thanks to the people who make this possbile:

', }, textListContributors: { id: 'settings.supportFerdi.textListContributors', - defaultMessage: '!!!Full list of contributor', + defaultMessage: 'Full list of contributor', }, textListContributorsHere: { id: 'settings.supportFerdi.textListContributorsHere', - defaultMessage: '!!!here', + defaultMessage: 'here', }, textVolunteers: { id: 'settings.supportFerdi.textVolunteers', - defaultMessage: '!!!The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.', + defaultMessage: + 'The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.', }, textSupportWelcome: { id: 'settings.supportFerdi.textSupportWelcome', - defaultMessage: '!!!Support is always welcome. You can find a list of the help we need', + defaultMessage: + 'Support is always welcome. You can find a list of the help we need', }, textSupportWelcomeHere: { id: 'settings.supportFerdi.textSupportWelcomeHere', - defaultMessage: '!!!here', + defaultMessage: 'here', }, textExpenses: { id: 'settings.supportFerdi.textExpenses', - defaultMessage: '!!!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', + defaultMessage: + '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', }, textOpenCollective: { id: 'settings.supportFerdi.textOpenCollective', - defaultMessage: '!!!Open Collective', + defaultMessage: 'Open Collective', }, textDonation: { id: 'settings.supportFerdi.textDonation', - defaultMessage: '!!!If you feel like supporting Ferdi development with a donation, you can do so on both,', + defaultMessage: + 'If you feel like supporting Ferdi development with a donation, you can do so on both,', }, textDonationAnd: { id: 'settings.supportFerdi.textDonationAnd', - defaultMessage: '!!!and', + defaultMessage: 'and', }, textGitHubSponsors: { id: 'settings.supportFerdi.textGitHubSponsors', - defaultMessage: '!!!GitHub Sponsors', + defaultMessage: 'GitHub Sponsors', }, openSurvey: { id: 'settings.supportFerdi.openSurvey', - defaultMessage: '!!!Open Survey', + defaultMessage: 'Open Survey', }, bannerText: { id: 'settings.supportFerdi.bannerText', - defaultMessage: '!!!Do you want to help us improve Ferdi?', + defaultMessage: 'Do you want to help us improve Ferdi?', }, }); class SupportFerdiDashboard extends Component { - static contextTypes = { - intl: intlShape, - }; - openSurveyWindow() { let win = new BrowserWindow({ width: 670, height: 400 }); win.on('closed', () => { @@ -81,7 +82,9 @@ class SupportFerdiDashboard extends Component { } render() { - const { intl } = this.context; + const { intl } = this.props; + + const aboutIntro = intl.formatMessage(messages.aboutIntro); return (
@@ -94,22 +97,67 @@ class SupportFerdiDashboard extends Component {

{intl.formatMessage(messages.title)}

- GitHub Stars - Twitter Follow - Open Collective backers - Open Collective sponsors + + GitHub Stars + + + Twitter Follow + + + Open Collective backers + + + Open Collective sponsors +

- +

- GitHub contributors (non-exhaustive) + GitHub contributors (non-exhaustive)

{intl.formatMessage(messages.textListContributors)} - + {' '} {intl.formatMessage(messages.textListContributorsHere)} @@ -117,12 +165,15 @@ class SupportFerdiDashboard extends Component {

-

- {intl.formatMessage(messages.textVolunteers)} -

+

{intl.formatMessage(messages.textVolunteers)}

{intl.formatMessage(messages.textSupportWelcome)} - + {' '} {intl.formatMessage(messages.textSupportWelcomeHere)} @@ -130,7 +181,12 @@ class SupportFerdiDashboard extends Component {

{intl.formatMessage(messages.textExpenses)} - + {' '} {intl.formatMessage(messages.textOpenCollective)} @@ -138,14 +194,23 @@ class SupportFerdiDashboard extends Component {

{intl.formatMessage(messages.textDonation)} - + {' '} {intl.formatMessage(messages.textOpenCollective)} - - {' '} + {' '} {intl.formatMessage(messages.textDonationAnd)} - + {' '} {intl.formatMessage(messages.textGitHubSponsors)} @@ -166,4 +231,4 @@ class SupportFerdiDashboard extends Component { } } -export default SupportFerdiDashboard; +export default injectIntl(SupportFerdiDashboard); diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js index 437225058..176365fa8 100644 --- a/src/components/settings/team/TeamDashboard.js +++ b/src/components/settings/team/TeamDashboard.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import ReactTooltip from 'react-tooltip'; import injectSheet from 'react-jss'; import classnames from 'classnames'; @@ -14,31 +14,34 @@ import { LIVE_FRANZ_API } from '../../../config'; const messages = defineMessages({ headline: { id: 'settings.team.headline', - defaultMessage: '!!!Team', + defaultMessage: 'Team', }, contentHeadline: { id: 'settings.team.contentHeadline', - defaultMessage: '!!!Franz Team Management', + defaultMessage: 'Franz Team Management', }, intro: { id: 'settings.team.intro', - defaultMessage: '!!!Your are currently using Franz Servers, which is why you have access to Team Management.', + defaultMessage: + 'Your are currently using Franz Servers, which is why you have access to Team Management.', }, copy: { id: 'settings.team.copy', - defaultMessage: '!!!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.', + defaultMessage: + "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.", }, manageButton: { id: 'settings.team.manageAction', - defaultMessage: '!!!Manage your Team on meetfranz.com', + defaultMessage: 'Manage your Team on meetfranz.com', }, teamsUnavailable: { id: 'settings.team.teamsUnavailable', - defaultMessage: '!!!Teams are unavailable', + defaultMessage: 'Teams are unavailable', }, teamsUnavailableInfo: { id: 'settings.team.teamsUnavailableInfo', - defaultMessage: '!!!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.', + defaultMessage: + '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.', }, }); @@ -87,7 +90,9 @@ const styles = { }, }; -export default @injectSheet(styles) @observer class TeamDashboard extends Component { +@injectSheet(styles) +@observer +class TeamDashboard extends Component { static propTypes = { isLoading: PropTypes.bool.isRequired, userInfoRequestFailed: PropTypes.bool.isRequired, @@ -97,10 +102,6 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon server: PropTypes.string.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { isLoading, @@ -110,7 +111,7 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon classes, server, } = this.props; - const { intl } = this.context; + const { intl } = this.props; if (server === LIVE_FRANZ_API) { return ( @@ -121,9 +122,7 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon

- {isLoading && ( - - )} + {isLoading && } {!isLoading && userInfoRequestFailed && ( <> -

{intl.formatMessage(messages.contentHeadline)} -

{intl.formatMessage(messages.intro)}

{intl.formatMessage(messages.copy)}

- Ferdi for Teams + Ferdi for Teams
)} -
- {children} -
+
{children}
); } } + +export default Modal; diff --git a/src/components/ui/Radio.js b/src/components/ui/Radio.js index e77714eb7..65a777ff1 100644 --- a/src/components/ui/Radio.js +++ b/src/components/ui/Radio.js @@ -4,7 +4,8 @@ import { observer } from 'mobx-react'; import { Field } from 'mobx-react-form'; import classnames from 'classnames'; -export default @observer class Radio extends Component { +@observer +class Radio extends Component { static propTypes = { field: PropTypes.instanceOf(Field).isRequired, className: PropTypes.string, @@ -31,11 +32,7 @@ export default @observer class Radio extends Component { } render() { - const { - field, - className, - showLabel, - } = this.props; + const { field, className, showLabel } = this.props; return (
{field.label && showLabel && ( -
); } } + +export default Radio; diff --git a/src/components/ui/SearchInput.js b/src/components/ui/SearchInput.js index 0b25734dd..2d760beab 100644 --- a/src/components/ui/SearchInput.js +++ b/src/components/ui/SearchInput.js @@ -4,7 +4,8 @@ import { observer } from 'mobx-react'; import classnames from 'classnames'; import { debounce } from 'lodash'; -export default @observer class SearchInput extends Component { +@observer +class SearchInput extends Component { static propTypes = { value: PropTypes.string, placeholder: PropTypes.string, @@ -27,7 +28,7 @@ export default @observer class SearchInput extends Component { onChange: () => null, onReset: () => null, autoFocus: false, - } + }; input = null; @@ -38,7 +39,10 @@ export default @observer class SearchInput extends Component { value: props.value, }; - this.throttledOnChange = debounce(this.throttledOnChange, this.props.throttleDelay); + this.throttledOnChange = debounce( + this.throttledOnChange, + this.props.throttleDelay, + ); } componentDidMount() { @@ -80,24 +84,18 @@ export default @observer class SearchInput extends Component { const { value } = this.state; return ( -
-
); } } +export default injectIntl(BasicAuthModal); diff --git a/src/features/nightlyBuilds/Component.js b/src/features/nightlyBuilds/Component.js index e43287db5..814d529d9 100644 --- a/src/features/nightlyBuilds/Component.js +++ b/src/features/nightlyBuilds/Component.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, inject } from 'mobx-react'; import injectSheet from 'react-jss'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { H1 } from '@meetfranz/ui'; import Modal from '../../components/ui/Modal'; @@ -16,15 +16,16 @@ import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ title: { id: 'feature.nightlyBuilds.title', - defaultMessage: '!!!Nightly Builds', + defaultMessage: 'Nightly Builds', }, info: { id: 'feature.nightlyBuilds.info', - defaultMessage: '!!!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.', + defaultMessage: + "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.", }, activate: { id: 'feature.nightlyBuilds.activate', - defaultMessage: '!!!Activate', + defaultMessage: 'Activate', }, }); @@ -52,11 +53,10 @@ const styles = () => ({ }, }); -export default @injectSheet(styles) @inject('stores', 'actions') @observer class NightlyBuildsModal extends Component { - static contextTypes = { - intl: intlShape, - }; - +@injectSheet(styles) +@inject('stores', 'actions') +@observer +class NightlyBuildsModal extends Component { close() { ModalState.isModalVisible = false; @@ -84,11 +84,9 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class render() { const { isModalVisible } = ModalState; - const { - classes, - } = this.props; + const { classes } = this.props; - const { intl } = this.context; + const { intl } = this.props; return ( ({ +const styles = theme => ({ container: { minWidth: '70vw', }, @@ -69,7 +71,8 @@ const styles = (theme) => ({ width: '100%', '& div': { - fontFamily: 'SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace', + fontFamily: + 'SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace', }, '& input': { @@ -81,20 +84,19 @@ const styles = (theme) => ({ }, }); -export default @injectSheet(styles) @inject('stores', 'actions') @observer class PublishDebugLogModal extends Component { +@injectSheet(styles) +@inject('stores', 'actions') +@observer +class PublishDebugLogModal extends Component { static propTypes = { classes: PropTypes.object.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - state = { log: null, error: false, isSendingLog: false, - } + }; // Close this modal close() { @@ -109,12 +111,16 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class const debugInfo = JSON.stringify(this.props.stores.app.debugInfo); - const request = await sendAuthRequest(`${DEBUG_API}/create`, { - method: 'POST', - body: JSON.stringify({ - log: debugInfo, - }), - }, false); + const request = await sendAuthRequest( + `${DEBUG_API}/create`, + { + method: 'POST', + body: JSON.stringify({ + log: debugInfo, + }), + }, + false, + ); debug(`debugInfo: publishing status: ${request.status}`); if (request.status === 200) { @@ -140,17 +146,11 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class render() { const { isModalVisible } = ModalState; - const { - classes, - } = this.props; + const { classes } = this.props; - const { - log, - error, - isSendingLog, - } = this.state; + const { log, error, isSendingLog } = this.state; - const { intl } = this.context; + const { intl } = this.props; return ( this.close()} >
-

- {intl.formatMessage(messages.title)} -

- { log && ( +

{intl.formatMessage(messages.title)}

+ {log && ( <> -

{intl.formatMessage(messages.published)}

+

+ {intl.formatMessage(messages.published)} +

-

{intl.formatMessage(messages.info)}

- - +

+ {intl.formatMessage(messages.info)} +

+ +
{intl.formatMessage(messages.privacy)} - + {intl.formatMessage(messages.terms)} @@ -216,3 +228,5 @@ PublishDebugLogModal.wrappedComponent.propTypes = { service: PropTypes.instanceOf(ServicesStore).isRequired, }).isRequired, }; + +export default injectIntl(PublishDebugLogModal); diff --git a/src/features/quickSwitch/Component.js b/src/features/quickSwitch/Component.js index 78d5d94a0..df2bf968d 100644 --- a/src/features/quickSwitch/Component.js +++ b/src/features/quickSwitch/Component.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import { observer, inject } from 'mobx-react'; import { reaction } from 'mobx'; import injectSheet from 'react-jss'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { Input } from '@meetfranz/forms'; import { H1 } from '@meetfranz/ui'; @@ -16,19 +16,20 @@ import ServicesStore from '../../stores/ServicesStore'; const messages = defineMessages({ title: { id: 'feature.quickSwitch.title', - defaultMessage: '!!!QuickSwitch', + defaultMessage: 'QuickSwitch', }, search: { id: 'feature.quickSwitch.search', - defaultMessage: '!!!Search...', + defaultMessage: 'Search...', }, info: { id: 'feature.quickSwitch.info', - defaultMessage: '!!!Select a service with TAB, ↑ and ↓. Open a service with ENTER.', + defaultMessage: + 'Select a service with TAB, ↑ and ↓. Open a service with ENTER.', }, }); -const styles = (theme) => ({ +const styles = theme => ({ modal: { width: '80%', maxWidth: 600, @@ -80,20 +81,19 @@ const styles = (theme) => ({ }, }); -export default @injectSheet(styles) @inject('stores', 'actions') @observer class QuickSwitchModal extends Component { +@injectSheet(styles) +@inject('stores', 'actions') +@observer +class QuickSwitchModal extends Component { static propTypes = { classes: PropTypes.object.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - state = { selected: 0, search: '', wasPrevVisible: false, - } + }; ARROW_DOWN = 40; @@ -118,9 +118,7 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class this.openService = this.openService.bind(this); reaction( - () => ( - ModalState.isModalVisible - ), + () => ModalState.isModalVisible, () => { this._handleVisibilityChange(); }, @@ -140,10 +138,17 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class // Get currently shown services services() { let services = []; - if (this.state.search && compact(invoke(this.state.search, 'match', /^[a-z0-9]/i)).length > 0) { + if ( + this.state.search && + compact(invoke(this.state.search, 'match', /^[a-z0-9]/i)).length > 0 + ) { // Apply simple search algorythm to list of all services services = this.props.stores.services.allDisplayed; - services = services.filter((service) => service.name.toLowerCase().search(this.state.search.toLowerCase()) !== -1); + services = services.filter( + service => + service.name.toLowerCase().search(this.state.search.toLowerCase()) !== + -1, + ); } else { // Add the currently active service first const currentService = this.props.stores.services.active; @@ -186,14 +191,14 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class // Change the selected service // factor should be -1 or 1 changeSelected(factor) { - this.setState((state) => { + this.setState(state => { let newSelected = state.selected + factor; const services = this.services().length; // Roll around when on edge of list if (state.selected < 1 && factor === -1) { newSelected = services - 1; - } else if ((state.selected >= (services - 1)) && factor === 1) { + } else if (state.selected >= services - 1 && factor === 1) { newSelected = 0; } @@ -286,17 +291,13 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class render() { const { isModalVisible } = ModalState; - const { - openService, - } = this; + const { openService } = this; - const { - classes, - } = this.props; + const { classes } = this.props; const services = this.services(); - const { intl } = this.context; + const { intl } = this.props; return (
- { services.map((service, index) => ( + {services.map((service, index) => (
openService(index)} key={service.id} - ref={(el) => { + ref={el => { this.serviceElements[index] = el; }} > @@ -332,9 +337,7 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class className={classes.serviceIcon} alt={service.recipe.name} /> -
- { service.name } -
+
{service.name}
))}
@@ -356,3 +359,5 @@ QuickSwitchModal.wrappedComponent.propTypes = { service: PropTypes.instanceOf(ServicesStore).isRequired, }).isRequired, }; + +export default injectIntl(QuickSwitchModal); diff --git a/src/features/webControls/components/WebControls.js b/src/features/webControls/components/WebControls.js index bebf52c08..97fa20dcc 100644 --- a/src/features/webControls/components/WebControls.js +++ b/src/features/webControls/components/WebControls.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import injectSheet from 'react-jss'; import { Icon } from '@meetfranz/ui'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { mdiReload, @@ -16,23 +16,23 @@ import { const messages = defineMessages({ goHome: { id: 'webControls.goHome', - defaultMessage: '!!!Home', + defaultMessage: 'Home', }, openInBrowser: { id: 'webControls.openInBrowser', - defaultMessage: '!!!Open in Browser', + defaultMessage: 'Open in Browser', }, back: { id: 'webControls.back', - defaultMessage: '!!!Back', + defaultMessage: 'Back', }, forward: { id: 'webControls.forward', - defaultMessage: '!!!Forward', + defaultMessage: 'Forward', }, reload: { id: 'webControls.reload', - defaultMessage: '!!!Reload', + defaultMessage: 'Reload', }, }); @@ -109,10 +109,6 @@ class WebControls extends Component { navigate: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - static getDerivedStateFromProps(props, state) { const { url } = props; const { editUrl } = state; @@ -148,7 +144,7 @@ class WebControls extends Component { const { inputUrl, editUrl } = this.state; - const { intl } = this.context; + const { intl } = this.props; return (
@@ -241,4 +237,4 @@ class WebControls extends Component { } } -export default WebControls; +export default injectIntl(WebControls); diff --git a/src/features/workspaces/components/CreateWorkspaceForm.js b/src/features/workspaces/components/CreateWorkspaceForm.js index 15b97121d..c9b05b87f 100644 --- a/src/features/workspaces/components/CreateWorkspaceForm.js +++ b/src/features/workspaces/components/CreateWorkspaceForm.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { Input, Button } from '@meetfranz/forms'; import injectSheet from 'react-jss'; import Form from '../../../lib/Form'; @@ -11,11 +11,11 @@ import { workspaceStore } from '../index'; const messages = defineMessages({ submitButton: { id: 'settings.workspace.add.form.submitButton', - defaultMessage: '!!!Create workspace', + defaultMessage: 'Create workspace', }, name: { id: 'settings.workspace.add.form.name', - defaultMessage: '!!!Name', + defaultMessage: 'Name', }, }); @@ -32,12 +32,9 @@ const styles = () => ({ }, }); -@injectSheet(styles) @observer +@injectSheet(styles) +@observer class CreateWorkspaceForm extends Component { - static contextTypes = { - intl: intlShape, - }; - static propTypes = { classes: PropTypes.object.isRequired, isSubmitting: PropTypes.bool.isRequired, @@ -45,7 +42,7 @@ class CreateWorkspaceForm extends Component { }; form = (() => { - const { intl } = this.context; + const { intl } = this.props; return new Form({ fields: { name: { @@ -61,7 +58,7 @@ class CreateWorkspaceForm extends Component { submitForm() { const { form } = this; form.submit({ - onSuccess: async (f) => { + onSuccess: async f => { const { onSubmit } = this.props; const values = f.values(); onSubmit(values); @@ -70,7 +67,7 @@ class CreateWorkspaceForm extends Component { } render() { - const { intl } = this.context; + const { intl } = this.props; const { classes, isSubmitting } = this.props; const { form } = this; return ( @@ -95,4 +92,4 @@ class CreateWorkspaceForm extends Component { } } -export default CreateWorkspaceForm; +export default injectIntl(CreateWorkspaceForm); diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js index c97d4bd9c..cae95e9ed 100644 --- a/src/features/workspaces/components/EditWorkspaceForm.js +++ b/src/features/workspaces/components/EditWorkspaceForm.js @@ -1,7 +1,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router'; import { Input, Button } from '@meetfranz/forms'; import injectSheet from 'react-jss'; @@ -20,40 +20,40 @@ import Toggle from '../../../components/ui/Toggle'; const messages = defineMessages({ buttonDelete: { id: 'settings.workspace.form.buttonDelete', - defaultMessage: '!!!Delete workspace', + defaultMessage: 'Delete workspace', }, buttonSave: { id: 'settings.workspace.form.buttonSave', - defaultMessage: '!!!Save workspace', + defaultMessage: 'Save workspace', }, name: { id: 'settings.workspace.form.name', - defaultMessage: '!!!Name', + defaultMessage: 'Name', }, yourWorkspaces: { id: 'settings.workspace.form.yourWorkspaces', - defaultMessage: '!!!Your workspaces', + defaultMessage: 'Your workspaces', }, keepLoaded: { id: 'settings.workspace.form.keepLoaded', - defaultMessage: '!!!Keep this workspace loaded*', + defaultMessage: 'Keep this workspace loaded*', }, keepLoadedInfo: { id: 'settings.workspace.form.keepLoadedInfo', defaultMessage: - '!!!*This option will be overwritten by the global "Keep all workspaces loaded" option.', + '*This option will be overwritten by the global "Keep all workspaces loaded" option.', }, servicesInWorkspaceHeadline: { id: 'settings.workspace.form.servicesInWorkspaceHeadline', - defaultMessage: '!!!Services in this Workspace', + defaultMessage: 'Services in this Workspace', }, noServicesAdded: { id: 'settings.services.noServicesAdded', - defaultMessage: '!!!Start by adding a service.', + defaultMessage: 'Start by adding a service.', }, discoverServices: { id: 'settings.services.discoverServices', - defaultMessage: '!!!Discover services', + defaultMessage: 'Discover services', }, }); @@ -72,10 +72,6 @@ const styles = () => ({ @injectSheet(styles) @observer class EditWorkspaceForm extends Component { - static contextTypes = { - intl: intlShape, - }; - static propTypes = { classes: PropTypes.object.isRequired, onDelete: PropTypes.func.isRequired, @@ -97,7 +93,7 @@ class EditWorkspaceForm extends Component { } prepareWorkspaceForm(workspace) { - const { intl } = this.context; + const { intl } = this.props; return new Form({ fields: { name: { @@ -120,7 +116,7 @@ class EditWorkspaceForm extends Component { save(form) { form.submit({ - onSuccess: async (f) => { + onSuccess: async f => { const { onSave } = this.props; const values = f.values(); onSave(values); @@ -146,7 +142,7 @@ class EditWorkspaceForm extends Component { } render() { - const { intl } = this.context; + const { intl } = this.props; const { classes, workspace, @@ -194,7 +190,7 @@ class EditWorkspaceForm extends Component {
) : ( <> - {services.map((s) => ( + {services.map(s => ( ({ +const styles = theme => ({ drawer: { background: theme.workspaces.drawer.background, width: `${theme.workspaces.drawer.width}px`, @@ -85,34 +85,26 @@ const styles = (theme) => ({ }, }); -@injectSheet(styles) @observer +@injectSheet(styles) +@observer class WorkspaceDrawer extends Component { static propTypes = { classes: PropTypes.object.isRequired, getServicesForWorkspace: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - componentDidMount() { ReactTooltip.rebuild(); } render() { - const { - classes, - getServicesForWorkspace, - } = this.props; - const { intl } = this.context; - const { - activeWorkspace, - isSwitchingWorkspace, - nextWorkspace, - workspaces, - } = workspaceStore; - const actualWorkspace = isSwitchingWorkspace ? nextWorkspace : activeWorkspace; + const { classes, getServicesForWorkspace } = this.props; + const { intl } = this.props; + const { activeWorkspace, isSwitchingWorkspace, nextWorkspace, workspaces } = + workspaceStore; + const actualWorkspace = isSwitchingWorkspace + ? nextWorkspace + : activeWorkspace; return (

@@ -122,7 +114,9 @@ class WorkspaceDrawer extends Component { onClick={() => { workspaceActions.openWorkspaceSettings(); }} - data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`} + data-tip={`${intl.formatMessage( + messages.workspacesSettingsTooltip, + )}`} > workspaceActions.edit({ workspace })} + onContextMenuEditClick={() => + workspaceActions.edit({ workspace }) + } services={getServicesForWorkspace(workspace)} shortcutIndex={index + 1} /> @@ -168,9 +164,7 @@ class WorkspaceDrawer extends Component { size={1} className={classes.workspacesSettingsButtonIcon} /> - - {intl.formatMessage(messages.addNewWorkspaceLabel)} - + {intl.formatMessage(messages.addNewWorkspaceLabel)}

@@ -179,4 +173,4 @@ class WorkspaceDrawer extends Component { } } -export default WorkspaceDrawer; +export default injectIntl(WorkspaceDrawer); diff --git a/src/features/workspaces/components/WorkspaceDrawerItem.js b/src/features/workspaces/components/WorkspaceDrawerItem.js index 252158364..82e1b81a4 100644 --- a/src/features/workspaces/components/WorkspaceDrawerItem.js +++ b/src/features/workspaces/components/WorkspaceDrawerItem.js @@ -4,17 +4,17 @@ import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import injectSheet from 'react-jss'; import classnames from 'classnames'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { altKey, cmdOrCtrlShortcutKey } from '../../../environment'; const messages = defineMessages({ noServicesAddedYet: { id: 'workspaceDrawer.item.noServicesAddedYet', - defaultMessage: '!!!No services added yet', + defaultMessage: 'No services added yet', }, contextMenuEdit: { id: 'workspaceDrawer.item.contextMenuEdit', - defaultMessage: '!!!edit', + defaultMessage: 'edit', }, }); @@ -82,10 +82,6 @@ class WorkspaceDrawerItem extends Component { onContextMenuEditClick: null, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { classes, @@ -96,7 +92,8 @@ class WorkspaceDrawerItem extends Component { services, shortcutIndex, } = this.props; - const { intl } = this.context; + + const { intl } = this.props; const contextMenuTemplate = [ { @@ -125,7 +122,11 @@ class WorkspaceDrawerItem extends Component { onContextMenuEditClick && contextMenu.popup(getCurrentWindow()) } data-tip={`${ - shortcutIndex <= 9 ? `(${cmdOrCtrlShortcutKey(false)}+${altKey(false)}+${shortcutIndex})` : '' + shortcutIndex <= 9 + ? `(${cmdOrCtrlShortcutKey(false)}+${altKey( + false, + )}+${shortcutIndex})` + : '' }`} > ({ +const styles = theme => ({ row: { height: theme.workspaces.settings.listItems.height, borderBottom: `1px solid ${theme.workspaces.settings.listItems.borderColor}`, @@ -17,7 +16,8 @@ const styles = (theme) => ({ columnName: {}, }); -@injectSheet(styles) @observer +@injectSheet(styles) +@observer class WorkspaceItem extends Component { static propTypes = { classes: PropTypes.object.isRequired, @@ -25,18 +25,12 @@ class WorkspaceItem extends Component { onItemClick: PropTypes.func.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { classes, workspace, onItemClick } = this.props; return (
- + ); } diff --git a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js index c8ec0bc4c..33a82cf4b 100644 --- a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js +++ b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js @@ -4,14 +4,14 @@ import { observer } from 'mobx-react'; import injectSheet from 'react-jss'; import classnames from 'classnames'; import { Loader } from '@meetfranz/ui'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { workspaceStore } from '../index'; const messages = defineMessages({ switchingTo: { id: 'workspaces.switchingIndicator.switchingTo', - defaultMessage: '!!!Switching to', + defaultMessage: 'Switching to', }, }); @@ -61,13 +61,9 @@ class WorkspaceSwitchingIndicator extends Component { theme: PropTypes.object.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { classes, theme } = this.props; - const { intl } = this.context; + const { intl } = this.props; const { isSwitchingWorkspace, nextWorkspace } = workspaceStore; if (!isSwitchingWorkspace) return null; const nextWorkspaceName = nextWorkspace @@ -89,4 +85,4 @@ class WorkspaceSwitchingIndicator extends Component { } } -export default WorkspaceSwitchingIndicator; +export default injectIntl(WorkspaceSwitchingIndicator); diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js index 5f34204f1..fd279f896 100644 --- a/src/features/workspaces/components/WorkspacesDashboard.js +++ b/src/features/workspaces/components/WorkspacesDashboard.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import injectSheet from 'react-jss'; import { Infobox } from '@meetfranz/ui'; @@ -16,35 +16,35 @@ import UIStore from '../../../stores/UIStore'; const messages = defineMessages({ headline: { id: 'settings.workspaces.headline', - defaultMessage: '!!!Your workspaces', + defaultMessage: 'Your workspaces', }, noServicesAdded: { id: 'settings.workspaces.noWorkspacesAdded', - defaultMessage: "!!!You haven't created any workspaces yet.", + defaultMessage: "You haven't created any workspaces yet.", }, workspacesRequestFailed: { id: 'settings.workspaces.workspacesRequestFailed', - defaultMessage: '!!!Could not load your workspaces', + defaultMessage: 'Could not load your workspaces', }, tryReloadWorkspaces: { id: 'settings.workspaces.tryReloadWorkspaces', - defaultMessage: '!!!Try again', + defaultMessage: 'Try again', }, updatedInfo: { id: 'settings.workspaces.updatedInfo', - defaultMessage: '!!!Your changes have been saved', + defaultMessage: 'Your changes have been saved', }, deletedInfo: { id: 'settings.workspaces.deletedInfo', - defaultMessage: '!!!Workspace has been deleted', + defaultMessage: 'Workspace has been deleted', }, workspaceFeatureInfo: { id: 'settings.workspaces.workspaceFeatureInfo', - defaultMessage: '!!!Info about workspace feature', + defaultMessage: 'Info about workspace feature', }, workspaceFeatureHeadline: { id: 'settings.workspaces.workspaceFeatureHeadline', - defaultMessage: '!!!Less is More: Introducing Ferdi Workspaces', + defaultMessage: 'Less is More: Introducing Ferdi Workspaces', }, }); @@ -83,10 +83,6 @@ class WorkspacesDashboard extends Component { workspaces: MobxPropTypes.arrayOrObservableArray.isRequired, }; - static contextTypes = { - intl: intlShape, - }; - render() { const { classes, @@ -99,7 +95,7 @@ class WorkspacesDashboard extends Component { workspaces, } = this.props; - const { intl } = this.context; + const { intl } = this.props; return (
@@ -193,7 +189,7 @@ class WorkspacesDashboard extends Component { } } -export default WorkspacesDashboard; +export default injectIntl(WorkspacesDashboard); WorkspacesDashboard.wrappedComponent.propTypes = { stores: PropTypes.shape({ diff --git a/src/helpers/validation-helpers.js b/src/helpers/validation-helpers.js index 116f19905..569b13bb0 100644 --- a/src/helpers/validation-helpers.js +++ b/src/helpers/validation-helpers.js @@ -4,35 +4,41 @@ import isEmail from 'validator/lib/isEmail'; const messages = defineMessages({ required: { id: 'validation.required', - defaultMessage: '!!!Field is required', + defaultMessage: 'Field is required', }, email: { id: 'validation.email', - defaultMessage: '!!!Email not valid', + defaultMessage: 'Email not valid', }, url: { id: 'validation.url', - defaultMessage: '!!!Not a valid URL', + defaultMessage: 'Not a valid URL', }, minLength: { id: 'validation.minLength', - defaultMessage: '!!!Too few characters', + defaultMessage: 'Too few characters', }, oneRequired: { id: 'validation.oneRequired', - defaultMessage: '!!!At least one is required', + defaultMessage: 'At least one is required', }, }); export function required({ field }) { - const isValid = (field.value.trim() !== ''); - return [isValid, window.ferdi.intl.formatMessage(messages.required, { field: field.label })]; + const isValid = field.value.trim() !== ''; + return [ + isValid, + window.ferdi.intl.formatMessage(messages.required, { field: field.label }), + ]; } export function email({ field }) { const value = field.value.trim(); const isValid = isEmail(value); - return [isValid, window.ferdi.intl.formatMessage(messages.email, { field: field.label })]; + return [ + isValid, + window.ferdi.intl.formatMessage(messages.email, { field: field.label }), + ]; } export function url({ field }) { @@ -41,12 +47,19 @@ export function url({ field }) { if (value !== '') { // eslint-disable-next-line - isValid = Boolean(value.match(/(^|[\s.:;?\-\]<(])(https?:\/\/[-\w;/?:@&=+$|_.!~*|'()[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',|().:;?\-[\]>)])/i)); + isValid = Boolean( + value.match( + /(^|[\s.:;?\-\]<(])(https?:\/\/[-\w;/?:@&=+$|_.!~*|'()[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',|().:;?\-[\]>)])/i, + ), + ); } else { isValid = true; } - return [isValid, window.ferdi.intl.formatMessage(messages.url, { field: field.label })]; + return [ + isValid, + window.ferdi.intl.formatMessage(messages.url, { field: field.label }), + ]; } export function minLength(length) { @@ -55,13 +68,24 @@ export function minLength(length) { if (field.touched) { isValid = field.value.length >= length; } - return [isValid, window.ferdi.intl.formatMessage(messages.minLength, { field: field.label, length })]; + return [ + isValid, + window.ferdi.intl.formatMessage(messages.minLength, { + field: field.label, + length, + }), + ]; }; } export function oneRequired(targets) { return ({ field, form }) => { - const invalidFields = targets.filter((target) => form.$(target).value === ''); - return [targets.length !== invalidFields.length, window.ferdi.intl.formatMessage(messages.required, { field: field.label })]; + const invalidFields = targets.filter(target => form.$(target).value === ''); + return [ + targets.length !== invalidFields.length, + window.ferdi.intl.formatMessage(messages.required, { + field: field.label, + }), + ]; }; } diff --git a/src/i18n/apply-branding.js b/src/i18n/apply-branding.js index 40a07ded0..7aeabc4af 100644 --- a/src/i18n/apply-branding.js +++ b/src/i18n/apply-branding.js @@ -21,12 +21,7 @@ const ignore = [ ]; // Files to ignore when applying branding -const ignoreFiles = [ - 'defaultMessages.json', - '.DS_Store', - '.', - '..', -]; +const ignoreFiles = ['.DS_Store', '.', '..']; // What to replace const replace = { @@ -49,7 +44,7 @@ const replaceStr = (str, find, replaceWith) => { return str; }; -files.forEach(async (file) => { +files.forEach(async file => { if (ignoreFiles.includes(file)) return; // Read locale data diff --git a/src/i18n/globalMessages.js b/src/i18n/globalMessages.js index 66fce8d0f..bc3c559bf 100644 --- a/src/i18n/globalMessages.js +++ b/src/i18n/globalMessages.js @@ -3,75 +3,75 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ APIUnhealthy: { id: 'global.api.unhealthy', - defaultMessage: '!!!Can\'t connect to Ferdi Online Services', + defaultMessage: "Can't connect to Ferdi Online Services", }, notConnectedToTheInternet: { id: 'global.notConnectedToTheInternet', - defaultMessage: '!!!You are not connected to the internet.', + defaultMessage: 'You are not connected to the internet.', }, spellcheckerLanguage: { id: 'global.spellchecking.language', - defaultMessage: '!!!Spell checking language', + defaultMessage: 'Spell checking language', }, spellcheckerSystemDefault: { id: 'global.spellchecker.useDefault', - defaultMessage: '!!!Use System Default ({default})', + defaultMessage: 'Use System Default ({default})', }, spellcheckerAutomaticDetection: { id: 'global.spellchecking.autodetect', - defaultMessage: '!!!Detect language automatically', + defaultMessage: 'Detect language automatically', }, spellcheckerAutomaticDetectionShort: { id: 'global.spellchecking.autodetect.short', - defaultMessage: '!!!Automatic', + defaultMessage: 'Automatic', }, userAgentPref: { id: 'global.userAgentPref', - defaultMessage: '!!!User Agent', + defaultMessage: 'User Agent', }, userAgentHelp: { id: 'global.userAgentHelp', - defaultMessage: "!!!Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", + defaultMessage: + "Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", }, yes: { id: 'global.yes', - defaultMessage: '!!!Yes', + defaultMessage: 'Yes', }, no: { id: 'global.no', - defaultMessage: '!!!No', + defaultMessage: 'No', }, ok: { id: 'global.ok', - defaultMessage: '!!!Ok', + defaultMessage: 'Ok', }, cancel: { id: 'global.cancel', - defaultMessage: '!!!Cancel', + defaultMessage: 'Cancel', }, save: { id: 'global.save', - defaultMessage: '!!!Save', + defaultMessage: 'Save', }, submit: { id: 'global.submit', - defaultMessage: '!!!Submit', + defaultMessage: 'Submit', }, quit: { id: 'global.quit', - defaultMessage: '!!!Quit', + defaultMessage: 'Quit', }, quitConfirmation: { id: 'global.quitConfirmation', - defaultMessage: - '!!!Do you really want to quit Ferdi?', + defaultMessage: 'Do you really want to quit Ferdi?', }, settings: { id: 'global.settings', - defaultMessage: '!!!Settings', + defaultMessage: 'Settings', }, edit: { id: 'global.edit', - defaultMessage: '!!!Edit', + defaultMessage: 'Edit', }, }); diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json deleted file mode 100644 index 3a41c66f6..000000000 --- a/src/i18n/locales/defaultMessages.json +++ /dev/null @@ -1,6862 +0,0 @@ -[ - { - "descriptors": [ - { - "defaultMessage": "!!!A new update for Ferdi is available.", - "end": { - "column": 3, - "line": 13 - }, - "file": "src/components/AppUpdateInfoBar.js", - "id": "infobar.updateAvailable", - "start": { - "column": 19, - "line": 10 - } - }, - { - "defaultMessage": "!!!Changelog", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/components/AppUpdateInfoBar.js", - "id": "infobar.buttonChangelog", - "start": { - "column": 13, - "line": 14 - } - }, - { - "defaultMessage": "!!!Restart & install update", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/components/AppUpdateInfoBar.js", - "id": "infobar.buttonInstallUpdate", - "start": { - "column": 23, - "line": 18 - } - } - ], - "path": "src/components/AppUpdateInfoBar.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Change server", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/auth/ChangeServer.js", - "id": "changeserver.headline", - "start": { - "column": 12, - "line": 15 - } - }, - { - "defaultMessage": "!!!Server", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/auth/ChangeServer.js", - "id": "changeserver.label", - "start": { - "column": 9, - "line": 19 - } - }, - { - "defaultMessage": "!!!Extra settings offered by Ferdi will not be saved", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/auth/ChangeServer.js", - "id": "changeserver.warning", - "start": { - "column": 11, - "line": 23 - } - }, - { - "defaultMessage": "!!!Custom server", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/auth/ChangeServer.js", - "id": "changeserver.customServerLabel", - "start": { - "column": 21, - "line": 27 - } - }, - { - "defaultMessage": "!!!Enter a valid URL", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/auth/ChangeServer.js", - "id": "changeserver.urlError", - "start": { - "column": 12, - "line": 31 - } - } - ], - "path": "src/components/auth/ChangeServer.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Import your Ferdi 4 services", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/auth/Import.js", - "id": "import.headline", - "start": { - "column": 12, - "line": 13 - } - }, - { - "defaultMessage": "!!!Services not yet supported in Ferdi 5", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/components/auth/Import.js", - "id": "import.notSupportedHeadline", - "start": { - "column": 24, - "line": 17 - } - }, - { - "defaultMessage": "!!!Import {count} services", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/auth/Import.js", - "id": "import.submit.label", - "start": { - "column": 21, - "line": 21 - } - }, - { - "defaultMessage": "!!!I want to add services manually", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/auth/Import.js", - "id": "import.skip.label", - "start": { - "column": 19, - "line": 25 - } - } - ], - "path": "src/components/auth/Import.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Invite Friends", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/auth/Invite.js", - "id": "settings.invite.headline", - "start": { - "column": 20, - "line": 16 - } - }, - { - "defaultMessage": "!!!Invite 3 of your friends or colleagues", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/auth/Invite.js", - "id": "invite.headline.friends", - "start": { - "column": 12, - "line": 20 - } - }, - { - "defaultMessage": "!!!Name", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/auth/Invite.js", - "id": "invite.name.label", - "start": { - "column": 13, - "line": 24 - } - }, - { - "defaultMessage": "!!!Email address", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/auth/Invite.js", - "id": "invite.email.label", - "start": { - "column": 14, - "line": 28 - } - }, - { - "defaultMessage": "!!!Send invites", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/auth/Invite.js", - "id": "invite.submit.label", - "start": { - "column": 21, - "line": 32 - } - }, - { - "defaultMessage": "!!!I want to do this later", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/auth/Invite.js", - "id": "invite.skip.label", - "start": { - "column": 19, - "line": 36 - } - }, - { - "defaultMessage": "!!!Invitations sent successfully", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/auth/Invite.js", - "id": "invite.successInfo", - "start": { - "column": 21, - "line": 40 - } - } - ], - "path": "src/components/auth/Invite.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Locked", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.headline", - "start": { - "column": 12, - "line": 16 - } - }, - { - "defaultMessage": "!!!Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.info", - "start": { - "column": 8, - "line": 20 - } - }, - { - "defaultMessage": "!!!Unlock with Touch ID", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.touchId", - "start": { - "column": 11, - "line": 24 - } - }, - { - "defaultMessage": "!!!unlock via Touch ID", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.touchIdPrompt", - "start": { - "column": 17, - "line": 28 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.password.label", - "start": { - "column": 17, - "line": 32 - } - }, - { - "defaultMessage": "!!!Unlock", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.submit.label", - "start": { - "column": 21, - "line": 36 - } - }, - { - "defaultMessage": "!!!Unlock with Password", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.unlockWithPassword", - "start": { - "column": 22, - "line": 40 - } - }, - { - "defaultMessage": "!!!Password invalid", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/components/auth/Locked.js", - "id": "locked.invalidCredentials", - "start": { - "column": 22, - "line": 44 - } - } - ], - "path": "src/components/auth/Locked.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Sign in", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/auth/Login.js", - "id": "login.headline", - "start": { - "column": 12, - "line": 20 - } - }, - { - "defaultMessage": "!!!Email address", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/auth/Login.js", - "id": "login.email.label", - "start": { - "column": 14, - "line": 24 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/auth/Login.js", - "id": "login.password.label", - "start": { - "column": 17, - "line": 28 - } - }, - { - "defaultMessage": "!!!Sign in", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/auth/Login.js", - "id": "login.submit.label", - "start": { - "column": 21, - "line": 32 - } - }, - { - "defaultMessage": "!!!Email or password not valid", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/auth/Login.js", - "id": "login.invalidCredentials", - "start": { - "column": 22, - "line": 36 - } - }, - { - "defaultMessage": "!!!Using a Franz account to log in?", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/auth/Login.js", - "id": "login.customServerQuestion", - "start": { - "column": 24, - "line": 40 - } - }, - { - "defaultMessage": "!!!Try importing your Franz account into Ferdi", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/components/auth/Login.js", - "id": "login.customServerSuggestion", - "start": { - "column": 26, - "line": 44 - } - }, - { - "defaultMessage": "!!!Your session expired, please login again.", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/components/auth/Login.js", - "id": "login.tokenExpired", - "start": { - "column": 16, - "line": 48 - } - }, - { - "defaultMessage": "!!!Your session expired, please login again.", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/components/auth/Login.js", - "id": "login.serverLogout", - "start": { - "column": 16, - "line": 52 - } - }, - { - "defaultMessage": "!!!Create a free account", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/components/auth/Login.js", - "id": "login.link.signup", - "start": { - "column": 14, - "line": 56 - } - }, - { - "defaultMessage": "!!!Change server", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/components/auth/Login.js", - "id": "login.changeServer", - "start": { - "column": 16, - "line": 60 - } - }, - { - "defaultMessage": "!!!Use Ferdi without an Account", - "end": { - "column": 3, - "line": 67 - }, - "file": "src/components/auth/Login.js", - "id": "services.serverless", - "start": { - "column": 14, - "line": 64 - } - }, - { - "defaultMessage": "!!!Forgot password", - "end": { - "column": 3, - "line": 71 - }, - "file": "src/components/auth/Login.js", - "id": "login.link.password", - "start": { - "column": 16, - "line": 68 - } - } - ], - "path": "src/components/auth/Login.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Forgot password", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/auth/Password.js", - "id": "password.headline", - "start": { - "column": 12, - "line": 15 - } - }, - { - "defaultMessage": "!!!Email address", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/auth/Password.js", - "id": "password.email.label", - "start": { - "column": 14, - "line": 19 - } - }, - { - "defaultMessage": "!!!Your new password was sent to your email address", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/auth/Password.js", - "id": "password.successInfo", - "start": { - "column": 15, - "line": 23 - } - }, - { - "defaultMessage": "!!!No user affiliated with that email address", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/auth/Password.js", - "id": "password.noUser", - "start": { - "column": 10, - "line": 27 - } - }, - { - "defaultMessage": "!!!Create a free account", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/auth/Password.js", - "id": "password.link.signup", - "start": { - "column": 14, - "line": 31 - } - }, - { - "defaultMessage": "!!!Sign in to your account", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/auth/Password.js", - "id": "password.link.login", - "start": { - "column": 13, - "line": 35 - } - } - ], - "path": "src/components/auth/Password.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Invite Friends", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "settings.invite.headline", - "start": { - "column": 20, - "line": 16 - } - }, - { - "defaultMessage": "!!!Invite 3 of your friends or colleagues", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "invite.headline.friends", - "start": { - "column": 12, - "line": 20 - } - }, - { - "defaultMessage": "!!!Name", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "invite.name.label", - "start": { - "column": 13, - "line": 24 - } - }, - { - "defaultMessage": "!!!Email address", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "invite.email.label", - "start": { - "column": 14, - "line": 28 - } - }, - { - "defaultMessage": "!!!Send invites", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "invite.submit.label", - "start": { - "column": 21, - "line": 32 - } - }, - { - "defaultMessage": "!!!I want to do this later", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "invite.skip.label", - "start": { - "column": 19, - "line": 36 - } - }, - { - "defaultMessage": "!!!Invitations sent successfully", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/auth/ServiceAssistant.js", - "id": "invite.successInfo", - "start": { - "column": 21, - "line": 40 - } - } - ], - "path": "src/components/auth/ServiceAssistant.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Let's get started", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/auth/SetupAssistant.js", - "id": "setupAssistant.headline", - "start": { - "column": 12, - "line": 20 - } - }, - { - "defaultMessage": "!!!Choose from our most used services and get back on top of your messaging now.", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/auth/SetupAssistant.js", - "id": "setupAssistant.subheadline", - "start": { - "column": 15, - "line": 24 - } - }, - { - "defaultMessage": "!!!Let's go", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/components/auth/SetupAssistant.js", - "id": "setupAssistant.submit.label", - "start": { - "column": 21, - "line": 29 - } - }, - { - "defaultMessage": "!!!Invitations sent successfully", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/components/auth/SetupAssistant.js", - "id": "invite.successInfo", - "start": { - "column": 21, - "line": 33 - } - } - ], - "path": "src/components/auth/SetupAssistant.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Sign up", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.headline", - "start": { - "column": 12, - "line": 20 - } - }, - { - "defaultMessage": "!!!Firstname", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.firstname.label", - "start": { - "column": 18, - "line": 24 - } - }, - { - "defaultMessage": "!!!Lastname", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.lastname.label", - "start": { - "column": 17, - "line": 28 - } - }, - { - "defaultMessage": "!!!Email address", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.email.label", - "start": { - "column": 14, - "line": 32 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.password.label", - "start": { - "column": 17, - "line": 40 - } - }, - { - "defaultMessage": "!!!By creating a Ferdi account you accept the", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.legal.info", - "start": { - "column": 13, - "line": 44 - } - }, - { - "defaultMessage": "!!!Terms of service", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.legal.terms", - "start": { - "column": 9, - "line": 48 - } - }, - { - "defaultMessage": "!!!Privacy Statement", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.legal.privacy", - "start": { - "column": 11, - "line": 52 - } - }, - { - "defaultMessage": "!!!Create account", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.submit.label", - "start": { - "column": 21, - "line": 56 - } - }, - { - "defaultMessage": "!!!Already have an account, sign in?", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.link.login", - "start": { - "column": 13, - "line": 60 - } - }, - { - "defaultMessage": "!!!Change server", - "end": { - "column": 3, - "line": 67 - }, - "file": "src/components/auth/Signup.js", - "id": "login.changeServer", - "start": { - "column": 16, - "line": 64 - } - }, - { - "defaultMessage": "!!!Use Ferdi without an Account", - "end": { - "column": 3, - "line": 71 - }, - "file": "src/components/auth/Signup.js", - "id": "services.serverless", - "start": { - "column": 14, - "line": 68 - } - }, - { - "defaultMessage": "!!!A user with that email address already exists", - "end": { - "column": 3, - "line": 75 - }, - "file": "src/components/auth/Signup.js", - "id": "signup.emailDuplicate", - "start": { - "column": 18, - "line": 72 - } - } - ], - "path": "src/components/auth/Signup.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Create a free account", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/auth/Welcome.js", - "id": "welcome.signupButton", - "start": { - "column": 16, - "line": 11 - } - }, - { - "defaultMessage": "!!!Login to your account", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/auth/Welcome.js", - "id": "welcome.loginButton", - "start": { - "column": 15, - "line": 15 - } - }, - { - "defaultMessage": "!!!Use Ferdi without an Account", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/auth/Welcome.js", - "id": "services.serverless", - "start": { - "column": 14, - "line": 19 - } - } - ], - "path": "src/components/auth/Welcome.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Your services have been updated.", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/layout/AppLayout.js", - "id": "infobar.servicesUpdated", - "start": { - "column": 19, - "line": 28 - } - }, - { - "defaultMessage": "!!!Reload services", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/layout/AppLayout.js", - "id": "infobar.buttonReloadServices", - "start": { - "column": 24, - "line": 32 - } - }, - { - "defaultMessage": "!!!Could not load services and user information", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/layout/AppLayout.js", - "id": "infobar.requiredRequestsFailed", - "start": { - "column": 26, - "line": 36 - } - }, - { - "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "end": { - "column": 3, - "line": 44 - }, - "file": "src/components/layout/AppLayout.js", - "id": "infobar.authRequestFailed", - "start": { - "column": 21, - "line": 40 - } - } - ], - "path": "src/components/layout/AppLayout.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Add new service", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.addNewService", - "start": { - "column": 17, - "line": 18 - } - }, - { - "defaultMessage": "!!!Disable notifications & audio", - "end": { - "column": 3, - "line": 25 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.muteApp", - "start": { - "column": 8, - "line": 22 - } - }, - { - "defaultMessage": "!!!Enable notifications & audio", - "end": { - "column": 3, - "line": 29 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.unmuteApp", - "start": { - "column": 10, - "line": 26 - } - }, - { - "defaultMessage": "!!!Open workspace drawer", - "end": { - "column": 3, - "line": 33 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.openWorkspaceDrawer", - "start": { - "column": 23, - "line": 30 - } - }, - { - "defaultMessage": "!!!Close workspace drawer", - "end": { - "column": 3, - "line": 37 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.closeWorkspaceDrawer", - "start": { - "column": 24, - "line": 34 - } - }, - { - "defaultMessage": "!!!Open Ferdi Todos", - "end": { - "column": 3, - "line": 41 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.openTodosDrawer", - "start": { - "column": 19, - "line": 38 - } - }, - { - "defaultMessage": "!!!Close Ferdi Todos", - "end": { - "column": 3, - "line": 45 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.closeTodosDrawer", - "start": { - "column": 20, - "line": 42 - } - }, - { - "defaultMessage": "!!!Lock Ferdi", - "end": { - "column": 3, - "line": 49 - }, - "file": "src/components/layout/Sidebar.js", - "id": "sidebar.lockFerdi", - "start": { - "column": 13, - "line": 46 - } - } - ], - "path": "src/components/layout/Sidebar.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Home", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/services/content/ConnectionBanner.js", - "id": "webControls.goHome", - "start": { - "column": 10, - "line": 13 - } - }, - { - "defaultMessage": "!!!Open in Browser", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/components/services/content/ConnectionBanner.js", - "id": "webControls.openInBrowser", - "start": { - "column": 17, - "line": 17 - } - }, - { - "defaultMessage": "!!!Back", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/services/content/ConnectionBanner.js", - "id": "webControls.back", - "start": { - "column": 8, - "line": 21 - } - }, - { - "defaultMessage": "!!!Forward", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/services/content/ConnectionBanner.js", - "id": "webControls.forward", - "start": { - "column": 11, - "line": 25 - } - }, - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/components/services/content/ConnectionBanner.js", - "id": "webControls.reload", - "start": { - "column": 10, - "line": 29 - } - } - ], - "path": "src/components/services/content/ConnectionBanner.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Home", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/services/content/ConnectionLost.js", - "id": "webControls.goHome", - "start": { - "column": 10, - "line": 13 - } - }, - { - "defaultMessage": "!!!Open in Browser", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/components/services/content/ConnectionLost.js", - "id": "webControls.openInBrowser", - "start": { - "column": 17, - "line": 17 - } - }, - { - "defaultMessage": "!!!Back", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/services/content/ConnectionLost.js", - "id": "webControls.back", - "start": { - "column": 8, - "line": 21 - } - }, - { - "defaultMessage": "!!!Forward", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/services/content/ConnectionLost.js", - "id": "webControls.forward", - "start": { - "column": 11, - "line": 25 - } - }, - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/components/services/content/ConnectionLost.js", - "id": "webControls.reload", - "start": { - "column": 10, - "line": 29 - } - } - ], - "path": "src/components/services/content/ConnectionLost.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Oh no! Ferdi lost the connection to {name}.", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/services/content/ConnectionLostBanner.js", - "id": "connectionLostBanner.message", - "start": { - "column": 8, - "line": 13 - } - }, - { - "defaultMessage": "!!!What happened?", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/components/services/content/ConnectionLostBanner.js", - "id": "connectionLostBanner.informationLink", - "start": { - "column": 19, - "line": 17 - } - }, - { - "defaultMessage": "!!!Reload Service", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/services/content/ConnectionLostBanner.js", - "id": "connectionLostBanner.cta", - "start": { - "column": 7, - "line": 21 - } - } - ], - "path": "src/components/services/content/ConnectionLostBanner.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Oh no!", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "id": "service.errorHandler.headline", - "start": { - "column": 12, - "line": 12 - } - }, - { - "defaultMessage": "!!!{name} has failed to load.", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "id": "service.errorHandler.text", - "start": { - "column": 8, - "line": 16 - } - }, - { - "defaultMessage": "!!!Reload {name}", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "id": "service.errorHandler.action", - "start": { - "column": 10, - "line": 20 - } - }, - { - "defaultMessage": "!!!Edit {name}", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "id": "service.errorHandler.editAction", - "start": { - "column": 14, - "line": 24 - } - }, - { - "defaultMessage": "!!!Error:", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "id": "service.errorHandler.message", - "start": { - "column": 16, - "line": 28 - } - } - ], - "path": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!{name} is disabled", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/components/services/content/ServiceDisabled.js", - "id": "service.disabledHandler.headline", - "start": { - "column": 12, - "line": 9 - } - }, - { - "defaultMessage": "!!!Enable {name}", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/services/content/ServiceDisabled.js", - "id": "service.disabledHandler.action", - "start": { - "column": 10, - "line": 13 - } - } - ], - "path": "src/components/services/content/ServiceDisabled.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Welcome to Ferdi", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/services/content/Services.js", - "id": "services.welcome", - "start": { - "column": 11, - "line": 15 - } - }, - { - "defaultMessage": "!!!Get started", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/services/content/Services.js", - "id": "services.getStarted", - "start": { - "column": 14, - "line": 19 - } - }, - { - "defaultMessage": "!!!Please login to use Ferdi.", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/services/content/Services.js", - "id": "services.login", - "start": { - "column": 9, - "line": 23 - } - }, - { - "defaultMessage": "!!!Use Ferdi without an Account", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/services/content/Services.js", - "id": "services.serverless", - "start": { - "column": 14, - "line": 27 - } - }, - { - "defaultMessage": "!!!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!", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/services/content/Services.js", - "id": "services.serverInfo", - "start": { - "column": 14, - "line": 31 - } - } - ], - "path": "src/components/services/content/Services.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Home", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/services/content/WebControls.js", - "id": "webControls.goHome", - "start": { - "column": 10, - "line": 13 - } - }, - { - "defaultMessage": "!!!Open in Browser", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/components/services/content/WebControls.js", - "id": "webControls.openInBrowser", - "start": { - "column": 17, - "line": 17 - } - }, - { - "defaultMessage": "!!!Back", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/services/content/WebControls.js", - "id": "webControls.back", - "start": { - "column": 8, - "line": 21 - } - }, - { - "defaultMessage": "!!!Forward", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/services/content/WebControls.js", - "id": "webControls.forward", - "start": { - "column": 11, - "line": 25 - } - }, - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/components/services/content/WebControls.js", - "id": "webControls.reload", - "start": { - "column": 10, - "line": 29 - } - } - ], - "path": "src/components/services/content/WebControls.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Oh no!", - "end": { - "column": 3, - "line": 13 - }, - "file": "src/components/services/content/WebviewCrashHandler.js", - "id": "service.crashHandler.headline", - "start": { - "column": 12, - "line": 10 - } - }, - { - "defaultMessage": "!!!{name} has caused an error.", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/components/services/content/WebviewCrashHandler.js", - "id": "service.crashHandler.text", - "start": { - "column": 8, - "line": 14 - } - }, - { - "defaultMessage": "!!!Reload {name}", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/components/services/content/WebviewCrashHandler.js", - "id": "service.crashHandler.action", - "start": { - "column": 10, - "line": 18 - } - }, - { - "defaultMessage": "!!!Trying to automatically restore {name} in {seconds} seconds", - "end": { - "column": 3, - "line": 25 - }, - "file": "src/components/services/content/WebviewCrashHandler.js", - "id": "service.crashHandler.autoReload", - "start": { - "column": 14, - "line": 22 - } - } - ], - "path": "src/components/services/content/WebviewCrashHandler.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.reload", - "start": { - "column": 10, - "line": 21 - } - }, - { - "defaultMessage": "!!!Disable notifications", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.disableNotifications", - "start": { - "column": 24, - "line": 25 - } - }, - { - "defaultMessage": "!!!Enable notifications", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.enableNotification", - "start": { - "column": 23, - "line": 29 - } - }, - { - "defaultMessage": "!!!Disable audio", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.disableAudio", - "start": { - "column": 16, - "line": 33 - } - }, - { - "defaultMessage": "!!!Enable audio", - "end": { - "column": 3, - "line": 40 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.enableAudio", - "start": { - "column": 15, - "line": 37 - } - }, - { - "defaultMessage": "!!!Enable Dark mode", - "end": { - "column": 3, - "line": 44 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.enableDarkMode", - "start": { - "column": 18, - "line": 41 - } - }, - { - "defaultMessage": "!!!Disable Dark mode", - "end": { - "column": 3, - "line": 48 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.disableDarkMode", - "start": { - "column": 19, - "line": 45 - } - }, - { - "defaultMessage": "!!!Disable Service", - "end": { - "column": 3, - "line": 52 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.disableService", - "start": { - "column": 18, - "line": 49 - } - }, - { - "defaultMessage": "!!!Enable Service", - "end": { - "column": 3, - "line": 56 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.enableService", - "start": { - "column": 17, - "line": 53 - } - }, - { - "defaultMessage": "!!!Hibernate Service", - "end": { - "column": 3, - "line": 60 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.hibernateService", - "start": { - "column": 20, - "line": 57 - } - }, - { - "defaultMessage": "!!!Wake Up Service", - "end": { - "column": 3, - "line": 64 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.wakeUpService", - "start": { - "column": 17, - "line": 61 - } - }, - { - "defaultMessage": "!!!Delete Service", - "end": { - "column": 3, - "line": 68 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.deleteService", - "start": { - "column": 17, - "line": 65 - } - }, - { - "defaultMessage": "!!!Do you really want to delete the {serviceName} service?", - "end": { - "column": 3, - "line": 73 - }, - "file": "src/components/services/tabs/TabItem.js", - "id": "tabs.item.confirmDeleteService", - "start": { - "column": 24, - "line": 69 - } - } - ], - "path": "src/components/services/tabs/TabItem.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Account", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.headline", - "start": { - "column": 12, - "line": 14 - } - }, - { - "defaultMessage": "!!Danger Zone", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.headlineDangerZone", - "start": { - "column": 22, - "line": 18 - } - }, - { - "defaultMessage": "!!!Edit Account", - "end": { - "column": 3, - "line": 25 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.account.editButton", - "start": { - "column": 21, - "line": 22 - } - }, - { - "defaultMessage": "!!Invoices", - "end": { - "column": 3, - "line": 29 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.headlineInvoices", - "start": { - "column": 18, - "line": 26 - } - }, - { - "defaultMessage": "!!!Could not load user information", - "end": { - "column": 3, - "line": 33 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.userInfoRequestFailed", - "start": { - "column": 25, - "line": 30 - } - }, - { - "defaultMessage": "!!!Try again", - "end": { - "column": 3, - "line": 37 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.tryReloadUserInfoRequest", - "start": { - "column": 28, - "line": 34 - } - }, - { - "defaultMessage": "!!!Delete account", - "end": { - "column": 3, - "line": 41 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.deleteAccount", - "start": { - "column": 17, - "line": 38 - } - }, - { - "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.deleteInfo", - "start": { - "column": 14, - "line": 42 - } - }, - { - "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.deleteEmailSent", - "start": { - "column": 19, - "line": 47 - } - }, - { - "defaultMessage": "!!!Your Franz License:", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.yourLicense", - "start": { - "column": 15, - "line": 52 - } - }, - { - "defaultMessage": "Account is unavailable", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.accountUnavailable", - "start": { - "column": 22, - "line": 56 - } - }, - { - "defaultMessage": "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.", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.accountUnavailableInfo", - "start": { - "column": 26, - "line": 60 - } - } - ], - "path": "src/components/settings/account/AccountDashboard.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Available services", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.availableServices", - "start": { - "column": 21, - "line": 16 - } - }, - { - "defaultMessage": "!!!Your services", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.yourServices", - "start": { - "column": 16, - "line": 20 - } - }, - { - "defaultMessage": "!!!Your workspaces", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.yourWorkspaces", - "start": { - "column": 18, - "line": 24 - } - }, - { - "defaultMessage": "!!!Account", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.account", - "start": { - "column": 11, - "line": 28 - } - }, - { - "defaultMessage": "!!!Manage Team", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.team", - "start": { - "column": 8, - "line": 32 - } - }, - { - "defaultMessage": "!!!About Ferdi", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.supportFerdi", - "start": { - "column": 16, - "line": 36 - } - }, - { - "defaultMessage": "!!!Logout", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/settings/navigation/SettingsNavigation.js", - "id": "settings.navigation.logout", - "start": { - "column": 10, - "line": 40 - } - } - ], - "path": "src/components/settings/navigation/SettingsNavigation.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Available Services", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.headline", - "start": { - "column": 12, - "line": 19 - } - }, - { - "defaultMessage": "!!!Search service", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.searchService", - "start": { - "column": 17, - "line": 23 - } - }, - { - "defaultMessage": "!!!All services", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.all", - "start": { - "column": 14, - "line": 27 - } - }, - { - "defaultMessage": "!!!Custom Services", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.custom", - "start": { - "column": 17, - "line": 31 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.nothingFound", - "start": { - "column": 16, - "line": 35 - } - }, - { - "defaultMessage": "!!!Service successfully added", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.servicesSuccessfulAddedInfo", - "start": { - "column": 31, - "line": 39 - } - }, - { - "defaultMessage": "!!!Missing a service?", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.missingService", - "start": { - "column": 18, - "line": 43 - } - }, - { - "defaultMessage": "!!!To add a custom service, copy the recipe folder into:", - "end": { - "column": 3, - "line": 50 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.customService.intro", - "start": { - "column": 21, - "line": 47 - } - }, - { - "defaultMessage": "!!!Open directory", - "end": { - "column": 3, - "line": 54 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.customService.openFolder", - "start": { - "column": 14, - "line": 51 - } - }, - { - "defaultMessage": "!!!Developer Documentation", - "end": { - "column": 3, - "line": 58 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.customService.openDevDocs", - "start": { - "column": 15, - "line": 55 - } - }, - { - "defaultMessage": "!!!Custom 3rd Party Recipes", - "end": { - "column": 3, - "line": 62 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.customService.headline.customRecipes", - "start": { - "column": 25, - "line": 59 - } - }, - { - "defaultMessage": "!!!Community 3rd Party Recipes", - "end": { - "column": 3, - "line": 66 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.customService.headline.communityRecipes", - "start": { - "column": 28, - "line": 63 - } - }, - { - "defaultMessage": "!!!Your Development Service Recipes", - "end": { - "column": 3, - "line": 70 - }, - "file": "src/components/settings/recipes/RecipesDashboard.js", - "id": "settings.recipes.customService.headline.devRecipes", - "start": { - "column": 22, - "line": 67 - } - } - ], - "path": "src/components/settings/recipes/RecipesDashboard.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Save service", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.saveButton", - "start": { - "column": 15, - "line": 23 - } - }, - { - "defaultMessage": "!!!Delete Service", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.deleteButton", - "start": { - "column": 17, - "line": 27 - } - }, - { - "defaultMessage": "!!!Open darkmode.css", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.openDarkmodeCss", - "start": { - "column": 19, - "line": 31 - } - }, - { - "defaultMessage": "!!!Open user.css", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.openUserCss", - "start": { - "column": 15, - "line": 35 - } - }, - { - "defaultMessage": "!!!Open user.js", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.openUserJs", - "start": { - "column": 14, - "line": 39 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.recipeFileInfo", - "start": { - "column": 18, - "line": 43 - } - }, - { - "defaultMessage": "!!!Available services", - "end": { - "column": 3, - "line": 50 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.availableServices", - "start": { - "column": 21, - "line": 47 - } - }, - { - "defaultMessage": "!!!Your services", - "end": { - "column": 3, - "line": 54 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.yourServices", - "start": { - "column": 16, - "line": 51 - } - }, - { - "defaultMessage": "!!!Add {name}", - "end": { - "column": 3, - "line": 58 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.addServiceHeadline", - "start": { - "column": 22, - "line": 55 - } - }, - { - "defaultMessage": "!!!Edit {name}", - "end": { - "column": 3, - "line": 62 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.editServiceHeadline", - "start": { - "column": 23, - "line": 59 - } - }, - { - "defaultMessage": "!!!Hosted", - "end": { - "column": 3, - "line": 66 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.tabHosted", - "start": { - "column": 13, - "line": 63 - } - }, - { - "defaultMessage": "!!!Self hosted ⭐️", - "end": { - "column": 3, - "line": 70 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.tabOnPremise", - "start": { - "column": 16, - "line": 67 - } - }, - { - "defaultMessage": "!!!Use the hosted {name} service.", - "end": { - "column": 3, - "line": 74 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.useHostedService", - "start": { - "column": 20, - "line": 71 - } - }, - { - "defaultMessage": "!!!Could not validate custom {name} server.", - "end": { - "column": 3, - "line": 78 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.customUrlValidationError", - "start": { - "column": 28, - "line": 75 - } - }, - { - "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", - "end": { - "column": 3, - "line": 82 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.indirectMessageInfo", - "start": { - "column": 23, - "line": 79 - } - }, - { - "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", - "end": { - "column": 3, - "line": 86 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.isMutedInfo", - "start": { - "column": 15, - "line": 83 - } - }, - { - "defaultMessage": "!!!When enabled, a service will be shut down after a period of time to save system resources.", - "end": { - "column": 3, - "line": 90 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.isHibernatedEnabledInfo", - "start": { - "column": 28, - "line": 87 - } - }, - { - "defaultMessage": "!!!Notifications", - "end": { - "column": 3, - "line": 94 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.headlineNotifications", - "start": { - "column": 25, - "line": 91 - } - }, - { - "defaultMessage": "!!!Unread message badges", - "end": { - "column": 3, - "line": 98 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.headlineBadges", - "start": { - "column": 18, - "line": 95 - } - }, - { - "defaultMessage": "!!!General", - "end": { - "column": 3, - "line": 102 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.headlineGeneral", - "start": { - "column": 19, - "line": 99 - } - }, - { - "defaultMessage": "!!!Dark Reader Settings", - "end": { - "column": 3, - "line": 106 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.headlineDarkReaderSettings", - "start": { - "column": 30, - "line": 103 - } - }, - { - "defaultMessage": "!!!Delete", - "end": { - "column": 3, - "line": 110 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.iconDelete", - "start": { - "column": 14, - "line": 107 - } - }, - { - "defaultMessage": "!!!Drop your image, or click here", - "end": { - "column": 3, - "line": 114 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.iconUpload", - "start": { - "column": 14, - "line": 111 - } - }, - { - "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", - "end": { - "column": 3, - "line": 118 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.proxy.headline", - "start": { - "column": 17, - "line": 115 - } - }, - { - "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", - "end": { - "column": 3, - "line": 122 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.proxy.restartInfo", - "start": { - "column": 20, - "line": 119 - } - }, - { - "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", - "end": { - "column": 3, - "line": 126 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.proxy.info", - "start": { - "column": 13, - "line": 123 - } - } - ], - "path": "src/components/settings/services/EditServiceForm.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Error", - "end": { - "column": 3, - "line": 13 - }, - "file": "src/components/settings/services/ServiceError.js", - "id": "settings.service.error.headline", - "start": { - "column": 12, - "line": 10 - } - }, - { - "defaultMessage": "!!!Back to services", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/components/settings/services/ServiceError.js", - "id": "settings.service.error.goBack", - "start": { - "column": 10, - "line": 14 - } - }, - { - "defaultMessage": "!!!Available services", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/components/settings/services/ServiceError.js", - "id": "settings.service.form.availableServices", - "start": { - "column": 21, - "line": 18 - } - }, - { - "defaultMessage": "!!!Could not load service recipe.", - "end": { - "column": 3, - "line": 25 - }, - "file": "src/components/settings/services/ServiceError.js", - "id": "settings.service.error.message", - "start": { - "column": 16, - "line": 22 - } - } - ], - "path": "src/components/settings/services/ServiceError.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Service is disabled", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/settings/services/ServiceItem.js", - "id": "settings.services.tooltip.isDisabled", - "start": { - "column": 21, - "line": 11 - } - }, - { - "defaultMessage": "!!!Notifications are disabled", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/settings/services/ServiceItem.js", - "id": "settings.services.tooltip.notificationsDisabled", - "start": { - "column": 32, - "line": 15 - } - }, - { - "defaultMessage": "!!!All sounds are muted", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/settings/services/ServiceItem.js", - "id": "settings.services.tooltip.isMuted", - "start": { - "column": 18, - "line": 19 - } - } - ], - "path": "src/components/settings/services/ServiceItem.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Your services", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.services.headline", - "start": { - "column": 12, - "line": 15 - } - }, - { - "defaultMessage": "!!!Search service", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.searchService", - "start": { - "column": 17, - "line": 19 - } - }, - { - "defaultMessage": "!!!Start by adding a service.", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.services.noServicesAdded", - "start": { - "column": 19, - "line": 23 - } - }, - { - "defaultMessage": "!!!Sorry, but no service matched your search term. 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.", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.recipes.nothingFound", - "start": { - "column": 18, - "line": 27 - } - }, - { - "defaultMessage": "!!!Discover services", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.services.discoverServices", - "start": { - "column": 20, - "line": 31 - } - }, - { - "defaultMessage": "!!!Could not load your services", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.services.servicesRequestFailed", - "start": { - "column": 25, - "line": 35 - } - }, - { - "defaultMessage": "!!!Try again", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.account.tryReloadServices", - "start": { - "column": 21, - "line": 39 - } - }, - { - "defaultMessage": "!!!Your changes have been saved", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.services.updatedInfo", - "start": { - "column": 15, - "line": 43 - } - }, - { - "defaultMessage": "!!!Service has been deleted", - "end": { - "column": 3, - "line": 50 - }, - "file": "src/components/settings/services/ServicesDashboard.js", - "id": "settings.services.deletedInfo", - "start": { - "column": 15, - "line": 47 - } - } - ], - "path": "src/components/settings/services/ServicesDashboard.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!General", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.headlineGeneral", - "start": { - "column": 19, - "line": 21 - } - }, - { - "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.sentryInfo", - "start": { - "column": 14, - "line": 25 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.hibernateInfo", - "start": { - "column": 17, - "line": 29 - } - }, - { - "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.inactivityLockInfo", - "start": { - "column": 22, - "line": 33 - } - }, - { - "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", - "end": { - "column": 3, - "line": 40 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.todoServerInfo", - "start": { - "column": 18, - "line": 37 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 44 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.lockedPassword", - "start": { - "column": 18, - "line": 41 - } - }, - { - "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", - "end": { - "column": 3, - "line": 48 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.lockedPasswordInfo", - "start": { - "column": 22, - "line": 45 - } - }, - { - "defaultMessage": "!!!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}.", - "end": { - "column": 3, - "line": 52 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.lockInfo", - "start": { - "column": 12, - "line": 49 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 56 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.scheduledDNDTimeInfo", - "start": { - "column": 24, - "line": 53 - } - }, - { - "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", - "end": { - "column": 3, - "line": 60 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.scheduledDNDInfo", - "start": { - "column": 20, - "line": 57 - } - }, - { - "defaultMessage": "!!!Language", - "end": { - "column": 3, - "line": 64 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.headlineLanguage", - "start": { - "column": 20, - "line": 61 - } - }, - { - "defaultMessage": "!!!Updates", - "end": { - "column": 3, - "line": 68 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.headlineUpdates", - "start": { - "column": 19, - "line": 65 - } - }, - { - "defaultMessage": "!!!Appearance", - "end": { - "column": 3, - "line": 72 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.headlineAppearance", - "start": { - "column": 22, - "line": 69 - } - }, - { - "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", - "end": { - "column": 3, - "line": 76 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.universalDarkModeInfo", - "start": { - "column": 25, - "line": 73 - } - }, - { - "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", - "end": { - "column": 3, - "line": 80 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.accentColorInfo", - "start": { - "column": 19, - "line": 77 - } - }, - { - "defaultMessage": "!!!Privacy", - "end": { - "column": 3, - "line": 84 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.headlinePrivacy", - "start": { - "column": 19, - "line": 81 - } - }, - { - "defaultMessage": "!!!Advanced", - "end": { - "column": 3, - "line": 88 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.headlineAdvanced", - "start": { - "column": 20, - "line": 85 - } - }, - { - "defaultMessage": "!!!Help us to translate Ferdi into your language.", - "end": { - "column": 3, - "line": 92 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.translationHelp", - "start": { - "column": 19, - "line": 89 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 96 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.spellCheckerLanguageInfo", - "start": { - "column": 28, - "line": 93 - } - }, - { - "defaultMessage": "!!!Cache", - "end": { - "column": 3, - "line": 100 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.subheadlineCache", - "start": { - "column": 20, - "line": 97 - } - }, - { - "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", - "end": { - "column": 3, - "line": 104 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.cacheInfo", - "start": { - "column": 13, - "line": 101 - } - }, - { - "defaultMessage": "!!!Couldn't clear all cache", - "end": { - "column": 3, - "line": 108 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.cacheNotCleared", - "start": { - "column": 19, - "line": 105 - } - }, - { - "defaultMessage": "!!!Clear cache", - "end": { - "column": 3, - "line": 112 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.buttonClearAllCache", - "start": { - "column": 23, - "line": 109 - } - }, - { - "defaultMessage": "!!!Ferdi Profile", - "end": { - "column": 3, - "line": 116 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.subheadlineFerdiProfile", - "start": { - "column": 27, - "line": 113 - } - }, - { - "defaultMessage": "!!!Open Profile folder", - "end": { - "column": 3, - "line": 120 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.buttonOpenFerdiProfileFolder", - "start": { - "column": 32, - "line": 117 - } - }, - { - "defaultMessage": "!!!Open Service Recipes folder", - "end": { - "column": 3, - "line": 124 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.buttonOpenFerdiServiceRecipesFolder", - "start": { - "column": 39, - "line": 121 - } - }, - { - "defaultMessage": "!!!Check for updates", - "end": { - "column": 3, - "line": 128 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.buttonSearchForUpdate", - "start": { - "column": 25, - "line": 125 - } - }, - { - "defaultMessage": "!!!Restart & install update", - "end": { - "column": 3, - "line": 132 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.buttonInstallUpdate", - "start": { - "column": 23, - "line": 129 - } - }, - { - "defaultMessage": "!!!Is searching for update", - "end": { - "column": 3, - "line": 136 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.updateStatusSearching", - "start": { - "column": 25, - "line": 133 - } - }, - { - "defaultMessage": "!!!Update available, downloading...", - "end": { - "column": 3, - "line": 140 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.updateStatusAvailable", - "start": { - "column": 25, - "line": 137 - } - }, - { - "defaultMessage": "!!!You are using the latest version of Ferdi", - "end": { - "column": 3, - "line": 144 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.updateStatusUpToDate", - "start": { - "column": 24, - "line": 141 - } - }, - { - "defaultMessage": "!!!Current version:", - "end": { - "column": 3, - "line": 148 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.currentVersion", - "start": { - "column": 18, - "line": 145 - } - }, - { - "defaultMessage": "!!!Changes require restart", - "end": { - "column": 3, - "line": 152 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.restartRequired", - "start": { - "column": 22, - "line": 149 - } - }, - { - "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", - "end": { - "column": 3, - "line": 156 - }, - "file": "src/components/settings/settings/EditSettingsForm.js", - "id": "settings.app.languageDisclaimer", - "start": { - "column": 22, - "line": 153 - } - } - ], - "path": "src/components/settings/settings/EditSettingsForm.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Close settings", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/settings/SettingsLayout.js", - "id": "settings.app.closeSettings", - "start": { - "column": 17, - "line": 11 - } - } - ], - "path": "src/components/settings/SettingsLayout.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!About Ferdi", - "end": { - "column": 3, - "line": 10 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.headline", - "start": { - "column": 12, - "line": 7 - } - }, - { - "defaultMessage": "!!!Do you like Ferdi?", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.title", - "start": { - "column": 9, - "line": 11 - } - }, - { - "defaultMessage": "!!!

Ferdi is an open-source and a community-lead application.

Thanks to the people who make this possbile:

", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.aboutIntro", - "start": { - "column": 14, - "line": 15 - } - }, - { - "defaultMessage": "!!!Full list of contributor", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textListContributors", - "start": { - "column": 24, - "line": 19 - } - }, - { - "defaultMessage": "!!!here", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textListContributorsHere", - "start": { - "column": 28, - "line": 23 - } - }, - { - "defaultMessage": "!!!The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textVolunteers", - "start": { - "column": 18, - "line": 27 - } - }, - { - "defaultMessage": "!!!Support is always welcome. You can find a list of the help we need", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textSupportWelcome", - "start": { - "column": 22, - "line": 31 - } - }, - { - "defaultMessage": "!!!here", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textSupportWelcomeHere", - "start": { - "column": 26, - "line": 35 - } - }, - { - "defaultMessage": "!!!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", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textExpenses", - "start": { - "column": 16, - "line": 39 - } - }, - { - "defaultMessage": "!!!Open Collective", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textOpenCollective", - "start": { - "column": 22, - "line": 43 - } - }, - { - "defaultMessage": "!!!If you feel like supporting Ferdi development with a donation, you can do so on both,", - "end": { - "column": 3, - "line": 50 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textDonation", - "start": { - "column": 16, - "line": 47 - } - }, - { - "defaultMessage": "!!!and", - "end": { - "column": 3, - "line": 54 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textDonationAnd", - "start": { - "column": 19, - "line": 51 - } - }, - { - "defaultMessage": "!!!GitHub Sponsors", - "end": { - "column": 3, - "line": 58 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.textGitHubSponsors", - "start": { - "column": 22, - "line": 55 - } - }, - { - "defaultMessage": "!!!Open Survey", - "end": { - "column": 3, - "line": 62 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.openSurvey", - "start": { - "column": 14, - "line": 59 - } - }, - { - "defaultMessage": "!!!Do you want to help us improve Ferdi?", - "end": { - "column": 3, - "line": 66 - }, - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "id": "settings.supportFerdi.bannerText", - "start": { - "column": 14, - "line": 63 - } - } - ], - "path": "src/components/settings/supportFerdi/SupportFerdiDashboard.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Team", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.headline", - "start": { - "column": 12, - "line": 15 - } - }, - { - "defaultMessage": "!!!Franz Team Management", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.contentHeadline", - "start": { - "column": 19, - "line": 19 - } - }, - { - "defaultMessage": "!!!Your are currently using Franz Servers, which is why you have access to Team Management.", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.intro", - "start": { - "column": 9, - "line": 23 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.copy", - "start": { - "column": 8, - "line": 27 - } - }, - { - "defaultMessage": "!!!Manage your Team on meetfranz.com", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.manageAction", - "start": { - "column": 16, - "line": 31 - } - }, - { - "defaultMessage": "!!!Teams are unavailable", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.teamsUnavailable", - "start": { - "column": 20, - "line": 35 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.teamsUnavailableInfo", - "start": { - "column": 24, - "line": 39 - } - } - ], - "path": "src/components/settings/team/TeamDashboard.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Account", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/settings/user/EditUserForm.js", - "id": "settings.account.headline", - "start": { - "column": 12, - "line": 15 - } - }, - { - "defaultMessage": "!!!Update Profile", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/components/settings/user/EditUserForm.js", - "id": "settings.account.headlineProfile", - "start": { - "column": 19, - "line": 19 - } - }, - { - "defaultMessage": "!!!Account Information", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/components/settings/user/EditUserForm.js", - "id": "settings.account.headlineAccount", - "start": { - "column": 19, - "line": 23 - } - }, - { - "defaultMessage": "!!!Change Password", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/components/settings/user/EditUserForm.js", - "id": "settings.account.headlinePassword", - "start": { - "column": 20, - "line": 27 - } - }, - { - "defaultMessage": "!!!Your changes have been saved", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/components/settings/user/EditUserForm.js", - "id": "settings.account.successInfo", - "start": { - "column": 15, - "line": 31 - } - }, - { - "defaultMessage": "!!!Update profile", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/components/settings/user/EditUserForm.js", - "id": "settings.account.buttonSave", - "start": { - "column": 14, - "line": 35 - } - } - ], - "path": "src/components/settings/user/EditUserForm.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Choose from more than 70 Services", - "end": { - "column": 3, - "line": 11 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.recipes", - "start": { - "column": 20, - "line": 8 - } - }, - { - "defaultMessage": "!!!Account Synchronisation", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.accountSync", - "start": { - "column": 15, - "line": 12 - } - }, - { - "defaultMessage": "!!!Desktop Notifications", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.desktopNotifications", - "start": { - "column": 24, - "line": 16 - } - }, - { - "defaultMessage": "!!!Add unlimited services", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.unlimitedServices", - "start": { - "column": 21, - "line": 20 - } - }, - { - "defaultMessage": "!!!Spellchecker support", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.spellchecker", - "start": { - "column": 16, - "line": 24 - } - }, - { - "defaultMessage": "!!!Workspaces", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.workspaces", - "start": { - "column": 14, - "line": 28 - } - }, - { - "defaultMessage": "!!!Add Custom Websites", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.customWebsites", - "start": { - "column": 18, - "line": 32 - } - }, - { - "defaultMessage": "!!!On-premise & other Hosted Services", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.onPremise", - "start": { - "column": 13, - "line": 36 - } - }, - { - "defaultMessage": "!!!Install 3rd party services", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.thirdPartyServices", - "start": { - "column": 22, - "line": 40 - } - }, - { - "defaultMessage": "!!!Service Proxies", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.serviceProxies", - "start": { - "column": 18, - "line": 44 - } - }, - { - "defaultMessage": "!!!Team Management", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.teamManagement", - "start": { - "column": 18, - "line": 48 - } - } - ], - "path": "src/components/ui/FeatureList.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Hide", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/components/ui/InfoBar.js", - "id": "infobar.hide", - "start": { - "column": 8, - "line": 12 - } - } - ], - "path": "src/components/ui/InfoBar.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Dismiss", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/components/ui/Infobox.js", - "id": "infobox.dismiss", - "start": { - "column": 11, - "line": 9 - } - } - ], - "path": "src/components/ui/Infobox.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Password toggle", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/ui/Input.js", - "id": "settings.app.form.passwordToggle", - "start": { - "column": 18, - "line": 11 - } - } - ], - "path": "src/components/ui/Input.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Loading {service}", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/ui/WebviewLoader/index.js", - "id": "service.webviewLoader.loading", - "start": { - "column": 11, - "line": 11 - } - } - ], - "path": "src/components/ui/WebviewLoader/index.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Something went wrong.", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/util/ErrorBoundary/index.js", - "id": "app.errorHandler.headline", - "start": { - "column": 12, - "line": 11 - } - }, - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/components/util/ErrorBoundary/index.js", - "id": "app.errorHandler.action", - "start": { - "column": 10, - "line": 15 - } - } - ], - "path": "src/components/util/ErrorBoundary/index.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Name", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.name", - "start": { - "column": 8, - "line": 28 - } - }, - { - "defaultMessage": "!!!Enable service", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableService", - "start": { - "column": 17, - "line": 32 - } - }, - { - "defaultMessage": "!!!Enable hibernation", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableHibernation", - "start": { - "column": 21, - "line": 36 - } - }, - { - "defaultMessage": "!!!Enable Notifications", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableNotification", - "start": { - "column": 22, - "line": 40 - } - }, - { - "defaultMessage": "!!!Show unread message badges", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableBadge", - "start": { - "column": 15, - "line": 44 - } - }, - { - "defaultMessage": "!!!Enable audio", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableAudio", - "start": { - "column": 15, - "line": 48 - } - }, - { - "defaultMessage": "!!!Team", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.team", - "start": { - "column": 8, - "line": 52 - } - }, - { - "defaultMessage": "!!!Service URL", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.customUrl", - "start": { - "column": 13, - "line": 56 - } - }, - { - "defaultMessage": "!!!Show message badge for all new messages", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.indirectMessages", - "start": { - "column": 20, - "line": 60 - } - }, - { - "defaultMessage": "!!!Custom icon", - "end": { - "column": 3, - "line": 67 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.icon", - "start": { - "column": 8, - "line": 64 - } - }, - { - "defaultMessage": "!!!Enable Dark Mode", - "end": { - "column": 3, - "line": 71 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableDarkMode", - "start": { - "column": 18, - "line": 68 - } - }, - { - "defaultMessage": "!!!Dark Reader Brightness", - "end": { - "column": 3, - "line": 75 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.darkReaderBrightness", - "start": { - "column": 24, - "line": 72 - } - }, - { - "defaultMessage": "!!!Dark Reader Contrast", - "end": { - "column": 3, - "line": 79 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.darkReaderContrast", - "start": { - "column": 22, - "line": 76 - } - }, - { - "defaultMessage": "!!!Dark Reader Sepia", - "end": { - "column": 3, - "line": 83 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.darkReaderSepia", - "start": { - "column": 19, - "line": 80 - } - }, - { - "defaultMessage": "!!!Use Proxy", - "end": { - "column": 3, - "line": 87 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.isEnabled", - "start": { - "column": 15, - "line": 84 - } - }, - { - "defaultMessage": "!!!Proxy Host/IP", - "end": { - "column": 3, - "line": 91 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.host", - "start": { - "column": 13, - "line": 88 - } - }, - { - "defaultMessage": "!!!Port", - "end": { - "column": 3, - "line": 95 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.port", - "start": { - "column": 13, - "line": 92 - } - }, - { - "defaultMessage": "!!!User", - "end": { - "column": 3, - "line": 99 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.user", - "start": { - "column": 13, - "line": 96 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 103 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.password", - "start": { - "column": 17, - "line": 100 - } - } - ], - "path": "src/containers/settings/EditServiceScreen.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Launch Ferdi on start", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.autoLaunchOnStart", - "start": { - "column": 21, - "line": 32 - } - }, - { - "defaultMessage": "!!!Open in background", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.autoLaunchInBackground", - "start": { - "column": 26, - "line": 36 - } - }, - { - "defaultMessage": "!!!Keep Ferdi in background when closing the window", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.runInBackground", - "start": { - "column": 19, - "line": 40 - } - }, - { - "defaultMessage": "!!!Start minimized", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.startMinimized", - "start": { - "column": 18, - "line": 44 - } - }, - { - "defaultMessage": "!!!Confirm when quitting Ferdi", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.confirmOnQuit", - "start": { - "column": 17, - "line": 48 - } - }, - { - "defaultMessage": "!!!Always show Ferdi in System Tray", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableSystemTray", - "start": { - "column": 20, - "line": 52 - } - }, - { - "defaultMessage": "!!!Always show Ferdi in Menu Bar", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableMenuBar", - "start": { - "column": 17, - "line": 56 - } - }, - { - "defaultMessage": "!!!Reload Ferdi after system resume", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.reloadAfterResume", - "start": { - "column": 21, - "line": 60 - } - }, - { - "defaultMessage": "!!!Minimize Ferdi to system tray", - "end": { - "column": 3, - "line": 67 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.minimizeToSystemTray", - "start": { - "column": 24, - "line": 64 - } - }, - { - "defaultMessage": "!!!Close Ferdi to system tray", - "end": { - "column": 3, - "line": 71 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.closeToSystemTray", - "start": { - "column": 21, - "line": 68 - } - }, - { - "defaultMessage": "!!!Don't show message content in notifications", - "end": { - "column": 3, - "line": 75 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.privateNotifications", - "start": { - "column": 24, - "line": 72 - } - }, - { - "defaultMessage": "!!!Don't show notifications for clipboard events", - "end": { - "column": 3, - "line": 79 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.clipboardNotifications", - "start": { - "column": 26, - "line": 76 - } - }, - { - "defaultMessage": "!!!Notify TaskBar/Dock on new message", - "end": { - "column": 3, - "line": 83 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.notifyTaskBarOnMessage", - "start": { - "column": 26, - "line": 80 - } - }, - { - "defaultMessage": "!!!Navigation bar behaviour", - "end": { - "column": 3, - "line": 87 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.navigationBarBehaviour", - "start": { - "column": 26, - "line": 84 - } - }, - { - "defaultMessage": "!!!Search engine", - "end": { - "column": 3, - "line": 91 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.searchEngine", - "start": { - "column": 16, - "line": 88 - } - }, - { - "defaultMessage": "!!!Send telemetry data", - "end": { - "column": 3, - "line": 95 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.sentry", - "start": { - "column": 10, - "line": 92 - } - }, - { - "defaultMessage": "!!!Keep services in hibernation on startup", - "end": { - "column": 3, - "line": 99 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.hibernateOnStartup", - "start": { - "column": 22, - "line": 96 - } - }, - { - "defaultMessage": "!!!Hibernation strategy", - "end": { - "column": 3, - "line": 103 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.hibernationStrategy", - "start": { - "column": 23, - "line": 100 - } - }, - { - "defaultMessage": "!!!Wake up strategy", - "end": { - "column": 3, - "line": 107 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.wakeUpStrategy", - "start": { - "column": 18, - "line": 104 - } - }, - { - "defaultMessage": "!!!Todo Server", - "end": { - "column": 3, - "line": 111 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.predefinedTodoServer", - "start": { - "column": 24, - "line": 108 - } - }, - { - "defaultMessage": "!!!Custom TodoServer", - "end": { - "column": 3, - "line": 115 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.customTodoServer", - "start": { - "column": 20, - "line": 112 - } - }, - { - "defaultMessage": "!!!Enable Password Lock", - "end": { - "column": 3, - "line": 119 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableLock", - "start": { - "column": 14, - "line": 116 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 123 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.lockPassword", - "start": { - "column": 16, - "line": 120 - } - }, - { - "defaultMessage": "!!!Allow using Touch ID to unlock", - "end": { - "column": 3, - "line": 127 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.useTouchIdToUnlock", - "start": { - "column": 22, - "line": 124 - } - }, - { - "defaultMessage": "!!!Lock after inactivity", - "end": { - "column": 3, - "line": 131 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.inactivityLock", - "start": { - "column": 18, - "line": 128 - } - }, - { - "defaultMessage": "!!!Enable scheduled Do-not-Disturb", - "end": { - "column": 3, - "line": 135 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.scheduledDNDEnabled", - "start": { - "column": 23, - "line": 132 - } - }, - { - "defaultMessage": "!!!From", - "end": { - "column": 3, - "line": 139 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.scheduledDNDStart", - "start": { - "column": 21, - "line": 136 - } - }, - { - "defaultMessage": "!!!To", - "end": { - "column": 3, - "line": 143 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.scheduledDNDEnd", - "start": { - "column": 19, - "line": 140 - } - }, - { - "defaultMessage": "!!!Language", - "end": { - "column": 3, - "line": 147 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.language", - "start": { - "column": 12, - "line": 144 - } - }, - { - "defaultMessage": "!!!Dark Mode", - "end": { - "column": 3, - "line": 151 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.darkMode", - "start": { - "column": 12, - "line": 148 - } - }, - { - "defaultMessage": "!!!Synchronize dark mode with my OS's dark mode setting", - "end": { - "column": 3, - "line": 155 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.adaptableDarkMode", - "start": { - "column": 21, - "line": 152 - } - }, - { - "defaultMessage": "!!!Enable universal Dark Mode", - "end": { - "column": 3, - "line": 159 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.universalDarkMode", - "start": { - "column": 21, - "line": 156 - } - }, - { - "defaultMessage": "!!!Sidebar width", - "end": { - "column": 3, - "line": 163 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.serviceRibbonWidth", - "start": { - "column": 22, - "line": 160 - } - }, - { - "defaultMessage": "!!!Service icon size", - "end": { - "column": 3, - "line": 167 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.iconSize", - "start": { - "column": 12, - "line": 164 - } - }, - { - "defaultMessage": "!!!Use horizontal style", - "end": { - "column": 3, - "line": 171 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.useVerticalStyle", - "start": { - "column": 20, - "line": 168 - } - }, - { - "defaultMessage": "!!!Always show workspace drawer", - "end": { - "column": 3, - "line": 175 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.alwaysShowWorkspaces", - "start": { - "column": 24, - "line": 172 - } - }, - { - "defaultMessage": "!!!Accent color", - "end": { - "column": 3, - "line": 179 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.accentColor", - "start": { - "column": 15, - "line": 176 - } - }, - { - "defaultMessage": "!!!Display disabled services tabs", - "end": { - "column": 3, - "line": 183 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.showDisabledServices", - "start": { - "column": 24, - "line": 180 - } - }, - { - "defaultMessage": "!!!Show unread message badge when notifications are disabled", - "end": { - "column": 3, - "line": 187 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.showMessagesBadgesWhenMuted", - "start": { - "column": 29, - "line": 184 - } - }, - { - "defaultMessage": "!!!Show draggable area on window", - "end": { - "column": 3, - "line": 191 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.showDragArea", - "start": { - "column": 16, - "line": 188 - } - }, - { - "defaultMessage": "!!!Enable spell checking", - "end": { - "column": 3, - "line": 195 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableSpellchecking", - "start": { - "column": 23, - "line": 192 - } - }, - { - "defaultMessage": "!!!Enable GPU Acceleration", - "end": { - "column": 3, - "line": 199 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableGPUAcceleration", - "start": { - "column": 25, - "line": 196 - } - }, - { - "defaultMessage": "!!!Include beta versions", - "end": { - "column": 3, - "line": 203 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.beta", - "start": { - "column": 8, - "line": 200 - } - }, - { - "defaultMessage": "!!!Enable updates", - "end": { - "column": 3, - "line": 207 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.automaticUpdates", - "start": { - "column": 20, - "line": 204 - } - }, - { - "defaultMessage": "!!!Enable Franz Todos", - "end": { - "column": 3, - "line": 211 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableTodos", - "start": { - "column": 15, - "line": 208 - } - }, - { - "defaultMessage": "!!!Keep all workspaces loaded", - "end": { - "column": 3, - "line": 215 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.keepAllWorkspacesLoaded", - "start": { - "column": 27, - "line": 212 - } - } - ], - "path": "src/containers/settings/EditSettingsScreen.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Firstname", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.firstname", - "start": { - "column": 13, - "line": 14 - } - }, - { - "defaultMessage": "!!!Lastname", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.lastname", - "start": { - "column": 12, - "line": 18 - } - }, - { - "defaultMessage": "!!!Email", - "end": { - "column": 3, - "line": 25 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.email", - "start": { - "column": 9, - "line": 22 - } - }, - { - "defaultMessage": "!!!Account type", - "end": { - "column": 3, - "line": 29 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.label", - "start": { - "column": 20, - "line": 26 - } - }, - { - "defaultMessage": "!!!Individual", - "end": { - "column": 3, - "line": 33 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.individual", - "start": { - "column": 25, - "line": 30 - } - }, - { - "defaultMessage": "!!!Non-Profit", - "end": { - "column": 3, - "line": 37 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.non-profit", - "start": { - "column": 24, - "line": 34 - } - }, - { - "defaultMessage": "!!!Company", - "end": { - "column": 3, - "line": 41 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.company", - "start": { - "column": 22, - "line": 38 - } - }, - { - "defaultMessage": "!!!Current password", - "end": { - "column": 3, - "line": 45 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.currentPassword", - "start": { - "column": 19, - "line": 42 - } - }, - { - "defaultMessage": "!!!New password", - "end": { - "column": 3, - "line": 49 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.newPassword", - "start": { - "column": 15, - "line": 46 - } - } - ], - "path": "src/containers/settings/EditUserScreen.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Sign In", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/features/basicAuth/Component.js", - "id": "feature.basicAuth.signIn", - "start": { - "column": 10, - "line": 24 - } - } - ], - "path": "src/features/basicAuth/Component.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Publish debugging information", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/features/debugger/Component.js", - "id": "feature.debugger.title", - "start": { - "column": 9, - "line": 16 - } - } - ], - "path": "src/features/debugger/Component.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Nightly Builds", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.title", - "start": { - "column": 9, - "line": 17 - } - }, - { - "defaultMessage": "!!!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.", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.info", - "start": { - "column": 8, - "line": 21 - } - }, - { - "defaultMessage": "!!!Activate", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.activate", - "start": { - "column": 12, - "line": 25 - } - } - ], - "path": "src/features/nightlyBuilds/Component.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Publish debug information", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.title", - "start": { - "column": 9, - "line": 19 - } - }, - { - "defaultMessage": "!!!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", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.info", - "start": { - "column": 8, - "line": 23 - } - }, - { - "defaultMessage": "!!!There was an error while trying to publish the debug information. Please try again later or view the console for more information.", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.error", - "start": { - "column": 9, - "line": 27 - } - }, - { - "defaultMessage": "!!!Privacy policy", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.privacy", - "start": { - "column": 11, - "line": 31 - } - }, - { - "defaultMessage": "!!!Terms of service", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.terms", - "start": { - "column": 9, - "line": 35 - } - }, - { - "defaultMessage": "!!!Accept and publish", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.publish", - "start": { - "column": 11, - "line": 39 - } - }, - { - "defaultMessage": "!!!Your debug log was published and is now availible at", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/features/publishDebugInfo/Component.js", - "id": "feature.publishDebugInfo.published", - "start": { - "column": 13, - "line": 43 - } - } - ], - "path": "src/features/publishDebugInfo/Component.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!QuickSwitch", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/features/quickSwitch/Component.js", - "id": "feature.quickSwitch.title", - "start": { - "column": 9, - "line": 17 - } - }, - { - "defaultMessage": "!!!Search...", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/features/quickSwitch/Component.js", - "id": "feature.quickSwitch.search", - "start": { - "column": 10, - "line": 21 - } - }, - { - "defaultMessage": "!!!Select a service with TAB, ↑ and ↓. Open a service with ENTER.", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/features/quickSwitch/Component.js", - "id": "feature.quickSwitch.info", - "start": { - "column": 8, - "line": 25 - } - } - ], - "path": "src/features/quickSwitch/Component.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Home", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "id": "webControls.goHome", - "start": { - "column": 10, - "line": 13 - } - }, - { - "defaultMessage": "!!!Open in Browser", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "id": "webControls.openInBrowser", - "start": { - "column": 17, - "line": 17 - } - }, - { - "defaultMessage": "!!!Back", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "id": "webControls.back", - "start": { - "column": 8, - "line": 21 - } - }, - { - "defaultMessage": "!!!Forward", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "id": "webControls.forward", - "start": { - "column": 11, - "line": 25 - } - }, - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "id": "webControls.reload", - "start": { - "column": 10, - "line": 29 - } - } - ], - "path": "src/features/recipeConnectionLost/components/WebControls.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Home", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/features/webControls/components/WebControls.js", - "id": "webControls.goHome", - "start": { - "column": 10, - "line": 17 - } - }, - { - "defaultMessage": "!!!Open in Browser", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/features/webControls/components/WebControls.js", - "id": "webControls.openInBrowser", - "start": { - "column": 17, - "line": 21 - } - }, - { - "defaultMessage": "!!!Back", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/features/webControls/components/WebControls.js", - "id": "webControls.back", - "start": { - "column": 8, - "line": 25 - } - }, - { - "defaultMessage": "!!!Forward", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/features/webControls/components/WebControls.js", - "id": "webControls.forward", - "start": { - "column": 11, - "line": 29 - } - }, - { - "defaultMessage": "!!!Reload", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/features/webControls/components/WebControls.js", - "id": "webControls.reload", - "start": { - "column": 10, - "line": 33 - } - } - ], - "path": "src/features/webControls/components/WebControls.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Create workspace", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/features/workspaces/components/CreateWorkspaceForm.js", - "id": "settings.workspace.add.form.submitButton", - "start": { - "column": 16, - "line": 12 - } - }, - { - "defaultMessage": "!!!Name", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/features/workspaces/components/CreateWorkspaceForm.js", - "id": "settings.workspace.add.form.name", - "start": { - "column": 8, - "line": 16 - } - } - ], - "path": "src/features/workspaces/components/CreateWorkspaceForm.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Delete workspace", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.buttonDelete", - "start": { - "column": 16, - "line": 21 - } - }, - { - "defaultMessage": "!!!Save workspace", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.buttonSave", - "start": { - "column": 14, - "line": 25 - } - }, - { - "defaultMessage": "!!!Name", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.name", - "start": { - "column": 8, - "line": 29 - } - }, - { - "defaultMessage": "!!!Your workspaces", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.yourWorkspaces", - "start": { - "column": 18, - "line": 33 - } - }, - { - "defaultMessage": "!!!Keep this workspace loaded*", - "end": { - "column": 3, - "line": 40 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.keepLoaded", - "start": { - "column": 14, - "line": 37 - } - }, - { - "defaultMessage": "!!!*This option will be overwritten by the global \"Keep all workspaces loaded\" option.", - "end": { - "column": 3, - "line": 45 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.keepLoadedInfo", - "start": { - "column": 18, - "line": 41 - } - }, - { - "defaultMessage": "!!!Services in this Workspace", - "end": { - "column": 3, - "line": 49 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.workspace.form.servicesInWorkspaceHeadline", - "start": { - "column": 31, - "line": 46 - } - }, - { - "defaultMessage": "!!!Start by adding a service.", - "end": { - "column": 3, - "line": 53 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.services.noServicesAdded", - "start": { - "column": 19, - "line": 50 - } - }, - { - "defaultMessage": "!!!Discover services", - "end": { - "column": 3, - "line": 57 - }, - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "id": "settings.services.discoverServices", - "start": { - "column": 20, - "line": 54 - } - } - ], - "path": "src/features/workspaces/components/EditWorkspaceForm.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Workspaces", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.headline", - "start": { - "column": 12, - "line": 15 - } - }, - { - "defaultMessage": "!!!All services", - "end": { - "column": 3, - "line": 22 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.allServices", - "start": { - "column": 15, - "line": 19 - } - }, - { - "defaultMessage": "!!!Workspaces settings", - "end": { - "column": 3, - "line": 26 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.workspacesSettingsTooltip", - "start": { - "column": 29, - "line": 23 - } - }, - { - "defaultMessage": "!!!Info about workspace feature", - "end": { - "column": 3, - "line": 30 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.workspaceFeatureInfo", - "start": { - "column": 24, - "line": 27 - } - }, - { - "defaultMessage": "!!!add new workspace", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.addNewWorkspaceLabel", - "start": { - "column": 24, - "line": 31 - } - } - ], - "path": "src/features/workspaces/components/WorkspaceDrawer.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!No services added yet", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/features/workspaces/components/WorkspaceDrawerItem.js", - "id": "workspaceDrawer.item.noServicesAddedYet", - "start": { - "column": 22, - "line": 11 - } - }, - { - "defaultMessage": "!!!edit", - "end": { - "column": 3, - "line": 18 - }, - "file": "src/features/workspaces/components/WorkspaceDrawerItem.js", - "id": "workspaceDrawer.item.contextMenuEdit", - "start": { - "column": 19, - "line": 15 - } - } - ], - "path": "src/features/workspaces/components/WorkspaceDrawerItem.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Your workspaces", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.headline", - "start": { - "column": 12, - "line": 17 - } - }, - { - "defaultMessage": "!!!You haven't created any workspaces yet.", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.noWorkspacesAdded", - "start": { - "column": 19, - "line": 21 - } - }, - { - "defaultMessage": "!!!Could not load your workspaces", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.workspacesRequestFailed", - "start": { - "column": 27, - "line": 25 - } - }, - { - "defaultMessage": "!!!Try again", - "end": { - "column": 3, - "line": 32 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.tryReloadWorkspaces", - "start": { - "column": 23, - "line": 29 - } - }, - { - "defaultMessage": "!!!Your changes have been saved", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.updatedInfo", - "start": { - "column": 15, - "line": 33 - } - }, - { - "defaultMessage": "!!!Workspace has been deleted", - "end": { - "column": 3, - "line": 40 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.deletedInfo", - "start": { - "column": 15, - "line": 37 - } - }, - { - "defaultMessage": "!!!Info about workspace feature", - "end": { - "column": 3, - "line": 44 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.workspaceFeatureInfo", - "start": { - "column": 24, - "line": 41 - } - }, - { - "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", - "end": { - "column": 3, - "line": 48 - }, - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "id": "settings.workspaces.workspaceFeatureHeadline", - "start": { - "column": 28, - "line": 45 - } - } - ], - "path": "src/features/workspaces/components/WorkspacesDashboard.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Switching to", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/features/workspaces/components/WorkspaceSwitchingIndicator.js", - "id": "workspaces.switchingIndicator.switchingTo", - "start": { - "column": 15, - "line": 12 - } - } - ], - "path": "src/features/workspaces/components/WorkspaceSwitchingIndicator.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Field is required", - "end": { - "column": 3, - "line": 8 - }, - "file": "src/helpers/validation-helpers.js", - "id": "validation.required", - "start": { - "column": 12, - "line": 5 - } - }, - { - "defaultMessage": "!!!Email not valid", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/helpers/validation-helpers.js", - "id": "validation.email", - "start": { - "column": 9, - "line": 9 - } - }, - { - "defaultMessage": "!!!Not a valid URL", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/helpers/validation-helpers.js", - "id": "validation.url", - "start": { - "column": 7, - "line": 13 - } - }, - { - "defaultMessage": "!!!Too few characters", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/helpers/validation-helpers.js", - "id": "validation.minLength", - "start": { - "column": 13, - "line": 17 - } - }, - { - "defaultMessage": "!!!At least one is required", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/helpers/validation-helpers.js", - "id": "validation.oneRequired", - "start": { - "column": 15, - "line": 21 - } - } - ], - "path": "src/helpers/validation-helpers.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Can't connect to Ferdi Online Services", - "end": { - "column": 3, - "line": 7 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.api.unhealthy", - "start": { - "column": 16, - "line": 4 - } - }, - { - "defaultMessage": "!!!You are not connected to the internet.", - "end": { - "column": 3, - "line": 11 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.notConnectedToTheInternet", - "start": { - "column": 29, - "line": 8 - } - }, - { - "defaultMessage": "!!!Spell checking language", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.spellchecking.language", - "start": { - "column": 24, - "line": 12 - } - }, - { - "defaultMessage": "!!!Use System Default ({default})", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.spellchecker.useDefault", - "start": { - "column": 29, - "line": 16 - } - }, - { - "defaultMessage": "!!!Detect language automatically", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.spellchecking.autodetect", - "start": { - "column": 34, - "line": 20 - } - }, - { - "defaultMessage": "!!!Automatic", - "end": { - "column": 3, - "line": 27 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.spellchecking.autodetect.short", - "start": { - "column": 39, - "line": 24 - } - }, - { - "defaultMessage": "!!!User Agent", - "end": { - "column": 3, - "line": 31 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.userAgentPref", - "start": { - "column": 17, - "line": 28 - } - }, - { - "defaultMessage": "!!!Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.userAgentHelp", - "start": { - "column": 17, - "line": 32 - } - }, - { - "defaultMessage": "!!!Yes", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.yes", - "start": { - "column": 7, - "line": 36 - } - }, - { - "defaultMessage": "!!!No", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.no", - "start": { - "column": 6, - "line": 40 - } - }, - { - "defaultMessage": "!!!Ok", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.ok", - "start": { - "column": 6, - "line": 44 - } - }, - { - "defaultMessage": "!!!Cancel", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.cancel", - "start": { - "column": 10, - "line": 48 - } - }, - { - "defaultMessage": "!!!Save", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.save", - "start": { - "column": 8, - "line": 52 - } - }, - { - "defaultMessage": "!!!Submit", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.submit", - "start": { - "column": 10, - "line": 56 - } - }, - { - "defaultMessage": "!!!Quit", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.quit", - "start": { - "column": 8, - "line": 60 - } - }, - { - "defaultMessage": "!!!Do you really want to quit Ferdi?", - "end": { - "column": 3, - "line": 68 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.quitConfirmation", - "start": { - "column": 20, - "line": 64 - } - }, - { - "defaultMessage": "!!!Settings", - "end": { - "column": 3, - "line": 72 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.settings", - "start": { - "column": 12, - "line": 69 - } - }, - { - "defaultMessage": "!!!Edit", - "end": { - "column": 3, - "line": 76 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.edit", - "start": { - "column": 8, - "line": 73 - } - } - ], - "path": "src/i18n/globalMessages.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Edit", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit", - "start": { - "column": 8, - "line": 32 - } - }, - { - "defaultMessage": "!!!Undo", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.undo", - "start": { - "column": 8, - "line": 36 - } - }, - { - "defaultMessage": "!!!Redo", - "end": { - "column": 3, - "line": 43 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.redo", - "start": { - "column": 8, - "line": 40 - } - }, - { - "defaultMessage": "!!!Cut", - "end": { - "column": 3, - "line": 47 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.cut", - "start": { - "column": 7, - "line": 44 - } - }, - { - "defaultMessage": "!!!Copy", - "end": { - "column": 3, - "line": 51 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.copy", - "start": { - "column": 8, - "line": 48 - } - }, - { - "defaultMessage": "!!!Paste", - "end": { - "column": 3, - "line": 55 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.paste", - "start": { - "column": 9, - "line": 52 - } - }, - { - "defaultMessage": "!!!Paste And Match Style", - "end": { - "column": 3, - "line": 59 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.pasteAndMatchStyle", - "start": { - "column": 22, - "line": 56 - } - }, - { - "defaultMessage": "!!!Delete", - "end": { - "column": 3, - "line": 63 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.delete", - "start": { - "column": 10, - "line": 60 - } - }, - { - "defaultMessage": "!!!Select All", - "end": { - "column": 3, - "line": 67 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.selectAll", - "start": { - "column": 13, - "line": 64 - } - }, - { - "defaultMessage": "!!!Find in Page", - "end": { - "column": 3, - "line": 71 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.findInPage", - "start": { - "column": 14, - "line": 68 - } - }, - { - "defaultMessage": "!!!Speech", - "end": { - "column": 3, - "line": 75 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.speech", - "start": { - "column": 10, - "line": 72 - } - }, - { - "defaultMessage": "!!!Start Speaking", - "end": { - "column": 3, - "line": 79 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.startSpeaking", - "start": { - "column": 17, - "line": 76 - } - }, - { - "defaultMessage": "!!!Stop Speaking", - "end": { - "column": 3, - "line": 83 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.stopSpeaking", - "start": { - "column": 16, - "line": 80 - } - }, - { - "defaultMessage": "!!!Start Dictation", - "end": { - "column": 3, - "line": 87 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.startDictation", - "start": { - "column": 18, - "line": 84 - } - }, - { - "defaultMessage": "!!!Emoji & Symbols", - "end": { - "column": 3, - "line": 91 - }, - "file": "src/lib/Menu.js", - "id": "menu.edit.emojiSymbols", - "start": { - "column": 16, - "line": 88 - } - }, - { - "defaultMessage": "!!!Open Quick Switch", - "end": { - "column": 3, - "line": 95 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.openQuickSwitch", - "start": { - "column": 19, - "line": 92 - } - }, - { - "defaultMessage": "!!!Back", - "end": { - "column": 3, - "line": 99 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.back", - "start": { - "column": 8, - "line": 96 - } - }, - { - "defaultMessage": "!!!Forward", - "end": { - "column": 3, - "line": 103 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.forward", - "start": { - "column": 11, - "line": 100 - } - }, - { - "defaultMessage": "!!!Actual Size", - "end": { - "column": 3, - "line": 107 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.resetZoom", - "start": { - "column": 13, - "line": 104 - } - }, - { - "defaultMessage": "!!!Zoom In", - "end": { - "column": 3, - "line": 111 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.zoomIn", - "start": { - "column": 10, - "line": 108 - } - }, - { - "defaultMessage": "!!!Zoom Out", - "end": { - "column": 3, - "line": 115 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.zoomOut", - "start": { - "column": 11, - "line": 112 - } - }, - { - "defaultMessage": "!!!Toggle Full Screen", - "end": { - "column": 3, - "line": 119 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.toggleFullScreen", - "start": { - "column": 20, - "line": 116 - } - }, - { - "defaultMessage": "!!!Toggle Dark Mode", - "end": { - "column": 3, - "line": 123 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.toggleDarkMode", - "start": { - "column": 18, - "line": 120 - } - }, - { - "defaultMessage": "!!!Toggle Developer Tools", - "end": { - "column": 3, - "line": 127 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.toggleDevTools", - "start": { - "column": 18, - "line": 124 - } - }, - { - "defaultMessage": "!!!Toggle Todos Developer Tools", - "end": { - "column": 3, - "line": 131 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.toggleTodosDevTools", - "start": { - "column": 23, - "line": 128 - } - }, - { - "defaultMessage": "!!!Toggle Service Developer Tools", - "end": { - "column": 3, - "line": 135 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.toggleServiceDevTools", - "start": { - "column": 25, - "line": 132 - } - }, - { - "defaultMessage": "!!!Reload Service", - "end": { - "column": 3, - "line": 139 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.reloadService", - "start": { - "column": 17, - "line": 136 - } - }, - { - "defaultMessage": "!!!Reload Ferdi", - "end": { - "column": 3, - "line": 143 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.reloadFerdi", - "start": { - "column": 15, - "line": 140 - } - }, - { - "defaultMessage": "!!!Lock Ferdi", - "end": { - "column": 3, - "line": 147 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.lockFerdi", - "start": { - "column": 13, - "line": 144 - } - }, - { - "defaultMessage": "!!!Reload ToDos", - "end": { - "column": 3, - "line": 151 - }, - "file": "src/lib/Menu.js", - "id": "menu.view.reloadTodos", - "start": { - "column": 15, - "line": 148 - } - }, - { - "defaultMessage": "!!!Minimize", - "end": { - "column": 3, - "line": 155 - }, - "file": "src/lib/Menu.js", - "id": "menu.window.minimize", - "start": { - "column": 12, - "line": 152 - } - }, - { - "defaultMessage": "!!!Close", - "end": { - "column": 3, - "line": 159 - }, - "file": "src/lib/Menu.js", - "id": "menu.window.close", - "start": { - "column": 9, - "line": 156 - } - }, - { - "defaultMessage": "!!!Learn More", - "end": { - "column": 3, - "line": 163 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.learnMore", - "start": { - "column": 13, - "line": 160 - } - }, - { - "defaultMessage": "!!!Changelog", - "end": { - "column": 3, - "line": 167 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.changelog", - "start": { - "column": 13, - "line": 164 - } - }, - { - "defaultMessage": "!!!Import/Export Configuration Data", - "end": { - "column": 3, - "line": 171 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.importExportData", - "start": { - "column": 20, - "line": 168 - } - }, - { - "defaultMessage": "!!!Support", - "end": { - "column": 3, - "line": 175 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.support", - "start": { - "column": 11, - "line": 172 - } - }, - { - "defaultMessage": "!!!Copy Debug Information", - "end": { - "column": 3, - "line": 179 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.debugInfo", - "start": { - "column": 13, - "line": 176 - } - }, - { - "defaultMessage": "!!!Publish Debug Information", - "end": { - "column": 3, - "line": 183 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.publishDebugInfo", - "start": { - "column": 20, - "line": 180 - } - }, - { - "defaultMessage": "!!!Ferdi Debug Information", - "end": { - "column": 3, - "line": 187 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.debugInfoCopiedHeadline", - "start": { - "column": 27, - "line": 184 - } - }, - { - "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", - "end": { - "column": 3, - "line": 192 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.debugInfoCopiedBody", - "start": { - "column": 23, - "line": 188 - } - }, - { - "defaultMessage": "!!!Unlock with Touch ID", - "end": { - "column": 3, - "line": 196 - }, - "file": "src/lib/Menu.js", - "id": "locked.touchId", - "start": { - "column": 11, - "line": 193 - } - }, - { - "defaultMessage": "!!!unlock via Touch ID", - "end": { - "column": 3, - "line": 200 - }, - "file": "src/lib/Menu.js", - "id": "locked.touchIdPrompt", - "start": { - "column": 17, - "line": 197 - } - }, - { - "defaultMessage": "!!!Terms of Service", - "end": { - "column": 3, - "line": 204 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.tos", - "start": { - "column": 7, - "line": 201 - } - }, - { - "defaultMessage": "!!!Privacy Statement", - "end": { - "column": 3, - "line": 208 - }, - "file": "src/lib/Menu.js", - "id": "menu.help.privacy", - "start": { - "column": 11, - "line": 205 - } - }, - { - "defaultMessage": "!!!File", - "end": { - "column": 3, - "line": 212 - }, - "file": "src/lib/Menu.js", - "id": "menu.file", - "start": { - "column": 8, - "line": 209 - } - }, - { - "defaultMessage": "!!!View", - "end": { - "column": 3, - "line": 216 - }, - "file": "src/lib/Menu.js", - "id": "menu.view", - "start": { - "column": 8, - "line": 213 - } - }, - { - "defaultMessage": "!!!Services", - "end": { - "column": 3, - "line": 220 - }, - "file": "src/lib/Menu.js", - "id": "menu.services", - "start": { - "column": 12, - "line": 217 - } - }, - { - "defaultMessage": "!!!Window", - "end": { - "column": 3, - "line": 224 - }, - "file": "src/lib/Menu.js", - "id": "menu.window", - "start": { - "column": 10, - "line": 221 - } - }, - { - "defaultMessage": "!!!Help", - "end": { - "column": 3, - "line": 228 - }, - "file": "src/lib/Menu.js", - "id": "menu.help", - "start": { - "column": 8, - "line": 225 - } - }, - { - "defaultMessage": "!!!About Ferdi", - "end": { - "column": 3, - "line": 232 - }, - "file": "src/lib/Menu.js", - "id": "menu.app.about", - "start": { - "column": 9, - "line": 229 - } - }, - { - "defaultMessage": "!!!Check for updates", - "end": { - "column": 3, - "line": 236 - }, - "file": "src/lib/Menu.js", - "id": "menu.app.checkForUpdates", - "start": { - "column": 19, - "line": 233 - } - }, - { - "defaultMessage": "!!!Hide", - "end": { - "column": 3, - "line": 240 - }, - "file": "src/lib/Menu.js", - "id": "menu.app.hide", - "start": { - "column": 8, - "line": 237 - } - }, - { - "defaultMessage": "!!!Hide Others", - "end": { - "column": 3, - "line": 244 - }, - "file": "src/lib/Menu.js", - "id": "menu.app.hideOthers", - "start": { - "column": 14, - "line": 241 - } - }, - { - "defaultMessage": "!!!Unhide", - "end": { - "column": 3, - "line": 248 - }, - "file": "src/lib/Menu.js", - "id": "menu.app.unhide", - "start": { - "column": 10, - "line": 245 - } - }, - { - "defaultMessage": "!!!Auto-hide menu bar", - "end": { - "column": 3, - "line": 252 - }, - "file": "src/lib/Menu.js", - "id": "menu.app.autohideMenuBar", - "start": { - "column": 19, - "line": 249 - } - }, - { - "defaultMessage": "!!!Add New Service...", - "end": { - "column": 3, - "line": 256 - }, - "file": "src/lib/Menu.js", - "id": "menu.services.addNewService", - "start": { - "column": 17, - "line": 253 - } - }, - { - "defaultMessage": "!!!Add New Workspace...", - "end": { - "column": 3, - "line": 260 - }, - "file": "src/lib/Menu.js", - "id": "menu.workspaces.addNewWorkspace", - "start": { - "column": 19, - "line": 257 - } - }, - { - "defaultMessage": "!!!Open workspace drawer", - "end": { - "column": 3, - "line": 264 - }, - "file": "src/lib/Menu.js", - "id": "menu.workspaces.openWorkspaceDrawer", - "start": { - "column": 23, - "line": 261 - } - }, - { - "defaultMessage": "!!!Close workspace drawer", - "end": { - "column": 3, - "line": 268 - }, - "file": "src/lib/Menu.js", - "id": "menu.workspaces.closeWorkspaceDrawer", - "start": { - "column": 24, - "line": 265 - } - }, - { - "defaultMessage": "!!!Activate next service...", - "end": { - "column": 3, - "line": 272 - }, - "file": "src/lib/Menu.js", - "id": "menu.services.setNextServiceActive", - "start": { - "column": 23, - "line": 269 - } - }, - { - "defaultMessage": "!!!Activate previous service...", - "end": { - "column": 3, - "line": 276 - }, - "file": "src/lib/Menu.js", - "id": "menu.services.activatePreviousService", - "start": { - "column": 27, - "line": 273 - } - }, - { - "defaultMessage": "!!!Disable notifications & audio", - "end": { - "column": 3, - "line": 280 - }, - "file": "src/lib/Menu.js", - "id": "sidebar.muteApp", - "start": { - "column": 11, - "line": 277 - } - }, - { - "defaultMessage": "!!!Enable notifications & audio", - "end": { - "column": 3, - "line": 284 - }, - "file": "src/lib/Menu.js", - "id": "sidebar.unmuteApp", - "start": { - "column": 13, - "line": 281 - } - }, - { - "defaultMessage": "!!!Workspaces", - "end": { - "column": 3, - "line": 288 - }, - "file": "src/lib/Menu.js", - "id": "menu.workspaces", - "start": { - "column": 14, - "line": 285 - } - }, - { - "defaultMessage": "!!!Default", - "end": { - "column": 3, - "line": 292 - }, - "file": "src/lib/Menu.js", - "id": "menu.workspaces.defaultWorkspace", - "start": { - "column": 20, - "line": 289 - } - }, - { - "defaultMessage": "!!!Todos", - "end": { - "column": 3, - "line": 296 - }, - "file": "src/lib/Menu.js", - "id": "menu.todos", - "start": { - "column": 9, - "line": 293 - } - }, - { - "defaultMessage": "!!!Open Todos drawer", - "end": { - "column": 3, - "line": 300 - }, - "file": "src/lib/Menu.js", - "id": "menu.Todoss.openTodosDrawer", - "start": { - "column": 19, - "line": 297 - } - }, - { - "defaultMessage": "!!!Close Todos drawer", - "end": { - "column": 3, - "line": 304 - }, - "file": "src/lib/Menu.js", - "id": "menu.Todoss.closeTodosDrawer", - "start": { - "column": 20, - "line": 301 - } - }, - { - "defaultMessage": "!!!Enable Todos", - "end": { - "column": 3, - "line": 308 - }, - "file": "src/lib/Menu.js", - "id": "menu.todos.enableTodos", - "start": { - "column": 15, - "line": 305 - } - }, - { - "defaultMessage": "!!!Home", - "end": { - "column": 3, - "line": 312 - }, - "file": "src/lib/Menu.js", - "id": "menu.services.goHome", - "start": { - "column": 17, - "line": 309 - } - } - ], - "path": "src/lib/Menu.json" - } -] \ No newline at end of file diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index be9bbb961..158022419 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reload", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,7 +23,7 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.api.unhealthy": "Can't connect to Ferdi Online Services", "global.cancel": "Cancel", "global.edit": "Edit", "global.no": "No", @@ -45,9 +44,9 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "What is new?", + "infobar.buttonChangelog": "Changelog", "infobar.buttonInstallUpdate": "Restart & install update", "infobar.buttonReloadServices": "Reload services", "infobar.hide": "Hide", @@ -75,7 +74,7 @@ "login.email.label": "Email address", "login.headline": "Sign in", "login.invalidCredentials": "Email or password not valid", - "login.link.password": "Reset password", + "login.link.password": "Forgot password", "login.link.signup": "Create a free account", "login.password.label": "Password", "login.serverLogout": "Your session expired, please login again.", @@ -117,10 +116,10 @@ "menu.help.support": "Support", "menu.help.tos": "Terms of Service", "menu.services": "Services", - "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service...", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Activate next service", + "menu.services.setNextServiceActive": "Activate next service...", "menu.todos": "Todos", "menu.todos.enableTodos": "Enable Todos", "menu.view": "View", @@ -145,14 +144,14 @@ "menu.workspaces": "Workspaces", "menu.workspaces.addNewWorkspace": "Add New Workspace...", "menu.workspaces.closeWorkspaceDrawer": "Close workspace drawer", - "menu.workspaces.defaultWorkspace": "All services", + "menu.workspaces.defaultWorkspace": "Default", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Email address", - "password.headline": "Reset password", + "password.headline": "Forgot password", "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", - "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", + "password.noUser": "No user affiliated with that email address", + "password.successInfo": "Your new password was sent to your email address", "pricing.features.accountSync": "Account Synchronisation", "pricing.features.customWebsites": "Add Custom Websites", "pricing.features.desktopNotifications": "Desktop Notifications", @@ -173,7 +172,7 @@ "service.errorHandler.action": "Reload {name}", "service.errorHandler.editAction": "Edit {name}", "service.errorHandler.headline": "Oh no!", - "service.errorHandler.message": "Error", + "service.errorHandler.message": "Error:", "service.errorHandler.text": "{name} has failed to load.", "service.webviewLoader.loading": "Loading {service}", "services.getStarted": "Get started", @@ -181,7 +180,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Welcome to Ferdi", - "settings.account.account.editButton": "Edit account", + "settings.account.account.editButton": "Edit Account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Update profile", @@ -189,16 +188,16 @@ "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "settings.account.headline": "Account", - "settings.account.headlineAccount": "Account information", - "settings.account.headlineDangerZone": "Danger Zone", - "settings.account.headlineInvoices": "Invoices", - "settings.account.headlinePassword": "Change password", - "settings.account.headlineProfile": "Update profile", + "settings.account.headlineAccount": "Account Information", + "settings.account.headlineDangerZone": "!!Danger Zone", + "settings.account.headlineInvoices": "!!Invoices", + "settings.account.headlinePassword": "Change Password", + "settings.account.headlineProfile": "Update Profile", "settings.account.successInfo": "Your changes have been saved", "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -219,13 +218,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.customTodoServer": "Custom TodoServer", + "settings.app.form.darkMode": "Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -253,7 +252,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", "settings.app.form.startMinimized": "Start minimized", "settings.app.form.universalDarkMode": "Enable universal Dark Mode", - "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using Touch ID to unlock", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Advanced", @@ -265,9 +264,9 @@ "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.", "settings.app.inactivityLockInfo": "Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", "settings.app.languageDisclaimer": "Official translations are English & German. All other languages are community based translations.", - "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}.", + "settings.app.lockInfo": "Password Lock allows you to keep your messages protected. Using 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}.", "settings.app.lockedPassword": "Password", - "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember. If you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Changes require restart", "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.", "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.", @@ -275,7 +274,7 @@ "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.", "settings.app.subheadlineCache": "Cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", + "settings.app.todoServerInfo": "This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", "settings.app.translationHelp": "Help us to translate Ferdi into your language.", "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", "settings.app.updateStatusAvailable": "Update available, downloading...", @@ -294,12 +293,12 @@ "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes", "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", - "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", + "settings.recipes.customService.intro": "To add a custom service, copy the recipe folder into:", "settings.recipes.customService.openDevDocs": "Developer Documentation", - "settings.recipes.customService.openFolder": "Open folder", - "settings.recipes.headline": "Available services", + "settings.recipes.customService.openFolder": "Open directory", + "settings.recipes.headline": "Available Services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -307,18 +306,18 @@ "settings.service.error.message": "Could not load service recipe.", "settings.service.form.addServiceHeadline": "Add {name}", "settings.service.form.availableServices": "Available services", - "settings.service.form.customUrl": "Custom server", + "settings.service.form.customUrl": "Service URL", "settings.service.form.customUrlValidationError": "Could not validate custom {name} server.", "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Delete service", + "settings.service.form.deleteButton": "Delete Service", "settings.service.form.editServiceHeadline": "Edit {name}", "settings.service.form.enableAudio": "Enable audio", "settings.service.form.enableBadge": "Show unread message badges", "settings.service.form.enableDarkMode": "Enable Dark Mode", "settings.service.form.enableHibernation": "Enable hibernation", - "settings.service.form.enableNotification": "Enable notifications", + "settings.service.form.enableNotification": "Enable Notifications", "settings.service.form.enableService": "Enable service", "settings.service.form.headlineBadges": "Unread message badges", "settings.service.form.headlineDarkReaderSettings": "Dark Reader Settings", @@ -337,12 +336,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", - "settings.service.form.proxy.password": "Password (optional)", + "settings.service.form.proxy.password": "Password", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Please restart Ferdi after changing proxy Settings.", - "settings.service.form.proxy.user": "User (optional)", + "settings.service.form.proxy.user": "User", "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.", "settings.service.form.saveButton": "Save service", "settings.service.form.tabHosted": "Hosted", @@ -362,12 +361,12 @@ "settings.supportFerdi.aboutIntro": "

Ferdi is an open-source and a community-lead application.

Thanks to the people who make this possbile:

", "settings.supportFerdi.bannerText": "Do you want to help us improve Ferdi?", "settings.supportFerdi.headline": "About Ferdi", - "settings.supportFerdi.openSurvey": "Open survey", + "settings.supportFerdi.openSurvey": "Open Survey", "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", "settings.supportFerdi.textDonationAnd": "and", "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", "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors", - "settings.supportFerdi.textListContributors": "Full list of contributors", + "settings.supportFerdi.textListContributors": "Full list of contributor", "settings.supportFerdi.textListContributorsHere": "here", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", @@ -377,7 +376,7 @@ "settings.team.contentHeadline": "Franz Team Management", "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.", "settings.team.headline": "Team", - "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", + "settings.team.intro": "Your are currently using Franz Servers, which is why you have access to Team Management.", "settings.team.manageAction": "Manage your Team on meetfranz.com", "settings.team.teamsUnavailable": "Teams are unavailable", "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.", @@ -387,8 +386,8 @@ "settings.user.form.accountType.non-profit": "Non-Profit", "settings.user.form.currentPassword": "Current password", "settings.user.form.email": "Email", - "settings.user.form.firstname": "First Name", - "settings.user.form.lastname": "Last Name", + "settings.user.form.firstname": "Firstname", + "settings.user.form.lastname": "Lastname", "settings.user.form.newPassword": "New password", "settings.workspace.add.form.name": "Name", "settings.workspace.add.form.submitButton": "Create workspace", @@ -405,7 +404,7 @@ "settings.workspaces.tryReloadWorkspaces": "Try again", "settings.workspaces.updatedInfo": "Your changes have been saved", "settings.workspaces.workspaceFeatureHeadline": "Less is More: Introducing Ferdi Workspaces", - "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.", + "settings.workspaces.workspaceFeatureInfo": "Info about workspace feature", "settings.workspaces.workspacesRequestFailed": "Could not load your workspaces", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +419,9 @@ "sidebar.unmuteApp": "Enable notifications & audio", "signup.email.label": "Email address", "signup.emailDuplicate": "A user with that email address already exists", - "signup.firstname.label": "First Name", + "signup.firstname.label": "Firstname", "signup.headline": "Sign up", - "signup.lastname.label": "Last Name", + "signup.lastname.label": "Lastname", "signup.legal.info": "By creating a Ferdi account you accept the", "signup.legal.privacy": "Privacy Statement", "signup.legal.terms": "Terms of service", @@ -430,23 +429,23 @@ "signup.password.label": "Password", "signup.submit.label": "Create account", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Delete service", + "tabs.item.deleteService": "Delete Service", "tabs.item.disableAudio": "Disable audio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Disable notifications", - "tabs.item.disableService": "Disable service", + "tabs.item.disableService": "Disable Service", "tabs.item.enableAudio": "Enable audio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Enable notifications", - "tabs.item.enableService": "Enable service", - "tabs.item.hibernateService": "Hibernate service", + "tabs.item.enableService": "Enable Service", + "tabs.item.hibernateService": "Hibernate Service", "tabs.item.reload": "Reload", - "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} is not valid", - "validation.minLength": "{field} should be at least {length} characters long", + "tabs.item.wakeUpService": "Wake Up Service", + "validation.email": "Email not valid", + "validation.minLength": "Too few characters", "validation.oneRequired": "At least one is required", - "validation.required": "{field} is required", - "validation.url": "{field} is not a valid URL", + "validation.required": "Field is required", + "validation.url": "Not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", @@ -454,12 +453,12 @@ "webControls.reload": "Reload", "welcome.loginButton": "Login to your account", "welcome.signupButton": "Create a free account", - "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", + "workspaceDrawer.addNewWorkspaceLabel": "add new workspace", "workspaceDrawer.allServices": "All services", "workspaceDrawer.headline": "Workspaces", "workspaceDrawer.item.contextMenuEdit": "edit", "workspaceDrawer.item.noServicesAddedYet": "No services added yet", - "workspaceDrawer.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.

", - "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", + "workspaceDrawer.workspaceFeatureInfo": "Info about workspace feature", + "workspaceDrawer.workspacesSettingsTooltip": "Workspaces settings", "workspaces.switchingIndicator.switchingTo": "Switching to" } diff --git a/src/i18n/manage-translations.js b/src/i18n/manage-translations.js deleted file mode 100644 index ee64c9c09..000000000 --- a/src/i18n/manage-translations.js +++ /dev/null @@ -1,9 +0,0 @@ -require('@babel/register'); -const manageTranslations = require('react-intl-translations-manager').default; - -manageTranslations({ - messagesDirectory: 'src/i18n/messages', - translationsDirectory: 'src/i18n/locales', - singleMessagesFile: true, - languages: ['en-US'], -}); diff --git a/src/i18n/messages/src/components/AppUpdateInfoBar.json b/src/i18n/messages/src/components/AppUpdateInfoBar.json deleted file mode 100644 index b99eaff67..000000000 --- a/src/i18n/messages/src/components/AppUpdateInfoBar.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "infobar.updateAvailable", - "defaultMessage": "!!!A new update for Ferdi is available.", - "file": "src/components/AppUpdateInfoBar.js", - "start": { - "line": 10, - "column": 19 - }, - "end": { - "line": 13, - "column": 3 - } - }, - { - "id": "infobar.buttonChangelog", - "defaultMessage": "!!!Changelog", - "file": "src/components/AppUpdateInfoBar.js", - "start": { - "line": 14, - "column": 13 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "infobar.buttonInstallUpdate", - "defaultMessage": "!!!Restart & install update", - "file": "src/components/AppUpdateInfoBar.js", - "start": { - "line": 18, - "column": 23 - }, - "end": { - "line": 21, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/ChangeServer.json b/src/i18n/messages/src/components/auth/ChangeServer.json deleted file mode 100644 index 87e0b5857..000000000 --- a/src/i18n/messages/src/components/auth/ChangeServer.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "changeserver.headline", - "defaultMessage": "!!!Change server", - "file": "src/components/auth/ChangeServer.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "changeserver.label", - "defaultMessage": "!!!Server", - "file": "src/components/auth/ChangeServer.js", - "start": { - "line": 19, - "column": 9 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "changeserver.warning", - "defaultMessage": "!!!Extra settings offered by Ferdi will not be saved", - "file": "src/components/auth/ChangeServer.js", - "start": { - "line": 23, - "column": 11 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "changeserver.customServerLabel", - "defaultMessage": "!!!Custom server", - "file": "src/components/auth/ChangeServer.js", - "start": { - "line": 27, - "column": 21 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "changeserver.urlError", - "defaultMessage": "!!!Enter a valid URL", - "file": "src/components/auth/ChangeServer.js", - "start": { - "line": 31, - "column": 12 - }, - "end": { - "line": 34, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Import.json b/src/i18n/messages/src/components/auth/Import.json deleted file mode 100644 index 98ae2e61f..000000000 --- a/src/i18n/messages/src/components/auth/Import.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "import.headline", - "defaultMessage": "!!!Import your Ferdi 4 services", - "file": "src/components/auth/Import.js", - "start": { - "line": 13, - "column": 12 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "import.notSupportedHeadline", - "defaultMessage": "!!!Services not yet supported in Ferdi 5", - "file": "src/components/auth/Import.js", - "start": { - "line": 17, - "column": 24 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "import.submit.label", - "defaultMessage": "!!!Import {count} services", - "file": "src/components/auth/Import.js", - "start": { - "line": 21, - "column": 21 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "import.skip.label", - "defaultMessage": "!!!I want to add services manually", - "file": "src/components/auth/Import.js", - "start": { - "line": 25, - "column": 19 - }, - "end": { - "line": 28, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Invite.json b/src/i18n/messages/src/components/auth/Invite.json deleted file mode 100644 index 57c9bddcf..000000000 --- a/src/i18n/messages/src/components/auth/Invite.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "settings.invite.headline", - "defaultMessage": "!!!Invite Friends", - "file": "src/components/auth/Invite.js", - "start": { - "line": 16, - "column": 20 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "invite.headline.friends", - "defaultMessage": "!!!Invite 3 of your friends or colleagues", - "file": "src/components/auth/Invite.js", - "start": { - "line": 20, - "column": 12 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "invite.name.label", - "defaultMessage": "!!!Name", - "file": "src/components/auth/Invite.js", - "start": { - "line": 24, - "column": 13 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "invite.email.label", - "defaultMessage": "!!!Email address", - "file": "src/components/auth/Invite.js", - "start": { - "line": 28, - "column": 14 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "invite.submit.label", - "defaultMessage": "!!!Send invites", - "file": "src/components/auth/Invite.js", - "start": { - "line": 32, - "column": 21 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "invite.skip.label", - "defaultMessage": "!!!I want to do this later", - "file": "src/components/auth/Invite.js", - "start": { - "line": 36, - "column": 19 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "invite.successInfo", - "defaultMessage": "!!!Invitations sent successfully", - "file": "src/components/auth/Invite.js", - "start": { - "line": 40, - "column": 21 - }, - "end": { - "line": 43, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Locked.json b/src/i18n/messages/src/components/auth/Locked.json deleted file mode 100644 index a871d6fc8..000000000 --- a/src/i18n/messages/src/components/auth/Locked.json +++ /dev/null @@ -1,106 +0,0 @@ -[ - { - "id": "locked.headline", - "defaultMessage": "!!!Locked", - "file": "src/components/auth/Locked.js", - "start": { - "line": 16, - "column": 12 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "locked.info", - "defaultMessage": "!!!Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.", - "file": "src/components/auth/Locked.js", - "start": { - "line": 20, - "column": 8 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "locked.touchId", - "defaultMessage": "!!!Unlock with Touch ID", - "file": "src/components/auth/Locked.js", - "start": { - "line": 24, - "column": 11 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "locked.touchIdPrompt", - "defaultMessage": "!!!unlock via Touch ID", - "file": "src/components/auth/Locked.js", - "start": { - "line": 28, - "column": 17 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "locked.password.label", - "defaultMessage": "!!!Password", - "file": "src/components/auth/Locked.js", - "start": { - "line": 32, - "column": 17 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "locked.submit.label", - "defaultMessage": "!!!Unlock", - "file": "src/components/auth/Locked.js", - "start": { - "line": 36, - "column": 21 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "locked.unlockWithPassword", - "defaultMessage": "!!!Unlock with Password", - "file": "src/components/auth/Locked.js", - "start": { - "line": 40, - "column": 22 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "locked.invalidCredentials", - "defaultMessage": "!!!Password invalid", - "file": "src/components/auth/Locked.js", - "start": { - "line": 44, - "column": 22 - }, - "end": { - "line": 47, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Login.json b/src/i18n/messages/src/components/auth/Login.json deleted file mode 100644 index 275b04478..000000000 --- a/src/i18n/messages/src/components/auth/Login.json +++ /dev/null @@ -1,171 +0,0 @@ -[ - { - "id": "login.headline", - "defaultMessage": "!!!Sign in", - "file": "src/components/auth/Login.js", - "start": { - "line": 20, - "column": 12 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "login.email.label", - "defaultMessage": "!!!Email address", - "file": "src/components/auth/Login.js", - "start": { - "line": 24, - "column": 14 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "login.password.label", - "defaultMessage": "!!!Password", - "file": "src/components/auth/Login.js", - "start": { - "line": 28, - "column": 17 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "login.submit.label", - "defaultMessage": "!!!Sign in", - "file": "src/components/auth/Login.js", - "start": { - "line": 32, - "column": 21 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "login.invalidCredentials", - "defaultMessage": "!!!Email or password not valid", - "file": "src/components/auth/Login.js", - "start": { - "line": 36, - "column": 22 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "login.customServerQuestion", - "defaultMessage": "!!!Using a Franz account to log in?", - "file": "src/components/auth/Login.js", - "start": { - "line": 40, - "column": 24 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "login.customServerSuggestion", - "defaultMessage": "!!!Try importing your Franz account into Ferdi", - "file": "src/components/auth/Login.js", - "start": { - "line": 44, - "column": 26 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "login.tokenExpired", - "defaultMessage": "!!!Your session expired, please login again.", - "file": "src/components/auth/Login.js", - "start": { - "line": 48, - "column": 16 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "login.serverLogout", - "defaultMessage": "!!!Your session expired, please login again.", - "file": "src/components/auth/Login.js", - "start": { - "line": 52, - "column": 16 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "login.link.signup", - "defaultMessage": "!!!Create a free account", - "file": "src/components/auth/Login.js", - "start": { - "line": 56, - "column": 14 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "login.changeServer", - "defaultMessage": "!!!Change server", - "file": "src/components/auth/Login.js", - "start": { - "line": 60, - "column": 16 - }, - "end": { - "line": 63, - "column": 3 - } - }, - { - "id": "services.serverless", - "defaultMessage": "!!!Use Ferdi without an Account", - "file": "src/components/auth/Login.js", - "start": { - "line": 64, - "column": 14 - }, - "end": { - "line": 67, - "column": 3 - } - }, - { - "id": "login.link.password", - "defaultMessage": "!!!Forgot password", - "file": "src/components/auth/Login.js", - "start": { - "line": 68, - "column": 16 - }, - "end": { - "line": 71, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Password.json b/src/i18n/messages/src/components/auth/Password.json deleted file mode 100644 index 336ba42ef..000000000 --- a/src/i18n/messages/src/components/auth/Password.json +++ /dev/null @@ -1,80 +0,0 @@ -[ - { - "id": "password.headline", - "defaultMessage": "!!!Forgot password", - "file": "src/components/auth/Password.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "password.email.label", - "defaultMessage": "!!!Email address", - "file": "src/components/auth/Password.js", - "start": { - "line": 19, - "column": 14 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "password.successInfo", - "defaultMessage": "!!!Your new password was sent to your email address", - "file": "src/components/auth/Password.js", - "start": { - "line": 23, - "column": 15 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "password.noUser", - "defaultMessage": "!!!No user affiliated with that email address", - "file": "src/components/auth/Password.js", - "start": { - "line": 27, - "column": 10 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "password.link.signup", - "defaultMessage": "!!!Create a free account", - "file": "src/components/auth/Password.js", - "start": { - "line": 31, - "column": 14 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "password.link.login", - "defaultMessage": "!!!Sign in to your account", - "file": "src/components/auth/Password.js", - "start": { - "line": 35, - "column": 13 - }, - "end": { - "line": 38, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/ServiceAssistant.json b/src/i18n/messages/src/components/auth/ServiceAssistant.json deleted file mode 100644 index 9170fc183..000000000 --- a/src/i18n/messages/src/components/auth/ServiceAssistant.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "settings.invite.headline", - "defaultMessage": "!!!Invite Friends", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 16, - "column": 20 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "invite.headline.friends", - "defaultMessage": "!!!Invite 3 of your friends or colleagues", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 20, - "column": 12 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "invite.name.label", - "defaultMessage": "!!!Name", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 24, - "column": 13 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "invite.email.label", - "defaultMessage": "!!!Email address", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 28, - "column": 14 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "invite.submit.label", - "defaultMessage": "!!!Send invites", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 32, - "column": 21 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "invite.skip.label", - "defaultMessage": "!!!I want to do this later", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 36, - "column": 19 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "invite.successInfo", - "defaultMessage": "!!!Invitations sent successfully", - "file": "src/components/auth/ServiceAssistant.js", - "start": { - "line": 40, - "column": 21 - }, - "end": { - "line": 43, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/SetupAssistant.json b/src/i18n/messages/src/components/auth/SetupAssistant.json deleted file mode 100644 index 108adab26..000000000 --- a/src/i18n/messages/src/components/auth/SetupAssistant.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "setupAssistant.headline", - "defaultMessage": "!!!Let's get started", - "file": "src/components/auth/SetupAssistant.js", - "start": { - "line": 20, - "column": 12 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "setupAssistant.subheadline", - "defaultMessage": "!!!Choose from our most used services and get back on top of your messaging now.", - "file": "src/components/auth/SetupAssistant.js", - "start": { - "line": 24, - "column": 15 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "setupAssistant.submit.label", - "defaultMessage": "!!!Let's go", - "file": "src/components/auth/SetupAssistant.js", - "start": { - "line": 29, - "column": 21 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "invite.successInfo", - "defaultMessage": "!!!Invitations sent successfully", - "file": "src/components/auth/SetupAssistant.js", - "start": { - "line": 33, - "column": 21 - }, - "end": { - "line": 36, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Signup.json b/src/i18n/messages/src/components/auth/Signup.json deleted file mode 100644 index 4a32628ef..000000000 --- a/src/i18n/messages/src/components/auth/Signup.json +++ /dev/null @@ -1,171 +0,0 @@ -[ - { - "id": "signup.headline", - "defaultMessage": "!!!Sign up", - "file": "src/components/auth/Signup.js", - "start": { - "line": 20, - "column": 12 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "signup.firstname.label", - "defaultMessage": "!!!Firstname", - "file": "src/components/auth/Signup.js", - "start": { - "line": 24, - "column": 18 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "signup.lastname.label", - "defaultMessage": "!!!Lastname", - "file": "src/components/auth/Signup.js", - "start": { - "line": 28, - "column": 17 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "signup.email.label", - "defaultMessage": "!!!Email address", - "file": "src/components/auth/Signup.js", - "start": { - "line": 32, - "column": 14 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "signup.password.label", - "defaultMessage": "!!!Password", - "file": "src/components/auth/Signup.js", - "start": { - "line": 40, - "column": 17 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "signup.legal.info", - "defaultMessage": "!!!By creating a Ferdi account you accept the", - "file": "src/components/auth/Signup.js", - "start": { - "line": 44, - "column": 13 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "signup.legal.terms", - "defaultMessage": "!!!Terms of service", - "file": "src/components/auth/Signup.js", - "start": { - "line": 48, - "column": 9 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "signup.legal.privacy", - "defaultMessage": "!!!Privacy Statement", - "file": "src/components/auth/Signup.js", - "start": { - "line": 52, - "column": 11 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "signup.submit.label", - "defaultMessage": "!!!Create account", - "file": "src/components/auth/Signup.js", - "start": { - "line": 56, - "column": 21 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "signup.link.login", - "defaultMessage": "!!!Already have an account, sign in?", - "file": "src/components/auth/Signup.js", - "start": { - "line": 60, - "column": 13 - }, - "end": { - "line": 63, - "column": 3 - } - }, - { - "id": "login.changeServer", - "defaultMessage": "!!!Change server", - "file": "src/components/auth/Signup.js", - "start": { - "line": 64, - "column": 16 - }, - "end": { - "line": 67, - "column": 3 - } - }, - { - "id": "services.serverless", - "defaultMessage": "!!!Use Ferdi without an Account", - "file": "src/components/auth/Signup.js", - "start": { - "line": 68, - "column": 14 - }, - "end": { - "line": 71, - "column": 3 - } - }, - { - "id": "signup.emailDuplicate", - "defaultMessage": "!!!A user with that email address already exists", - "file": "src/components/auth/Signup.js", - "start": { - "line": 72, - "column": 18 - }, - "end": { - "line": 75, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Welcome.json b/src/i18n/messages/src/components/auth/Welcome.json deleted file mode 100644 index 3f0c1e5c2..000000000 --- a/src/i18n/messages/src/components/auth/Welcome.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "welcome.signupButton", - "defaultMessage": "!!!Create a free account", - "file": "src/components/auth/Welcome.js", - "start": { - "line": 11, - "column": 16 - }, - "end": { - "line": 14, - "column": 3 - } - }, - { - "id": "welcome.loginButton", - "defaultMessage": "!!!Login to your account", - "file": "src/components/auth/Welcome.js", - "start": { - "line": 15, - "column": 15 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "services.serverless", - "defaultMessage": "!!!Use Ferdi without an Account", - "file": "src/components/auth/Welcome.js", - "start": { - "line": 19, - "column": 14 - }, - "end": { - "line": 22, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json deleted file mode 100644 index 807490a4f..000000000 --- a/src/i18n/messages/src/components/layout/AppLayout.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "infobar.servicesUpdated", - "defaultMessage": "!!!Your services have been updated.", - "file": "src/components/layout/AppLayout.js", - "start": { - "line": 28, - "column": 19 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "infobar.buttonReloadServices", - "defaultMessage": "!!!Reload services", - "file": "src/components/layout/AppLayout.js", - "start": { - "line": 32, - "column": 24 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "infobar.requiredRequestsFailed", - "defaultMessage": "!!!Could not load services and user information", - "file": "src/components/layout/AppLayout.js", - "start": { - "line": 36, - "column": 26 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "infobar.authRequestFailed", - "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "file": "src/components/layout/AppLayout.js", - "start": { - "line": 40, - "column": 21 - }, - "end": { - "line": 44, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/layout/Sidebar.json b/src/i18n/messages/src/components/layout/Sidebar.json deleted file mode 100644 index 9bc435f12..000000000 --- a/src/i18n/messages/src/components/layout/Sidebar.json +++ /dev/null @@ -1,106 +0,0 @@ -[ - { - "id": "sidebar.addNewService", - "defaultMessage": "!!!Add new service", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 18, - "column": 17 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "sidebar.muteApp", - "defaultMessage": "!!!Disable notifications & audio", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 22, - "column": 8 - }, - "end": { - "line": 25, - "column": 3 - } - }, - { - "id": "sidebar.unmuteApp", - "defaultMessage": "!!!Enable notifications & audio", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 26, - "column": 10 - }, - "end": { - "line": 29, - "column": 3 - } - }, - { - "id": "sidebar.openWorkspaceDrawer", - "defaultMessage": "!!!Open workspace drawer", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 30, - "column": 23 - }, - "end": { - "line": 33, - "column": 3 - } - }, - { - "id": "sidebar.closeWorkspaceDrawer", - "defaultMessage": "!!!Close workspace drawer", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 34, - "column": 24 - }, - "end": { - "line": 37, - "column": 3 - } - }, - { - "id": "sidebar.openTodosDrawer", - "defaultMessage": "!!!Open Ferdi Todos", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 38, - "column": 19 - }, - "end": { - "line": 41, - "column": 3 - } - }, - { - "id": "sidebar.closeTodosDrawer", - "defaultMessage": "!!!Close Ferdi Todos", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 42, - "column": 20 - }, - "end": { - "line": 45, - "column": 3 - } - }, - { - "id": "sidebar.lockFerdi", - "defaultMessage": "!!!Lock Ferdi", - "file": "src/components/layout/Sidebar.js", - "start": { - "line": 46, - "column": 13 - }, - "end": { - "line": 49, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/ConnectionBanner.json b/src/i18n/messages/src/components/services/content/ConnectionBanner.json deleted file mode 100644 index 1047c28b5..000000000 --- a/src/i18n/messages/src/components/services/content/ConnectionBanner.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "webControls.goHome", - "defaultMessage": "!!!Home", - "file": "src/components/services/content/ConnectionBanner.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "webControls.openInBrowser", - "defaultMessage": "!!!Open in Browser", - "file": "src/components/services/content/ConnectionBanner.js", - "start": { - "line": 17, - "column": 17 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "webControls.back", - "defaultMessage": "!!!Back", - "file": "src/components/services/content/ConnectionBanner.js", - "start": { - "line": 21, - "column": 8 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "webControls.forward", - "defaultMessage": "!!!Forward", - "file": "src/components/services/content/ConnectionBanner.js", - "start": { - "line": 25, - "column": 11 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "webControls.reload", - "defaultMessage": "!!!Reload", - "file": "src/components/services/content/ConnectionBanner.js", - "start": { - "line": 29, - "column": 10 - }, - "end": { - "line": 32, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/ConnectionLost.json b/src/i18n/messages/src/components/services/content/ConnectionLost.json deleted file mode 100644 index ee3f7a4ba..000000000 --- a/src/i18n/messages/src/components/services/content/ConnectionLost.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "webControls.goHome", - "defaultMessage": "!!!Home", - "file": "src/components/services/content/ConnectionLost.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "webControls.openInBrowser", - "defaultMessage": "!!!Open in Browser", - "file": "src/components/services/content/ConnectionLost.js", - "start": { - "line": 17, - "column": 17 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "webControls.back", - "defaultMessage": "!!!Back", - "file": "src/components/services/content/ConnectionLost.js", - "start": { - "line": 21, - "column": 8 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "webControls.forward", - "defaultMessage": "!!!Forward", - "file": "src/components/services/content/ConnectionLost.js", - "start": { - "line": 25, - "column": 11 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "webControls.reload", - "defaultMessage": "!!!Reload", - "file": "src/components/services/content/ConnectionLost.js", - "start": { - "line": 29, - "column": 10 - }, - "end": { - "line": 32, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/ConnectionLostBanner.json b/src/i18n/messages/src/components/services/content/ConnectionLostBanner.json deleted file mode 100644 index 6805b4d67..000000000 --- a/src/i18n/messages/src/components/services/content/ConnectionLostBanner.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "connectionLostBanner.message", - "defaultMessage": "!!!Oh no! Ferdi lost the connection to {name}.", - "file": "src/components/services/content/ConnectionLostBanner.js", - "start": { - "line": 13, - "column": 8 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "connectionLostBanner.informationLink", - "defaultMessage": "!!!What happened?", - "file": "src/components/services/content/ConnectionLostBanner.js", - "start": { - "line": 17, - "column": 19 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "connectionLostBanner.cta", - "defaultMessage": "!!!Reload Service", - "file": "src/components/services/content/ConnectionLostBanner.js", - "start": { - "line": 21, - "column": 7 - }, - "end": { - "line": 24, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json b/src/i18n/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json deleted file mode 100644 index c8fe802df..000000000 --- a/src/i18n/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "service.errorHandler.headline", - "defaultMessage": "!!!Oh no!", - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "start": { - "line": 12, - "column": 12 - }, - "end": { - "line": 15, - "column": 3 - } - }, - { - "id": "service.errorHandler.text", - "defaultMessage": "!!!{name} has failed to load.", - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "start": { - "line": 16, - "column": 8 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "service.errorHandler.action", - "defaultMessage": "!!!Reload {name}", - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "start": { - "line": 20, - "column": 10 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "service.errorHandler.editAction", - "defaultMessage": "!!!Edit {name}", - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "start": { - "line": 24, - "column": 14 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "service.errorHandler.message", - "defaultMessage": "!!!Error:", - "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js", - "start": { - "line": 28, - "column": 16 - }, - "end": { - "line": 31, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/ServiceDisabled.json b/src/i18n/messages/src/components/services/content/ServiceDisabled.json deleted file mode 100644 index 8bfad28c7..000000000 --- a/src/i18n/messages/src/components/services/content/ServiceDisabled.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "service.disabledHandler.headline", - "defaultMessage": "!!!{name} is disabled", - "file": "src/components/services/content/ServiceDisabled.js", - "start": { - "line": 9, - "column": 12 - }, - "end": { - "line": 12, - "column": 3 - } - }, - { - "id": "service.disabledHandler.action", - "defaultMessage": "!!!Enable {name}", - "file": "src/components/services/content/ServiceDisabled.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/Services.json b/src/i18n/messages/src/components/services/content/Services.json deleted file mode 100644 index 304c93f3c..000000000 --- a/src/i18n/messages/src/components/services/content/Services.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "services.welcome", - "defaultMessage": "!!!Welcome to Ferdi", - "file": "src/components/services/content/Services.js", - "start": { - "line": 15, - "column": 11 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "services.getStarted", - "defaultMessage": "!!!Get started", - "file": "src/components/services/content/Services.js", - "start": { - "line": 19, - "column": 14 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "services.login", - "defaultMessage": "!!!Please login to use Ferdi.", - "file": "src/components/services/content/Services.js", - "start": { - "line": 23, - "column": 9 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "services.serverless", - "defaultMessage": "!!!Use Ferdi without an Account", - "file": "src/components/services/content/Services.js", - "start": { - "line": 27, - "column": 14 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "services.serverInfo", - "defaultMessage": "!!!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!", - "file": "src/components/services/content/Services.js", - "start": { - "line": 31, - "column": 14 - }, - "end": { - "line": 34, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/WebControls.json b/src/i18n/messages/src/components/services/content/WebControls.json deleted file mode 100644 index 5af5143d0..000000000 --- a/src/i18n/messages/src/components/services/content/WebControls.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "webControls.goHome", - "defaultMessage": "!!!Home", - "file": "src/components/services/content/WebControls.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "webControls.openInBrowser", - "defaultMessage": "!!!Open in Browser", - "file": "src/components/services/content/WebControls.js", - "start": { - "line": 17, - "column": 17 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "webControls.back", - "defaultMessage": "!!!Back", - "file": "src/components/services/content/WebControls.js", - "start": { - "line": 21, - "column": 8 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "webControls.forward", - "defaultMessage": "!!!Forward", - "file": "src/components/services/content/WebControls.js", - "start": { - "line": 25, - "column": 11 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "webControls.reload", - "defaultMessage": "!!!Reload", - "file": "src/components/services/content/WebControls.js", - "start": { - "line": 29, - "column": 10 - }, - "end": { - "line": 32, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/content/WebviewCrashHandler.json b/src/i18n/messages/src/components/services/content/WebviewCrashHandler.json deleted file mode 100644 index c3d6c41a5..000000000 --- a/src/i18n/messages/src/components/services/content/WebviewCrashHandler.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "service.crashHandler.headline", - "defaultMessage": "!!!Oh no!", - "file": "src/components/services/content/WebviewCrashHandler.js", - "start": { - "line": 10, - "column": 12 - }, - "end": { - "line": 13, - "column": 3 - } - }, - { - "id": "service.crashHandler.text", - "defaultMessage": "!!!{name} has caused an error.", - "file": "src/components/services/content/WebviewCrashHandler.js", - "start": { - "line": 14, - "column": 8 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "service.crashHandler.action", - "defaultMessage": "!!!Reload {name}", - "file": "src/components/services/content/WebviewCrashHandler.js", - "start": { - "line": 18, - "column": 10 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "service.crashHandler.autoReload", - "defaultMessage": "!!!Trying to automatically restore {name} in {seconds} seconds", - "file": "src/components/services/content/WebviewCrashHandler.js", - "start": { - "line": 22, - "column": 14 - }, - "end": { - "line": 25, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/services/tabs/TabItem.json b/src/i18n/messages/src/components/services/tabs/TabItem.json deleted file mode 100644 index de854f1e1..000000000 --- a/src/i18n/messages/src/components/services/tabs/TabItem.json +++ /dev/null @@ -1,171 +0,0 @@ -[ - { - "id": "tabs.item.reload", - "defaultMessage": "!!!Reload", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 21, - "column": 10 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "tabs.item.disableNotifications", - "defaultMessage": "!!!Disable notifications", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 25, - "column": 24 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "tabs.item.enableNotification", - "defaultMessage": "!!!Enable notifications", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 29, - "column": 23 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "tabs.item.disableAudio", - "defaultMessage": "!!!Disable audio", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 33, - "column": 16 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "tabs.item.enableAudio", - "defaultMessage": "!!!Enable audio", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 37, - "column": 15 - }, - "end": { - "line": 40, - "column": 3 - } - }, - { - "id": "tabs.item.enableDarkMode", - "defaultMessage": "!!!Enable Dark mode", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 41, - "column": 18 - }, - "end": { - "line": 44, - "column": 3 - } - }, - { - "id": "tabs.item.disableDarkMode", - "defaultMessage": "!!!Disable Dark mode", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 45, - "column": 19 - }, - "end": { - "line": 48, - "column": 3 - } - }, - { - "id": "tabs.item.disableService", - "defaultMessage": "!!!Disable Service", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 49, - "column": 18 - }, - "end": { - "line": 52, - "column": 3 - } - }, - { - "id": "tabs.item.enableService", - "defaultMessage": "!!!Enable Service", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 53, - "column": 17 - }, - "end": { - "line": 56, - "column": 3 - } - }, - { - "id": "tabs.item.hibernateService", - "defaultMessage": "!!!Hibernate Service", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 57, - "column": 20 - }, - "end": { - "line": 60, - "column": 3 - } - }, - { - "id": "tabs.item.wakeUpService", - "defaultMessage": "!!!Wake Up Service", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 61, - "column": 17 - }, - "end": { - "line": 64, - "column": 3 - } - }, - { - "id": "tabs.item.deleteService", - "defaultMessage": "!!!Delete Service", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 65, - "column": 17 - }, - "end": { - "line": 68, - "column": 3 - } - }, - { - "id": "tabs.item.confirmDeleteService", - "defaultMessage": "!!!Do you really want to delete the {serviceName} service?", - "file": "src/components/services/tabs/TabItem.js", - "start": { - "line": 69, - "column": 24 - }, - "end": { - "line": 73, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/SettingsLayout.json b/src/i18n/messages/src/components/settings/SettingsLayout.json deleted file mode 100644 index 99337a315..000000000 --- a/src/i18n/messages/src/components/settings/SettingsLayout.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "settings.app.closeSettings", - "defaultMessage": "!!!Close settings", - "file": "src/components/settings/SettingsLayout.js", - "start": { - "line": 11, - "column": 17 - }, - "end": { - "line": 14, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json deleted file mode 100644 index b0cc2dcc7..000000000 --- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json +++ /dev/null @@ -1,158 +0,0 @@ -[ - { - "id": "settings.account.headline", - "defaultMessage": "!!!Account", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 14, - "column": 12 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "settings.account.headlineDangerZone", - "defaultMessage": "!!Danger Zone", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 18, - "column": 22 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "settings.account.account.editButton", - "defaultMessage": "!!!Edit Account", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 22, - "column": 21 - }, - "end": { - "line": 25, - "column": 3 - } - }, - { - "id": "settings.account.headlineInvoices", - "defaultMessage": "!!Invoices", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 26, - "column": 18 - }, - "end": { - "line": 29, - "column": 3 - } - }, - { - "id": "settings.account.userInfoRequestFailed", - "defaultMessage": "!!!Could not load user information", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 30, - "column": 25 - }, - "end": { - "line": 33, - "column": 3 - } - }, - { - "id": "settings.account.tryReloadUserInfoRequest", - "defaultMessage": "!!!Try again", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 34, - "column": 28 - }, - "end": { - "line": 37, - "column": 3 - } - }, - { - "id": "settings.account.deleteAccount", - "defaultMessage": "!!!Delete account", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 38, - "column": 17 - }, - "end": { - "line": 41, - "column": 3 - } - }, - { - "id": "settings.account.deleteInfo", - "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 42, - "column": 14 - }, - "end": { - "line": 46, - "column": 3 - } - }, - { - "id": "settings.account.deleteEmailSent", - "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 47, - "column": 19 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "settings.account.yourLicense", - "defaultMessage": "!!!Your Franz License:", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 52, - "column": 15 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "settings.account.accountUnavailable", - "defaultMessage": "Account is unavailable", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 56, - "column": 22 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "settings.account.accountUnavailableInfo", - "defaultMessage": "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.", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 60, - "column": 26 - }, - "end": { - "line": 63, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json deleted file mode 100644 index 2029ad7af..000000000 --- a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "settings.navigation.availableServices", - "defaultMessage": "!!!Available services", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 16, - "column": 21 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "settings.navigation.yourServices", - "defaultMessage": "!!!Your services", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 20, - "column": 16 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "settings.navigation.yourWorkspaces", - "defaultMessage": "!!!Your workspaces", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 24, - "column": 18 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "settings.navigation.account", - "defaultMessage": "!!!Account", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 28, - "column": 11 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "settings.navigation.team", - "defaultMessage": "!!!Manage Team", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 32, - "column": 8 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "settings.navigation.supportFerdi", - "defaultMessage": "!!!About Ferdi", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 36, - "column": 16 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "settings.navigation.logout", - "defaultMessage": "!!!Logout", - "file": "src/components/settings/navigation/SettingsNavigation.js", - "start": { - "line": 40, - "column": 10 - }, - "end": { - "line": 43, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json b/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json deleted file mode 100644 index 7ab2916f5..000000000 --- a/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json +++ /dev/null @@ -1,171 +0,0 @@ -[ - { - "id": "settings.recipes.headline", - "defaultMessage": "!!!Available Services", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 19, - "column": 12 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "settings.searchService", - "defaultMessage": "!!!Search service", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 23, - "column": 17 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "settings.recipes.all", - "defaultMessage": "!!!All services", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 27, - "column": 14 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "settings.recipes.custom", - "defaultMessage": "!!!Custom Services", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 31, - "column": 17 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "settings.recipes.nothingFound", - "defaultMessage": "!!!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.", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 35, - "column": 16 - }, - "end": { - "line": 38, - "column": 3 - } - }, - { - "id": "settings.recipes.servicesSuccessfulAddedInfo", - "defaultMessage": "!!!Service successfully added", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 39, - "column": 31 - }, - "end": { - "line": 42, - "column": 3 - } - }, - { - "id": "settings.recipes.missingService", - "defaultMessage": "!!!Missing a service?", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 43, - "column": 18 - }, - "end": { - "line": 46, - "column": 3 - } - }, - { - "id": "settings.recipes.customService.intro", - "defaultMessage": "!!!To add a custom service, copy the recipe folder into:", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 47, - "column": 21 - }, - "end": { - "line": 50, - "column": 3 - } - }, - { - "id": "settings.recipes.customService.openFolder", - "defaultMessage": "!!!Open directory", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 51, - "column": 14 - }, - "end": { - "line": 54, - "column": 3 - } - }, - { - "id": "settings.recipes.customService.openDevDocs", - "defaultMessage": "!!!Developer Documentation", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 55, - "column": 15 - }, - "end": { - "line": 58, - "column": 3 - } - }, - { - "id": "settings.recipes.customService.headline.customRecipes", - "defaultMessage": "!!!Custom 3rd Party Recipes", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 59, - "column": 25 - }, - "end": { - "line": 62, - "column": 3 - } - }, - { - "id": "settings.recipes.customService.headline.communityRecipes", - "defaultMessage": "!!!Community 3rd Party Recipes", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 63, - "column": 28 - }, - "end": { - "line": 66, - "column": 3 - } - }, - { - "id": "settings.recipes.customService.headline.devRecipes", - "defaultMessage": "!!!Your Development Service Recipes", - "file": "src/components/settings/recipes/RecipesDashboard.js", - "start": { - "line": 67, - "column": 22 - }, - "end": { - "line": 70, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/services/EditServiceForm.json b/src/i18n/messages/src/components/settings/services/EditServiceForm.json deleted file mode 100644 index d7830f198..000000000 --- a/src/i18n/messages/src/components/settings/services/EditServiceForm.json +++ /dev/null @@ -1,340 +0,0 @@ -[ - { - "id": "settings.service.form.saveButton", - "defaultMessage": "!!!Save service", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 23, - "column": 15 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "settings.service.form.deleteButton", - "defaultMessage": "!!!Delete Service", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 27, - "column": 17 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "settings.service.form.openDarkmodeCss", - "defaultMessage": "!!!Open darkmode.css", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 31, - "column": 19 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "settings.service.form.openUserCss", - "defaultMessage": "!!!Open user.css", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 35, - "column": 15 - }, - "end": { - "line": 38, - "column": 3 - } - }, - { - "id": "settings.service.form.openUserJs", - "defaultMessage": "!!!Open user.js", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 39, - "column": 14 - }, - "end": { - "line": 42, - "column": 3 - } - }, - { - "id": "settings.service.form.recipeFileInfo", - "defaultMessage": "!!!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.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 43, - "column": 18 - }, - "end": { - "line": 46, - "column": 3 - } - }, - { - "id": "settings.service.form.availableServices", - "defaultMessage": "!!!Available services", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 47, - "column": 21 - }, - "end": { - "line": 50, - "column": 3 - } - }, - { - "id": "settings.service.form.yourServices", - "defaultMessage": "!!!Your services", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 51, - "column": 16 - }, - "end": { - "line": 54, - "column": 3 - } - }, - { - "id": "settings.service.form.addServiceHeadline", - "defaultMessage": "!!!Add {name}", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 55, - "column": 22 - }, - "end": { - "line": 58, - "column": 3 - } - }, - { - "id": "settings.service.form.editServiceHeadline", - "defaultMessage": "!!!Edit {name}", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 59, - "column": 23 - }, - "end": { - "line": 62, - "column": 3 - } - }, - { - "id": "settings.service.form.tabHosted", - "defaultMessage": "!!!Hosted", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 63, - "column": 13 - }, - "end": { - "line": 66, - "column": 3 - } - }, - { - "id": "settings.service.form.tabOnPremise", - "defaultMessage": "!!!Self hosted ⭐️", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 67, - "column": 16 - }, - "end": { - "line": 70, - "column": 3 - } - }, - { - "id": "settings.service.form.useHostedService", - "defaultMessage": "!!!Use the hosted {name} service.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 71, - "column": 20 - }, - "end": { - "line": 74, - "column": 3 - } - }, - { - "id": "settings.service.form.customUrlValidationError", - "defaultMessage": "!!!Could not validate custom {name} server.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 75, - "column": 28 - }, - "end": { - "line": 78, - "column": 3 - } - }, - { - "id": "settings.service.form.indirectMessageInfo", - "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 79, - "column": 23 - }, - "end": { - "line": 82, - "column": 3 - } - }, - { - "id": "settings.service.form.isMutedInfo", - "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 83, - "column": 15 - }, - "end": { - "line": 86, - "column": 3 - } - }, - { - "id": "settings.service.form.isHibernatedEnabledInfo", - "defaultMessage": "!!!When enabled, a service will be shut down after a period of time to save system resources.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 87, - "column": 28 - }, - "end": { - "line": 90, - "column": 3 - } - }, - { - "id": "settings.service.form.headlineNotifications", - "defaultMessage": "!!!Notifications", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 91, - "column": 25 - }, - "end": { - "line": 94, - "column": 3 - } - }, - { - "id": "settings.service.form.headlineBadges", - "defaultMessage": "!!!Unread message badges", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 95, - "column": 18 - }, - "end": { - "line": 98, - "column": 3 - } - }, - { - "id": "settings.service.form.headlineGeneral", - "defaultMessage": "!!!General", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 99, - "column": 19 - }, - "end": { - "line": 102, - "column": 3 - } - }, - { - "id": "settings.service.form.headlineDarkReaderSettings", - "defaultMessage": "!!!Dark Reader Settings", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 103, - "column": 30 - }, - "end": { - "line": 106, - "column": 3 - } - }, - { - "id": "settings.service.form.iconDelete", - "defaultMessage": "!!!Delete", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 107, - "column": 14 - }, - "end": { - "line": 110, - "column": 3 - } - }, - { - "id": "settings.service.form.iconUpload", - "defaultMessage": "!!!Drop your image, or click here", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 111, - "column": 14 - }, - "end": { - "line": 114, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.headline", - "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 115, - "column": 17 - }, - "end": { - "line": 118, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.restartInfo", - "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 119, - "column": 20 - }, - "end": { - "line": 122, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.info", - "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 123, - "column": 13 - }, - "end": { - "line": 126, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/services/ServiceError.json b/src/i18n/messages/src/components/settings/services/ServiceError.json deleted file mode 100644 index 648fc5b3e..000000000 --- a/src/i18n/messages/src/components/settings/services/ServiceError.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "settings.service.error.headline", - "defaultMessage": "!!!Error", - "file": "src/components/settings/services/ServiceError.js", - "start": { - "line": 10, - "column": 12 - }, - "end": { - "line": 13, - "column": 3 - } - }, - { - "id": "settings.service.error.goBack", - "defaultMessage": "!!!Back to services", - "file": "src/components/settings/services/ServiceError.js", - "start": { - "line": 14, - "column": 10 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "settings.service.form.availableServices", - "defaultMessage": "!!!Available services", - "file": "src/components/settings/services/ServiceError.js", - "start": { - "line": 18, - "column": 21 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "settings.service.error.message", - "defaultMessage": "!!!Could not load service recipe.", - "file": "src/components/settings/services/ServiceError.js", - "start": { - "line": 22, - "column": 16 - }, - "end": { - "line": 25, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/services/ServiceItem.json b/src/i18n/messages/src/components/settings/services/ServiceItem.json deleted file mode 100644 index ffea8b9e1..000000000 --- a/src/i18n/messages/src/components/settings/services/ServiceItem.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "settings.services.tooltip.isDisabled", - "defaultMessage": "!!!Service is disabled", - "file": "src/components/settings/services/ServiceItem.js", - "start": { - "line": 11, - "column": 21 - }, - "end": { - "line": 14, - "column": 3 - } - }, - { - "id": "settings.services.tooltip.notificationsDisabled", - "defaultMessage": "!!!Notifications are disabled", - "file": "src/components/settings/services/ServiceItem.js", - "start": { - "line": 15, - "column": 32 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "settings.services.tooltip.isMuted", - "defaultMessage": "!!!All sounds are muted", - "file": "src/components/settings/services/ServiceItem.js", - "start": { - "line": 19, - "column": 18 - }, - "end": { - "line": 22, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/services/ServicesDashboard.json b/src/i18n/messages/src/components/settings/services/ServicesDashboard.json deleted file mode 100644 index 7e7c5d67e..000000000 --- a/src/i18n/messages/src/components/settings/services/ServicesDashboard.json +++ /dev/null @@ -1,119 +0,0 @@ -[ - { - "id": "settings.services.headline", - "defaultMessage": "!!!Your services", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "settings.searchService", - "defaultMessage": "!!!Search service", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 19, - "column": 17 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "settings.services.noServicesAdded", - "defaultMessage": "!!!Start by adding a service.", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 23, - "column": 19 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "settings.recipes.nothingFound", - "defaultMessage": "!!!Sorry, but no service matched your search term. 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.", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 27, - "column": 18 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "settings.services.discoverServices", - "defaultMessage": "!!!Discover services", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 31, - "column": 20 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "settings.services.servicesRequestFailed", - "defaultMessage": "!!!Could not load your services", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 35, - "column": 25 - }, - "end": { - "line": 38, - "column": 3 - } - }, - { - "id": "settings.account.tryReloadServices", - "defaultMessage": "!!!Try again", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 39, - "column": 21 - }, - "end": { - "line": 42, - "column": 3 - } - }, - { - "id": "settings.services.updatedInfo", - "defaultMessage": "!!!Your changes have been saved", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 43, - "column": 15 - }, - "end": { - "line": 46, - "column": 3 - } - }, - { - "id": "settings.services.deletedInfo", - "defaultMessage": "!!!Service has been deleted", - "file": "src/components/settings/services/ServicesDashboard.js", - "start": { - "line": 47, - "column": 15 - }, - "end": { - "line": 50, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json deleted file mode 100644 index c281ebff3..000000000 --- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json +++ /dev/null @@ -1,444 +0,0 @@ -[ - { - "id": "settings.app.headlineGeneral", - "defaultMessage": "!!!General", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 21, - "column": 19 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "settings.app.sentryInfo", - "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 25, - "column": 14 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "settings.app.hibernateInfo", - "defaultMessage": "!!!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.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 29, - "column": 17 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "settings.app.inactivityLockInfo", - "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 33, - "column": 22 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "settings.app.todoServerInfo", - "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 37, - "column": 18 - }, - "end": { - "line": 40, - "column": 3 - } - }, - { - "id": "settings.app.lockedPassword", - "defaultMessage": "!!!Password", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 41, - "column": 18 - }, - "end": { - "line": 44, - "column": 3 - } - }, - { - "id": "settings.app.lockedPasswordInfo", - "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 45, - "column": 22 - }, - "end": { - "line": 48, - "column": 3 - } - }, - { - "id": "settings.app.lockInfo", - "defaultMessage": "!!!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}.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 49, - "column": 12 - }, - "end": { - "line": 52, - "column": 3 - } - }, - { - "id": "settings.app.scheduledDNDTimeInfo", - "defaultMessage": "!!!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.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 53, - "column": 24 - }, - "end": { - "line": 56, - "column": 3 - } - }, - { - "id": "settings.app.scheduledDNDInfo", - "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 57, - "column": 20 - }, - "end": { - "line": 60, - "column": 3 - } - }, - { - "id": "settings.app.headlineLanguage", - "defaultMessage": "!!!Language", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 61, - "column": 20 - }, - "end": { - "line": 64, - "column": 3 - } - }, - { - "id": "settings.app.headlineUpdates", - "defaultMessage": "!!!Updates", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 65, - "column": 19 - }, - "end": { - "line": 68, - "column": 3 - } - }, - { - "id": "settings.app.headlineAppearance", - "defaultMessage": "!!!Appearance", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 69, - "column": 22 - }, - "end": { - "line": 72, - "column": 3 - } - }, - { - "id": "settings.app.universalDarkModeInfo", - "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 73, - "column": 25 - }, - "end": { - "line": 76, - "column": 3 - } - }, - { - "id": "settings.app.accentColorInfo", - "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 77, - "column": 19 - }, - "end": { - "line": 80, - "column": 3 - } - }, - { - "id": "settings.app.headlinePrivacy", - "defaultMessage": "!!!Privacy", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 81, - "column": 19 - }, - "end": { - "line": 84, - "column": 3 - } - }, - { - "id": "settings.app.headlineAdvanced", - "defaultMessage": "!!!Advanced", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 85, - "column": 20 - }, - "end": { - "line": 88, - "column": 3 - } - }, - { - "id": "settings.app.translationHelp", - "defaultMessage": "!!!Help us to translate Ferdi into your language.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 89, - "column": 19 - }, - "end": { - "line": 92, - "column": 3 - } - }, - { - "id": "settings.app.spellCheckerLanguageInfo", - "defaultMessage": "!!!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.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 93, - "column": 28 - }, - "end": { - "line": 96, - "column": 3 - } - }, - { - "id": "settings.app.subheadlineCache", - "defaultMessage": "!!!Cache", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 97, - "column": 20 - }, - "end": { - "line": 100, - "column": 3 - } - }, - { - "id": "settings.app.cacheInfo", - "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 101, - "column": 13 - }, - "end": { - "line": 104, - "column": 3 - } - }, - { - "id": "settings.app.cacheNotCleared", - "defaultMessage": "!!!Couldn't clear all cache", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 105, - "column": 19 - }, - "end": { - "line": 108, - "column": 3 - } - }, - { - "id": "settings.app.buttonClearAllCache", - "defaultMessage": "!!!Clear cache", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 109, - "column": 23 - }, - "end": { - "line": 112, - "column": 3 - } - }, - { - "id": "settings.app.subheadlineFerdiProfile", - "defaultMessage": "!!!Ferdi Profile", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 113, - "column": 27 - }, - "end": { - "line": 116, - "column": 3 - } - }, - { - "id": "settings.app.buttonOpenFerdiProfileFolder", - "defaultMessage": "!!!Open Profile folder", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 117, - "column": 32 - }, - "end": { - "line": 120, - "column": 3 - } - }, - { - "id": "settings.app.buttonOpenFerdiServiceRecipesFolder", - "defaultMessage": "!!!Open Service Recipes folder", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 121, - "column": 39 - }, - "end": { - "line": 124, - "column": 3 - } - }, - { - "id": "settings.app.buttonSearchForUpdate", - "defaultMessage": "!!!Check for updates", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 125, - "column": 25 - }, - "end": { - "line": 128, - "column": 3 - } - }, - { - "id": "settings.app.buttonInstallUpdate", - "defaultMessage": "!!!Restart & install update", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 129, - "column": 23 - }, - "end": { - "line": 132, - "column": 3 - } - }, - { - "id": "settings.app.updateStatusSearching", - "defaultMessage": "!!!Is searching for update", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 133, - "column": 25 - }, - "end": { - "line": 136, - "column": 3 - } - }, - { - "id": "settings.app.updateStatusAvailable", - "defaultMessage": "!!!Update available, downloading...", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 137, - "column": 25 - }, - "end": { - "line": 140, - "column": 3 - } - }, - { - "id": "settings.app.updateStatusUpToDate", - "defaultMessage": "!!!You are using the latest version of Ferdi", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 141, - "column": 24 - }, - "end": { - "line": 144, - "column": 3 - } - }, - { - "id": "settings.app.currentVersion", - "defaultMessage": "!!!Current version:", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 145, - "column": 18 - }, - "end": { - "line": 148, - "column": 3 - } - }, - { - "id": "settings.app.restartRequired", - "defaultMessage": "!!!Changes require restart", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 149, - "column": 22 - }, - "end": { - "line": 152, - "column": 3 - } - }, - { - "id": "settings.app.languageDisclaimer", - "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", - "file": "src/components/settings/settings/EditSettingsForm.js", - "start": { - "line": 153, - "column": 22 - }, - "end": { - "line": 156, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/supportFerdi/SupportFerdiDashboard.json b/src/i18n/messages/src/components/settings/supportFerdi/SupportFerdiDashboard.json deleted file mode 100644 index e63c2801f..000000000 --- a/src/i18n/messages/src/components/settings/supportFerdi/SupportFerdiDashboard.json +++ /dev/null @@ -1,197 +0,0 @@ -[ - { - "id": "settings.supportFerdi.headline", - "defaultMessage": "!!!About Ferdi", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 7, - "column": 12 - }, - "end": { - "line": 10, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.title", - "defaultMessage": "!!!Do you like Ferdi?", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 11, - "column": 9 - }, - "end": { - "line": 14, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.aboutIntro", - "defaultMessage": "!!!

Ferdi is an open-source and a community-lead application.

Thanks to the people who make this possbile:

", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 15, - "column": 14 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textListContributors", - "defaultMessage": "!!!Full list of contributor", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 19, - "column": 24 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textListContributorsHere", - "defaultMessage": "!!!here", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 23, - "column": 28 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textVolunteers", - "defaultMessage": "!!!The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 27, - "column": 18 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textSupportWelcome", - "defaultMessage": "!!!Support is always welcome. You can find a list of the help we need", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 31, - "column": 22 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textSupportWelcomeHere", - "defaultMessage": "!!!here", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 35, - "column": 26 - }, - "end": { - "line": 38, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textExpenses", - "defaultMessage": "!!!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", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 39, - "column": 16 - }, - "end": { - "line": 42, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textOpenCollective", - "defaultMessage": "!!!Open Collective", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 43, - "column": 22 - }, - "end": { - "line": 46, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textDonation", - "defaultMessage": "!!!If you feel like supporting Ferdi development with a donation, you can do so on both,", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 47, - "column": 16 - }, - "end": { - "line": 50, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textDonationAnd", - "defaultMessage": "!!!and", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 51, - "column": 19 - }, - "end": { - "line": 54, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.textGitHubSponsors", - "defaultMessage": "!!!GitHub Sponsors", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 55, - "column": 22 - }, - "end": { - "line": 58, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.openSurvey", - "defaultMessage": "!!!Open Survey", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 59, - "column": 14 - }, - "end": { - "line": 62, - "column": 3 - } - }, - { - "id": "settings.supportFerdi.bannerText", - "defaultMessage": "!!!Do you want to help us improve Ferdi?", - "file": "src/components/settings/supportFerdi/SupportFerdiDashboard.js", - "start": { - "line": 63, - "column": 14 - }, - "end": { - "line": 66, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/team/TeamDashboard.json b/src/i18n/messages/src/components/settings/team/TeamDashboard.json deleted file mode 100644 index ac42ad98a..000000000 --- a/src/i18n/messages/src/components/settings/team/TeamDashboard.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "settings.team.headline", - "defaultMessage": "!!!Team", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "settings.team.contentHeadline", - "defaultMessage": "!!!Franz Team Management", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 19, - "column": 19 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "settings.team.intro", - "defaultMessage": "!!!Your are currently using Franz Servers, which is why you have access to Team Management.", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 23, - "column": 9 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "settings.team.copy", - "defaultMessage": "!!!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.", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 27, - "column": 8 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "settings.team.manageAction", - "defaultMessage": "!!!Manage your Team on meetfranz.com", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 31, - "column": 16 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "settings.team.teamsUnavailable", - "defaultMessage": "!!!Teams are unavailable", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 35, - "column": 20 - }, - "end": { - "line": 38, - "column": 3 - } - }, - { - "id": "settings.team.teamsUnavailableInfo", - "defaultMessage": "!!!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.", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 39, - "column": 24 - }, - "end": { - "line": 42, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/settings/user/EditUserForm.json b/src/i18n/messages/src/components/settings/user/EditUserForm.json deleted file mode 100644 index 3a59f8681..000000000 --- a/src/i18n/messages/src/components/settings/user/EditUserForm.json +++ /dev/null @@ -1,80 +0,0 @@ -[ - { - "id": "settings.account.headline", - "defaultMessage": "!!!Account", - "file": "src/components/settings/user/EditUserForm.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "settings.account.headlineProfile", - "defaultMessage": "!!!Update Profile", - "file": "src/components/settings/user/EditUserForm.js", - "start": { - "line": 19, - "column": 19 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "settings.account.headlineAccount", - "defaultMessage": "!!!Account Information", - "file": "src/components/settings/user/EditUserForm.js", - "start": { - "line": 23, - "column": 19 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "settings.account.headlinePassword", - "defaultMessage": "!!!Change Password", - "file": "src/components/settings/user/EditUserForm.js", - "start": { - "line": 27, - "column": 20 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "settings.account.successInfo", - "defaultMessage": "!!!Your changes have been saved", - "file": "src/components/settings/user/EditUserForm.js", - "start": { - "line": 31, - "column": 15 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "settings.account.buttonSave", - "defaultMessage": "!!!Update profile", - "file": "src/components/settings/user/EditUserForm.js", - "start": { - "line": 35, - "column": 14 - }, - "end": { - "line": 38, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/FeatureList.json b/src/i18n/messages/src/components/ui/FeatureList.json deleted file mode 100644 index eb4bc483b..000000000 --- a/src/i18n/messages/src/components/ui/FeatureList.json +++ /dev/null @@ -1,145 +0,0 @@ -[ - { - "id": "pricing.features.recipes", - "defaultMessage": "!!!Choose from more than 70 Services", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 8, - "column": 20 - }, - "end": { - "line": 11, - "column": 3 - } - }, - { - "id": "pricing.features.accountSync", - "defaultMessage": "!!!Account Synchronisation", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 12, - "column": 15 - }, - "end": { - "line": 15, - "column": 3 - } - }, - { - "id": "pricing.features.desktopNotifications", - "defaultMessage": "!!!Desktop Notifications", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 16, - "column": 24 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "pricing.features.unlimitedServices", - "defaultMessage": "!!!Add unlimited services", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 20, - "column": 21 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "pricing.features.spellchecker", - "defaultMessage": "!!!Spellchecker support", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 24, - "column": 16 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "pricing.features.workspaces", - "defaultMessage": "!!!Workspaces", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 28, - "column": 14 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "pricing.features.customWebsites", - "defaultMessage": "!!!Add Custom Websites", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 32, - "column": 18 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "pricing.features.onPremise", - "defaultMessage": "!!!On-premise & other Hosted Services", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 36, - "column": 13 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "pricing.features.thirdPartyServices", - "defaultMessage": "!!!Install 3rd party services", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 40, - "column": 22 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "pricing.features.serviceProxies", - "defaultMessage": "!!!Service Proxies", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 44, - "column": 18 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "pricing.features.teamManagement", - "defaultMessage": "!!!Team Management", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 48, - "column": 18 - }, - "end": { - "line": 51, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/InfoBar.json b/src/i18n/messages/src/components/ui/InfoBar.json deleted file mode 100644 index a6a629c71..000000000 --- a/src/i18n/messages/src/components/ui/InfoBar.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "infobar.hide", - "defaultMessage": "!!!Hide", - "file": "src/components/ui/InfoBar.js", - "start": { - "line": 12, - "column": 8 - }, - "end": { - "line": 15, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/Infobox.json b/src/i18n/messages/src/components/ui/Infobox.json deleted file mode 100644 index 296c2ad3e..000000000 --- a/src/i18n/messages/src/components/ui/Infobox.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "infobox.dismiss", - "defaultMessage": "!!!Dismiss", - "file": "src/components/ui/Infobox.js", - "start": { - "line": 9, - "column": 11 - }, - "end": { - "line": 12, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/Input.json b/src/i18n/messages/src/components/ui/Input.json deleted file mode 100644 index 6240badfb..000000000 --- a/src/i18n/messages/src/components/ui/Input.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "settings.app.form.passwordToggle", - "defaultMessage": "!!!Password toggle", - "file": "src/components/ui/Input.js", - "start": { - "line": 11, - "column": 18 - }, - "end": { - "line": 14, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/WebviewLoader/index.json b/src/i18n/messages/src/components/ui/WebviewLoader/index.json deleted file mode 100644 index 9caabef25..000000000 --- a/src/i18n/messages/src/components/ui/WebviewLoader/index.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "service.webviewLoader.loading", - "defaultMessage": "!!!Loading {service}", - "file": "src/components/ui/WebviewLoader/index.js", - "start": { - "line": 11, - "column": 11 - }, - "end": { - "line": 14, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/util/ErrorBoundary/index.json b/src/i18n/messages/src/components/util/ErrorBoundary/index.json deleted file mode 100644 index 43c323031..000000000 --- a/src/i18n/messages/src/components/util/ErrorBoundary/index.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "app.errorHandler.headline", - "defaultMessage": "!!!Something went wrong.", - "file": "src/components/util/ErrorBoundary/index.js", - "start": { - "line": 11, - "column": 12 - }, - "end": { - "line": 14, - "column": 3 - } - }, - { - "id": "app.errorHandler.action", - "defaultMessage": "!!!Reload", - "file": "src/components/util/ErrorBoundary/index.js", - "start": { - "line": 15, - "column": 10 - }, - "end": { - "line": 18, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/containers/settings/EditServiceScreen.json b/src/i18n/messages/src/containers/settings/EditServiceScreen.json deleted file mode 100644 index 6744a9ff3..000000000 --- a/src/i18n/messages/src/containers/settings/EditServiceScreen.json +++ /dev/null @@ -1,249 +0,0 @@ -[ - { - "id": "settings.service.form.name", - "defaultMessage": "!!!Name", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 28, - "column": 8 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "settings.service.form.enableService", - "defaultMessage": "!!!Enable service", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 32, - "column": 17 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "settings.service.form.enableHibernation", - "defaultMessage": "!!!Enable hibernation", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 36, - "column": 21 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "settings.service.form.enableNotification", - "defaultMessage": "!!!Enable Notifications", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 40, - "column": 22 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "settings.service.form.enableBadge", - "defaultMessage": "!!!Show unread message badges", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 44, - "column": 15 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "settings.service.form.enableAudio", - "defaultMessage": "!!!Enable audio", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 48, - "column": 15 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "settings.service.form.team", - "defaultMessage": "!!!Team", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 52, - "column": 8 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "settings.service.form.customUrl", - "defaultMessage": "!!!Service URL", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 56, - "column": 13 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "settings.service.form.indirectMessages", - "defaultMessage": "!!!Show message badge for all new messages", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 60, - "column": 20 - }, - "end": { - "line": 63, - "column": 3 - } - }, - { - "id": "settings.service.form.icon", - "defaultMessage": "!!!Custom icon", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 64, - "column": 8 - }, - "end": { - "line": 67, - "column": 3 - } - }, - { - "id": "settings.service.form.enableDarkMode", - "defaultMessage": "!!!Enable Dark Mode", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 68, - "column": 18 - }, - "end": { - "line": 71, - "column": 3 - } - }, - { - "id": "settings.service.form.darkReaderBrightness", - "defaultMessage": "!!!Dark Reader Brightness", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 72, - "column": 24 - }, - "end": { - "line": 75, - "column": 3 - } - }, - { - "id": "settings.service.form.darkReaderContrast", - "defaultMessage": "!!!Dark Reader Contrast", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 76, - "column": 22 - }, - "end": { - "line": 79, - "column": 3 - } - }, - { - "id": "settings.service.form.darkReaderSepia", - "defaultMessage": "!!!Dark Reader Sepia", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 80, - "column": 19 - }, - "end": { - "line": 83, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.isEnabled", - "defaultMessage": "!!!Use Proxy", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 84, - "column": 15 - }, - "end": { - "line": 87, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.host", - "defaultMessage": "!!!Proxy Host/IP", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 88, - "column": 13 - }, - "end": { - "line": 91, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.port", - "defaultMessage": "!!!Port", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 92, - "column": 13 - }, - "end": { - "line": 95, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.user", - "defaultMessage": "!!!User", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 96, - "column": 13 - }, - "end": { - "line": 99, - "column": 3 - } - }, - { - "id": "settings.service.form.proxy.password", - "defaultMessage": "!!!Password", - "file": "src/containers/settings/EditServiceScreen.js", - "start": { - "line": 100, - "column": 17 - }, - "end": { - "line": 103, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json deleted file mode 100644 index b0087e5dd..000000000 --- a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json +++ /dev/null @@ -1,600 +0,0 @@ -[ - { - "id": "settings.app.form.autoLaunchOnStart", - "defaultMessage": "!!!Launch Ferdi on start", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 32, - "column": 21 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "settings.app.form.autoLaunchInBackground", - "defaultMessage": "!!!Open in background", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 36, - "column": 26 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "settings.app.form.runInBackground", - "defaultMessage": "!!!Keep Ferdi in background when closing the window", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 40, - "column": 19 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "settings.app.form.startMinimized", - "defaultMessage": "!!!Start minimized", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 44, - "column": 18 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "settings.app.form.confirmOnQuit", - "defaultMessage": "!!!Confirm when quitting Ferdi", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 48, - "column": 17 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "settings.app.form.enableSystemTray", - "defaultMessage": "!!!Always show Ferdi in System Tray", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 52, - "column": 20 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "settings.app.form.enableMenuBar", - "defaultMessage": "!!!Always show Ferdi in Menu Bar", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 56, - "column": 17 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "settings.app.form.reloadAfterResume", - "defaultMessage": "!!!Reload Ferdi after system resume", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 60, - "column": 21 - }, - "end": { - "line": 63, - "column": 3 - } - }, - { - "id": "settings.app.form.minimizeToSystemTray", - "defaultMessage": "!!!Minimize Ferdi to system tray", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 64, - "column": 24 - }, - "end": { - "line": 67, - "column": 3 - } - }, - { - "id": "settings.app.form.closeToSystemTray", - "defaultMessage": "!!!Close Ferdi to system tray", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 68, - "column": 21 - }, - "end": { - "line": 71, - "column": 3 - } - }, - { - "id": "settings.app.form.privateNotifications", - "defaultMessage": "!!!Don't show message content in notifications", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 72, - "column": 24 - }, - "end": { - "line": 75, - "column": 3 - } - }, - { - "id": "settings.app.form.clipboardNotifications", - "defaultMessage": "!!!Don't show notifications for clipboard events", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 76, - "column": 26 - }, - "end": { - "line": 79, - "column": 3 - } - }, - { - "id": "settings.app.form.notifyTaskBarOnMessage", - "defaultMessage": "!!!Notify TaskBar/Dock on new message", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 80, - "column": 26 - }, - "end": { - "line": 83, - "column": 3 - } - }, - { - "id": "settings.app.form.navigationBarBehaviour", - "defaultMessage": "!!!Navigation bar behaviour", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 84, - "column": 26 - }, - "end": { - "line": 87, - "column": 3 - } - }, - { - "id": "settings.app.form.searchEngine", - "defaultMessage": "!!!Search engine", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 88, - "column": 16 - }, - "end": { - "line": 91, - "column": 3 - } - }, - { - "id": "settings.app.form.sentry", - "defaultMessage": "!!!Send telemetry data", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 92, - "column": 10 - }, - "end": { - "line": 95, - "column": 3 - } - }, - { - "id": "settings.app.form.hibernateOnStartup", - "defaultMessage": "!!!Keep services in hibernation on startup", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 96, - "column": 22 - }, - "end": { - "line": 99, - "column": 3 - } - }, - { - "id": "settings.app.form.hibernationStrategy", - "defaultMessage": "!!!Hibernation strategy", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 100, - "column": 23 - }, - "end": { - "line": 103, - "column": 3 - } - }, - { - "id": "settings.app.form.wakeUpStrategy", - "defaultMessage": "!!!Wake up strategy", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 104, - "column": 18 - }, - "end": { - "line": 107, - "column": 3 - } - }, - { - "id": "settings.app.form.predefinedTodoServer", - "defaultMessage": "!!!Todo Server", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 108, - "column": 24 - }, - "end": { - "line": 111, - "column": 3 - } - }, - { - "id": "settings.app.form.customTodoServer", - "defaultMessage": "!!!Custom TodoServer", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 112, - "column": 20 - }, - "end": { - "line": 115, - "column": 3 - } - }, - { - "id": "settings.app.form.enableLock", - "defaultMessage": "!!!Enable Password Lock", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 116, - "column": 14 - }, - "end": { - "line": 119, - "column": 3 - } - }, - { - "id": "settings.app.form.lockPassword", - "defaultMessage": "!!!Password", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 120, - "column": 16 - }, - "end": { - "line": 123, - "column": 3 - } - }, - { - "id": "settings.app.form.useTouchIdToUnlock", - "defaultMessage": "!!!Allow using Touch ID to unlock", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 124, - "column": 22 - }, - "end": { - "line": 127, - "column": 3 - } - }, - { - "id": "settings.app.form.inactivityLock", - "defaultMessage": "!!!Lock after inactivity", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 128, - "column": 18 - }, - "end": { - "line": 131, - "column": 3 - } - }, - { - "id": "settings.app.form.scheduledDNDEnabled", - "defaultMessage": "!!!Enable scheduled Do-not-Disturb", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 132, - "column": 23 - }, - "end": { - "line": 135, - "column": 3 - } - }, - { - "id": "settings.app.form.scheduledDNDStart", - "defaultMessage": "!!!From", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 136, - "column": 21 - }, - "end": { - "line": 139, - "column": 3 - } - }, - { - "id": "settings.app.form.scheduledDNDEnd", - "defaultMessage": "!!!To", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 140, - "column": 19 - }, - "end": { - "line": 143, - "column": 3 - } - }, - { - "id": "settings.app.form.language", - "defaultMessage": "!!!Language", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 144, - "column": 12 - }, - "end": { - "line": 147, - "column": 3 - } - }, - { - "id": "settings.app.form.darkMode", - "defaultMessage": "!!!Dark Mode", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 148, - "column": 12 - }, - "end": { - "line": 151, - "column": 3 - } - }, - { - "id": "settings.app.form.adaptableDarkMode", - "defaultMessage": "!!!Synchronize dark mode with my OS's dark mode setting", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 152, - "column": 21 - }, - "end": { - "line": 155, - "column": 3 - } - }, - { - "id": "settings.app.form.universalDarkMode", - "defaultMessage": "!!!Enable universal Dark Mode", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 156, - "column": 21 - }, - "end": { - "line": 159, - "column": 3 - } - }, - { - "id": "settings.app.form.serviceRibbonWidth", - "defaultMessage": "!!!Sidebar width", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 160, - "column": 22 - }, - "end": { - "line": 163, - "column": 3 - } - }, - { - "id": "settings.app.form.iconSize", - "defaultMessage": "!!!Service icon size", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 164, - "column": 12 - }, - "end": { - "line": 167, - "column": 3 - } - }, - { - "id": "settings.app.form.useVerticalStyle", - "defaultMessage": "!!!Use horizontal style", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 168, - "column": 20 - }, - "end": { - "line": 171, - "column": 3 - } - }, - { - "id": "settings.app.form.alwaysShowWorkspaces", - "defaultMessage": "!!!Always show workspace drawer", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 172, - "column": 24 - }, - "end": { - "line": 175, - "column": 3 - } - }, - { - "id": "settings.app.form.accentColor", - "defaultMessage": "!!!Accent color", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 176, - "column": 15 - }, - "end": { - "line": 179, - "column": 3 - } - }, - { - "id": "settings.app.form.showDisabledServices", - "defaultMessage": "!!!Display disabled services tabs", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 180, - "column": 24 - }, - "end": { - "line": 183, - "column": 3 - } - }, - { - "id": "settings.app.form.showMessagesBadgesWhenMuted", - "defaultMessage": "!!!Show unread message badge when notifications are disabled", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 184, - "column": 29 - }, - "end": { - "line": 187, - "column": 3 - } - }, - { - "id": "settings.app.form.showDragArea", - "defaultMessage": "!!!Show draggable area on window", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 188, - "column": 16 - }, - "end": { - "line": 191, - "column": 3 - } - }, - { - "id": "settings.app.form.enableSpellchecking", - "defaultMessage": "!!!Enable spell checking", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 192, - "column": 23 - }, - "end": { - "line": 195, - "column": 3 - } - }, - { - "id": "settings.app.form.enableGPUAcceleration", - "defaultMessage": "!!!Enable GPU Acceleration", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 196, - "column": 25 - }, - "end": { - "line": 199, - "column": 3 - } - }, - { - "id": "settings.app.form.beta", - "defaultMessage": "!!!Include beta versions", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 200, - "column": 8 - }, - "end": { - "line": 203, - "column": 3 - } - }, - { - "id": "settings.app.form.automaticUpdates", - "defaultMessage": "!!!Enable updates", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 204, - "column": 20 - }, - "end": { - "line": 207, - "column": 3 - } - }, - { - "id": "settings.app.form.enableTodos", - "defaultMessage": "!!!Enable Franz Todos", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 208, - "column": 15 - }, - "end": { - "line": 211, - "column": 3 - } - }, - { - "id": "settings.app.form.keepAllWorkspacesLoaded", - "defaultMessage": "!!!Keep all workspaces loaded", - "file": "src/containers/settings/EditSettingsScreen.js", - "start": { - "line": 212, - "column": 27 - }, - "end": { - "line": 215, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/containers/settings/EditUserScreen.json b/src/i18n/messages/src/containers/settings/EditUserScreen.json deleted file mode 100644 index 70ff29945..000000000 --- a/src/i18n/messages/src/containers/settings/EditUserScreen.json +++ /dev/null @@ -1,119 +0,0 @@ -[ - { - "id": "settings.user.form.firstname", - "defaultMessage": "!!!Firstname", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 14, - "column": 13 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "settings.user.form.lastname", - "defaultMessage": "!!!Lastname", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 18, - "column": 12 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "settings.user.form.email", - "defaultMessage": "!!!Email", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 22, - "column": 9 - }, - "end": { - "line": 25, - "column": 3 - } - }, - { - "id": "settings.user.form.accountType.label", - "defaultMessage": "!!!Account type", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 26, - "column": 20 - }, - "end": { - "line": 29, - "column": 3 - } - }, - { - "id": "settings.user.form.accountType.individual", - "defaultMessage": "!!!Individual", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 30, - "column": 25 - }, - "end": { - "line": 33, - "column": 3 - } - }, - { - "id": "settings.user.form.accountType.non-profit", - "defaultMessage": "!!!Non-Profit", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 34, - "column": 24 - }, - "end": { - "line": 37, - "column": 3 - } - }, - { - "id": "settings.user.form.accountType.company", - "defaultMessage": "!!!Company", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 38, - "column": 22 - }, - "end": { - "line": 41, - "column": 3 - } - }, - { - "id": "settings.user.form.currentPassword", - "defaultMessage": "!!!Current password", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 42, - "column": 19 - }, - "end": { - "line": 45, - "column": 3 - } - }, - { - "id": "settings.user.form.newPassword", - "defaultMessage": "!!!New password", - "file": "src/containers/settings/EditUserScreen.js", - "start": { - "line": 46, - "column": 15 - }, - "end": { - "line": 49, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/basicAuth/Component.json b/src/i18n/messages/src/features/basicAuth/Component.json deleted file mode 100644 index fea1b0838..000000000 --- a/src/i18n/messages/src/features/basicAuth/Component.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "feature.basicAuth.signIn", - "defaultMessage": "!!!Sign In", - "file": "src/features/basicAuth/Component.js", - "start": { - "line": 24, - "column": 10 - }, - "end": { - "line": 27, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/debugger/Component.json b/src/i18n/messages/src/features/debugger/Component.json deleted file mode 100644 index 86a5a05f4..000000000 --- a/src/i18n/messages/src/features/debugger/Component.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "feature.debugger.title", - "defaultMessage": "!!!Publish debugging information", - "file": "src/features/debugger/Component.js", - "start": { - "line": 16, - "column": 9 - }, - "end": { - "line": 19, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/nightlyBuilds/Component.json b/src/i18n/messages/src/features/nightlyBuilds/Component.json deleted file mode 100644 index 0b2eab354..000000000 --- a/src/i18n/messages/src/features/nightlyBuilds/Component.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "feature.nightlyBuilds.title", - "defaultMessage": "!!!Nightly Builds", - "file": "src/features/nightlyBuilds/Component.js", - "start": { - "line": 17, - "column": 9 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "feature.nightlyBuilds.info", - "defaultMessage": "!!!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.", - "file": "src/features/nightlyBuilds/Component.js", - "start": { - "line": 21, - "column": 8 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "feature.nightlyBuilds.activate", - "defaultMessage": "!!!Activate", - "file": "src/features/nightlyBuilds/Component.js", - "start": { - "line": 25, - "column": 12 - }, - "end": { - "line": 28, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/publishDebugInfo/Component.json b/src/i18n/messages/src/features/publishDebugInfo/Component.json deleted file mode 100644 index 4d07a4794..000000000 --- a/src/i18n/messages/src/features/publishDebugInfo/Component.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "feature.publishDebugInfo.title", - "defaultMessage": "!!!Publish debug information", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 19, - "column": 9 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "feature.publishDebugInfo.info", - "defaultMessage": "!!!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", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 23, - "column": 8 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "feature.publishDebugInfo.error", - "defaultMessage": "!!!There was an error while trying to publish the debug information. Please try again later or view the console for more information.", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 27, - "column": 9 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "feature.publishDebugInfo.privacy", - "defaultMessage": "!!!Privacy policy", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 31, - "column": 11 - }, - "end": { - "line": 34, - "column": 3 - } - }, - { - "id": "feature.publishDebugInfo.terms", - "defaultMessage": "!!!Terms of service", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 35, - "column": 9 - }, - "end": { - "line": 38, - "column": 3 - } - }, - { - "id": "feature.publishDebugInfo.publish", - "defaultMessage": "!!!Accept and publish", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 39, - "column": 11 - }, - "end": { - "line": 42, - "column": 3 - } - }, - { - "id": "feature.publishDebugInfo.published", - "defaultMessage": "!!!Your debug log was published and is now availible at", - "file": "src/features/publishDebugInfo/Component.js", - "start": { - "line": 43, - "column": 13 - }, - "end": { - "line": 46, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/quickSwitch/Component.json b/src/i18n/messages/src/features/quickSwitch/Component.json deleted file mode 100644 index e112bedc1..000000000 --- a/src/i18n/messages/src/features/quickSwitch/Component.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "feature.quickSwitch.title", - "defaultMessage": "!!!QuickSwitch", - "file": "src/features/quickSwitch/Component.js", - "start": { - "line": 17, - "column": 9 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "feature.quickSwitch.search", - "defaultMessage": "!!!Search...", - "file": "src/features/quickSwitch/Component.js", - "start": { - "line": 21, - "column": 10 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "feature.quickSwitch.info", - "defaultMessage": "!!!Select a service with TAB, ↑ and ↓. Open a service with ENTER.", - "file": "src/features/quickSwitch/Component.js", - "start": { - "line": 25, - "column": 8 - }, - "end": { - "line": 28, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/recipeConnectionLost/components/WebControls.json b/src/i18n/messages/src/features/recipeConnectionLost/components/WebControls.json deleted file mode 100644 index f3bcaf345..000000000 --- a/src/i18n/messages/src/features/recipeConnectionLost/components/WebControls.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "webControls.goHome", - "defaultMessage": "!!!Home", - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "webControls.openInBrowser", - "defaultMessage": "!!!Open in Browser", - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "start": { - "line": 17, - "column": 17 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "webControls.back", - "defaultMessage": "!!!Back", - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "start": { - "line": 21, - "column": 8 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "webControls.forward", - "defaultMessage": "!!!Forward", - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "start": { - "line": 25, - "column": 11 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "webControls.reload", - "defaultMessage": "!!!Reload", - "file": "src/features/recipeConnectionLost/components/WebControls.js", - "start": { - "line": 29, - "column": 10 - }, - "end": { - "line": 32, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/webControls/components/WebControls.json b/src/i18n/messages/src/features/webControls/components/WebControls.json deleted file mode 100644 index 7676ec0b1..000000000 --- a/src/i18n/messages/src/features/webControls/components/WebControls.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "webControls.goHome", - "defaultMessage": "!!!Home", - "file": "src/features/webControls/components/WebControls.js", - "start": { - "line": 17, - "column": 10 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "webControls.openInBrowser", - "defaultMessage": "!!!Open in Browser", - "file": "src/features/webControls/components/WebControls.js", - "start": { - "line": 21, - "column": 17 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "webControls.back", - "defaultMessage": "!!!Back", - "file": "src/features/webControls/components/WebControls.js", - "start": { - "line": 25, - "column": 8 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "webControls.forward", - "defaultMessage": "!!!Forward", - "file": "src/features/webControls/components/WebControls.js", - "start": { - "line": 29, - "column": 11 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "webControls.reload", - "defaultMessage": "!!!Reload", - "file": "src/features/webControls/components/WebControls.js", - "start": { - "line": 33, - "column": 10 - }, - "end": { - "line": 36, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json b/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json deleted file mode 100644 index 1aabfb520..000000000 --- a/src/i18n/messages/src/features/workspaces/components/CreateWorkspaceForm.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "settings.workspace.add.form.submitButton", - "defaultMessage": "!!!Create workspace", - "file": "src/features/workspaces/components/CreateWorkspaceForm.js", - "start": { - "line": 12, - "column": 16 - }, - "end": { - "line": 15, - "column": 3 - } - }, - { - "id": "settings.workspace.add.form.name", - "defaultMessage": "!!!Name", - "file": "src/features/workspaces/components/CreateWorkspaceForm.js", - "start": { - "line": 16, - "column": 8 - }, - "end": { - "line": 19, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json b/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json deleted file mode 100644 index 804e30070..000000000 --- a/src/i18n/messages/src/features/workspaces/components/EditWorkspaceForm.json +++ /dev/null @@ -1,119 +0,0 @@ -[ - { - "id": "settings.workspace.form.buttonDelete", - "defaultMessage": "!!!Delete workspace", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 21, - "column": 16 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "settings.workspace.form.buttonSave", - "defaultMessage": "!!!Save workspace", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 25, - "column": 14 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "settings.workspace.form.name", - "defaultMessage": "!!!Name", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 29, - "column": 8 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "settings.workspace.form.yourWorkspaces", - "defaultMessage": "!!!Your workspaces", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 33, - "column": 18 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "settings.workspace.form.keepLoaded", - "defaultMessage": "!!!Keep this workspace loaded*", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 37, - "column": 14 - }, - "end": { - "line": 40, - "column": 3 - } - }, - { - "id": "settings.workspace.form.keepLoadedInfo", - "defaultMessage": "!!!*This option will be overwritten by the global \"Keep all workspaces loaded\" option.", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 41, - "column": 18 - }, - "end": { - "line": 45, - "column": 3 - } - }, - { - "id": "settings.workspace.form.servicesInWorkspaceHeadline", - "defaultMessage": "!!!Services in this Workspace", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 46, - "column": 31 - }, - "end": { - "line": 49, - "column": 3 - } - }, - { - "id": "settings.services.noServicesAdded", - "defaultMessage": "!!!Start by adding a service.", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 50, - "column": 19 - }, - "end": { - "line": 53, - "column": 3 - } - }, - { - "id": "settings.services.discoverServices", - "defaultMessage": "!!!Discover services", - "file": "src/features/workspaces/components/EditWorkspaceForm.js", - "start": { - "line": 54, - "column": 20 - }, - "end": { - "line": 57, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json deleted file mode 100644 index 431f12710..000000000 --- a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "workspaceDrawer.headline", - "defaultMessage": "!!!Workspaces", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "workspaceDrawer.allServices", - "defaultMessage": "!!!All services", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 19, - "column": 15 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "workspaceDrawer.workspacesSettingsTooltip", - "defaultMessage": "!!!Workspaces settings", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 23, - "column": 29 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "workspaceDrawer.workspaceFeatureInfo", - "defaultMessage": "!!!Info about workspace feature", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 27, - "column": 24 - }, - "end": { - "line": 30, - "column": 3 - } - }, - { - "id": "workspaceDrawer.addNewWorkspaceLabel", - "defaultMessage": "!!!add new workspace", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 31, - "column": 24 - }, - "end": { - "line": 34, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawerItem.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawerItem.json deleted file mode 100644 index 737dee59b..000000000 --- a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawerItem.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "workspaceDrawer.item.noServicesAddedYet", - "defaultMessage": "!!!No services added yet", - "file": "src/features/workspaces/components/WorkspaceDrawerItem.js", - "start": { - "line": 11, - "column": 22 - }, - "end": { - "line": 14, - "column": 3 - } - }, - { - "id": "workspaceDrawer.item.contextMenuEdit", - "defaultMessage": "!!!edit", - "file": "src/features/workspaces/components/WorkspaceDrawerItem.js", - "start": { - "line": 15, - "column": 19 - }, - "end": { - "line": 18, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceSwitchingIndicator.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceSwitchingIndicator.json deleted file mode 100644 index 4f3e6d55c..000000000 --- a/src/i18n/messages/src/features/workspaces/components/WorkspaceSwitchingIndicator.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "workspaces.switchingIndicator.switchingTo", - "defaultMessage": "!!!Switching to", - "file": "src/features/workspaces/components/WorkspaceSwitchingIndicator.js", - "start": { - "line": 12, - "column": 15 - }, - "end": { - "line": 15, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json b/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json deleted file mode 100644 index 39c9c30fb..000000000 --- a/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json +++ /dev/null @@ -1,106 +0,0 @@ -[ - { - "id": "settings.workspaces.headline", - "defaultMessage": "!!!Your workspaces", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 17, - "column": 12 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "settings.workspaces.noWorkspacesAdded", - "defaultMessage": "!!!You haven't created any workspaces yet.", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 21, - "column": 19 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "settings.workspaces.workspacesRequestFailed", - "defaultMessage": "!!!Could not load your workspaces", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 25, - "column": 27 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "settings.workspaces.tryReloadWorkspaces", - "defaultMessage": "!!!Try again", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 29, - "column": 23 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "settings.workspaces.updatedInfo", - "defaultMessage": "!!!Your changes have been saved", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 33, - "column": 15 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "settings.workspaces.deletedInfo", - "defaultMessage": "!!!Workspace has been deleted", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 37, - "column": 15 - }, - "end": { - "line": 40, - "column": 3 - } - }, - { - "id": "settings.workspaces.workspaceFeatureInfo", - "defaultMessage": "!!!Info about workspace feature", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 41, - "column": 24 - }, - "end": { - "line": 44, - "column": 3 - } - }, - { - "id": "settings.workspaces.workspaceFeatureHeadline", - "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", - "file": "src/features/workspaces/components/WorkspacesDashboard.js", - "start": { - "line": 45, - "column": 28 - }, - "end": { - "line": 48, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/helpers/validation-helpers.json b/src/i18n/messages/src/helpers/validation-helpers.json deleted file mode 100644 index 6be1d33e9..000000000 --- a/src/i18n/messages/src/helpers/validation-helpers.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "validation.required", - "defaultMessage": "!!!Field is required", - "file": "src/helpers/validation-helpers.js", - "start": { - "line": 5, - "column": 12 - }, - "end": { - "line": 8, - "column": 3 - } - }, - { - "id": "validation.email", - "defaultMessage": "!!!Email not valid", - "file": "src/helpers/validation-helpers.js", - "start": { - "line": 9, - "column": 9 - }, - "end": { - "line": 12, - "column": 3 - } - }, - { - "id": "validation.url", - "defaultMessage": "!!!Not a valid URL", - "file": "src/helpers/validation-helpers.js", - "start": { - "line": 13, - "column": 7 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "validation.minLength", - "defaultMessage": "!!!Too few characters", - "file": "src/helpers/validation-helpers.js", - "start": { - "line": 17, - "column": 13 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "validation.oneRequired", - "defaultMessage": "!!!At least one is required", - "file": "src/helpers/validation-helpers.js", - "start": { - "line": 21, - "column": 15 - }, - "end": { - "line": 24, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/i18n/globalMessages.json b/src/i18n/messages/src/i18n/globalMessages.json deleted file mode 100644 index bc1ec7397..000000000 --- a/src/i18n/messages/src/i18n/globalMessages.json +++ /dev/null @@ -1,236 +0,0 @@ -[ - { - "id": "global.api.unhealthy", - "defaultMessage": "!!!Can't connect to Ferdi Online Services", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 4, - "column": 16 - }, - "end": { - "line": 7, - "column": 3 - } - }, - { - "id": "global.notConnectedToTheInternet", - "defaultMessage": "!!!You are not connected to the internet.", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 8, - "column": 29 - }, - "end": { - "line": 11, - "column": 3 - } - }, - { - "id": "global.spellchecking.language", - "defaultMessage": "!!!Spell checking language", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 12, - "column": 24 - }, - "end": { - "line": 15, - "column": 3 - } - }, - { - "id": "global.spellchecker.useDefault", - "defaultMessage": "!!!Use System Default ({default})", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 16, - "column": 29 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "global.spellchecking.autodetect", - "defaultMessage": "!!!Detect language automatically", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 20, - "column": 34 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "global.spellchecking.autodetect.short", - "defaultMessage": "!!!Automatic", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 24, - "column": 39 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "global.userAgentPref", - "defaultMessage": "!!!User Agent", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 28, - "column": 17 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "global.userAgentHelp", - "defaultMessage": "!!!Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 32, - "column": 17 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "global.yes", - "defaultMessage": "!!!Yes", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 36, - "column": 7 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "global.no", - "defaultMessage": "!!!No", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 40, - "column": 6 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "global.ok", - "defaultMessage": "!!!Ok", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 44, - "column": 6 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "global.cancel", - "defaultMessage": "!!!Cancel", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 48, - "column": 10 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "global.save", - "defaultMessage": "!!!Save", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 52, - "column": 8 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "global.submit", - "defaultMessage": "!!!Submit", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 56, - "column": 10 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "global.quit", - "defaultMessage": "!!!Quit", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 60, - "column": 8 - }, - "end": { - "line": 63, - "column": 3 - } - }, - { - "id": "global.quitConfirmation", - "defaultMessage": "!!!Do you really want to quit Ferdi?", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 64, - "column": 20 - }, - "end": { - "line": 68, - "column": 3 - } - }, - { - "id": "global.settings", - "defaultMessage": "!!!Settings", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 69, - "column": 12 - }, - "end": { - "line": 72, - "column": 3 - } - }, - { - "id": "global.edit", - "defaultMessage": "!!!Edit", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 73, - "column": 8 - }, - "end": { - "line": 76, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json deleted file mode 100644 index 35f2e3b7b..000000000 --- a/src/i18n/messages/src/lib/Menu.json +++ /dev/null @@ -1,912 +0,0 @@ -[ - { - "id": "menu.edit", - "defaultMessage": "!!!Edit", - "file": "src/lib/Menu.js", - "start": { - "line": 32, - "column": 8 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "menu.edit.undo", - "defaultMessage": "!!!Undo", - "file": "src/lib/Menu.js", - "start": { - "line": 36, - "column": 8 - }, - "end": { - "line": 39, - "column": 3 - } - }, - { - "id": "menu.edit.redo", - "defaultMessage": "!!!Redo", - "file": "src/lib/Menu.js", - "start": { - "line": 40, - "column": 8 - }, - "end": { - "line": 43, - "column": 3 - } - }, - { - "id": "menu.edit.cut", - "defaultMessage": "!!!Cut", - "file": "src/lib/Menu.js", - "start": { - "line": 44, - "column": 7 - }, - "end": { - "line": 47, - "column": 3 - } - }, - { - "id": "menu.edit.copy", - "defaultMessage": "!!!Copy", - "file": "src/lib/Menu.js", - "start": { - "line": 48, - "column": 8 - }, - "end": { - "line": 51, - "column": 3 - } - }, - { - "id": "menu.edit.paste", - "defaultMessage": "!!!Paste", - "file": "src/lib/Menu.js", - "start": { - "line": 52, - "column": 9 - }, - "end": { - "line": 55, - "column": 3 - } - }, - { - "id": "menu.edit.pasteAndMatchStyle", - "defaultMessage": "!!!Paste And Match Style", - "file": "src/lib/Menu.js", - "start": { - "line": 56, - "column": 22 - }, - "end": { - "line": 59, - "column": 3 - } - }, - { - "id": "menu.edit.delete", - "defaultMessage": "!!!Delete", - "file": "src/lib/Menu.js", - "start": { - "line": 60, - "column": 10 - }, - "end": { - "line": 63, - "column": 3 - } - }, - { - "id": "menu.edit.selectAll", - "defaultMessage": "!!!Select All", - "file": "src/lib/Menu.js", - "start": { - "line": 64, - "column": 13 - }, - "end": { - "line": 67, - "column": 3 - } - }, - { - "id": "menu.edit.findInPage", - "defaultMessage": "!!!Find in Page", - "file": "src/lib/Menu.js", - "start": { - "line": 68, - "column": 14 - }, - "end": { - "line": 71, - "column": 3 - } - }, - { - "id": "menu.edit.speech", - "defaultMessage": "!!!Speech", - "file": "src/lib/Menu.js", - "start": { - "line": 72, - "column": 10 - }, - "end": { - "line": 75, - "column": 3 - } - }, - { - "id": "menu.edit.startSpeaking", - "defaultMessage": "!!!Start Speaking", - "file": "src/lib/Menu.js", - "start": { - "line": 76, - "column": 17 - }, - "end": { - "line": 79, - "column": 3 - } - }, - { - "id": "menu.edit.stopSpeaking", - "defaultMessage": "!!!Stop Speaking", - "file": "src/lib/Menu.js", - "start": { - "line": 80, - "column": 16 - }, - "end": { - "line": 83, - "column": 3 - } - }, - { - "id": "menu.edit.startDictation", - "defaultMessage": "!!!Start Dictation", - "file": "src/lib/Menu.js", - "start": { - "line": 84, - "column": 18 - }, - "end": { - "line": 87, - "column": 3 - } - }, - { - "id": "menu.edit.emojiSymbols", - "defaultMessage": "!!!Emoji & Symbols", - "file": "src/lib/Menu.js", - "start": { - "line": 88, - "column": 16 - }, - "end": { - "line": 91, - "column": 3 - } - }, - { - "id": "menu.view.openQuickSwitch", - "defaultMessage": "!!!Open Quick Switch", - "file": "src/lib/Menu.js", - "start": { - "line": 92, - "column": 19 - }, - "end": { - "line": 95, - "column": 3 - } - }, - { - "id": "menu.view.back", - "defaultMessage": "!!!Back", - "file": "src/lib/Menu.js", - "start": { - "line": 96, - "column": 8 - }, - "end": { - "line": 99, - "column": 3 - } - }, - { - "id": "menu.view.forward", - "defaultMessage": "!!!Forward", - "file": "src/lib/Menu.js", - "start": { - "line": 100, - "column": 11 - }, - "end": { - "line": 103, - "column": 3 - } - }, - { - "id": "menu.view.resetZoom", - "defaultMessage": "!!!Actual Size", - "file": "src/lib/Menu.js", - "start": { - "line": 104, - "column": 13 - }, - "end": { - "line": 107, - "column": 3 - } - }, - { - "id": "menu.view.zoomIn", - "defaultMessage": "!!!Zoom In", - "file": "src/lib/Menu.js", - "start": { - "line": 108, - "column": 10 - }, - "end": { - "line": 111, - "column": 3 - } - }, - { - "id": "menu.view.zoomOut", - "defaultMessage": "!!!Zoom Out", - "file": "src/lib/Menu.js", - "start": { - "line": 112, - "column": 11 - }, - "end": { - "line": 115, - "column": 3 - } - }, - { - "id": "menu.view.toggleFullScreen", - "defaultMessage": "!!!Toggle Full Screen", - "file": "src/lib/Menu.js", - "start": { - "line": 116, - "column": 20 - }, - "end": { - "line": 119, - "column": 3 - } - }, - { - "id": "menu.view.toggleDarkMode", - "defaultMessage": "!!!Toggle Dark Mode", - "file": "src/lib/Menu.js", - "start": { - "line": 120, - "column": 18 - }, - "end": { - "line": 123, - "column": 3 - } - }, - { - "id": "menu.view.toggleDevTools", - "defaultMessage": "!!!Toggle Developer Tools", - "file": "src/lib/Menu.js", - "start": { - "line": 124, - "column": 18 - }, - "end": { - "line": 127, - "column": 3 - } - }, - { - "id": "menu.view.toggleTodosDevTools", - "defaultMessage": "!!!Toggle Todos Developer Tools", - "file": "src/lib/Menu.js", - "start": { - "line": 128, - "column": 23 - }, - "end": { - "line": 131, - "column": 3 - } - }, - { - "id": "menu.view.toggleServiceDevTools", - "defaultMessage": "!!!Toggle Service Developer Tools", - "file": "src/lib/Menu.js", - "start": { - "line": 132, - "column": 25 - }, - "end": { - "line": 135, - "column": 3 - } - }, - { - "id": "menu.view.reloadService", - "defaultMessage": "!!!Reload Service", - "file": "src/lib/Menu.js", - "start": { - "line": 136, - "column": 17 - }, - "end": { - "line": 139, - "column": 3 - } - }, - { - "id": "menu.view.reloadFerdi", - "defaultMessage": "!!!Reload Ferdi", - "file": "src/lib/Menu.js", - "start": { - "line": 140, - "column": 15 - }, - "end": { - "line": 143, - "column": 3 - } - }, - { - "id": "menu.view.lockFerdi", - "defaultMessage": "!!!Lock Ferdi", - "file": "src/lib/Menu.js", - "start": { - "line": 144, - "column": 13 - }, - "end": { - "line": 147, - "column": 3 - } - }, - { - "id": "menu.view.reloadTodos", - "defaultMessage": "!!!Reload ToDos", - "file": "src/lib/Menu.js", - "start": { - "line": 148, - "column": 15 - }, - "end": { - "line": 151, - "column": 3 - } - }, - { - "id": "menu.window.minimize", - "defaultMessage": "!!!Minimize", - "file": "src/lib/Menu.js", - "start": { - "line": 152, - "column": 12 - }, - "end": { - "line": 155, - "column": 3 - } - }, - { - "id": "menu.window.close", - "defaultMessage": "!!!Close", - "file": "src/lib/Menu.js", - "start": { - "line": 156, - "column": 9 - }, - "end": { - "line": 159, - "column": 3 - } - }, - { - "id": "menu.help.learnMore", - "defaultMessage": "!!!Learn More", - "file": "src/lib/Menu.js", - "start": { - "line": 160, - "column": 13 - }, - "end": { - "line": 163, - "column": 3 - } - }, - { - "id": "menu.help.changelog", - "defaultMessage": "!!!Changelog", - "file": "src/lib/Menu.js", - "start": { - "line": 164, - "column": 13 - }, - "end": { - "line": 167, - "column": 3 - } - }, - { - "id": "menu.help.importExportData", - "defaultMessage": "!!!Import/Export Configuration Data", - "file": "src/lib/Menu.js", - "start": { - "line": 168, - "column": 20 - }, - "end": { - "line": 171, - "column": 3 - } - }, - { - "id": "menu.help.support", - "defaultMessage": "!!!Support", - "file": "src/lib/Menu.js", - "start": { - "line": 172, - "column": 11 - }, - "end": { - "line": 175, - "column": 3 - } - }, - { - "id": "menu.help.debugInfo", - "defaultMessage": "!!!Copy Debug Information", - "file": "src/lib/Menu.js", - "start": { - "line": 176, - "column": 13 - }, - "end": { - "line": 179, - "column": 3 - } - }, - { - "id": "menu.help.publishDebugInfo", - "defaultMessage": "!!!Publish Debug Information", - "file": "src/lib/Menu.js", - "start": { - "line": 180, - "column": 20 - }, - "end": { - "line": 183, - "column": 3 - } - }, - { - "id": "menu.help.debugInfoCopiedHeadline", - "defaultMessage": "!!!Ferdi Debug Information", - "file": "src/lib/Menu.js", - "start": { - "line": 184, - "column": 27 - }, - "end": { - "line": 187, - "column": 3 - } - }, - { - "id": "menu.help.debugInfoCopiedBody", - "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", - "file": "src/lib/Menu.js", - "start": { - "line": 188, - "column": 23 - }, - "end": { - "line": 192, - "column": 3 - } - }, - { - "id": "locked.touchId", - "defaultMessage": "!!!Unlock with Touch ID", - "file": "src/lib/Menu.js", - "start": { - "line": 193, - "column": 11 - }, - "end": { - "line": 196, - "column": 3 - } - }, - { - "id": "locked.touchIdPrompt", - "defaultMessage": "!!!unlock via Touch ID", - "file": "src/lib/Menu.js", - "start": { - "line": 197, - "column": 17 - }, - "end": { - "line": 200, - "column": 3 - } - }, - { - "id": "menu.help.tos", - "defaultMessage": "!!!Terms of Service", - "file": "src/lib/Menu.js", - "start": { - "line": 201, - "column": 7 - }, - "end": { - "line": 204, - "column": 3 - } - }, - { - "id": "menu.help.privacy", - "defaultMessage": "!!!Privacy Statement", - "file": "src/lib/Menu.js", - "start": { - "line": 205, - "column": 11 - }, - "end": { - "line": 208, - "column": 3 - } - }, - { - "id": "menu.file", - "defaultMessage": "!!!File", - "file": "src/lib/Menu.js", - "start": { - "line": 209, - "column": 8 - }, - "end": { - "line": 212, - "column": 3 - } - }, - { - "id": "menu.view", - "defaultMessage": "!!!View", - "file": "src/lib/Menu.js", - "start": { - "line": 213, - "column": 8 - }, - "end": { - "line": 216, - "column": 3 - } - }, - { - "id": "menu.services", - "defaultMessage": "!!!Services", - "file": "src/lib/Menu.js", - "start": { - "line": 217, - "column": 12 - }, - "end": { - "line": 220, - "column": 3 - } - }, - { - "id": "menu.window", - "defaultMessage": "!!!Window", - "file": "src/lib/Menu.js", - "start": { - "line": 221, - "column": 10 - }, - "end": { - "line": 224, - "column": 3 - } - }, - { - "id": "menu.help", - "defaultMessage": "!!!Help", - "file": "src/lib/Menu.js", - "start": { - "line": 225, - "column": 8 - }, - "end": { - "line": 228, - "column": 3 - } - }, - { - "id": "menu.app.about", - "defaultMessage": "!!!About Ferdi", - "file": "src/lib/Menu.js", - "start": { - "line": 229, - "column": 9 - }, - "end": { - "line": 232, - "column": 3 - } - }, - { - "id": "menu.app.checkForUpdates", - "defaultMessage": "!!!Check for updates", - "file": "src/lib/Menu.js", - "start": { - "line": 233, - "column": 19 - }, - "end": { - "line": 236, - "column": 3 - } - }, - { - "id": "menu.app.hide", - "defaultMessage": "!!!Hide", - "file": "src/lib/Menu.js", - "start": { - "line": 237, - "column": 8 - }, - "end": { - "line": 240, - "column": 3 - } - }, - { - "id": "menu.app.hideOthers", - "defaultMessage": "!!!Hide Others", - "file": "src/lib/Menu.js", - "start": { - "line": 241, - "column": 14 - }, - "end": { - "line": 244, - "column": 3 - } - }, - { - "id": "menu.app.unhide", - "defaultMessage": "!!!Unhide", - "file": "src/lib/Menu.js", - "start": { - "line": 245, - "column": 10 - }, - "end": { - "line": 248, - "column": 3 - } - }, - { - "id": "menu.app.autohideMenuBar", - "defaultMessage": "!!!Auto-hide menu bar", - "file": "src/lib/Menu.js", - "start": { - "line": 249, - "column": 19 - }, - "end": { - "line": 252, - "column": 3 - } - }, - { - "id": "menu.services.addNewService", - "defaultMessage": "!!!Add New Service...", - "file": "src/lib/Menu.js", - "start": { - "line": 253, - "column": 17 - }, - "end": { - "line": 256, - "column": 3 - } - }, - { - "id": "menu.workspaces.addNewWorkspace", - "defaultMessage": "!!!Add New Workspace...", - "file": "src/lib/Menu.js", - "start": { - "line": 257, - "column": 19 - }, - "end": { - "line": 260, - "column": 3 - } - }, - { - "id": "menu.workspaces.openWorkspaceDrawer", - "defaultMessage": "!!!Open workspace drawer", - "file": "src/lib/Menu.js", - "start": { - "line": 261, - "column": 23 - }, - "end": { - "line": 264, - "column": 3 - } - }, - { - "id": "menu.workspaces.closeWorkspaceDrawer", - "defaultMessage": "!!!Close workspace drawer", - "file": "src/lib/Menu.js", - "start": { - "line": 265, - "column": 24 - }, - "end": { - "line": 268, - "column": 3 - } - }, - { - "id": "menu.services.setNextServiceActive", - "defaultMessage": "!!!Activate next service...", - "file": "src/lib/Menu.js", - "start": { - "line": 269, - "column": 23 - }, - "end": { - "line": 272, - "column": 3 - } - }, - { - "id": "menu.services.activatePreviousService", - "defaultMessage": "!!!Activate previous service...", - "file": "src/lib/Menu.js", - "start": { - "line": 273, - "column": 27 - }, - "end": { - "line": 276, - "column": 3 - } - }, - { - "id": "sidebar.muteApp", - "defaultMessage": "!!!Disable notifications & audio", - "file": "src/lib/Menu.js", - "start": { - "line": 277, - "column": 11 - }, - "end": { - "line": 280, - "column": 3 - } - }, - { - "id": "sidebar.unmuteApp", - "defaultMessage": "!!!Enable notifications & audio", - "file": "src/lib/Menu.js", - "start": { - "line": 281, - "column": 13 - }, - "end": { - "line": 284, - "column": 3 - } - }, - { - "id": "menu.workspaces", - "defaultMessage": "!!!Workspaces", - "file": "src/lib/Menu.js", - "start": { - "line": 285, - "column": 14 - }, - "end": { - "line": 288, - "column": 3 - } - }, - { - "id": "menu.workspaces.defaultWorkspace", - "defaultMessage": "!!!Default", - "file": "src/lib/Menu.js", - "start": { - "line": 289, - "column": 20 - }, - "end": { - "line": 292, - "column": 3 - } - }, - { - "id": "menu.todos", - "defaultMessage": "!!!Todos", - "file": "src/lib/Menu.js", - "start": { - "line": 293, - "column": 9 - }, - "end": { - "line": 296, - "column": 3 - } - }, - { - "id": "menu.Todoss.openTodosDrawer", - "defaultMessage": "!!!Open Todos drawer", - "file": "src/lib/Menu.js", - "start": { - "line": 297, - "column": 19 - }, - "end": { - "line": 300, - "column": 3 - } - }, - { - "id": "menu.Todoss.closeTodosDrawer", - "defaultMessage": "!!!Close Todos drawer", - "file": "src/lib/Menu.js", - "start": { - "line": 301, - "column": 20 - }, - "end": { - "line": 304, - "column": 3 - } - }, - { - "id": "menu.todos.enableTodos", - "defaultMessage": "!!!Enable Todos", - "file": "src/lib/Menu.js", - "start": { - "line": 305, - "column": 15 - }, - "end": { - "line": 308, - "column": 3 - } - }, - { - "id": "menu.services.goHome", - "defaultMessage": "!!!Home", - "file": "src/lib/Menu.js", - "start": { - "line": 309, - "column": 17 - }, - "end": { - "line": 312, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/lib/Menu.js b/src/lib/Menu.js index 5dae56544..d7f3dbecf 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -31,284 +31,283 @@ import globalMessages from '../i18n/globalMessages'; const menuItems = defineMessages({ edit: { id: 'menu.edit', - defaultMessage: '!!!Edit', + defaultMessage: 'Edit', }, undo: { id: 'menu.edit.undo', - defaultMessage: '!!!Undo', + defaultMessage: 'Undo', }, redo: { id: 'menu.edit.redo', - defaultMessage: '!!!Redo', + defaultMessage: 'Redo', }, cut: { id: 'menu.edit.cut', - defaultMessage: '!!!Cut', + defaultMessage: 'Cut', }, copy: { id: 'menu.edit.copy', - defaultMessage: '!!!Copy', + defaultMessage: 'Copy', }, paste: { id: 'menu.edit.paste', - defaultMessage: '!!!Paste', + defaultMessage: 'Paste', }, pasteAndMatchStyle: { id: 'menu.edit.pasteAndMatchStyle', - defaultMessage: '!!!Paste And Match Style', + defaultMessage: 'Paste And Match Style', }, delete: { id: 'menu.edit.delete', - defaultMessage: '!!!Delete', + defaultMessage: 'Delete', }, selectAll: { id: 'menu.edit.selectAll', - defaultMessage: '!!!Select All', + defaultMessage: 'Select All', }, findInPage: { id: 'menu.edit.findInPage', - defaultMessage: '!!!Find in Page', + defaultMessage: 'Find in Page', }, speech: { id: 'menu.edit.speech', - defaultMessage: '!!!Speech', + defaultMessage: 'Speech', }, startSpeaking: { id: 'menu.edit.startSpeaking', - defaultMessage: '!!!Start Speaking', + defaultMessage: 'Start Speaking', }, stopSpeaking: { id: 'menu.edit.stopSpeaking', - defaultMessage: '!!!Stop Speaking', + defaultMessage: 'Stop Speaking', }, startDictation: { id: 'menu.edit.startDictation', - defaultMessage: '!!!Start Dictation', + defaultMessage: 'Start Dictation', }, emojiSymbols: { id: 'menu.edit.emojiSymbols', - defaultMessage: '!!!Emoji & Symbols', + defaultMessage: 'Emoji & Symbols', }, openQuickSwitch: { id: 'menu.view.openQuickSwitch', - defaultMessage: '!!!Open Quick Switch', + defaultMessage: 'Open Quick Switch', }, back: { id: 'menu.view.back', - defaultMessage: '!!!Back', + defaultMessage: 'Back', }, forward: { id: 'menu.view.forward', - defaultMessage: '!!!Forward', + defaultMessage: 'Forward', }, resetZoom: { id: 'menu.view.resetZoom', - defaultMessage: '!!!Actual Size', + defaultMessage: 'Actual Size', }, zoomIn: { id: 'menu.view.zoomIn', - defaultMessage: '!!!Zoom In', + defaultMessage: 'Zoom In', }, zoomOut: { id: 'menu.view.zoomOut', - defaultMessage: '!!!Zoom Out', + defaultMessage: 'Zoom Out', }, toggleFullScreen: { id: 'menu.view.toggleFullScreen', - defaultMessage: '!!!Toggle Full Screen', + defaultMessage: 'Toggle Full Screen', }, toggleDarkMode: { id: 'menu.view.toggleDarkMode', - defaultMessage: '!!!Toggle Dark Mode', + defaultMessage: 'Toggle Dark Mode', }, toggleDevTools: { id: 'menu.view.toggleDevTools', - defaultMessage: '!!!Toggle Developer Tools', + defaultMessage: 'Toggle Developer Tools', }, toggleTodosDevTools: { id: 'menu.view.toggleTodosDevTools', - defaultMessage: '!!!Toggle Todos Developer Tools', + defaultMessage: 'Toggle Todos Developer Tools', }, toggleServiceDevTools: { id: 'menu.view.toggleServiceDevTools', - defaultMessage: '!!!Toggle Service Developer Tools', + defaultMessage: 'Toggle Service Developer Tools', }, reloadService: { id: 'menu.view.reloadService', - defaultMessage: '!!!Reload Service', + defaultMessage: 'Reload Service', }, reloadFerdi: { id: 'menu.view.reloadFerdi', - defaultMessage: '!!!Reload Ferdi', + defaultMessage: 'Reload Ferdi', }, lockFerdi: { id: 'menu.view.lockFerdi', - defaultMessage: '!!!Lock Ferdi', + defaultMessage: 'Lock Ferdi', }, reloadTodos: { id: 'menu.view.reloadTodos', - defaultMessage: '!!!Reload ToDos', + defaultMessage: 'Reload ToDos', }, minimize: { id: 'menu.window.minimize', - defaultMessage: '!!!Minimize', + defaultMessage: 'Minimize', }, close: { id: 'menu.window.close', - defaultMessage: '!!!Close', + defaultMessage: 'Close', }, learnMore: { id: 'menu.help.learnMore', - defaultMessage: '!!!Learn More', + defaultMessage: 'Learn More', }, changelog: { id: 'menu.help.changelog', - defaultMessage: '!!!Changelog', + defaultMessage: 'Changelog', }, importExportData: { id: 'menu.help.importExportData', - defaultMessage: '!!!Import/Export Configuration Data', + defaultMessage: 'Import/Export Configuration Data', }, support: { id: 'menu.help.support', - defaultMessage: '!!!Support', + defaultMessage: 'Support', }, debugInfo: { id: 'menu.help.debugInfo', - defaultMessage: '!!!Copy Debug Information', + defaultMessage: 'Copy Debug Information', }, publishDebugInfo: { id: 'menu.help.publishDebugInfo', - defaultMessage: '!!!Publish Debug Information', + defaultMessage: 'Publish Debug Information', }, debugInfoCopiedHeadline: { id: 'menu.help.debugInfoCopiedHeadline', - defaultMessage: '!!!Ferdi Debug Information', + defaultMessage: 'Ferdi Debug Information', }, debugInfoCopiedBody: { id: 'menu.help.debugInfoCopiedBody', - defaultMessage: - '!!!Your Debug Information has been copied to your clipboard.', + defaultMessage: 'Your Debug Information has been copied to your clipboard.', }, touchId: { id: 'locked.touchId', - defaultMessage: '!!!Unlock with Touch ID', + defaultMessage: 'Unlock with Touch ID', }, touchIdPrompt: { id: 'locked.touchIdPrompt', - defaultMessage: '!!!unlock via Touch ID', + defaultMessage: 'unlock via Touch ID', }, tos: { id: 'menu.help.tos', - defaultMessage: '!!!Terms of Service', + defaultMessage: 'Terms of Service', }, privacy: { id: 'menu.help.privacy', - defaultMessage: '!!!Privacy Statement', + defaultMessage: 'Privacy Statement', }, file: { id: 'menu.file', - defaultMessage: '!!!File', + defaultMessage: 'File', }, view: { id: 'menu.view', - defaultMessage: '!!!View', + defaultMessage: 'View', }, services: { id: 'menu.services', - defaultMessage: '!!!Services', + defaultMessage: 'Services', }, window: { id: 'menu.window', - defaultMessage: '!!!Window', + defaultMessage: 'Window', }, help: { id: 'menu.help', - defaultMessage: '!!!Help', + defaultMessage: 'Help', }, about: { id: 'menu.app.about', - defaultMessage: '!!!About Ferdi', + defaultMessage: 'About Ferdi', }, checkForUpdates: { id: 'menu.app.checkForUpdates', - defaultMessage: '!!!Check for updates', + defaultMessage: 'Check for updates', }, hide: { id: 'menu.app.hide', - defaultMessage: '!!!Hide', + defaultMessage: 'Hide', }, hideOthers: { id: 'menu.app.hideOthers', - defaultMessage: '!!!Hide Others', + defaultMessage: 'Hide Others', }, unhide: { id: 'menu.app.unhide', - defaultMessage: '!!!Unhide', + defaultMessage: 'Unhide', }, autohideMenuBar: { id: 'menu.app.autohideMenuBar', - defaultMessage: '!!!Auto-hide menu bar', + defaultMessage: 'Auto-hide menu bar', }, addNewService: { id: 'menu.services.addNewService', - defaultMessage: '!!!Add New Service...', + defaultMessage: 'Add New Service...', }, addNewWorkspace: { id: 'menu.workspaces.addNewWorkspace', - defaultMessage: '!!!Add New Workspace...', + defaultMessage: 'Add New Workspace...', }, openWorkspaceDrawer: { id: 'menu.workspaces.openWorkspaceDrawer', - defaultMessage: '!!!Open workspace drawer', + defaultMessage: 'Open workspace drawer', }, closeWorkspaceDrawer: { id: 'menu.workspaces.closeWorkspaceDrawer', - defaultMessage: '!!!Close workspace drawer', + defaultMessage: 'Close workspace drawer', }, activateNextService: { id: 'menu.services.setNextServiceActive', - defaultMessage: '!!!Activate next service...', + defaultMessage: 'Activate next service...', }, activatePreviousService: { id: 'menu.services.activatePreviousService', - defaultMessage: '!!!Activate previous service...', + defaultMessage: 'Activate previous service...', }, muteApp: { id: 'sidebar.muteApp', - defaultMessage: '!!!Disable notifications & audio', + defaultMessage: 'Disable notifications & audio', }, unmuteApp: { id: 'sidebar.unmuteApp', - defaultMessage: '!!!Enable notifications & audio', + defaultMessage: 'Enable notifications & audio', }, workspaces: { id: 'menu.workspaces', - defaultMessage: '!!!Workspaces', + defaultMessage: 'Workspaces', }, defaultWorkspace: { id: 'menu.workspaces.defaultWorkspace', - defaultMessage: '!!!Default', + defaultMessage: 'Default', }, todos: { id: 'menu.todos', - defaultMessage: '!!!Todos', + defaultMessage: 'Todos', }, openTodosDrawer: { id: 'menu.Todoss.openTodosDrawer', - defaultMessage: '!!!Open Todos drawer', + defaultMessage: 'Open Todos drawer', }, closeTodosDrawer: { id: 'menu.Todoss.closeTodosDrawer', - defaultMessage: '!!!Close Todos drawer', + defaultMessage: 'Close Todos drawer', }, enableTodos: { id: 'menu.todos.enableTodos', - defaultMessage: '!!!Enable Todos', + defaultMessage: 'Enable Todos', }, serviceGoHome: { id: 'menu.services.goHome', - defaultMessage: '!!!Home', + defaultMessage: 'Home', }, }); @@ -557,7 +556,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, ]; -export default class FranzMenu { +class FranzMenu { @observable currentTemplate = []; constructor(stores, actions) { @@ -1126,3 +1125,5 @@ export default class FranzMenu { return name; } } + +export default FranzMenu; diff --git a/src/routes.js b/src/routes.js index 4d32a59e0..502ea86f5 100644 --- a/src/routes.js +++ b/src/routes.js @@ -30,7 +30,6 @@ import { WORKSPACES_ROUTES } from './features/workspaces/constants'; import SettingsStore from './stores/SettingsStore'; -export default @inject('stores', 'actions') @observer class Routes extends Component { @@ -95,3 +94,5 @@ Routes.wrappedComponent.propTypes = { }).isRequired, history: PropTypes.any.isRequired, }; + +export default Routes; -- cgit v1.2.3-70-g09d2 From a7ddfa383f7bf07c4ad7c739671c4b6a5fd2352a Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Mon, 13 Sep 2021 17:35:01 +0200 Subject: chore: update various defaultMessages (#1925) --- src/components/settings/account/AccountDashboard.js | 4 ++-- src/components/settings/settings/EditSettingsForm.js | 3 +-- .../settings/supportFerdi/SupportFerdiDashboard.js | 2 +- src/components/settings/team/TeamDashboard.js | 2 +- src/features/workspaces/components/WorkspaceDrawer.js | 2 +- src/i18n/locales/en-US.json | 12 ++++++------ 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 933d47d12..8e9e668d0 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js @@ -17,7 +17,7 @@ const messages = defineMessages({ }, headlineDangerZone: { id: 'settings.account.headlineDangerZone', - defaultMessage: '!!Danger Zone', + defaultMessage: 'Danger Zone', }, accountEditButton: { id: 'settings.account.account.editButton', @@ -25,7 +25,7 @@ const messages = defineMessages({ }, invoicesButton: { id: 'settings.account.headlineInvoices', - defaultMessage: '!!Invoices', + defaultMessage: 'Invoices', }, userInfoRequestFailed: { id: 'settings.account.userInfoRequestFailed', diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 0a468e342..f7e0fdd6f 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -47,8 +47,7 @@ const messages = defineMessages({ }, todoServerInfo: { id: 'settings.app.todoServerInfo', - defaultMessage: - 'This server will be used for the "Franz Todo" feature. (default: https://app.franztodos.com)', + defaultMessage: 'This server will be used for the "Ferdi Todo" feature.', }, lockedPassword: { id: 'settings.app.lockedPassword', diff --git a/src/components/settings/supportFerdi/SupportFerdiDashboard.js b/src/components/settings/supportFerdi/SupportFerdiDashboard.js index c4d4bd72f..64ffe8692 100644 --- a/src/components/settings/supportFerdi/SupportFerdiDashboard.js +++ b/src/components/settings/supportFerdi/SupportFerdiDashboard.js @@ -19,7 +19,7 @@ const messages = defineMessages({ }, textListContributors: { id: 'settings.supportFerdi.textListContributors', - defaultMessage: 'Full list of contributor', + defaultMessage: 'Full list of contributors', }, textListContributorsHere: { id: 'settings.supportFerdi.textListContributorsHere', diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js index 176365fa8..06f244997 100644 --- a/src/components/settings/team/TeamDashboard.js +++ b/src/components/settings/team/TeamDashboard.js @@ -23,7 +23,7 @@ const messages = defineMessages({ intro: { id: 'settings.team.intro', defaultMessage: - 'Your are currently using Franz Servers, which is why you have access to Team Management.', + 'You are currently using Franz Servers, which is why you have access to Team Management.', }, copy: { id: 'settings.team.copy', diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js index 03a829a64..2f57e34a2 100644 --- a/src/features/workspaces/components/WorkspaceDrawer.js +++ b/src/features/workspaces/components/WorkspaceDrawer.js @@ -30,7 +30,7 @@ const messages = defineMessages({ }, addNewWorkspaceLabel: { id: 'workspaceDrawer.addNewWorkspaceLabel', - defaultMessage: 'add new workspace', + defaultMessage: 'Add new workspace', }, }); diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 158022419..19adaaf6a 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -189,8 +189,8 @@ "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "settings.account.headline": "Account", "settings.account.headlineAccount": "Account Information", - "settings.account.headlineDangerZone": "!!Danger Zone", - "settings.account.headlineInvoices": "!!Invoices", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", "settings.account.headlinePassword": "Change Password", "settings.account.headlineProfile": "Update Profile", "settings.account.successInfo": "Your changes have been saved", @@ -274,7 +274,7 @@ "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.", "settings.app.subheadlineCache": "Cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Help us to translate Ferdi into your language.", "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", "settings.app.updateStatusAvailable": "Update available, downloading...", @@ -366,7 +366,7 @@ "settings.supportFerdi.textDonationAnd": "and", "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", "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors", - "settings.supportFerdi.textListContributors": "Full list of contributor", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "here", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", @@ -376,7 +376,7 @@ "settings.team.contentHeadline": "Franz Team Management", "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.", "settings.team.headline": "Team", - "settings.team.intro": "Your are currently using Franz Servers, which is why you have access to Team Management.", + "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", "settings.team.manageAction": "Manage your Team on meetfranz.com", "settings.team.teamsUnavailable": "Teams are unavailable", "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.", @@ -453,7 +453,7 @@ "webControls.reload": "Reload", "welcome.loginButton": "Login to your account", "welcome.signupButton": "Create a free account", - "workspaceDrawer.addNewWorkspaceLabel": "add new workspace", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "All services", "workspaceDrawer.headline": "Workspaces", "workspaceDrawer.item.contextMenuEdit": "edit", -- cgit v1.2.3-70-g09d2 From 20fa6f3c8cf25200c8a7cd966e9ce0c9ee979a15 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 14 Sep 2021 00:20:41 +0000 Subject: Update submodules, browserslist data updates and linter fixes [skip ci] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 56dd732c2..55a46dbb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10121,9 +10121,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001256", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001256.tgz", - "integrity": "sha512-QirrvMLmB4txNnxiaG/xbm6FSzv9LqOZ3Jp9VtCYb3oPIfCHpr/oGn38pFq0udwlkctvXQgPthaXqJ76DaYGnA==", + "version": "1.0.30001257", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz", + "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==", "dev": true }, "caseless": { -- cgit v1.2.3-70-g09d2 From 1612c2abc4a9c1423388510b7cffb256ce811493 Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 05:57:08 +0530 Subject: Revert "refactor: reuse method from the core electron framework for the 'About' dialog." This reverts commit af56a07359400e53cb3096e321bf6ee1bae12068. Fixes #1928 and #1929 --- src/environment.js | 16 ++++++++++++++++ src/index.js | 19 ++----------------- src/lib/Menu.js | 10 ++++++++-- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/environment.js b/src/environment.js index 9d7ffaf78..b30e3778d 100644 --- a/src/environment.js +++ b/src/environment.js @@ -5,6 +5,7 @@ import { is, api as electronApi } from 'electron-util'; import { DEFAULT_ACCENT_COLOR } from '@meetfranz/theme'; +import osName from 'os-name'; import { LIVE_FERDI_API, DEV_FRANZ_API, @@ -23,6 +24,7 @@ import { } from './config'; import { asarPath } from './helpers/asar-helpers'; +import * as buildInfo from './buildInfo.json'; // eslint-disable-line import/no-unresolved export const { app } = electronApi; export const ferdiVersion = app.getVersion(); @@ -171,3 +173,17 @@ export const DEFAULT_APP_SETTINGS = { alwaysShowWorkspaces: false, liftSingleInstanceLock: false, }; + +export function aboutAppDetails() { + return [ + `Version: ${ferdiVersion}`, + `Electron: ${electronVersion}`, + `Chrome: ${chromeVersion}`, + `Node.js: ${nodeVersion}`, + `Platform: ${osName()}`, + `Arch: ${process.arch}`, + `Build date: ${new Date(Number(buildInfo.timestamp))}`, + `Git SHA: ${buildInfo.gitHashShort}`, + `Git branch: ${buildInfo.gitBranch}`, + ].join('\n'); +} diff --git a/src/index.js b/src/index.js index 1f3510361..7f1f77b4e 100644 --- a/src/index.js +++ b/src/index.js @@ -10,7 +10,6 @@ import ms from 'ms'; require('@electron/remote/main').initialize(); -import osName from 'os-name'; import { DEFAULT_WINDOW_OPTIONS } from './config'; import { @@ -19,12 +18,9 @@ import { isMac, isWindows, isLinux, + aboutAppDetails, userDataRecipesPath, userDataPath, - ferdiVersion, - electronVersion, - chromeVersion, - nodeVersion, } from './environment'; import { ifUndefinedBoolean } from './jsUtils'; @@ -41,7 +37,6 @@ import './electron/exception'; import { asarPath } from './helpers/asar-helpers'; import { openExternalUrl } from './helpers/url-helpers'; import userAgent from './helpers/userAgent-helpers'; -import * as buildInfo from './buildInfo.json'; // eslint-disable-line import/no-unresolved const debug = require('debug')('Ferdi:App'); @@ -160,17 +155,7 @@ if (!retrieveSettingValue('enableGPUAcceleration', false)) { } app.setAboutPanelOptions({ - applicationVersion: [ - `Version: ${ferdiVersion}`, - `Electron: ${electronVersion}`, - `Chrome: ${chromeVersion}`, - `Node.js: ${nodeVersion}`, - `Platform: ${osName()}`, - `Arch: ${process.arch}`, - `Build date: ${new Date(Number(buildInfo.timestamp))}`, - `Git SHA: ${buildInfo.gitHashShort}`, - `Git branch: ${buildInfo.gitBranch}`, - ].join('\n'), + applicationVersion: aboutAppDetails(), version: '', }); diff --git a/src/lib/Menu.js b/src/lib/Menu.js index d7f3dbecf..623638d33 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -1,5 +1,5 @@ import { clipboard } from 'electron'; -import { app, Menu, systemPreferences } from '@electron/remote'; +import { app, Menu, dialog, systemPreferences } from '@electron/remote'; import { autorun, observable } from 'mobx'; import { defineMessages } from 'react-intl'; import { @@ -14,6 +14,7 @@ import { settingsShortcutKey, isLinux, isMac, + aboutAppDetails, lockFerdiShortcutKey, todosToggleShortcutKey, workspaceToggleShortcutKey, @@ -804,7 +805,12 @@ class FranzMenu { const about = { label: intl.formatMessage(menuItems.about), click: () => { - app.showAboutPanel(); + dialog.showMessageBox({ + type: 'info', + title: 'Franz Ferdinand', + message: 'Ferdi', + detail: aboutAppDetails(), + }); }, }; -- cgit v1.2.3-70-g09d2 From e36dcdf5030fd68b309735ba7ba1f949cc77a1ef Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 06:07:15 +0530 Subject: chore: updated changelog [skip ci] --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbf167d69..4b2a303f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +# [v5.6.3-nightly.1](https://github.com/getferdi/ferdi/compare/v5.6.3-nightly.0...v5.6.3-nightly.1) (2021-09-14) + +### Bug fixes + +- Revert "refactor: reuse method from the core electron framework for the `About` box (fixes #1928, #1929) 💖 @vraravam + +### Under the hood + +- chore: upgrade intl dependencies (#1920) 💖 @mhatvan +- chore: update various defaultMessages (#1925) 💖 @mhatvan + # [v5.6.2](https://github.com/getferdi/ferdi/compare/v5.6.1...v5.6.2) (2021-09-13) This is a hotfix for the 5.6.1 release, along with a couple of changes that were made over the weekend -- cgit v1.2.3-70-g09d2 From 742f271010e1cfb9d0f70dfdf26fa52d2766e861 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 14 Sep 2021 01:27:39 +0000 Subject: 5.6.3-nightly.1 [skip ci] --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55a46dbb0..2d3f1c897 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ferdi", - "version": "5.6.3-nightly.0", + "version": "5.6.3-nightly.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f95116218..dc802c767 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Ferdi", "desktopName": "ferdi.desktop", "appId": "com.kytwb.ferdi", - "version": "5.6.3-nightly.0", + "version": "5.6.3-nightly.1", "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", "copyright": "kytwb", "main": "index.js", -- cgit v1.2.3-70-g09d2 From 318153ec7b93dfb10011f8337a9dd7c658239335 Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Tue, 14 Sep 2021 09:00:12 +0200 Subject: fix: regression from intl upgrades (#1933) --- src/containers/auth/ChangeServerScreen.js | 2 ++ src/containers/auth/ImportScreen.js | 2 ++ src/containers/auth/LockedScreen.js | 2 ++ src/containers/auth/LoginScreen.js | 2 ++ src/containers/auth/PasswordScreen.js | 2 ++ src/containers/settings/InviteScreen.js | 2 ++ 6 files changed, 12 insertions(+) diff --git a/src/containers/auth/ChangeServerScreen.js b/src/containers/auth/ChangeServerScreen.js index 94fc98b61..a8910e7b1 100644 --- a/src/containers/auth/ChangeServerScreen.js +++ b/src/containers/auth/ChangeServerScreen.js @@ -43,3 +43,5 @@ ChangeServerScreen.wrappedComponent.propTypes = { router: PropTypes.instanceOf(RouterStore).isRequired, }).isRequired, }; + +export default ChangeServerScreen; diff --git a/src/containers/auth/ImportScreen.js b/src/containers/auth/ImportScreen.js index ff2854f6e..ce786bdb8 100644 --- a/src/containers/auth/ImportScreen.js +++ b/src/containers/auth/ImportScreen.js @@ -35,3 +35,5 @@ ImportScreen.wrappedComponent.propTypes = { router: PropTypes.instanceOf(RouterStore).isRequired, }).isRequired, }; + +export default ImportScreen; diff --git a/src/containers/auth/LockedScreen.js b/src/containers/auth/LockedScreen.js index 87205c4b9..a49549731 100644 --- a/src/containers/auth/LockedScreen.js +++ b/src/containers/auth/LockedScreen.js @@ -85,3 +85,5 @@ LockedScreen.wrappedComponent.propTypes = { user: PropTypes.instanceOf(UserStore).isRequired, }).isRequired, }; + +export default LockedScreen; diff --git a/src/containers/auth/LoginScreen.js b/src/containers/auth/LoginScreen.js index d24eb1d22..cab73316b 100644 --- a/src/containers/auth/LoginScreen.js +++ b/src/containers/auth/LoginScreen.js @@ -40,3 +40,5 @@ LoginScreen.wrappedComponent.propTypes = { user: PropTypes.instanceOf(UserStore).isRequired, }).isRequired, }; + +export default LoginScreen; diff --git a/src/containers/auth/PasswordScreen.js b/src/containers/auth/PasswordScreen.js index 47f6dfd01..86a746b9b 100644 --- a/src/containers/auth/PasswordScreen.js +++ b/src/containers/auth/PasswordScreen.js @@ -30,3 +30,5 @@ PasswordScreen.wrappedComponent.propTypes = { user: PropTypes.instanceOf(UserStore).isRequired, }).isRequired, }; + +export default PasswordScreen; diff --git a/src/containers/settings/InviteScreen.js b/src/containers/settings/InviteScreen.js index f17f6390c..bf393f42f 100644 --- a/src/containers/settings/InviteScreen.js +++ b/src/containers/settings/InviteScreen.js @@ -40,3 +40,5 @@ InviteScreen.wrappedComponent.propTypes = { user: PropTypes.instanceOf(UserStore).isRequired, }).isRequired, }; + +export default InviteScreen; -- cgit v1.2.3-70-g09d2 From 24bd1acf2b9e961a9639fab596143bf8d812379f Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 06:07:15 +0530 Subject: chore: Upgraded 'electron' to '13.4.0' --- CHANGELOG.md | 4 ++++ README.md | 2 +- package-lock.json | 12 ++++++------ package.json | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b2a303f6..606fd3f7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # [v5.6.3-nightly.1](https://github.com/getferdi/ferdi/compare/v5.6.3-nightly.0...v5.6.3-nightly.1) (2021-09-14) +### Features + +- Upgrade to [electron 13.4.0](https://github.com/electron/electron/releases/tag/v13.4.0) 💖 @vraravam + ### Bug fixes - Revert "refactor: reuse method from the core electron framework for the `About` box (fixes #1928, #1929) 💖 @vraravam diff --git a/README.md b/README.md index d101347d9..503723c1c 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ If you use an AUR Helper e.g. yay, simply install it via `yay -S ferdi`. ### Adds internal changes -- [x] Upgrades to Electron 13.3.0 +- [x] Upgrades to Electron 13.4.0 - [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size - [x] Minifies build files to improve app size - [x] Adds "npm run prepare-code" command for development to lint and beautify code diff --git a/package-lock.json b/package-lock.json index 2d3f1c897..509e5ca94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12993,9 +12993,9 @@ } }, "electron": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", - "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.4.0.tgz", + "integrity": "sha512-KJGWS2qa0xZXIMPMDUNkRVO8/JxRd4+M0ejYYOzu2LIQ5ijecPzNuNR9nvDkml9XyyRBzu975FkhJcwD17ietQ==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -16112,9 +16112,9 @@ }, "dependencies": { "core-js": { - "version": "3.16.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.4.tgz", - "integrity": "sha512-Tq4GVE6XCjE+hcyW6hPy0ofN3hwtLudz5ZRdrlCnsnD/xkm/PWQRudzYHiKgZKUcefV6Q57fhDHjZHJP5dpfSg==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.3.tgz", + "integrity": "sha512-lyvajs+wd8N1hXfzob1LdOCCHFU4bGMbqqmLn1Q4QlCpDqWPpGf+p0nj+LNrvDDG33j0hZXw2nsvvVpHysxyNw==", "dev": true, "optional": true } diff --git a/package.json b/package.json index dc802c767..eecddf0b4 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "cross-env": "7.0.3", "cz-conventional-changelog": "3.3.0", "dotenv": "10.0.0", - "electron": "13.3.0", + "electron": "13.4.0", "electron-builder": "22.12.1", "electron-notarize": "1.1.0", "eslint": "7.32.0", -- cgit v1.2.3-70-g09d2 From a34c5d4f5949172bac425105de1c76f6dfc5e939 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 14 Sep 2021 07:21:34 +0000 Subject: 5.6.3-nightly.2 [skip ci] --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 509e5ca94..9d988e332 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ferdi", - "version": "5.6.3-nightly.1", + "version": "5.6.3-nightly.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index eecddf0b4..638dca627 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Ferdi", "desktopName": "ferdi.desktop", "appId": "com.kytwb.ferdi", - "version": "5.6.3-nightly.1", + "version": "5.6.3-nightly.2", "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", "copyright": "kytwb", "main": "index.js", -- cgit v1.2.3-70-g09d2 From 96a9086360fd0450a8f9e74ff4d825f453f162cc Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 13:13:42 +0530 Subject: docs: updated Changelog [skip ci] --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 606fd3f7d..4cdab88fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# [v5.6.3-nightly.1](https://github.com/getferdi/ferdi/compare/v5.6.3-nightly.0...v5.6.3-nightly.1) (2021-09-14) +# [v5.6.3-nightly.2](https://github.com/getferdi/ferdi/compare/v5.6.3-nightly.0...v5.6.3-nightly.2) (2021-09-14) ### Features -- cgit v1.2.3-70-g09d2 From 30ca63d84ccf7fbc378ebf7101f09e10deaf0eaa Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 13:37:47 +0530 Subject: refactor: defensive programming to avoid javascript error for unread badges --- CHANGELOG.md | 8 +++++++- src/webview/badge.ts | 12 ++++++------ src/webview/lib/RecipeWebview.js | 12 ++++++------ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cdab88fd..0e6f12af9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ -# [v5.6.3-nightly.2](https://github.com/getferdi/ferdi/compare/v5.6.3-nightly.0...v5.6.3-nightly.2) (2021-09-14) +# [v5.6.3-nightly.3](https://github.com/getferdi/ferdi/compare/v5.6.3-nightly.2...v5.6.3-nightly.3) (2021-09-15) + +### Under the hood + +- Defensive programming to avoid javascript error for unread badges 💖 @vraravam + +# [v5.6.3-nightly.2](https://github.com/getferdi/ferdi/compare/v5.6.2...v5.6.3-nightly.2) (2021-09-14) ### Features diff --git a/src/webview/badge.ts b/src/webview/badge.ts index 753e90fef..024e29b3f 100644 --- a/src/webview/badge.ts +++ b/src/webview/badge.ts @@ -26,17 +26,17 @@ export class BadgeHandler { return Math.max(adjustedNumber, 0); } - setBadge(direct: string | number, indirect: string | number) { - if (this.countCache.direct.toString() === direct.toString() - && this.countCache.indirect.toString() === indirect.toString()) { - return; - } - + setBadge(direct: string | number | undefined | null, indirect: string | number | undefined | null) { const count = { direct: this.safeParseInt(direct), indirect: this.safeParseInt(indirect), }; + if (this.countCache.direct.toString() === count.direct.toString() + && this.countCache.indirect.toString() === count.indirect.toString()) { + return; + } + debug('Sending badge count to host', count); ipcRenderer.sendToHost('message-counts', count); diff --git a/src/webview/lib/RecipeWebview.js b/src/webview/lib/RecipeWebview.js index 2bd6bad8d..157da7693 100644 --- a/src/webview/lib/RecipeWebview.js +++ b/src/webview/lib/RecipeWebview.js @@ -35,12 +35,12 @@ class RecipeWebview { /** * Set the unread message badge * - * @param {int} direct Set the count of direct messages - * eg. Slack direct mentions, or a - * message to @channel - * @param {int} indirect Set a badge that defines there are - * new messages but they do not involve - * me directly to me eg. in a channel + * @param {string | number | undefined | null} direct Set the count of direct messages + * eg. Slack direct mentions, or a + * message to @channel + * @param {string | number | undefined | null} indirect Set a badge that defines there are + * new messages but they do not involve + * me directly to me eg. in a channel */ setBadge(direct = 0, indirect = 0) { this.badgeHandler.setBadge(direct, indirect); -- cgit v1.2.3-70-g09d2 From 979ec02c9a1019152be08705986337e470eabb57 Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Tue, 14 Sep 2021 10:34:04 +0200 Subject: chore: codebase improvements (#1930) --- @types/index.d.ts | 11 ++++ package-lock.json | 12 ++-- package.json | 2 +- packages/forms/tsconfig.json | 2 +- packages/theme/tsconfig.json | 2 +- packages/ui/tsconfig.json | 2 +- recipes | 2 +- src/actions/app.js | 29 ---------- src/actions/app.ts | 29 ++++++++++ src/actions/index.js | 32 ----------- src/actions/index.ts | 32 +++++++++++ src/actions/lib/actions.js | 27 --------- src/actions/lib/actions.ts | 31 ++++++++++ src/actions/news.js | 7 --- src/actions/news.ts | 7 +++ src/actions/recipe.js | 9 --- src/actions/recipe.ts | 9 +++ src/actions/recipePreview.js | 7 --- src/actions/recipePreview.ts | 7 +++ src/actions/requests.js | 3 - src/actions/requests.ts | 3 + src/actions/service.js | 111 ------------------------------------ src/actions/service.ts | 111 ++++++++++++++++++++++++++++++++++++ src/actions/settings.js | 12 ---- src/actions/settings.ts | 12 ++++ src/actions/ui.js | 11 ---- src/actions/ui.ts | 11 ++++ src/actions/user.js | 32 ----------- src/actions/user.ts | 32 +++++++++++ src/api/apiBase.js | 42 -------------- src/api/apiBase.ts | 46 +++++++++++++++ src/components/ui/FeatureItem.js | 38 ------------- src/components/ui/FeatureList.js | 99 -------------------------------- src/components/ui/Input.js | 10 ++-- src/features/appearance/index.js | 50 ++++++++++------ src/helpers/serverless-helpers.js | 18 ------ src/helpers/serverless-helpers.ts | 18 ++++++ src/helpers/service-helpers.js | 16 ------ src/helpers/service-helpers.ts | 21 +++++++ src/helpers/validation-helpers.js | 91 ----------------------------- src/helpers/validation-helpers.ts | 97 +++++++++++++++++++++++++++++++ src/i18n/locales/en-US.json | 11 ---- src/index.js | 61 ++++++++++---------- src/stores/UIStore.js | 110 ----------------------------------- src/stores/UIStore.ts | 117 ++++++++++++++++++++++++++++++++++++++ tsconfig.json | 31 +++++++++- tsconfig.settings.json | 28 --------- uidev/tsconfig.json | 18 +++--- 48 files changed, 713 insertions(+), 806 deletions(-) create mode 100644 @types/index.d.ts delete mode 100644 src/actions/app.js create mode 100644 src/actions/app.ts delete mode 100644 src/actions/index.js create mode 100644 src/actions/index.ts delete mode 100644 src/actions/lib/actions.js create mode 100644 src/actions/lib/actions.ts delete mode 100644 src/actions/news.js create mode 100644 src/actions/news.ts delete mode 100644 src/actions/recipe.js create mode 100644 src/actions/recipe.ts delete mode 100644 src/actions/recipePreview.js create mode 100644 src/actions/recipePreview.ts delete mode 100644 src/actions/requests.js create mode 100644 src/actions/requests.ts delete mode 100644 src/actions/service.js create mode 100644 src/actions/service.ts delete mode 100644 src/actions/settings.js create mode 100644 src/actions/settings.ts delete mode 100644 src/actions/ui.js create mode 100644 src/actions/ui.ts delete mode 100644 src/actions/user.js create mode 100644 src/actions/user.ts delete mode 100644 src/api/apiBase.js create mode 100644 src/api/apiBase.ts delete mode 100644 src/components/ui/FeatureItem.js delete mode 100644 src/components/ui/FeatureList.js delete mode 100644 src/helpers/serverless-helpers.js create mode 100644 src/helpers/serverless-helpers.ts delete mode 100644 src/helpers/service-helpers.js create mode 100644 src/helpers/service-helpers.ts delete mode 100644 src/helpers/validation-helpers.js create mode 100644 src/helpers/validation-helpers.ts delete mode 100644 src/stores/UIStore.js create mode 100644 src/stores/UIStore.ts delete mode 100644 tsconfig.settings.json diff --git a/@types/index.d.ts b/@types/index.d.ts new file mode 100644 index 000000000..e21f88cee --- /dev/null +++ b/@types/index.d.ts @@ -0,0 +1,11 @@ +declare global { + interface Window { + ferdi: any; + } +} + +/** + * Workaround to make TS recognize this file as a module. + * https://fettblog.eu/typescript-augmenting-global-lib-dom/ + */ +export {}; diff --git a/package-lock.json b/package-lock.json index 9d988e332..2128f78e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6613,12 +6613,6 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, "@types/babel__core": { "version": "7.1.15", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", @@ -6975,6 +6969,12 @@ "integrity": "sha512-XDwyIlt/47l2kWLTzw/mtrpLdB+GPSskR2n/PIcPn+VYhVO77rGhRncIR5GPU0KRzXuqkDO+J5qqrG0Y8P6jzQ==", "dev": true }, + "@types/validator": { + "version": "13.6.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.3.tgz", + "integrity": "sha512-fWG42pMJOL4jKsDDZZREnXLjc3UE0R8LOJfARWYg6U966rxDT7TYejYzLnUF5cvSObGg34nd0+H2wHHU5Omdfw==", + "dev": true + }, "@types/verror": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", diff --git a/package.json b/package.json index 638dca627..9b9382e3c 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,6 @@ "@commitlint/cli": "13.1.0", "@commitlint/config-conventional": "13.1.0", "@formatjs/cli": "4.2.33", - "@tsconfig/node14": "1.0.1", "@types/color": "3.0.2", "@types/du": "1.0.1", "@types/expect.js": "0.3.29", @@ -163,6 +162,7 @@ "@types/route-parser": "0.1.3", "@types/tar": "4.0.5", "@types/uuid": "3.4.9", + "@types/validator": "13.6.3", "@typescript-eslint/eslint-plugin": "4.30.0", "@typescript-eslint/parser": "4.29.1", "all-contributors-cli": "6.20.0", diff --git a/packages/forms/tsconfig.json b/packages/forms/tsconfig.json index 8b9507eac..015581136 100644 --- a/packages/forms/tsconfig.json +++ b/packages/forms/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.settings.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "lib", "rootDir": "src" diff --git a/packages/theme/tsconfig.json b/packages/theme/tsconfig.json index 4deaa5dd7..8b4163e7f 100644 --- a/packages/theme/tsconfig.json +++ b/packages/theme/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.settings.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "lib", "rootDir": "src" diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 8b9507eac..015581136 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.settings.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "lib", "rootDir": "src" diff --git a/recipes b/recipes index 9db43e100..2c5236b52 160000 --- a/recipes +++ b/recipes @@ -1 +1 @@ -Subproject commit 9db43e100a672b6d6932ac68c0fbe503c129138b +Subproject commit 2c5236b5251c7224a346f2a00a9d7e487aca3e61 diff --git a/src/actions/app.js b/src/actions/app.js deleted file mode 100644 index e6f7f22ba..000000000 --- a/src/actions/app.js +++ /dev/null @@ -1,29 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - setBadge: { - unreadDirectMessageCount: PropTypes.number.isRequired, - unreadIndirectMessageCount: PropTypes.number, - }, - notify: { - title: PropTypes.string.isRequired, - options: PropTypes.object.isRequired, - serviceId: PropTypes.string, - }, - launchOnStartup: { - enable: PropTypes.bool.isRequired, - }, - openExternalUrl: { - url: PropTypes.string.isRequired, - }, - checkForUpdates: {}, - resetUpdateStatus: {}, - installUpdate: {}, - healthCheck: {}, - muteApp: { - isMuted: PropTypes.bool.isRequired, - overrideSystemMute: PropTypes.bool, - }, - toggleMuteApp: {}, - clearAllCache: {}, -}; diff --git a/src/actions/app.ts b/src/actions/app.ts new file mode 100644 index 000000000..e6f7f22ba --- /dev/null +++ b/src/actions/app.ts @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; + +export default { + setBadge: { + unreadDirectMessageCount: PropTypes.number.isRequired, + unreadIndirectMessageCount: PropTypes.number, + }, + notify: { + title: PropTypes.string.isRequired, + options: PropTypes.object.isRequired, + serviceId: PropTypes.string, + }, + launchOnStartup: { + enable: PropTypes.bool.isRequired, + }, + openExternalUrl: { + url: PropTypes.string.isRequired, + }, + checkForUpdates: {}, + resetUpdateStatus: {}, + installUpdate: {}, + healthCheck: {}, + muteApp: { + isMuted: PropTypes.bool.isRequired, + overrideSystemMute: PropTypes.bool, + }, + toggleMuteApp: {}, + clearAllCache: {}, +}; diff --git a/src/actions/index.js b/src/actions/index.js deleted file mode 100644 index aecdac675..000000000 --- a/src/actions/index.js +++ /dev/null @@ -1,32 +0,0 @@ -import PropTypes from 'prop-types'; - -import defineActions from './lib/actions'; -import service from './service'; -import recipe from './recipe'; -import recipePreview from './recipePreview'; -import ui from './ui'; -import app from './app'; -import user from './user'; -import news from './news'; -import settings from './settings'; -import requests from './requests'; -import workspaces from '../features/workspaces/actions'; -import todos from '../features/todos/actions'; - -const actions = { - service, - recipe, - recipePreview, - ui, - app, - user, - news, - settings, - requests, -}; - -export default Object.assign( - defineActions(actions, PropTypes.checkPropTypes), - { workspaces }, - { todos }, -); diff --git a/src/actions/index.ts b/src/actions/index.ts new file mode 100644 index 000000000..aecdac675 --- /dev/null +++ b/src/actions/index.ts @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; + +import defineActions from './lib/actions'; +import service from './service'; +import recipe from './recipe'; +import recipePreview from './recipePreview'; +import ui from './ui'; +import app from './app'; +import user from './user'; +import news from './news'; +import settings from './settings'; +import requests from './requests'; +import workspaces from '../features/workspaces/actions'; +import todos from '../features/todos/actions'; + +const actions = { + service, + recipe, + recipePreview, + ui, + app, + user, + news, + settings, + requests, +}; + +export default Object.assign( + defineActions(actions, PropTypes.checkPropTypes), + { workspaces }, + { todos }, +); diff --git a/src/actions/lib/actions.js b/src/actions/lib/actions.js deleted file mode 100644 index 7be40f1cf..000000000 --- a/src/actions/lib/actions.js +++ /dev/null @@ -1,27 +0,0 @@ -export const createActionsFromDefinitions = (actionDefinitions, validate) => { - const actions = {}; - Object.keys(actionDefinitions).forEach((actionName) => { - const action = (params = {}) => { - const schema = actionDefinitions[actionName]; - validate(schema, params, actionName); - action.notify(params); - }; - actions[actionName] = action; - action.listeners = []; - action.listen = (listener) => action.listeners.push(listener); - action.off = (listener) => { - const { listeners } = action; - listeners.splice(listeners.indexOf(listener), 1); - }; - action.notify = (params) => action.listeners.forEach((listener) => listener(params)); - }); - return actions; -}; - -export default (definitions, validate) => { - const newActions = {}; - Object.keys(definitions).forEach((scopeName) => { - newActions[scopeName] = createActionsFromDefinitions(definitions[scopeName], validate); - }); - return newActions; -}; diff --git a/src/actions/lib/actions.ts b/src/actions/lib/actions.ts new file mode 100644 index 000000000..ed42eabc0 --- /dev/null +++ b/src/actions/lib/actions.ts @@ -0,0 +1,31 @@ +export const createActionsFromDefinitions = (actionDefinitions, validate) => { + const actions = {}; + Object.keys(actionDefinitions).forEach(actionName => { + const action = (params = {}) => { + const schema = actionDefinitions[actionName]; + validate(schema, params, actionName); + action.notify(params); + }; + actions[actionName] = action; + action.listeners = []; + action.listen = listener => action.listeners.push(listener); + action.off = listener => { + const { listeners } = action; + listeners.splice(listeners.indexOf(listener), 1); + }; + action.notify = params => + action.listeners.forEach(listener => listener(params)); + }); + return actions; +}; + +export default (definitions, validate) => { + const newActions = {}; + Object.keys(definitions).forEach(scopeName => { + newActions[scopeName] = createActionsFromDefinitions( + definitions[scopeName], + validate, + ); + }); + return newActions; +}; diff --git a/src/actions/news.js b/src/actions/news.js deleted file mode 100644 index db106e84f..000000000 --- a/src/actions/news.js +++ /dev/null @@ -1,7 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - hide: { - newsId: PropTypes.string.isRequired, - }, -}; diff --git a/src/actions/news.ts b/src/actions/news.ts new file mode 100644 index 000000000..db106e84f --- /dev/null +++ b/src/actions/news.ts @@ -0,0 +1,7 @@ +import PropTypes from 'prop-types'; + +export default { + hide: { + newsId: PropTypes.string.isRequired, + }, +}; diff --git a/src/actions/recipe.js b/src/actions/recipe.js deleted file mode 100644 index 29b0a151f..000000000 --- a/src/actions/recipe.js +++ /dev/null @@ -1,9 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - install: { - recipeId: PropTypes.string.isRequired, - update: PropTypes.bool, - }, - update: {}, -}; diff --git a/src/actions/recipe.ts b/src/actions/recipe.ts new file mode 100644 index 000000000..29b0a151f --- /dev/null +++ b/src/actions/recipe.ts @@ -0,0 +1,9 @@ +import PropTypes from 'prop-types'; + +export default { + install: { + recipeId: PropTypes.string.isRequired, + update: PropTypes.bool, + }, + update: {}, +}; diff --git a/src/actions/recipePreview.js b/src/actions/recipePreview.js deleted file mode 100644 index 36de3d844..000000000 --- a/src/actions/recipePreview.js +++ /dev/null @@ -1,7 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - search: { - needle: PropTypes.string.isRequired, - }, -}; diff --git a/src/actions/recipePreview.ts b/src/actions/recipePreview.ts new file mode 100644 index 000000000..36de3d844 --- /dev/null +++ b/src/actions/recipePreview.ts @@ -0,0 +1,7 @@ +import PropTypes from 'prop-types'; + +export default { + search: { + needle: PropTypes.string.isRequired, + }, +}; diff --git a/src/actions/requests.js b/src/actions/requests.js deleted file mode 100644 index 89296e7ec..000000000 --- a/src/actions/requests.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - retryRequiredRequests: {}, -}; diff --git a/src/actions/requests.ts b/src/actions/requests.ts new file mode 100644 index 000000000..89296e7ec --- /dev/null +++ b/src/actions/requests.ts @@ -0,0 +1,3 @@ +export default { + retryRequiredRequests: {}, +}; diff --git a/src/actions/service.js b/src/actions/service.js deleted file mode 100644 index e56513f8f..000000000 --- a/src/actions/service.js +++ /dev/null @@ -1,111 +0,0 @@ -import PropTypes from 'prop-types'; -import ServiceModel from '../models/Service'; - -export default { - setActive: { - serviceId: PropTypes.string.isRequired, - keepActiveRoute: PropTypes.bool, - }, - blurActive: {}, - setActiveNext: {}, - setActivePrev: {}, - showAddServiceInterface: { - recipeId: PropTypes.string.isRequired, - }, - createService: { - recipeId: PropTypes.string.isRequired, - serviceData: PropTypes.object.isRequired, - }, - createFromLegacyService: { - data: PropTypes.object.isRequired, - }, - updateService: { - serviceId: PropTypes.string.isRequired, - serviceData: PropTypes.object.isRequired, - redirect: PropTypes.bool, - }, - deleteService: { - serviceId: PropTypes.string.isRequired, - redirect: PropTypes.string, - }, - openRecipeFile: { - recipe: PropTypes.string.isRequired, - file: PropTypes.string.isRequired, - }, - clearCache: { - serviceId: PropTypes.string.isRequired, - }, - setUnreadMessageCount: { - serviceId: PropTypes.string.isRequired, - count: PropTypes.object.isRequired, - }, - setWebviewReference: { - serviceId: PropTypes.string.isRequired, - webview: PropTypes.object.isRequired, - }, - detachService: { - service: PropTypes.instanceOf(ServiceModel).isRequired, - }, - focusService: { - serviceId: PropTypes.string.isRequired, - }, - focusActiveService: {}, - toggleService: { - serviceId: PropTypes.string.isRequired, - }, - handleIPCMessage: { - serviceId: PropTypes.string.isRequired, - channel: PropTypes.string.isRequired, - args: PropTypes.array.isRequired, - }, - sendIPCMessage: { - serviceId: PropTypes.string.isRequired, - channel: PropTypes.string.isRequired, - args: PropTypes.object.isRequired, - }, - sendIPCMessageToAllServices: { - channel: PropTypes.string.isRequired, - args: PropTypes.object.isRequired, - }, - openWindow: { - event: PropTypes.object.isRequired, - }, - reload: { - serviceId: PropTypes.string.isRequired, - }, - reloadActive: {}, - reloadAll: {}, - reloadUpdatedServices: {}, - filter: { - needle: PropTypes.string.isRequired, - }, - resetFilter: {}, - resetStatus: {}, - reorder: { - oldIndex: PropTypes.number.isRequired, - newIndex: PropTypes.number.isRequired, - }, - toggleNotifications: { - serviceId: PropTypes.string.isRequired, - }, - toggleAudio: { - serviceId: PropTypes.string.isRequired, - }, - toggleDarkMode: { - serviceId: PropTypes.string.isRequired, - }, - openDevTools: { - serviceId: PropTypes.string.isRequired, - }, - openDevToolsForActiveService: {}, - hibernate: { - serviceId: PropTypes.string.isRequired, - }, - awake: { - serviceId: PropTypes.string.isRequired, - }, - resetLastPollTimer: { - serviceId: PropTypes.string, - }, - shareSettingsWithServiceProcess: {}, -}; diff --git a/src/actions/service.ts b/src/actions/service.ts new file mode 100644 index 000000000..e56513f8f --- /dev/null +++ b/src/actions/service.ts @@ -0,0 +1,111 @@ +import PropTypes from 'prop-types'; +import ServiceModel from '../models/Service'; + +export default { + setActive: { + serviceId: PropTypes.string.isRequired, + keepActiveRoute: PropTypes.bool, + }, + blurActive: {}, + setActiveNext: {}, + setActivePrev: {}, + showAddServiceInterface: { + recipeId: PropTypes.string.isRequired, + }, + createService: { + recipeId: PropTypes.string.isRequired, + serviceData: PropTypes.object.isRequired, + }, + createFromLegacyService: { + data: PropTypes.object.isRequired, + }, + updateService: { + serviceId: PropTypes.string.isRequired, + serviceData: PropTypes.object.isRequired, + redirect: PropTypes.bool, + }, + deleteService: { + serviceId: PropTypes.string.isRequired, + redirect: PropTypes.string, + }, + openRecipeFile: { + recipe: PropTypes.string.isRequired, + file: PropTypes.string.isRequired, + }, + clearCache: { + serviceId: PropTypes.string.isRequired, + }, + setUnreadMessageCount: { + serviceId: PropTypes.string.isRequired, + count: PropTypes.object.isRequired, + }, + setWebviewReference: { + serviceId: PropTypes.string.isRequired, + webview: PropTypes.object.isRequired, + }, + detachService: { + service: PropTypes.instanceOf(ServiceModel).isRequired, + }, + focusService: { + serviceId: PropTypes.string.isRequired, + }, + focusActiveService: {}, + toggleService: { + serviceId: PropTypes.string.isRequired, + }, + handleIPCMessage: { + serviceId: PropTypes.string.isRequired, + channel: PropTypes.string.isRequired, + args: PropTypes.array.isRequired, + }, + sendIPCMessage: { + serviceId: PropTypes.string.isRequired, + channel: PropTypes.string.isRequired, + args: PropTypes.object.isRequired, + }, + sendIPCMessageToAllServices: { + channel: PropTypes.string.isRequired, + args: PropTypes.object.isRequired, + }, + openWindow: { + event: PropTypes.object.isRequired, + }, + reload: { + serviceId: PropTypes.string.isRequired, + }, + reloadActive: {}, + reloadAll: {}, + reloadUpdatedServices: {}, + filter: { + needle: PropTypes.string.isRequired, + }, + resetFilter: {}, + resetStatus: {}, + reorder: { + oldIndex: PropTypes.number.isRequired, + newIndex: PropTypes.number.isRequired, + }, + toggleNotifications: { + serviceId: PropTypes.string.isRequired, + }, + toggleAudio: { + serviceId: PropTypes.string.isRequired, + }, + toggleDarkMode: { + serviceId: PropTypes.string.isRequired, + }, + openDevTools: { + serviceId: PropTypes.string.isRequired, + }, + openDevToolsForActiveService: {}, + hibernate: { + serviceId: PropTypes.string.isRequired, + }, + awake: { + serviceId: PropTypes.string.isRequired, + }, + resetLastPollTimer: { + serviceId: PropTypes.string, + }, + shareSettingsWithServiceProcess: {}, +}; diff --git a/src/actions/settings.js b/src/actions/settings.js deleted file mode 100644 index fd29b798b..000000000 --- a/src/actions/settings.js +++ /dev/null @@ -1,12 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - update: { - type: PropTypes.string.isRequired, - data: PropTypes.object.isRequired, - }, - remove: { - type: PropTypes.string.isRequired, - key: PropTypes.string.isRequired, - }, -}; diff --git a/src/actions/settings.ts b/src/actions/settings.ts new file mode 100644 index 000000000..fd29b798b --- /dev/null +++ b/src/actions/settings.ts @@ -0,0 +1,12 @@ +import PropTypes from 'prop-types'; + +export default { + update: { + type: PropTypes.string.isRequired, + data: PropTypes.object.isRequired, + }, + remove: { + type: PropTypes.string.isRequired, + key: PropTypes.string.isRequired, + }, +}; diff --git a/src/actions/ui.js b/src/actions/ui.js deleted file mode 100644 index b913b430b..000000000 --- a/src/actions/ui.js +++ /dev/null @@ -1,11 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - openSettings: { - path: PropTypes.string, - }, - closeSettings: {}, - toggleServiceUpdatedInfoBar: { - visible: PropTypes.bool, - }, -}; diff --git a/src/actions/ui.ts b/src/actions/ui.ts new file mode 100644 index 000000000..b913b430b --- /dev/null +++ b/src/actions/ui.ts @@ -0,0 +1,11 @@ +import PropTypes from 'prop-types'; + +export default { + openSettings: { + path: PropTypes.string, + }, + closeSettings: {}, + toggleServiceUpdatedInfoBar: { + visible: PropTypes.bool, + }, +}; diff --git a/src/actions/user.js b/src/actions/user.js deleted file mode 100644 index 20d27ee53..000000000 --- a/src/actions/user.js +++ /dev/null @@ -1,32 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - login: { - email: PropTypes.string.isRequired, - password: PropTypes.string.isRequired, - }, - logout: {}, - signup: { - firstname: PropTypes.string.isRequired, - lastname: PropTypes.string.isRequired, - email: PropTypes.string.isRequired, - password: PropTypes.string.isRequired, - accountType: PropTypes.string, - company: PropTypes.string, - currency: PropTypes.string, - }, - retrievePassword: { - email: PropTypes.string.isRequired, - }, - invite: { - invites: PropTypes.array.isRequired, - }, - update: { - userData: PropTypes.object.isRequired, - }, - resetStatus: {}, - importLegacyServices: PropTypes.arrayOf(PropTypes.shape({ - recipe: PropTypes.string.isRequired, - })).isRequired, - delete: {}, -}; diff --git a/src/actions/user.ts b/src/actions/user.ts new file mode 100644 index 000000000..20d27ee53 --- /dev/null +++ b/src/actions/user.ts @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; + +export default { + login: { + email: PropTypes.string.isRequired, + password: PropTypes.string.isRequired, + }, + logout: {}, + signup: { + firstname: PropTypes.string.isRequired, + lastname: PropTypes.string.isRequired, + email: PropTypes.string.isRequired, + password: PropTypes.string.isRequired, + accountType: PropTypes.string, + company: PropTypes.string, + currency: PropTypes.string, + }, + retrievePassword: { + email: PropTypes.string.isRequired, + }, + invite: { + invites: PropTypes.array.isRequired, + }, + update: { + userData: PropTypes.object.isRequired, + }, + resetStatus: {}, + importLegacyServices: PropTypes.arrayOf(PropTypes.shape({ + recipe: PropTypes.string.isRequired, + })).isRequired, + delete: {}, +}; diff --git a/src/api/apiBase.js b/src/api/apiBase.js deleted file mode 100644 index 2fad7eb21..000000000 --- a/src/api/apiBase.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Get API base URL from store - */ -import { - API_VERSION, -} from '../environment'; -import { - DEV_API_FRANZ_WEBSITE, - LIVE_FRANZ_API, - LOCAL_HOSTNAME, - LOCAL_SERVER, - SERVER_NOT_LOADED, -} from '../config'; - -// Note: This cannot be used from the internal-server since we are not running within the context of a browser window -const apiBase = (withVersion = true) => { - let url; - - if (!window.ferdi - || !window.ferdi.stores.settings - || !window.ferdi.stores.settings.all - || !window.ferdi.stores.settings.all.app.server) { - // Stores have not yet been loaded - return SERVER_NOT_LOADED to force a retry when stores are loaded - return SERVER_NOT_LOADED; - } - if (window.ferdi.stores.settings.all.app.server === LOCAL_SERVER) { - // Use URL for local server - url = `http://${LOCAL_HOSTNAME}:${window.ferdi.stores.requests.localServerPort}`; - } else { - // Load URL from store - url = window.ferdi.stores.settings.all.app.server; - } - - return withVersion ? `${url}/${API_VERSION}` : url; -}; - -export default apiBase; - -export function termsBase() { - // TODO: This needs to handle local vs ferdi vs franz servers - return window.ferdi.stores.settings.all.app.server !== LIVE_FRANZ_API ? window.ferdi.stores.settings.all.app.server : DEV_API_FRANZ_WEBSITE; -} diff --git a/src/api/apiBase.ts b/src/api/apiBase.ts new file mode 100644 index 000000000..dc10fad91 --- /dev/null +++ b/src/api/apiBase.ts @@ -0,0 +1,46 @@ +/** + * Get API base URL from store + */ +import { API_VERSION } from '../environment'; +import { + DEV_API_FRANZ_WEBSITE, + LIVE_FRANZ_API, + LOCAL_HOSTNAME, + LOCAL_SERVER, + SERVER_NOT_LOADED, +} from '../config'; + +// Note: This cannot be used from the internal-server since we are not running within the context of a browser window +const apiBase = (withVersion = true) => { + let url: string; + + if ( + !(window as any).ferdi || + !(window as any).ferdi.stores.settings || + !(window as any).ferdi.stores.settings.all || + !(window as any).ferdi.stores.settings.all.app.server + ) { + // Stores have not yet been loaded - return SERVER_NOT_LOADED to force a retry when stores are loaded + return SERVER_NOT_LOADED; + } + if ((window as any).ferdi.stores.settings.all.app.server === LOCAL_SERVER) { + // Use URL for local server + url = `http://${LOCAL_HOSTNAME}:${ + (window as any).ferdi.stores.requests.localServerPort + }`; + } else { + // Load URL from store + url = (window as any).ferdi.stores.settings.all.app.server; + } + + return withVersion ? `${url}/${API_VERSION}` : url; +}; + +export default apiBase; + +export function termsBase() { + // TODO: This needs to handle local vs ferdi vs franz servers + return (window as any).ferdi.stores.settings.all.app.server !== LIVE_FRANZ_API + ? (window as any).ferdi.stores.settings.all.app.server + : DEV_API_FRANZ_WEBSITE; +} diff --git a/src/components/ui/FeatureItem.js b/src/components/ui/FeatureItem.js deleted file mode 100644 index 646cf56ca..000000000 --- a/src/components/ui/FeatureItem.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import injectSheet from 'react-jss'; -import { Icon } from '@meetfranz/ui'; -import classnames from 'classnames'; -import { mdiCheckCircle } from '@mdi/js'; - -const styles = (theme) => ({ - featureItem: { - borderBottom: [1, 'solid', theme.defaultContentBorder], - padding: [8, 0], - display: 'flex', - alignItems: 'center', - textAlign: 'left', - }, - featureIcon: { - fill: theme.brandSuccess, - marginRight: 10, - }, -}); - -export const FeatureItem = injectSheet(styles)(({ - classes, className, name, icon, -}) => ( -
  • - {icon ? ( - {icon} - ) : ( - - )} - {name} -
  • -)); - -export default FeatureItem; diff --git a/src/components/ui/FeatureList.js b/src/components/ui/FeatureList.js deleted file mode 100644 index 14e7ec3c4..000000000 --- a/src/components/ui/FeatureList.js +++ /dev/null @@ -1,99 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; - -import { FeatureItem } from './FeatureItem'; - -const messages = defineMessages({ - availableRecipes: { - id: 'pricing.features.recipes', - defaultMessage: 'Choose from more than 70 Services', // TODO: Make this dynamic - }, - accountSync: { - id: 'pricing.features.accountSync', - defaultMessage: 'Account Synchronisation', - }, - desktopNotifications: { - id: 'pricing.features.desktopNotifications', - defaultMessage: 'Desktop Notifications', - }, - unlimitedServices: { - id: 'pricing.features.unlimitedServices', - defaultMessage: 'Add unlimited services', - }, - spellchecker: { - id: 'pricing.features.spellchecker', - defaultMessage: 'Spellchecker support', - }, - workspaces: { - id: 'pricing.features.workspaces', - defaultMessage: 'Workspaces', - }, - customWebsites: { - id: 'pricing.features.customWebsites', - defaultMessage: 'Add Custom Websites', - }, - onPremise: { - id: 'pricing.features.onPremise', - defaultMessage: 'On-premise & other Hosted Services', - }, - thirdPartyServices: { - id: 'pricing.features.thirdPartyServices', - defaultMessage: 'Install 3rd party services', - }, - serviceProxies: { - id: 'pricing.features.serviceProxies', - defaultMessage: 'Service Proxies', - }, - teamManagement: { - id: 'pricing.features.teamManagement', - defaultMessage: 'Team Management', - }, -}); - -export class FeatureList extends Component { - static propTypes = { - className: PropTypes.string, - featureClassName: PropTypes.string, - }; - - static defaultProps = { - className: '', - featureClassName: '', - }; - - render() { - const { className, featureClassName } = this.props; - const { intl } = this.props; - - const features = [ - messages.availableRecipes, - messages.accountSync, - messages.desktopNotifications, - - messages.spellchecker, - - messages.workspaces, - messages.customWebsites, - messages.thirdPartyServices, - - messages.unlimitedServices, - messages.onPremise, - messages.serviceProxies, - messages.teamManagement, - ]; - - return ( -
      - {features.map(feature => ( - - ))} -
    - ); - } -} - -export default injectIntl(FeatureList); diff --git a/src/components/ui/Input.js b/src/components/ui/Input.js index 335367f03..43fab10ee 100644 --- a/src/components/ui/Input.js +++ b/src/components/ui/Input.js @@ -42,7 +42,7 @@ class Input extends Component { passwordScore: 0, }; - inputElement = null; + inputElement; componentDidMount() { if (this.props.focus) { @@ -133,10 +133,10 @@ class Input extends Component { {/* */}
    )} diff --git a/src/features/appearance/index.js b/src/features/appearance/index.js index 3aab2fcad..d1db68ac6 100644 --- a/src/features/appearance/index.js +++ b/src/features/appearance/index.js @@ -10,13 +10,15 @@ function createStyleElement() { const styles = document.createElement('style'); styles.id = STYLE_ELEMENT_ID; - document.querySelector('head').appendChild(styles); + document.querySelector('head')?.appendChild(styles); } function setAppearance(style) { const styleElement = document.getElementById(STYLE_ELEMENT_ID); - styleElement.innerHTML = style; + if (styleElement) { + styleElement.innerHTML = style; + } } // See https://github.com/Qix-/color/issues/53#issuecomment-656590710 @@ -28,7 +30,7 @@ function darkenAbsolute(originalColor, absoluteChange) { function generateAccentStyle(accentColorStr) { let style = ''; - Object.keys(themeInfo).forEach((property) => { + Object.keys(themeInfo).forEach(property => { style += ` ${themeInfo[property]} { ${property}: ${accentColorStr}; @@ -80,19 +82,21 @@ function generateServiceRibbonWidthStyle(widthStr, iconSizeStr, vertical) { const width = Number(widthStr); const iconSize = Number(iconSizeStr) - iconSizeBias; - return vertical ? ` + return vertical + ? ` .tab-item { width: ${width - 2}px !important; height: ${width - 5 + iconSize}px !important; min-height: unset; } .tab-item .tab-item__icon { - width: ${(width / 2) + iconSize}px !important; + width: ${width / 2 + iconSize}px !important; } .sidebar__button { font-size: ${width / 3}px !important; } - ` : ` + ` + : ` .sidebar { width: ${width}px !important; } @@ -101,7 +105,7 @@ function generateServiceRibbonWidthStyle(widthStr, iconSizeStr, vertical) { height: ${width - 5 + iconSize}px !important; } .tab-item .tab-item__icon { - width: ${(width / 2) + iconSize}px !important; + width: ${width / 2 + iconSize}px !important; } .sidebar__button { font-size: ${width / 3}px !important; @@ -145,9 +149,13 @@ function generateVerticalStyle(widthStr, alwaysShowWorkspaces) { return ` .sidebar { height: ${sidebarWidth + verticalStyleOffset + 1}px !important; - ${alwaysShowWorkspaces ? ` + ${ + alwaysShowWorkspaces + ? ` width: calc(100% - 300px) !important; - ` : ''} + ` + : '' +} } .sidebar .sidebar__button { @@ -192,12 +200,20 @@ function generateStyle(settings) { alwaysShowWorkspaces, } = settings; - if (accentColor.toLowerCase() !== DEFAULT_APP_SETTINGS.accentColor.toLowerCase()) { + if ( + accentColor.toLowerCase() !== DEFAULT_APP_SETTINGS.accentColor.toLowerCase() + ) { style += generateAccentStyle(accentColor); } - if (serviceRibbonWidth !== DEFAULT_APP_SETTINGS.serviceRibbonWidth - || iconSize !== DEFAULT_APP_SETTINGS.iconSize) { - style += generateServiceRibbonWidthStyle(serviceRibbonWidth, iconSize, useVerticalStyle); + if ( + serviceRibbonWidth !== DEFAULT_APP_SETTINGS.serviceRibbonWidth || + iconSize !== DEFAULT_APP_SETTINGS.iconSize + ) { + style += generateServiceRibbonWidthStyle( + serviceRibbonWidth, + iconSize, + useVerticalStyle, + ); } if (showDragArea) { style += generateShowDragAreaStyle(accentColor); @@ -206,7 +222,9 @@ function generateStyle(settings) { style += generateVerticalStyle(serviceRibbonWidth, alwaysShowWorkspaces); } else if (document.getElementById('vertical-style')) { const link = document.getElementById('vertical-style'); - document.head.removeChild(link); + if (link) { + document.head.removeChild(link); + } } if (alwaysShowWorkspaces) { style += generateOpenWorkspaceStyle(); @@ -225,14 +243,14 @@ export default function initAppearance(stores) { // Update style when settings change reaction( - () => ([ + () => [ settings.all.app.accentColor, settings.all.app.serviceRibbonWidth, settings.all.app.iconSize, settings.all.app.showDragArea, settings.all.app.useVerticalStyle, settings.all.app.alwaysShowWorkspaces, - ]), + ], () => { updateStyle(settings.all.app); }, diff --git a/src/helpers/serverless-helpers.js b/src/helpers/serverless-helpers.js deleted file mode 100644 index 01549e038..000000000 --- a/src/helpers/serverless-helpers.js +++ /dev/null @@ -1,18 +0,0 @@ -import { LOCAL_SERVER } from '../config'; - -export default function useLocalServer(actions) { - // Use local server for user - actions.settings.update({ - type: 'app', - data: { - server: LOCAL_SERVER, - }, - }); - - // Log into local server - // Credentials are ignored by the server but the client requires them - actions.user.login({ - email: 'ferdi@localhost', - password: 'FERDI_', - }); -} diff --git a/src/helpers/serverless-helpers.ts b/src/helpers/serverless-helpers.ts new file mode 100644 index 000000000..01549e038 --- /dev/null +++ b/src/helpers/serverless-helpers.ts @@ -0,0 +1,18 @@ +import { LOCAL_SERVER } from '../config'; + +export default function useLocalServer(actions) { + // Use local server for user + actions.settings.update({ + type: 'app', + data: { + server: LOCAL_SERVER, + }, + }); + + // Log into local server + // Credentials are ignored by the server but the client requires them + actions.user.login({ + email: 'ferdi@localhost', + password: 'FERDI_', + }); +} diff --git a/src/helpers/service-helpers.js b/src/helpers/service-helpers.js deleted file mode 100644 index 745f40dd9..000000000 --- a/src/helpers/service-helpers.js +++ /dev/null @@ -1,16 +0,0 @@ -import { readdirSync, removeSync } from 'fs-extra'; -import { userDataPath } from '../environment'; - -export function getServicePartitionsDirectory(...segments) { - return userDataPath('Partitions', ...([segments].flat())); -} - -export function removeServicePartitionDirectory(id = '', addServicePrefix = false) { - const servicePartition = getServicePartitionsDirectory(`${addServicePrefix ? 'service-' : ''}${id}`); - return removeSync(servicePartition); -} - -export async function getServiceIdsFromPartitions() { - const files = readdirSync(getServicePartitionsDirectory()); - return files.filter((n) => n !== '__chrome_extension'); -} diff --git a/src/helpers/service-helpers.ts b/src/helpers/service-helpers.ts new file mode 100644 index 000000000..13c921f88 --- /dev/null +++ b/src/helpers/service-helpers.ts @@ -0,0 +1,21 @@ +import { readdirSync, removeSync } from 'fs-extra'; +import { userDataPath } from '../environment'; + +export function getServicePartitionsDirectory(...segments) { + return userDataPath('Partitions', ...[segments].flat()); +} + +export function removeServicePartitionDirectory( + id = '', + addServicePrefix = false, +) { + const servicePartition = getServicePartitionsDirectory( + `${addServicePrefix ? 'service-' : ''}${id}`, + ); + return removeSync(servicePartition); +} + +export async function getServiceIdsFromPartitions() { + const files = readdirSync(getServicePartitionsDirectory()); + return files.filter(n => n !== '__chrome_extension'); +} diff --git a/src/helpers/validation-helpers.js b/src/helpers/validation-helpers.js deleted file mode 100644 index 569b13bb0..000000000 --- a/src/helpers/validation-helpers.js +++ /dev/null @@ -1,91 +0,0 @@ -import { defineMessages } from 'react-intl'; -import isEmail from 'validator/lib/isEmail'; - -const messages = defineMessages({ - required: { - id: 'validation.required', - defaultMessage: 'Field is required', - }, - email: { - id: 'validation.email', - defaultMessage: 'Email not valid', - }, - url: { - id: 'validation.url', - defaultMessage: 'Not a valid URL', - }, - minLength: { - id: 'validation.minLength', - defaultMessage: 'Too few characters', - }, - oneRequired: { - id: 'validation.oneRequired', - defaultMessage: 'At least one is required', - }, -}); - -export function required({ field }) { - const isValid = field.value.trim() !== ''; - return [ - isValid, - window.ferdi.intl.formatMessage(messages.required, { field: field.label }), - ]; -} - -export function email({ field }) { - const value = field.value.trim(); - const isValid = isEmail(value); - return [ - isValid, - window.ferdi.intl.formatMessage(messages.email, { field: field.label }), - ]; -} - -export function url({ field }) { - const value = field.value.trim(); - let isValid = false; - - if (value !== '') { - // eslint-disable-next-line - isValid = Boolean( - value.match( - /(^|[\s.:;?\-\]<(])(https?:\/\/[-\w;/?:@&=+$|_.!~*|'()[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',|().:;?\-[\]>)])/i, - ), - ); - } else { - isValid = true; - } - - return [ - isValid, - window.ferdi.intl.formatMessage(messages.url, { field: field.label }), - ]; -} - -export function minLength(length) { - return ({ field }) => { - let isValid = true; - if (field.touched) { - isValid = field.value.length >= length; - } - return [ - isValid, - window.ferdi.intl.formatMessage(messages.minLength, { - field: field.label, - length, - }), - ]; - }; -} - -export function oneRequired(targets) { - return ({ field, form }) => { - const invalidFields = targets.filter(target => form.$(target).value === ''); - return [ - targets.length !== invalidFields.length, - window.ferdi.intl.formatMessage(messages.required, { - field: field.label, - }), - ]; - }; -} diff --git a/src/helpers/validation-helpers.ts b/src/helpers/validation-helpers.ts new file mode 100644 index 000000000..80d368b2e --- /dev/null +++ b/src/helpers/validation-helpers.ts @@ -0,0 +1,97 @@ +import { defineMessages } from 'react-intl'; +import isEmail from 'validator/lib/isEmail'; + +const messages = defineMessages({ + required: { + id: 'validation.required', + defaultMessage: 'Field is required', + }, + email: { + id: 'validation.email', + defaultMessage: 'Email not valid', + }, + url: { + id: 'validation.url', + defaultMessage: 'Not a valid URL', + }, + minLength: { + id: 'validation.minLength', + defaultMessage: 'Too few characters', + }, + oneRequired: { + id: 'validation.oneRequired', + defaultMessage: 'At least one is required', + }, +}); + +export function required({ field }) { + const isValid = field.value.trim() !== ''; + return [ + isValid, + (window as any).ferdi.intl.formatMessage(messages.required, { + field: field.label, + }), + ]; +} + +export function email({ field }) { + const value = field.value.trim(); + const isValid = isEmail(value); + return [ + isValid, + (window as any).ferdi.intl.formatMessage(messages.email, { + field: field.label, + }), + ]; +} + +export function url({ field }) { + const value = field.value.trim(); + let isValid = false; + + if (value !== '') { + // eslint-disable-next-line + isValid = Boolean( + value.match( + /(^|[\s.:;?\-\]<(])(https?:\/\/[-\w;/?:@&=+$|_.!~*|'()[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',|().:;?\-[\]>)])/i, + ), + ); + } else { + isValid = true; + } + + return [ + isValid, + (window as any).ferdi.intl.formatMessage(messages.url, { + field: field.label, + }), + ]; +} + +export function minLength(length: number) { + return ({ field }) => { + let isValid = true; + if (field.touched) { + isValid = field.value.length >= length; + } + return [ + isValid, + (window as any).ferdi.intl.formatMessage(messages.minLength, { + field: field.label, + length, + }), + ]; + }; +} + +export function oneRequired(targets: string[]) { + return ({ field, form }) => { + const invalidFields = targets.filter(target => form.$(target).value === ''); + return [ + targets.length !== invalidFields.length, + (window as any).ferdi.intl.formatMessage(messages.required, { + field: field.label, + }), + ]; + }; +} diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 19adaaf6a..c66056467 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -152,17 +152,6 @@ "password.link.signup": "Create a free account", "password.noUser": "No user affiliated with that email address", "password.successInfo": "Your new password was sent to your email address", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", diff --git a/src/index.js b/src/index.js index 7f1f77b4e..08d9a3a45 100644 --- a/src/index.js +++ b/src/index.js @@ -78,14 +78,18 @@ if (isWindows) { const settings = new Settings('app', DEFAULT_APP_SETTINGS); const proxySettings = new Settings('proxy'); -const retrieveSettingValue = (key, defaultValue = true) => ifUndefinedBoolean(settings.get(key), defaultValue); +const retrieveSettingValue = (key, defaultValue = true) => + ifUndefinedBoolean(settings.get(key), defaultValue); if (retrieveSettingValue('sentry')) { // eslint-disable-next-line global-require require('./sentry'); } -const liftSingleInstanceLock = retrieveSettingValue('liftSingleInstanceLock', false); +const liftSingleInstanceLock = retrieveSettingValue( + 'liftSingleInstanceLock', + false, +); // Force single window const gotTheLock = liftSingleInstanceLock @@ -190,11 +194,11 @@ const createWindow = () => { minWidth: 600, minHeight: 500, show: false, - titleBarStyle: isMac ? 'hidden' : '', + titleBarStyle: isMac ? 'hidden' : 'default', frame: isLinux, - spellcheck: retrieveSettingValue('enableSpellchecking'), backgroundColor, webPreferences: { + spellcheck: retrieveSettingValue('enableSpellchecking'), nodeIntegration: true, contextIsolation: false, webviewTag: true, @@ -268,10 +272,7 @@ const createWindow = () => { // Dereference the window object, usually you would store windows // in an array if your app supports multi windows, this is the time // when you should delete the corresponding element. - if ( - !willQuitApp && - retrieveSettingValue('runInBackground') - ) { + if (!willQuitApp && retrieveSettingValue('runInBackground')) { e.preventDefault(); if (isWindows) { debug('Window: minimize'); @@ -471,7 +472,9 @@ ipcMain.on('open-browser-window', (e, { url, serviceId }) => { ipcMain.on( 'modifyRequestHeaders', (e, { modifiedRequestHeaders, serviceId }) => { - debug(`Received modifyRequestHeaders ${modifiedRequestHeaders} for serviceId ${serviceId}`); + debug( + `Received modifyRequestHeaders ${modifiedRequestHeaders} for serviceId ${serviceId}`, + ); modifiedRequestHeaders.forEach(headerFilterSet => { const { headers, requestFilters } = headerFilterSet; session @@ -489,23 +492,22 @@ ipcMain.on( }, ); -ipcMain.on( - 'knownCertificateHosts', - (e, { knownHosts, serviceId }) => { - debug(`Received knownCertificateHosts ${knownHosts} for serviceId ${serviceId}`); - session - .fromPartition(`persist:service-${serviceId}`) - .setCertificateVerifyProc((request, callback) => { - // To know more about these callbacks: https://www.electronjs.org/docs/api/session#sessetcertificateverifyprocproc - const { hostname } = request; - if (knownHosts.find(item => item.includes(hostname)).length > 0) { - callback(0); - } else { - callback(-2); - } - }); - }, -); +ipcMain.on('knownCertificateHosts', (e, { knownHosts, serviceId }) => { + debug( + `Received knownCertificateHosts ${knownHosts} for serviceId ${serviceId}`, + ); + session + .fromPartition(`persist:service-${serviceId}`) + .setCertificateVerifyProc((request, callback) => { + // To know more about these callbacks: https://www.electronjs.org/docs/api/session#sessetcertificateverifyprocproc + const { hostname } = request; + if (knownHosts.find(item => item.includes(hostname)).length > 0) { + callback(0); + } else { + callback(-2); + } + }); +}); ipcMain.on('feature-basic-auth-cancel', () => { debug('Cancel basic auth'); @@ -560,7 +562,7 @@ app.on('window-all-closed', () => { } }); -app.on('before-quit', (event) => { +app.on('before-quit', event => { const yesButtonIndex = 0; let selection = yesButtonIndex; if (retrieveSettingValue('confirmOnQuit')) { @@ -568,10 +570,7 @@ app.on('before-quit', (event) => { type: 'question', message: 'Quit', detail: 'Do you really want to quit Ferdi?', - buttons: [ - 'Yes', - 'No', - ], + buttons: ['Yes', 'No'], }); } if (selection === yesButtonIndex) { diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js deleted file mode 100644 index be675d5ed..000000000 --- a/src/stores/UIStore.js +++ /dev/null @@ -1,110 +0,0 @@ -import { - action, observable, computed, reaction, -} from 'mobx'; -import { theme } from '@meetfranz/theme'; -import { nativeTheme, systemPreferences } from '@electron/remote'; - -import Store from './lib/Store'; -import { isMac, isWindows } from '../environment'; - -export default class UIStore extends Store { - @observable showServicesUpdatedInfoBar = false; - - @observable isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; - - constructor(...args) { - super(...args); - - // Register action handlers - this.actions.ui.openSettings.listen(this._openSettings.bind(this)); - this.actions.ui.closeSettings.listen(this._closeSettings.bind(this)); - this.actions.ui.toggleServiceUpdatedInfoBar.listen( - this._toggleServiceUpdatedInfoBar.bind(this), - ); - - // Listen for theme change on MacOS - if (isMac) { - systemPreferences.subscribeNotification( - 'AppleInterfaceThemeChangedNotification', - () => { - this.isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; - this.actions.service.shareSettingsWithServiceProcess(); - }, - ); - } - - if (isWindows) { - nativeTheme.on('updated', () => { - this.isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; - this.actions.service.shareSettingsWithServiceProcess(); - }); - } - } - - setup() { - reaction( - () => ( - this.isDarkThemeActive - ), - () => { - this._setupThemeInDOM(); - }, - { fireImmediately: true }, - ); - } - - @computed get showMessageBadgesEvenWhenMuted() { - const settings = this.stores.settings.all; - - return ( - (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) - || !settings.app.isAppMuted - ); - } - - @computed get isDarkThemeActive() { - const isWithAdaptableInDarkMode = this.stores.settings.all.app.adaptableDarkMode - && this.isOsDarkThemeActive; - const isWithoutAdaptableInDarkMode = this.stores.settings.all.app.darkMode - && !this.stores.settings.all.app.adaptableDarkMode; - const isInDarkMode = this.stores.settings.all.app.darkMode; - return !!(isWithAdaptableInDarkMode - || isWithoutAdaptableInDarkMode - || isInDarkMode); - } - - @computed get theme() { - const themeId = (this.isDarkThemeActive || this.stores.settings.app.darkMode) ? 'dark' : 'default'; - const { accentColor } = this.stores.settings.app; - return theme(themeId, accentColor); - } - - // Actions - @action _openSettings({ path = '/settings' }) { - const settingsPath = path !== '/settings' ? `/settings/${path}` : path; - this.stores.router.push(settingsPath); - } - - @action _closeSettings() { - this.stores.router.push('/'); - } - - @action _toggleServiceUpdatedInfoBar({ visible }) { - let visibility = visible; - if (visibility === null) { - visibility = !this.showServicesUpdatedInfoBar; - } - this.showServicesUpdatedInfoBar = visibility; - } - - // Reactions - _setupThemeInDOM() { - const body = document.querySelector('body'); - - if (!this.isDarkThemeActive) { - body.classList.remove('theme__dark'); - } else { - body.classList.add('theme__dark'); - } - } -} diff --git a/src/stores/UIStore.ts b/src/stores/UIStore.ts new file mode 100644 index 000000000..ec48eeb40 --- /dev/null +++ b/src/stores/UIStore.ts @@ -0,0 +1,117 @@ +import { action, observable, computed, reaction } from 'mobx'; +import { theme, ThemeType } from '@meetfranz/theme'; +import { nativeTheme, systemPreferences } from '@electron/remote'; + +import Store from './lib/Store'; +import { isMac, isWindows } from '../environment'; + +export default class UIStore extends Store { + actions: any; + + stores: any; + + @observable showServicesUpdatedInfoBar = false; + + @observable isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; + + constructor(...args) { + super(...args); + + // Register action handlers + this.actions.ui.openSettings.listen(this._openSettings.bind(this)); + this.actions.ui.closeSettings.listen(this._closeSettings.bind(this)); + this.actions.ui.toggleServiceUpdatedInfoBar.listen( + this._toggleServiceUpdatedInfoBar.bind(this), + ); + + // Listen for theme change on MacOS + if (isMac) { + systemPreferences.subscribeNotification( + 'AppleInterfaceThemeChangedNotification', + () => { + this.isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; + this.actions.service.shareSettingsWithServiceProcess(); + }, + ); + } + + if (isWindows) { + nativeTheme.on('updated', () => { + this.isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; + this.actions.service.shareSettingsWithServiceProcess(); + }); + } + } + + setup() { + reaction( + () => this.isDarkThemeActive, + () => { + this._setupThemeInDOM(); + }, + { fireImmediately: true }, + ); + } + + @computed get showMessageBadgesEvenWhenMuted() { + const settings = this.stores.settings.all; + + return ( + (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || + !settings.app.isAppMuted + ); + } + + @computed get isDarkThemeActive() { + const isWithAdaptableInDarkMode = + this.stores.settings.all.app.adaptableDarkMode && + this.isOsDarkThemeActive; + const isWithoutAdaptableInDarkMode = + this.stores.settings.all.app.darkMode && + !this.stores.settings.all.app.adaptableDarkMode; + const isInDarkMode = this.stores.settings.all.app.darkMode; + return !!( + isWithAdaptableInDarkMode || + isWithoutAdaptableInDarkMode || + isInDarkMode + ); + } + + @computed get theme() { + const themeId = + this.isDarkThemeActive || this.stores.settings.app.darkMode + ? ThemeType.dark + : ThemeType.default; + const { accentColor } = this.stores.settings.app; + return theme(themeId, accentColor); + } + + // Actions + @action _openSettings({ path = '/settings' }) { + const settingsPath = path !== '/settings' ? `/settings/${path}` : path; + this.stores.router.push(settingsPath); + } + + @action _closeSettings() { + this.stores.router.push('/'); + } + + @action _toggleServiceUpdatedInfoBar({ visible }) { + let visibility = visible; + if (visibility === null) { + visibility = !this.showServicesUpdatedInfoBar; + } + this.showServicesUpdatedInfoBar = visibility; + } + + // Reactions + _setupThemeInDOM() { + const body = document.querySelector('body'); + + if (!this.isDarkThemeActive) { + body?.classList.remove('theme__dark'); + } else { + body?.classList.add('theme__dark'); + } + } +} diff --git a/tsconfig.json b/tsconfig.json index 2676f392d..c01c40f68 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,34 @@ { - "extends": "./tsconfig.settings.json", "compilerOptions": { "outDir": ".tmp", - "rootDir": "./" + "rootDir": "./", + "baseUrl": ".", + "strict": true, + "target": "esnext", + "lib": ["esnext", "dom"], + "module": "commonjs", + "jsx": "react", + "typeRoots": ["@types", "node_modules/@types"], + "moduleResolution": "node", + "types": ["node"], + "sourceMap": true, + "skipLibCheck": true, + "noImplicitAny": false, // TODO: Need to switch + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "composite": true, + "esModuleInterop": true, + "importHelpers": true, + "removeComments": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "preserveConstEnums": true, + "strictNullChecks": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true } } diff --git a/tsconfig.settings.json b/tsconfig.settings.json deleted file mode 100644 index bd4669e01..000000000 --- a/tsconfig.settings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": "@tsconfig/node14/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "target": "esnext", - "lib": ["es2015", "es2017", "dom"], - "jsx": "react", - "typeRoots": ["node_modules/@types"], - "moduleResolution": "node", - "types": ["node"], - "sourceMap": true, - "noImplicitAny": false, // TODO: Need to switch - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "composite": true, - "esModuleInterop": true, - "importHelpers": true, - "removeComments": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "preserveConstEnums": true, - "strictNullChecks": true, - } -} diff --git a/uidev/tsconfig.json b/uidev/tsconfig.json index fb57639c8..60459d69e 100644 --- a/uidev/tsconfig.json +++ b/uidev/tsconfig.json @@ -1,14 +1,16 @@ { - "extends": "../tsconfig.settings.json", + "extends": "../tsconfig.json", "compilerOptions": { "baseUrl": "..", "outDir": "lib", - "rootDir": "src", + "rootDir": "src" }, - "references": [{ - "path": "../packages/theme" - }, - { - "path": "../packages/forms" - }] + "references": [ + { + "path": "../packages/theme" + }, + { + "path": "../packages/forms" + } + ] } -- cgit v1.2.3-70-g09d2 From 087113d8a1214ba4c7df03bfe66747d8d944280c Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Tue, 14 Sep 2021 11:03:28 +0200 Subject: chore: convert JS to TS (#1934) --- .eslintrc | 31 ++++++++++--- package-lock.json | 6 +++ package.json | 1 + src/electron/Settings.js | 61 ------------------------- src/electron/Settings.ts | 66 +++++++++++++++++++++++++++ src/electron/deepLinking.js | 7 --- src/electron/deepLinking.ts | 7 +++ src/electron/exception.js | 4 -- src/electron/exception.ts | 4 ++ src/electron/ipc-api/appIndicator.js | 73 ------------------------------ src/electron/ipc-api/appIndicator.ts | 83 ++++++++++++++++++++++++++++++++++ src/electron/ipc-api/autoUpdate.js | 84 ---------------------------------- src/electron/ipc-api/autoUpdate.ts | 88 ++++++++++++++++++++++++++++++++++++ src/electron/ipc-api/cld.js | 20 -------- src/electron/ipc-api/cld.ts | 23 ++++++++++ src/electron/ipc-api/dnd.js | 23 ---------- src/electron/ipc-api/dnd.ts | 23 ++++++++++ src/electron/ipc-api/download.js | 51 --------------------- src/electron/ipc-api/download.ts | 59 ++++++++++++++++++++++++ src/electron/ipc-api/focusState.js | 9 ---- src/electron/ipc-api/focusState.ts | 11 +++++ src/electron/ipc-api/index.js | 19 -------- src/electron/ipc-api/index.ts | 24 ++++++++++ src/electron/ipc-api/localServer.js | 48 -------------------- src/electron/ipc-api/localServer.ts | 47 +++++++++++++++++++ src/electron/ipc-api/settings.js | 14 ------ src/electron/ipc-api/settings.ts | 14 ++++++ src/electron/macOSPermissions.js | 80 -------------------------------- src/electron/macOSPermissions.ts | 83 ++++++++++++++++++++++++++++++++++ src/electron/webview-ime-focus.js | 41 ----------------- src/electron/windowUtils.js | 11 ----- src/electron/windowUtils.ts | 13 ++++++ 32 files changed, 576 insertions(+), 552 deletions(-) delete mode 100644 src/electron/Settings.js create mode 100644 src/electron/Settings.ts delete mode 100644 src/electron/deepLinking.js create mode 100644 src/electron/deepLinking.ts delete mode 100644 src/electron/exception.js create mode 100644 src/electron/exception.ts delete mode 100644 src/electron/ipc-api/appIndicator.js create mode 100644 src/electron/ipc-api/appIndicator.ts delete mode 100644 src/electron/ipc-api/autoUpdate.js create mode 100644 src/electron/ipc-api/autoUpdate.ts delete mode 100644 src/electron/ipc-api/cld.js create mode 100644 src/electron/ipc-api/cld.ts delete mode 100644 src/electron/ipc-api/dnd.js create mode 100644 src/electron/ipc-api/dnd.ts delete mode 100644 src/electron/ipc-api/download.js create mode 100644 src/electron/ipc-api/download.ts delete mode 100644 src/electron/ipc-api/focusState.js create mode 100644 src/electron/ipc-api/focusState.ts delete mode 100644 src/electron/ipc-api/index.js create mode 100644 src/electron/ipc-api/index.ts delete mode 100644 src/electron/ipc-api/localServer.js create mode 100644 src/electron/ipc-api/localServer.ts delete mode 100644 src/electron/ipc-api/settings.js create mode 100644 src/electron/ipc-api/settings.ts delete mode 100644 src/electron/macOSPermissions.js create mode 100644 src/electron/macOSPermissions.ts delete mode 100644 src/electron/webview-ime-focus.js delete mode 100644 src/electron/windowUtils.js create mode 100644 src/electron/windowUtils.ts diff --git a/.eslintrc b/.eslintrc index 121f28eda..26159ed87 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,16 +2,23 @@ "root": true, "parser": "@babel/eslint-parser", "extends": "eslint-config-airbnb", - "plugins": ["jest"], + "plugins": [ + "jest" + ], "overrides": [ { - "files": ["**/*.ts", "**/*.tsx"], + "files": [ + "**/*.ts", + "**/*.tsx" + ], "env": { "browser": true, "es6": true, "node": true }, - "extends": ["airbnb-typescript"], + "extends": [ + "airbnb-typescript" + ], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { @@ -21,13 +28,16 @@ "sourceType": "module", "project": "./tsconfig.json" }, - "plugins": ["@typescript-eslint"], + "plugins": [ + "@typescript-eslint" + ], "rules": { // eslint "arrow-parens": 0, "array-callback-return": 1, "class-methods-use-this": 0, "consistent-return": 0, + "function-paren-newline": 0, "implicit-arrow-linebreak": 0, "linebreak-style": 0, "max-len": 0, @@ -70,9 +80,13 @@ "jsx-a11y/label-has-for": [ 2, { - "components": ["Label"], + "components": [ + "Label" + ], "required": { - "every": ["id"] + "every": [ + "id" + ] }, "allowChildren": false } @@ -113,7 +127,10 @@ "no-console": [ 1, { - "allow": ["warn", "error"] + "allow": [ + "warn", + "error" + ] } ], "no-param-reassign": 1, diff --git a/package-lock.json b/package-lock.json index 2128f78e3..a278c76f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6805,6 +6805,12 @@ "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", "dev": true }, + "@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "dev": true + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", diff --git a/package.json b/package.json index 9b9382e3c..c85e73eb8 100644 --- a/package.json +++ b/package.json @@ -154,6 +154,7 @@ "@types/expect.js": "0.3.29", "@types/fs-extra": "9.0.12", "@types/lodash": "4.14.172", + "@types/mime-types": "2.1.1", "@types/mocha": "9.0.0", "@types/ms": "0.7.31", "@types/node": "14.17.6", diff --git a/src/electron/Settings.js b/src/electron/Settings.js deleted file mode 100644 index 3e11bb175..000000000 --- a/src/electron/Settings.js +++ /dev/null @@ -1,61 +0,0 @@ -import { observable, toJS } from 'mobx'; -import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; -import { userDataPath } from '../environment'; - -const debug = require('debug')('Ferdi:Settings'); - -export default class Settings { - type = ''; - - @observable store = {}; - - constructor(type, defaultState = {}) { - this.type = type; - this.store = defaultState; - this.defaultState = defaultState; - - if (!pathExistsSync(this.settingsFile)) { - this._writeFile(); - } else { - this._hydrate(); - } - } - - set(settings) { - this.store = this._merge(settings); - - this._writeFile(); - } - - get all() { - return this.store; - } - - get allSerialized() { - return toJS(this.store); - } - - get(key) { - return this.store[key]; - } - - _merge(settings) { - return Object.assign(this.defaultState, this.store, settings); - } - - _hydrate() { - this.store = this._merge(readJsonSync(this.settingsFile)); - debug('Hydrate store', this.type, this.allSerialized); - } - - _writeFile() { - outputJsonSync(this.settingsFile, this.store, { - spaces: 2, - }); - debug('Write settings file', this.type, this.allSerialized); - } - - get settingsFile() { - return userDataPath('config', `${this.type === 'app' ? 'settings' : this.type}.json`); - } -} diff --git a/src/electron/Settings.ts b/src/electron/Settings.ts new file mode 100644 index 000000000..a1344aa97 --- /dev/null +++ b/src/electron/Settings.ts @@ -0,0 +1,66 @@ +import { observable, toJS } from 'mobx'; +import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; +import { userDataPath } from '../environment'; + +const debug = require('debug')('Ferdi:Settings'); + +export default class Settings { + type = ''; + + defaultState: {}; + + @observable store = {}; + + constructor(type: string, defaultState = {}) { + this.type = type; + this.store = defaultState; + this.defaultState = defaultState; + + if (!pathExistsSync(this.settingsFile)) { + this._writeFile(); + } else { + this._hydrate(); + } + } + + set(settings) { + this.store = this._merge(settings); + + this._writeFile(); + } + + get all() { + return this.store; + } + + get allSerialized() { + return toJS(this.store); + } + + get(key: string | number) { + return this.store[key]; + } + + _merge(settings) { + return Object.assign(this.defaultState, this.store, settings); + } + + _hydrate() { + this.store = this._merge(readJsonSync(this.settingsFile)); + debug('Hydrate store', this.type, this.allSerialized); + } + + _writeFile() { + outputJsonSync(this.settingsFile, this.store, { + spaces: 2, + }); + debug('Write settings file', this.type, this.allSerialized); + } + + get settingsFile() { + return userDataPath( + 'config', + `${this.type === 'app' ? 'settings' : this.type}.json`, + ); + } +} diff --git a/src/electron/deepLinking.js b/src/electron/deepLinking.js deleted file mode 100644 index 70e5cfb6f..000000000 --- a/src/electron/deepLinking.js +++ /dev/null @@ -1,7 +0,0 @@ -export default function handleDeepLink(window, rawUrl) { - const url = rawUrl.replace('ferdi://', ''); - - if (!url) return; - - window.webContents.send('navigateFromDeepLink', { url }); -} diff --git a/src/electron/deepLinking.ts b/src/electron/deepLinking.ts new file mode 100644 index 000000000..70e5cfb6f --- /dev/null +++ b/src/electron/deepLinking.ts @@ -0,0 +1,7 @@ +export default function handleDeepLink(window, rawUrl) { + const url = rawUrl.replace('ferdi://', ''); + + if (!url) return; + + window.webContents.send('navigateFromDeepLink', { url }); +} diff --git a/src/electron/exception.js b/src/electron/exception.js deleted file mode 100644 index 0065e2604..000000000 --- a/src/electron/exception.js +++ /dev/null @@ -1,4 +0,0 @@ -process.on('uncaughtException', (err) => { - // handle the error safely - console.error(err); -}); diff --git a/src/electron/exception.ts b/src/electron/exception.ts new file mode 100644 index 000000000..0065e2604 --- /dev/null +++ b/src/electron/exception.ts @@ -0,0 +1,4 @@ +process.on('uncaughtException', (err) => { + // handle the error safely + console.error(err); +}); diff --git a/src/electron/ipc-api/appIndicator.js b/src/electron/ipc-api/appIndicator.js deleted file mode 100644 index c6c261d0f..000000000 --- a/src/electron/ipc-api/appIndicator.js +++ /dev/null @@ -1,73 +0,0 @@ -import { app, ipcMain } from 'electron'; -import { join } from 'path'; -import { autorun } from 'mobx'; -import { isMac, isWindows, isLinux } from '../../environment'; - -const INDICATOR_TASKBAR = 'taskbar'; -const FILE_EXTENSION = isWindows ? 'ico' : 'png'; - -let isTrayIconEnabled; - -function getAsset(type, asset) { - return join( - __dirname, '..', '..', 'assets', 'images', type, process.platform, `${asset}.${FILE_EXTENSION}`, - ); -} - -export default (params) => { - autorun(() => { - isTrayIconEnabled = params.settings.app.get('enableSystemTray'); - - if (!isTrayIconEnabled) { - params.trayIcon.hide(); - } else if (isTrayIconEnabled) { - params.trayIcon.show(); - } - }); - - ipcMain.on('updateAppIndicator', (event, args) => { - // Flash TaskBar for windows, bounce Dock on Mac - if (!app.mainWindow.isFocused()) { - if (params.settings.app.get('notifyTaskBarOnMessage')) { - if (isWindows) { - app.mainWindow.flashFrame(true); - app.mainWindow.once('focus', () => app.mainWindow.flashFrame(false)); - } else if (isMac) { - app.dock.bounce('informational'); - } - } - } - - // Update badge - if (isMac - && typeof (args.indicator) === 'string') { - app.dock.setBadge(args.indicator); - } - - if ((isMac || isLinux) - && typeof (args.indicator) === 'number' - ) { - app.badgeCount = args.indicator; - } - - if (isWindows) { - if (typeof args.indicator === 'number' - && args.indicator !== 0) { - params.mainWindow.setOverlayIcon( - getAsset('taskbar', `${INDICATOR_TASKBAR}-${(args.indicator >= 10 ? 10 : args.indicator)}`), - '', - ); - } else if (typeof args.indicator === 'string') { - params.mainWindow.setOverlayIcon( - getAsset('taskbar', `${INDICATOR_TASKBAR}-alert`), - '', - ); - } else { - params.mainWindow.setOverlayIcon(null, ''); - } - } - - // Update Tray - params.trayIcon.setIndicator(args.indicator); - }); -}; diff --git a/src/electron/ipc-api/appIndicator.ts b/src/electron/ipc-api/appIndicator.ts new file mode 100644 index 000000000..5b5f2bac7 --- /dev/null +++ b/src/electron/ipc-api/appIndicator.ts @@ -0,0 +1,83 @@ +import { app, ipcMain } from 'electron'; +import { join } from 'path'; +import { autorun } from 'mobx'; +import { isMac, isWindows, isLinux } from '../../environment'; + +const INDICATOR_TASKBAR = 'taskbar'; +const FILE_EXTENSION = isWindows ? 'ico' : 'png'; + +let isTrayIconEnabled: boolean; + +function getAsset(type: 'tray' | 'taskbar', asset: string) { + return join( + __dirname, + '..', + '..', + 'assets', + 'images', + type, + process.platform, + `${asset}.${FILE_EXTENSION}`, + ); +} + +export default params => { + autorun(() => { + isTrayIconEnabled = params.settings.app.get('enableSystemTray'); + + if (!isTrayIconEnabled) { + params.trayIcon.hide(); + } else if (isTrayIconEnabled) { + params.trayIcon.show(); + } + }); + + ipcMain.on('updateAppIndicator', (_event, args) => { + // Flash TaskBar for windows, bounce Dock on Mac + if (!(app as any).mainWindow.isFocused()) { + if (params.settings.app.get('notifyTaskBarOnMessage')) { + if (isWindows) { + (app as any).mainWindow.flashFrame(true); + (app as any).mainWindow.once('focus', () => + (app as any).mainWindow.flashFrame(false), + ); + } else if (isMac) { + app.dock.bounce('informational'); + } + } + } + + // Update badge + if (isMac && typeof args.indicator === 'string') { + app.dock.setBadge(args.indicator); + } + + if ((isMac || isLinux) && typeof args.indicator === 'number') { + app.badgeCount = args.indicator; + } + + if (isWindows) { + if (typeof args.indicator === 'number' && args.indicator !== 0) { + params.mainWindow.setOverlayIcon( + getAsset( + 'taskbar', + `${INDICATOR_TASKBAR}-${ + args.indicator >= 10 ? 10 : args.indicator + }`, + ), + '', + ); + } else if (typeof args.indicator === 'string') { + params.mainWindow.setOverlayIcon( + getAsset('taskbar', `${INDICATOR_TASKBAR}-alert`), + '', + ); + } else { + params.mainWindow.setOverlayIcon(null, ''); + } + } + + // Update Tray + params.trayIcon.setIndicator(args.indicator); + }); +}; diff --git a/src/electron/ipc-api/autoUpdate.js b/src/electron/ipc-api/autoUpdate.js deleted file mode 100644 index 255595b9e..000000000 --- a/src/electron/ipc-api/autoUpdate.js +++ /dev/null @@ -1,84 +0,0 @@ -import { app, ipcMain } from 'electron'; -import { autoUpdater } from 'electron-updater'; -import { GITHUB_NIGHTLIES_REPO_NAME, GITHUB_ORG_NAME } from '../../config'; -import { isMac, isWindows } from '../../environment'; - -const debug = require('debug')('Ferdi:ipcApi:autoUpdate'); - -export default (params) => { - const enableUpdate = Boolean(params.settings.app.get('automaticUpdates')); - - if (!enableUpdate) { - autoUpdater.autoInstallOnAppQuit = false; - autoUpdater.autoDownload = false; - } else if (isMac || isWindows || process.env.APPIMAGE) { - ipcMain.on('autoUpdate', (event, args) => { - if (enableUpdate) { - try { - autoUpdater.autoInstallOnAppQuit = false; - autoUpdater.allowPrerelease = Boolean(params.settings.app.get('beta')); - autoUpdater.channel = autoUpdater.allowPrerelease ? 'beta' : 'latest'; - - if (params.settings.app.get('nightly')) { - autoUpdater.allowPrerelease = Boolean(params.settings.app.get('nightly')); - autoUpdater.channel = 'alpha'; - autoUpdater.setFeedURL({ - provider: 'github', - owner: GITHUB_ORG_NAME, - repo: GITHUB_NIGHTLIES_REPO_NAME, - }); - } - - if (args.action === 'check') { - debug('checking for update'); - autoUpdater.checkForUpdates(); - } else if (args.action === 'install') { - debug('installing update'); - autoUpdater.quitAndInstall(); - // we need to send a quit event - setTimeout(() => { - app.quit(); - }, 20); - } - } catch (e) { - console.error(e); - event.sender.send('autoUpdate', { error: true }); - } - } - }); - - autoUpdater.on('update-not-available', () => { - debug('update-not-available'); - params.mainWindow.webContents.send('autoUpdate', { available: false }); - }); - - autoUpdater.on('update-available', (event) => { - debug('update-available'); - - if (enableUpdate) { - params.mainWindow.webContents.send('autoUpdate', { - version: event.version, - available: true, - }); - } - }); - - autoUpdater.on('download-progress', (progressObj) => { - let logMessage = `Download speed: ${progressObj.bytesPerSecond}`; - logMessage = `${logMessage} - Downloaded ${progressObj.percent}%`; - logMessage = `${logMessage} (${progressObj.transferred}/${progressObj.total})`; - - debug(logMessage); - }); - - autoUpdater.on('update-downloaded', () => { - debug('update-downloaded'); - params.mainWindow.webContents.send('autoUpdate', { downloaded: true }); - }); - - autoUpdater.on('error', () => { - debug('update-error'); - params.mainWindow.webContents.send('autoUpdate', { error: true }); - }); - } -}; diff --git a/src/electron/ipc-api/autoUpdate.ts b/src/electron/ipc-api/autoUpdate.ts new file mode 100644 index 000000000..70890539d --- /dev/null +++ b/src/electron/ipc-api/autoUpdate.ts @@ -0,0 +1,88 @@ +import { app, ipcMain, BrowserWindow } from 'electron'; +import { autoUpdater } from 'electron-updater'; +import { GITHUB_NIGHTLIES_REPO_NAME, GITHUB_ORG_NAME } from '../../config'; +import { isMac, isWindows } from '../../environment'; + +const debug = require('debug')('Ferdi:ipcApi:autoUpdate'); + +export default (params: { mainWindow: BrowserWindow; settings: any }) => { + const enableUpdate = Boolean(params.settings.app.get('automaticUpdates')); + + if (!enableUpdate) { + autoUpdater.autoInstallOnAppQuit = false; + autoUpdater.autoDownload = false; + } else if (isMac || isWindows || process.env.APPIMAGE) { + ipcMain.on('autoUpdate', (event, args) => { + if (enableUpdate) { + try { + autoUpdater.autoInstallOnAppQuit = false; + autoUpdater.allowPrerelease = Boolean( + params.settings.app.get('beta'), + ); + autoUpdater.channel = autoUpdater.allowPrerelease ? 'beta' : 'latest'; + + if (params.settings.app.get('nightly')) { + autoUpdater.allowPrerelease = Boolean( + params.settings.app.get('nightly'), + ); + autoUpdater.channel = 'alpha'; + autoUpdater.setFeedURL({ + provider: 'github', + owner: GITHUB_ORG_NAME, + repo: GITHUB_NIGHTLIES_REPO_NAME, + }); + } + + if (args.action === 'check') { + debug('checking for update'); + autoUpdater.checkForUpdates(); + } else if (args.action === 'install') { + debug('installing update'); + autoUpdater.quitAndInstall(); + // we need to send a quit event + setTimeout(() => { + app.quit(); + }, 20); + } + } catch (e) { + console.error(e); + event.sender.send('autoUpdate', { error: true }); + } + } + }); + + autoUpdater.on('update-not-available', () => { + debug('update-not-available'); + params.mainWindow.webContents.send('autoUpdate', { available: false }); + }); + + autoUpdater.on('update-available', event => { + debug('update-available'); + + if (enableUpdate) { + params.mainWindow.webContents.send('autoUpdate', { + version: event.version, + available: true, + }); + } + }); + + autoUpdater.on('download-progress', progressObj => { + let logMessage = `Download speed: ${progressObj.bytesPerSecond}`; + logMessage = `${logMessage} - Downloaded ${progressObj.percent}%`; + logMessage = `${logMessage} (${progressObj.transferred}/${progressObj.total})`; + + debug(logMessage); + }); + + autoUpdater.on('update-downloaded', () => { + debug('update-downloaded'); + params.mainWindow.webContents.send('autoUpdate', { downloaded: true }); + }); + + autoUpdater.on('error', () => { + debug('update-error'); + params.mainWindow.webContents.send('autoUpdate', { error: true }); + }); + } +}; diff --git a/src/electron/ipc-api/cld.js b/src/electron/ipc-api/cld.js deleted file mode 100644 index 73e320ad9..000000000 --- a/src/electron/ipc-api/cld.js +++ /dev/null @@ -1,20 +0,0 @@ -import { ipcMain } from 'electron'; -import cld from 'cld'; - -const debug = require('debug')('Ferdi:ipcApi:cld'); - -export default async () => { - ipcMain.handle('detect-language', async (event, { sample }) => { - try { - const result = await cld.detect(sample); - debug('Checking language', 'probability', result.languages); - if (result.reliable) { - debug('Language detected reliably, setting spellchecker language to', result.languages[0].code); - - return result.languages[0].code; - } - } catch (e) { - console.error(e); - } - }); -}; diff --git a/src/electron/ipc-api/cld.ts b/src/electron/ipc-api/cld.ts new file mode 100644 index 000000000..b907f3730 --- /dev/null +++ b/src/electron/ipc-api/cld.ts @@ -0,0 +1,23 @@ +import { ipcMain } from 'electron'; +import cld from 'cld'; + +const debug = require('debug')('Ferdi:ipcApi:cld'); + +export default async () => { + ipcMain.handle('detect-language', async (_event, { sample }) => { + try { + const result = await cld.detect(sample); + debug('Checking language', 'probability', result.languages); + if (result.reliable) { + debug( + 'Language detected reliably, setting spellchecker language to', + result.languages[0].code, + ); + + return result.languages[0].code; + } + } catch (e) { + console.error(e); + } + }); +}; diff --git a/src/electron/ipc-api/dnd.js b/src/electron/ipc-api/dnd.js deleted file mode 100644 index 6fb8999a3..000000000 --- a/src/electron/ipc-api/dnd.js +++ /dev/null @@ -1,23 +0,0 @@ -import { ipcMain } from 'electron'; -import { getDoNotDisturb } from 'macos-notification-state'; -import { isMac } from '../../environment'; - -const debug = require('debug')('Ferdi:ipcApi:dnd'); - -export default async () => { - ipcMain.handle('get-dnd', async () => { - if (!isMac) { - debug('Not on macOS, returning', false); - return false; - } - - try { - const isDND = getDoNotDisturb(); - debug('Fetching DND state, set to', isDND); - return isDND; - } catch (e) { - console.error(e); - return false; - } - }); -}; diff --git a/src/electron/ipc-api/dnd.ts b/src/electron/ipc-api/dnd.ts new file mode 100644 index 000000000..6fb8999a3 --- /dev/null +++ b/src/electron/ipc-api/dnd.ts @@ -0,0 +1,23 @@ +import { ipcMain } from 'electron'; +import { getDoNotDisturb } from 'macos-notification-state'; +import { isMac } from '../../environment'; + +const debug = require('debug')('Ferdi:ipcApi:dnd'); + +export default async () => { + ipcMain.handle('get-dnd', async () => { + if (!isMac) { + debug('Not on macOS, returning', false); + return false; + } + + try { + const isDND = getDoNotDisturb(); + debug('Fetching DND state, set to', isDND); + return isDND; + } catch (e) { + console.error(e); + return false; + } + }); +}; diff --git a/src/electron/ipc-api/download.js b/src/electron/ipc-api/download.js deleted file mode 100644 index ba261ba1e..000000000 --- a/src/electron/ipc-api/download.js +++ /dev/null @@ -1,51 +0,0 @@ -import { ipcMain, dialog, BrowserWindow } from 'electron'; -import { download } from 'electron-dl'; -import mime from 'mime-types'; -import { writeFileSync } from 'fs-extra'; - -const debug = require('debug')('Ferdi:ipcApi:download'); - -function decodeBase64Image(dataString) { - const matches = dataString.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); - - if (matches.length !== 3) { - return new Error('Invalid input string'); - } - - return Buffer.from(matches[2], 'base64'); -} - -export default (params) => { - ipcMain.on('download-file', async (event, { url, content, fileOptions = {} }) => { - const win = BrowserWindow.getFocusedWindow(); - - try { - if (!content) { - const dl = await download(win, url, { - saveAs: true, - }); - debug('File saved to', dl.savePath); - } else { - const extension = mime.extension(fileOptions.mime); - const filename = `${fileOptions.name}.${extension}`; - - try { - const saveDialog = await dialog.showSaveDialog(params.mainWindow, { - defaultPath: filename, - }); - - if (saveDialog.canceled) return; - - const binaryImage = decodeBase64Image(content); - writeFileSync(saveDialog.filePath, binaryImage, 'binary'); - - debug('File blob saved to', saveDialog.filePath); - } catch (err) { - console.log(err); - } - } - } catch (e) { - console.error(e); - } - }); -}; diff --git a/src/electron/ipc-api/download.ts b/src/electron/ipc-api/download.ts new file mode 100644 index 000000000..822658f26 --- /dev/null +++ b/src/electron/ipc-api/download.ts @@ -0,0 +1,59 @@ +import { ipcMain, dialog, BrowserWindow } from 'electron'; +import { download } from 'electron-dl'; +import mime from 'mime-types'; +import { writeFileSync } from 'fs-extra'; +import { PathLike } from 'fs'; + +const debug = require('debug')('Ferdi:ipcApi:download'); + +function decodeBase64Image(dataString: string) { + const matches = dataString.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); + + if (matches?.length !== 3) { + return new Error('Invalid input string'); + } + + return Buffer.from(matches[2], 'base64'); +} + +export default (params: { mainWindow: BrowserWindow }) => { + ipcMain.on( + 'download-file', + async (_event, { url, content, fileOptions = {} }) => { + const win = BrowserWindow.getFocusedWindow(); + + try { + if (!content) { + const dl = await download(win!, url, { + saveAs: true, + }); + debug('File saved to', dl.savePath); + } else { + const extension = mime.extension(fileOptions.mime); + const filename = `${fileOptions.name}.${extension}`; + + try { + const saveDialog = await dialog.showSaveDialog(params.mainWindow, { + defaultPath: filename, + }); + + if (saveDialog.canceled) return; + + const binaryImage = decodeBase64Image(content); + writeFileSync( + saveDialog.filePath as PathLike, + binaryImage as unknown as string, + 'binary', + ); + + debug('File blob saved to', saveDialog.filePath); + } catch (err) { + console.log(err); + } + } + } catch (e) { + console.error(e); + } + }, + ); +}; diff --git a/src/electron/ipc-api/focusState.js b/src/electron/ipc-api/focusState.js deleted file mode 100644 index 0b4a0d8f3..000000000 --- a/src/electron/ipc-api/focusState.js +++ /dev/null @@ -1,9 +0,0 @@ -export default (params) => { - params.mainWindow.on('focus', () => { - params.mainWindow.webContents.send('isWindowFocused', true); - }); - - params.mainWindow.on('blur', () => { - params.mainWindow.webContents.send('isWindowFocused', false); - }); -}; diff --git a/src/electron/ipc-api/focusState.ts b/src/electron/ipc-api/focusState.ts new file mode 100644 index 000000000..01aa1a971 --- /dev/null +++ b/src/electron/ipc-api/focusState.ts @@ -0,0 +1,11 @@ +import { BrowserWindow } from 'electron'; + +export default (params: { mainWindow: BrowserWindow }) => { + params.mainWindow.on('focus', () => { + params.mainWindow.webContents.send('isWindowFocused', true); + }); + + params.mainWindow.on('blur', () => { + params.mainWindow.webContents.send('isWindowFocused', false); + }); +}; diff --git a/src/electron/ipc-api/index.js b/src/electron/ipc-api/index.js deleted file mode 100644 index 5da1edc39..000000000 --- a/src/electron/ipc-api/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import autoUpdate from './autoUpdate'; -import settings from './settings'; -import appIndicator from './appIndicator'; -import download from './download'; -import localServer from './localServer'; -import cld from './cld'; -import dnd from './dnd'; -import focusState from './focusState'; - -export default (params) => { - settings(params); - autoUpdate(params); - appIndicator(params); - download(params); - localServer(params); - cld(params); - dnd(); - focusState(params); -}; diff --git a/src/electron/ipc-api/index.ts b/src/electron/ipc-api/index.ts new file mode 100644 index 000000000..06c50be10 --- /dev/null +++ b/src/electron/ipc-api/index.ts @@ -0,0 +1,24 @@ +import { BrowserWindow, Tray } from 'electron'; +import autoUpdate from './autoUpdate'; +import settings from './settings'; +import appIndicator from './appIndicator'; +import download from './download'; +import localServer from './localServer'; +import cld from './cld'; +import dnd from './dnd'; +import focusState from './focusState'; + +export default (params: { + mainWindow: BrowserWindow; + settings: any; + tray: Tray; +}) => { + settings(params); + autoUpdate(params); + appIndicator(params); + download(params); + localServer(params); + cld(); + dnd(); + focusState(params); +}; diff --git a/src/electron/ipc-api/localServer.js b/src/electron/ipc-api/localServer.js deleted file mode 100644 index 591e70504..000000000 --- a/src/electron/ipc-api/localServer.js +++ /dev/null @@ -1,48 +0,0 @@ -import { ipcMain } from 'electron'; -import net from 'net'; -import { LOCAL_HOSTNAME, LOCAL_PORT } from '../../config'; -import { userDataPath } from '../../environment'; -import startServer from '../../internal-server/start'; - -const portInUse = function (port) { - return new Promise((resolve) => { - const server = net.createServer((socket) => { - socket.write('Echo server\r\n'); - socket.pipe(socket); - }); - - server.listen(port, LOCAL_HOSTNAME); - server.on('error', () => { - resolve(true); - }); - server.on('listening', () => { - server.close(); - resolve(false); - }); - }); -}; - -let localServerStarted = false; - -export default (params) => { - ipcMain.on('startLocalServer', () => { - if (!localServerStarted) { - // Find next unused port for server - let port = LOCAL_PORT; - (async () => { - // eslint-disable-next-line no-await-in-loop - while ((await portInUse(port)) && port < LOCAL_PORT + 10) { - port += 1; - } - console.log('Starting local server on port', port); - - startServer(userDataPath(), port); - - params.mainWindow.webContents.send('localServerPort', { - port, - }); - })(); - localServerStarted = true; - } - }); -}; diff --git a/src/electron/ipc-api/localServer.ts b/src/electron/ipc-api/localServer.ts new file mode 100644 index 000000000..d318b93a5 --- /dev/null +++ b/src/electron/ipc-api/localServer.ts @@ -0,0 +1,47 @@ +import { ipcMain, BrowserWindow } from 'electron'; +import net from 'net'; +import { LOCAL_HOSTNAME, LOCAL_PORT } from '../../config'; +import { userDataPath } from '../../environment'; +import startServer from '../../internal-server/start'; + +const portInUse = (port: number): Promise => + new Promise(resolve => { + const server = net.createServer(socket => { + socket.write('Echo server\r\n'); + socket.pipe(socket); + }); + + server.listen(port, LOCAL_HOSTNAME); + server.on('error', () => { + resolve(true); + }); + server.on('listening', () => { + server.close(); + resolve(false); + }); + }); + +let localServerStarted = false; + +export default (params: { mainWindow: BrowserWindow }) => { + ipcMain.on('startLocalServer', () => { + if (!localServerStarted) { + // Find next unused port for server + let port = LOCAL_PORT; + (async () => { + // eslint-disable-next-line no-await-in-loop + while ((await portInUse(port)) && port < LOCAL_PORT + 10) { + port += 1; + } + console.log('Starting local server on port', port); + + startServer(userDataPath(), port); + + params.mainWindow.webContents.send('localServerPort', { + port, + }); + })(); + localServerStarted = true; + } + }); +}; diff --git a/src/electron/ipc-api/settings.js b/src/electron/ipc-api/settings.js deleted file mode 100644 index 15182739c..000000000 --- a/src/electron/ipc-api/settings.js +++ /dev/null @@ -1,14 +0,0 @@ -import { ipcMain } from 'electron'; - -export default (params) => { - ipcMain.on('getAppSettings', (event, type) => { - params.mainWindow.webContents.send('appSettings', { - type, - data: params.settings[type].allSerialized, - }); - }); - - ipcMain.on('updateAppSettings', (event, args) => { - params.settings[args.type].set(args.data); - }); -}; diff --git a/src/electron/ipc-api/settings.ts b/src/electron/ipc-api/settings.ts new file mode 100644 index 000000000..72de6866d --- /dev/null +++ b/src/electron/ipc-api/settings.ts @@ -0,0 +1,14 @@ +import { ipcMain, BrowserWindow, Settings } from 'electron'; + +export default (params: { mainWindow: BrowserWindow; settings: Settings }) => { + ipcMain.on('getAppSettings', (_event, type) => { + params.mainWindow.webContents.send('appSettings', { + type, + data: params.settings[type].allSerialized, + }); + }); + + ipcMain.on('updateAppSettings', (_event, args) => { + params.settings[args.type].set(args.data); + }); +}; diff --git a/src/electron/macOSPermissions.js b/src/electron/macOSPermissions.js deleted file mode 100644 index 887af2903..000000000 --- a/src/electron/macOSPermissions.js +++ /dev/null @@ -1,80 +0,0 @@ -import { systemPreferences, dialog } from 'electron'; -import { pathExistsSync, mkdirSync, writeFileSync } from 'fs-extra'; -import macosVersion from 'macos-version'; -import { dirname } from 'path'; -import { askForScreenCaptureAccess } from 'node-mac-permissions'; -import { userDataPath } from '../environment'; - -const debug = require('debug')('Ferdi:macOSPermissions'); - -const isExplicitScreenCapturePermissionReqd = macosVersion.isGreaterThanOrEqualTo('10.15'); -debug(`Should check explicitly for screen-capture permissions: ${isExplicitScreenCapturePermissionReqd}`); - -const filePath = userDataPath('.has-app-requested-screen-capture-permissions'); - -function hasPromptedForScreenCapturePermission() { - if (!isExplicitScreenCapturePermissionReqd) { - return false; - } - - debug('Checking if status file exists'); - return filePath && pathExistsSync(filePath); -} - -function hasScreenCapturePermissionAlreadyBeenGranted() { - if (!isExplicitScreenCapturePermissionReqd) { - return true; - } - - const screenCaptureStatus = systemPreferences.getMediaAccessStatus('screen'); - debug(`screen-capture permissions status: ${screenCaptureStatus}`); - return screenCaptureStatus === 'granted'; -} - -function createStatusFile() { - try { - writeFileSync(filePath, ''); - } catch (error) { - if (error.code === 'ENOENT') { - mkdirSync(dirname(filePath)); - writeFileSync(filePath, ''); - } - - throw error; - } -} - -export const askFormacOSPermissions = async mainWindow => { - debug('Checking camera & microphone permissions'); - systemPreferences.askForMediaAccess('camera'); - systemPreferences.askForMediaAccess('microphone'); - - if (hasScreenCapturePermissionAlreadyBeenGranted()) { - debug('Already obtained screen-capture permissions - writing status file'); - createStatusFile(); - return; - } - - if (!hasPromptedForScreenCapturePermission()) { - debug('Checking screen capture permissions'); - - const { response } = await dialog.showMessageBox(mainWindow, { - type: 'info', - message: 'Enable Screen Sharing', - detail: - 'To enable screen sharing for some services, Ferdi needs the permission to record your screen.', - buttons: ['Allow screen sharing', 'No', 'Ask me later'], - defaultId: 0, - cancelId: 2, - }); - - if (response === 0) { - debug('Asking for access'); - askForScreenCaptureAccess(); - createStatusFile(); - } else if (response === 1) { - debug("Don't ask again"); - createStatusFile(); - } - } -}; diff --git a/src/electron/macOSPermissions.ts b/src/electron/macOSPermissions.ts new file mode 100644 index 000000000..f5a8c7cc4 --- /dev/null +++ b/src/electron/macOSPermissions.ts @@ -0,0 +1,83 @@ +import { systemPreferences, BrowserWindow, dialog } from 'electron'; +import { pathExistsSync, mkdirSync, writeFileSync } from 'fs-extra'; +import macosVersion from 'macos-version'; +import { dirname } from 'path'; +import { askForScreenCaptureAccess } from 'node-mac-permissions'; +import { userDataPath } from '../environment'; + +const debug = require('debug')('Ferdi:macOSPermissions'); + +const isExplicitScreenCapturePermissionReqd = + macosVersion.isGreaterThanOrEqualTo('10.15'); +debug( + `Should check explicitly for screen-capture permissions: ${isExplicitScreenCapturePermissionReqd}`, +); + +const filePath = userDataPath('.has-app-requested-screen-capture-permissions'); + +function hasPromptedForScreenCapturePermission(): boolean { + if (!isExplicitScreenCapturePermissionReqd) { + return false; + } + + debug('Checking if status file exists'); + return filePath && pathExistsSync(filePath); +} + +function hasScreenCapturePermissionAlreadyBeenGranted(): boolean { + if (!isExplicitScreenCapturePermissionReqd) { + return true; + } + + const screenCaptureStatus = systemPreferences.getMediaAccessStatus('screen'); + debug(`screen-capture permissions status: ${screenCaptureStatus}`); + return screenCaptureStatus === 'granted'; +} + +function createStatusFile() { + try { + writeFileSync(filePath, ''); + } catch (error) { + if ((error as any).code === 'ENOENT') { + mkdirSync(dirname(filePath)); + writeFileSync(filePath, ''); + } + + throw error; + } +} + +export const askFormacOSPermissions = async (mainWindow: BrowserWindow) => { + debug('Checking camera & microphone permissions'); + systemPreferences.askForMediaAccess('camera'); + systemPreferences.askForMediaAccess('microphone'); + + if (hasScreenCapturePermissionAlreadyBeenGranted()) { + debug('Already obtained screen-capture permissions - writing status file'); + createStatusFile(); + return; + } + + if (!hasPromptedForScreenCapturePermission()) { + debug('Checking screen capture permissions'); + + const { response } = await dialog.showMessageBox(mainWindow, { + type: 'info', + message: 'Enable Screen Sharing', + detail: + 'To enable screen sharing for some services, Ferdi needs the permission to record your screen.', + buttons: ['Allow screen sharing', 'No', 'Ask me later'], + defaultId: 0, + cancelId: 2, + }); + + if (response === 0) { + debug('Asking for access'); + askForScreenCaptureAccess(); + createStatusFile(); + } else if (response === 1) { + debug("Don't ask again"); + createStatusFile(); + } + } +}; diff --git a/src/electron/webview-ime-focus.js b/src/electron/webview-ime-focus.js deleted file mode 100644 index e187ee0b4..000000000 --- a/src/electron/webview-ime-focus.js +++ /dev/null @@ -1,41 +0,0 @@ -import { webContents } from '@electron/remote'; -import { releaseDocumentFocus } from './webview-ime-focus-helpers'; - -function giveWebviewDocumentFocus(element) { - releaseDocumentFocus(); - - window.requestAnimationFrame(() => { - element.send('claim-document-focus'); - }); -} - -function elementIsUnfocusedWebview(element) { - return element.tagName === 'WEBVIEW' && !webContents.fromId(element.getWebContentsId()).isFocused(); -} - -function webviewDidAutofocus(element) { - function didKeyDown() { - element.removeEventListener('keydown', didKeyDown, true); - giveWebviewDocumentFocus(element); - } - - element.addEventListener('keydown', didKeyDown, true); -} - -function handleAutofocus(element) { - element.addEventListener('ipc-message', (event) => { - if (event.channel === 'autofocus') { - element.focus(); - webviewDidAutofocus(element); - } - }); -} - -function didMouseDown(event) { - if (elementIsUnfocusedWebview(event.target)) { - giveWebviewDocumentFocus(event.target); - } -} - -document.addEventListener('mousedown', didMouseDown, true); -document.querySelectorAll('webview').forEach(handleAutofocus); diff --git a/src/electron/windowUtils.js b/src/electron/windowUtils.js deleted file mode 100644 index 23b946ac4..000000000 --- a/src/electron/windowUtils.js +++ /dev/null @@ -1,11 +0,0 @@ -/* eslint import/prefer-default-export: 0 */ - -import { screen } from 'electron'; - -export function isPositionValid(position) { - const displays = screen.getAllDisplays(); - const { x, y } = position; - return displays.some(({ - workArea, - }) => x >= workArea.x && x <= workArea.x + workArea.width && y >= workArea.y && y <= workArea.y + workArea.height); -} diff --git a/src/electron/windowUtils.ts b/src/electron/windowUtils.ts new file mode 100644 index 000000000..1db1ff246 --- /dev/null +++ b/src/electron/windowUtils.ts @@ -0,0 +1,13 @@ +import { screen } from 'electron'; + +export function isPositionValid(position: { x: number; y: number }) { + const displays = screen.getAllDisplays(); + const { x, y } = position; + return displays.some( + ({ workArea }) => + x >= workArea.x && + x <= workArea.x + workArea.width && + y >= workArea.y && + y <= workArea.y + workArea.height, + ); +} -- cgit v1.2.3-70-g09d2 From 7636c1ed10fc7916ec07622e89712d7dcbf925ee Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 15:02:58 +0530 Subject: refactor: revert the text for the default workspace --- src/i18n/locales/en-US.json | 2 +- src/lib/Menu.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index c66056467..217ae2110 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -144,7 +144,7 @@ "menu.workspaces": "Workspaces", "menu.workspaces.addNewWorkspace": "Add New Workspace...", "menu.workspaces.closeWorkspaceDrawer": "Close workspace drawer", - "menu.workspaces.defaultWorkspace": "Default", + "menu.workspaces.defaultWorkspace": "All services", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Email address", "password.headline": "Forgot password", diff --git a/src/lib/Menu.js b/src/lib/Menu.js index 623638d33..f5e8b2cdf 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -288,7 +288,7 @@ const menuItems = defineMessages({ }, defaultWorkspace: { id: 'menu.workspaces.defaultWorkspace', - defaultMessage: 'Default', + defaultMessage: 'All services', }, todos: { id: 'menu.todos', -- cgit v1.2.3-70-g09d2 From e708f25598358a6ac835d5b15a71811b043e3f77 Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 16:19:26 +0530 Subject: refactor: revert the text for some more fields. --- src/components/auth/Signup.js | 4 ++-- src/components/services/tabs/TabItem.js | 10 +++++----- src/components/settings/recipes/RecipesDashboard.js | 6 +++--- src/components/settings/services/EditServiceForm.js | 2 +- src/components/settings/supportFerdi/SupportFerdiDashboard.js | 2 +- src/containers/settings/EditServiceScreen.js | 8 ++++---- src/containers/settings/EditSettingsScreen.js | 6 +++--- src/containers/settings/EditUserScreen.js | 4 ++-- src/features/workspaces/components/WorkspaceDrawer.js | 4 ++-- src/features/workspaces/components/WorkspacesDashboard.js | 2 +- src/helpers/validation-helpers.ts | 8 ++++---- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js index 4d39835a2..936e0202d 100644 --- a/src/components/auth/Signup.js +++ b/src/components/auth/Signup.js @@ -23,11 +23,11 @@ const messages = defineMessages({ }, firstnameLabel: { id: 'signup.firstname.label', - defaultMessage: 'Firstname', + defaultMessage: 'First Name', }, lastnameLabel: { id: 'signup.lastname.label', - defaultMessage: 'Lastname', + defaultMessage: 'Last Name', }, emailLabel: { id: 'signup.email.label', diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js index b1a3ffbbb..84cef8c0e 100644 --- a/src/components/services/tabs/TabItem.js +++ b/src/components/services/tabs/TabItem.js @@ -48,23 +48,23 @@ const messages = defineMessages({ }, disableService: { id: 'tabs.item.disableService', - defaultMessage: 'Disable Service', + defaultMessage: 'Disable service', }, enableService: { id: 'tabs.item.enableService', - defaultMessage: 'Enable Service', + defaultMessage: 'Enable service', }, hibernateService: { id: 'tabs.item.hibernateService', - defaultMessage: 'Hibernate Service', + defaultMessage: 'Hibernate service', }, wakeUpService: { id: 'tabs.item.wakeUpService', - defaultMessage: 'Wake Up Service', + defaultMessage: 'Wake up service', }, deleteService: { id: 'tabs.item.deleteService', - defaultMessage: 'Delete Service', + defaultMessage: 'Delete service', }, confirmDeleteService: { id: 'tabs.item.confirmDeleteService', diff --git a/src/components/settings/recipes/RecipesDashboard.js b/src/components/settings/recipes/RecipesDashboard.js index e620abf93..44f5bc39a 100644 --- a/src/components/settings/recipes/RecipesDashboard.js +++ b/src/components/settings/recipes/RecipesDashboard.js @@ -18,7 +18,7 @@ import RecipePreview from '../../../models/RecipePreview'; const messages = defineMessages({ headline: { id: 'settings.recipes.headline', - defaultMessage: 'Available Services', + defaultMessage: 'Available services', }, searchService: { id: 'settings.searchService', @@ -47,11 +47,11 @@ const messages = defineMessages({ }, customRecipeIntro: { id: 'settings.recipes.customService.intro', - defaultMessage: 'To add a custom service, copy the recipe folder into:', + defaultMessage: 'To add a custom service, copy the service recipe to:', }, openFolder: { id: 'settings.recipes.customService.openFolder', - defaultMessage: 'Open directory', + defaultMessage: 'Open folder', }, openDevDocs: { id: 'settings.recipes.customService.openDevDocs', diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index 3fbb57cbb..9a9abeab4 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js @@ -26,7 +26,7 @@ const messages = defineMessages({ }, deleteService: { id: 'settings.service.form.deleteButton', - defaultMessage: 'Delete Service', + defaultMessage: 'Delete service', }, openDarkmodeCss: { id: 'settings.service.form.openDarkmodeCss', diff --git a/src/components/settings/supportFerdi/SupportFerdiDashboard.js b/src/components/settings/supportFerdi/SupportFerdiDashboard.js index 64ffe8692..f24e4bd62 100644 --- a/src/components/settings/supportFerdi/SupportFerdiDashboard.js +++ b/src/components/settings/supportFerdi/SupportFerdiDashboard.js @@ -63,7 +63,7 @@ const messages = defineMessages({ }, openSurvey: { id: 'settings.supportFerdi.openSurvey', - defaultMessage: 'Open Survey', + defaultMessage: 'Open survey', }, bannerText: { id: 'settings.supportFerdi.bannerText', diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js index 12e7b9e95..e2ed4eeac 100644 --- a/src/containers/settings/EditServiceScreen.js +++ b/src/containers/settings/EditServiceScreen.js @@ -39,7 +39,7 @@ const messages = defineMessages({ }, enableNotification: { id: 'settings.service.form.enableNotification', - defaultMessage: 'Enable Notifications', + defaultMessage: 'Enable notifications', }, enableBadge: { id: 'settings.service.form.enableBadge', @@ -55,7 +55,7 @@ const messages = defineMessages({ }, customUrl: { id: 'settings.service.form.customUrl', - defaultMessage: 'Service URL', + defaultMessage: 'Custom server', }, indirectMessages: { id: 'settings.service.form.indirectMessages', @@ -95,11 +95,11 @@ const messages = defineMessages({ }, proxyUser: { id: 'settings.service.form.proxy.user', - defaultMessage: 'User', + defaultMessage: 'User (optional)', }, proxyPassword: { id: 'settings.service.form.proxy.password', - defaultMessage: 'Password', + defaultMessage: 'Password (optional)', }, }); diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js index 8834aa1ae..3df433160 100644 --- a/src/containers/settings/EditSettingsScreen.js +++ b/src/containers/settings/EditSettingsScreen.js @@ -118,7 +118,7 @@ const messages = defineMessages({ }, customTodoServer: { id: 'settings.app.form.customTodoServer', - defaultMessage: 'Custom TodoServer', + defaultMessage: 'Custom Todo Server', }, enableLock: { id: 'settings.app.form.enableLock', @@ -130,7 +130,7 @@ const messages = defineMessages({ }, useTouchIdToUnlock: { id: 'settings.app.form.useTouchIdToUnlock', - defaultMessage: 'Allow using Touch ID to unlock', + defaultMessage: 'Allow using TouchID to unlock Ferdi', }, inactivityLock: { id: 'settings.app.form.inactivityLock', @@ -154,7 +154,7 @@ const messages = defineMessages({ }, darkMode: { id: 'settings.app.form.darkMode', - defaultMessage: 'Dark Mode', + defaultMessage: 'Enable Dark Mode', }, adaptableDarkMode: { id: 'settings.app.form.adaptableDarkMode', diff --git a/src/containers/settings/EditUserScreen.js b/src/containers/settings/EditUserScreen.js index 92ef94c29..ca1363c59 100644 --- a/src/containers/settings/EditUserScreen.js +++ b/src/containers/settings/EditUserScreen.js @@ -13,11 +13,11 @@ import { required, email, minLength } from '../../helpers/validation-helpers'; const messages = defineMessages({ firstname: { id: 'settings.user.form.firstname', - defaultMessage: 'Firstname', + defaultMessage: 'First Name', }, lastname: { id: 'settings.user.form.lastname', - defaultMessage: 'Lastname', + defaultMessage: 'Last Name', }, email: { id: 'settings.user.form.email', diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js index 2f57e34a2..63eb4f75c 100644 --- a/src/features/workspaces/components/WorkspaceDrawer.js +++ b/src/features/workspaces/components/WorkspaceDrawer.js @@ -22,11 +22,11 @@ const messages = defineMessages({ }, workspacesSettingsTooltip: { id: 'workspaceDrawer.workspacesSettingsTooltip', - defaultMessage: 'Workspaces settings', + defaultMessage: 'Edit workspaces settings', }, workspaceFeatureInfo: { id: 'workspaceDrawer.workspaceFeatureInfo', - defaultMessage: 'Info about workspace feature', + defaultMessage: '

    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.

    ', }, addNewWorkspaceLabel: { id: 'workspaceDrawer.addNewWorkspaceLabel', diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js index fd279f896..49552df6b 100644 --- a/src/features/workspaces/components/WorkspacesDashboard.js +++ b/src/features/workspaces/components/WorkspacesDashboard.js @@ -40,7 +40,7 @@ const messages = defineMessages({ }, workspaceFeatureInfo: { id: 'settings.workspaces.workspaceFeatureInfo', - defaultMessage: 'Info about workspace feature', + defaultMessage: '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.', }, workspaceFeatureHeadline: { id: 'settings.workspaces.workspaceFeatureHeadline', diff --git a/src/helpers/validation-helpers.ts b/src/helpers/validation-helpers.ts index 80d368b2e..3a9622309 100644 --- a/src/helpers/validation-helpers.ts +++ b/src/helpers/validation-helpers.ts @@ -4,19 +4,19 @@ import isEmail from 'validator/lib/isEmail'; const messages = defineMessages({ required: { id: 'validation.required', - defaultMessage: 'Field is required', + defaultMessage: '{field} is required', }, email: { id: 'validation.email', - defaultMessage: 'Email not valid', + defaultMessage: '{field} is not valid', }, url: { id: 'validation.url', - defaultMessage: 'Not a valid URL', + defaultMessage: '{field} is not a valid URL', }, minLength: { id: 'validation.minLength', - defaultMessage: 'Too few characters', + defaultMessage: '{field} should be at least {length} characters long', }, oneRequired: { id: 'validation.oneRequired', -- cgit v1.2.3-70-g09d2 From 8a98e962363ad94e68aecea58e3df09985a9f32a Mon Sep 17 00:00:00 2001 From: Vijay A Date: Tue, 14 Sep 2021 17:22:05 +0530 Subject: refactor: revert the text for some more fields. --- src/components/AppUpdateInfoBar.js | 2 +- src/components/auth/Login.js | 2 +- src/components/auth/Password.js | 4 +- .../content/ErrorHandlers/WebviewErrorHandler.js | 2 +- .../settings/account/AccountDashboard.js | 2 +- src/components/settings/user/EditUserForm.js | 6 +- src/i18n/globalMessages.js | 2 +- src/i18n/locales/en-US.json | 80 +++++++++++----------- src/lib/Menu.js | 4 +- 9 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/components/AppUpdateInfoBar.js b/src/components/AppUpdateInfoBar.js index 9dc86bd1d..47b730bde 100644 --- a/src/components/AppUpdateInfoBar.js +++ b/src/components/AppUpdateInfoBar.js @@ -13,7 +13,7 @@ const messages = defineMessages({ }, changelog: { id: 'infobar.buttonChangelog', - defaultMessage: 'Changelog', + defaultMessage: 'What is new?', }, buttonInstallUpdate: { id: 'infobar.buttonInstallUpdate', diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js index a47834e19..286d2dec8 100644 --- a/src/components/auth/Login.js +++ b/src/components/auth/Login.js @@ -67,7 +67,7 @@ const messages = defineMessages({ }, passwordLink: { id: 'login.link.password', - defaultMessage: 'Forgot password', + defaultMessage: 'Reset password', }, }); diff --git a/src/components/auth/Password.js b/src/components/auth/Password.js index 74346b382..3e678f638 100644 --- a/src/components/auth/Password.js +++ b/src/components/auth/Password.js @@ -14,7 +14,7 @@ import globalMessages from '../../i18n/globalMessages'; const messages = defineMessages({ headline: { id: 'password.headline', - defaultMessage: 'Forgot password', + defaultMessage: 'Reset password', }, emailLabel: { id: 'password.email.label', @@ -26,7 +26,7 @@ const messages = defineMessages({ }, noUser: { id: 'password.noUser', - defaultMessage: 'No user affiliated with that email address', + defaultMessage: 'No user with that email address was found', }, signupLink: { id: 'password.link.signup', diff --git a/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js b/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js index 41d84c0b0..b00db8c3f 100644 --- a/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js +++ b/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js @@ -27,7 +27,7 @@ const messages = defineMessages({ }, errorMessage: { id: 'service.errorHandler.message', - defaultMessage: 'Error:', + defaultMessage: 'Error', }, }); diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 8e9e668d0..66edc4975 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js @@ -21,7 +21,7 @@ const messages = defineMessages({ }, accountEditButton: { id: 'settings.account.account.editButton', - defaultMessage: 'Edit Account', + defaultMessage: 'Edit account', }, invoicesButton: { id: 'settings.account.headlineInvoices', diff --git a/src/components/settings/user/EditUserForm.js b/src/components/settings/user/EditUserForm.js index 4067881b8..adc107ccc 100644 --- a/src/components/settings/user/EditUserForm.js +++ b/src/components/settings/user/EditUserForm.js @@ -18,15 +18,15 @@ const messages = defineMessages({ }, headlineProfile: { id: 'settings.account.headlineProfile', - defaultMessage: 'Update Profile', + defaultMessage: 'Update profile', }, headlineAccount: { id: 'settings.account.headlineAccount', - defaultMessage: 'Account Information', + defaultMessage: 'Account information', }, headlinePassword: { id: 'settings.account.headlinePassword', - defaultMessage: 'Change Password', + defaultMessage: 'Change password', }, successInfo: { id: 'settings.account.successInfo', diff --git a/src/i18n/globalMessages.js b/src/i18n/globalMessages.js index bc3c559bf..8e1df10f7 100644 --- a/src/i18n/globalMessages.js +++ b/src/i18n/globalMessages.js @@ -3,7 +3,7 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ APIUnhealthy: { id: 'global.api.unhealthy', - defaultMessage: "Can't connect to Ferdi Online Services", + defaultMessage: "Can't connect to Ferdi online services", }, notConnectedToTheInternet: { id: 'global.notConnectedToTheInternet', diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 217ae2110..aae78999d 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -23,7 +23,7 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Can't connect to Ferdi Online Services", + "global.api.unhealthy": "Can't connect to Ferdi online services", "global.cancel": "Cancel", "global.edit": "Edit", "global.no": "No", @@ -46,7 +46,7 @@ "import.skip.label": "I want to add services manually", "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Changelog", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", "infobar.buttonReloadServices": "Reload services", "infobar.hide": "Hide", @@ -74,7 +74,7 @@ "login.email.label": "Email address", "login.headline": "Sign in", "login.invalidCredentials": "Email or password not valid", - "login.link.password": "Forgot password", + "login.link.password": "Reset password", "login.link.signup": "Create a free account", "login.password.label": "Password", "login.serverLogout": "Your session expired, please login again.", @@ -116,10 +116,10 @@ "menu.help.support": "Support", "menu.help.tos": "Terms of Service", "menu.services": "Services", - "menu.services.activatePreviousService": "Activate previous service...", + "menu.services.activatePreviousService": "Activate previous service", "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Activate next service...", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Enable Todos", "menu.view": "View", @@ -147,10 +147,10 @@ "menu.workspaces.defaultWorkspace": "All services", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Email address", - "password.headline": "Forgot password", + "password.headline": "Reset password", "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", - "password.noUser": "No user affiliated with that email address", + "password.noUser": "No user with that email address was found", "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", @@ -161,7 +161,7 @@ "service.errorHandler.action": "Reload {name}", "service.errorHandler.editAction": "Edit {name}", "service.errorHandler.headline": "Oh no!", - "service.errorHandler.message": "Error:", + "service.errorHandler.message": "Error", "service.errorHandler.text": "{name} has failed to load.", "service.webviewLoader.loading": "Loading {service}", "services.getStarted": "Get started", @@ -169,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Welcome to Ferdi", - "settings.account.account.editButton": "Edit Account", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Update profile", @@ -177,11 +177,11 @@ "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "settings.account.headline": "Account", - "settings.account.headlineAccount": "Account Information", + "settings.account.headlineAccount": "Account information", "settings.account.headlineDangerZone": "Danger Zone", "settings.account.headlineInvoices": "Invoices", - "settings.account.headlinePassword": "Change Password", - "settings.account.headlineProfile": "Update Profile", + "settings.account.headlinePassword": "Change password", + "settings.account.headlineProfile": "Update profile", "settings.account.successInfo": "Your changes have been saved", "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", @@ -207,8 +207,8 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Custom TodoServer", - "settings.app.form.darkMode": "Dark Mode", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", @@ -241,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", "settings.app.form.startMinimized": "Start minimized", "settings.app.form.universalDarkMode": "Enable universal Dark Mode", - "settings.app.form.useTouchIdToUnlock": "Allow using Touch ID to unlock", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Advanced", @@ -282,10 +282,10 @@ "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes", "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", - "settings.recipes.customService.intro": "To add a custom service, copy the recipe folder into:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Developer Documentation", - "settings.recipes.customService.openFolder": "Open directory", - "settings.recipes.headline": "Available Services", + "settings.recipes.customService.openFolder": "Open folder", + "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", @@ -295,18 +295,18 @@ "settings.service.error.message": "Could not load service recipe.", "settings.service.form.addServiceHeadline": "Add {name}", "settings.service.form.availableServices": "Available services", - "settings.service.form.customUrl": "Service URL", + "settings.service.form.customUrl": "Custom server", "settings.service.form.customUrlValidationError": "Could not validate custom {name} server.", "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Delete Service", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Edit {name}", "settings.service.form.enableAudio": "Enable audio", "settings.service.form.enableBadge": "Show unread message badges", "settings.service.form.enableDarkMode": "Enable Dark Mode", "settings.service.form.enableHibernation": "Enable hibernation", - "settings.service.form.enableNotification": "Enable Notifications", + "settings.service.form.enableNotification": "Enable notifications", "settings.service.form.enableService": "Enable service", "settings.service.form.headlineBadges": "Unread message badges", "settings.service.form.headlineDarkReaderSettings": "Dark Reader Settings", @@ -327,10 +327,10 @@ "settings.service.form.proxy.host": "Proxy Host/IP", "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", - "settings.service.form.proxy.password": "Password", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Please restart Ferdi after changing proxy Settings.", - "settings.service.form.proxy.user": "User", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Save service", "settings.service.form.tabHosted": "Hosted", @@ -350,7 +350,7 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi is an open-source and a community-lead application.

    Thanks to the people who make this possbile:

    ", "settings.supportFerdi.bannerText": "Do you want to help us improve Ferdi?", "settings.supportFerdi.headline": "About Ferdi", - "settings.supportFerdi.openSurvey": "Open Survey", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", "settings.supportFerdi.textDonationAnd": "and", "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", @@ -375,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Non-Profit", "settings.user.form.currentPassword": "Current password", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Firstname", - "settings.user.form.lastname": "Lastname", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "New password", "settings.workspace.add.form.name": "Name", "settings.workspace.add.form.submitButton": "Create workspace", @@ -393,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Try again", "settings.workspaces.updatedInfo": "Your changes have been saved", "settings.workspaces.workspaceFeatureHeadline": "Less is More: Introducing Ferdi Workspaces", - "settings.workspaces.workspaceFeatureInfo": "Info about workspace feature", + "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.", "settings.workspaces.workspacesRequestFailed": "Could not load your workspaces", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -408,9 +408,9 @@ "sidebar.unmuteApp": "Enable notifications & audio", "signup.email.label": "Email address", "signup.emailDuplicate": "A user with that email address already exists", - "signup.firstname.label": "Firstname", + "signup.firstname.label": "First Name", "signup.headline": "Sign up", - "signup.lastname.label": "Lastname", + "signup.lastname.label": "Last Name", "signup.legal.info": "By creating a Ferdi account you accept the", "signup.legal.privacy": "Privacy Statement", "signup.legal.terms": "Terms of service", @@ -418,23 +418,23 @@ "signup.password.label": "Password", "signup.submit.label": "Create account", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Delete Service", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Disable audio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Disable notifications", - "tabs.item.disableService": "Disable Service", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Enable audio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Enable notifications", - "tabs.item.enableService": "Enable Service", - "tabs.item.hibernateService": "Hibernate Service", + "tabs.item.enableService": "Enable service", + "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Reload", - "tabs.item.wakeUpService": "Wake Up Service", - "validation.email": "Email not valid", - "validation.minLength": "Too few characters", + "tabs.item.wakeUpService": "Wake up service", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "Field is required", - "validation.url": "Not a valid URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", @@ -447,7 +447,7 @@ "workspaceDrawer.headline": "Workspaces", "workspaceDrawer.item.contextMenuEdit": "edit", "workspaceDrawer.item.noServicesAddedYet": "No services added yet", - "workspaceDrawer.workspaceFeatureInfo": "Info about workspace feature", - "workspaceDrawer.workspacesSettingsTooltip": "Workspaces settings", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Switching to" } diff --git a/src/lib/Menu.js b/src/lib/Menu.js index f5e8b2cdf..8e2d8bdca 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -268,11 +268,11 @@ const menuItems = defineMessages({ }, activateNextService: { id: 'menu.services.setNextServiceActive', - defaultMessage: 'Activate next service...', + defaultMessage: 'Activate next service', }, activatePreviousService: { id: 'menu.services.activatePreviousService', - defaultMessage: 'Activate previous service...', + defaultMessage: 'Activate previous service', }, muteApp: { id: 'sidebar.muteApp', -- cgit v1.2.3-70-g09d2 From b1243eff99bbfadab8f7deb8d714bbebae13e39a Mon Sep 17 00:00:00 2001 From: mhatvan Date: Tue, 14 Sep 2021 14:12:07 +0200 Subject: chore: add --preserve-whitespace flag for extract script and sync translations --- package.json | 2 +- src/components/settings/account/AccountDashboard.js | 2 +- src/containers/settings/EditSettingsScreen.js | 2 +- src/i18n/locales/en-US.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c85e73eb8..9add26ec6 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "test": "jest", "test:watch": "jest --watch", "lint": "eslint \"{src,scripts,packages,uidev}/**/*.{js,jsx,ts,tsx}\" --quiet --fix", - "extract": "formatjs extract 'src/**/*.{js,ts}' --out-file temp.json --flatten --id-interpolation-pattern '[sha512:contenthash:base64:6]'", + "extract": "formatjs extract 'src/**/*.{js,ts}' --out-file temp.json --flatten --id-interpolation-pattern '[sha512:contenthash:base64:6]' --preserve-whitespace", "compile": "formatjs compile 'temp.json' --out-file src/i18n/locales/en-US.json", "manage-translations": "npm run extract && npm run compile && rimraf temp.json", "prebuild": "preval-build-info-cli && gulp build", diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 66edc4975..544821e9a 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js @@ -51,7 +51,7 @@ const messages = defineMessages({ }, yourLicense: { id: 'settings.account.yourLicense', - defaultMessage: 'Your Franz License:', + defaultMessage: 'Your Ferdi License:', }, accountUnavailable: { id: 'settings.account.accountUnavailable', diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js index 3df433160..92985b68c 100644 --- a/src/containers/settings/EditSettingsScreen.js +++ b/src/containers/settings/EditSettingsScreen.js @@ -214,7 +214,7 @@ const messages = defineMessages({ }, enableTodos: { id: 'settings.app.form.enableTodos', - defaultMessage: 'Enable Franz Todos', + defaultMessage: 'Enable Ferdi Todos', }, keepAllWorkspacesLoaded: { id: 'settings.app.form.keepAllWorkspacesLoaded', diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index aae78999d..e2e0cdc83 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -253,9 +253,9 @@ "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.", "settings.app.inactivityLockInfo": "Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", "settings.app.languageDisclaimer": "Official translations are English & German. All other languages are community based translations.", - "settings.app.lockInfo": "Password Lock allows you to keep your messages protected. Using 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}.", + "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}.", "settings.app.lockedPassword": "Password", - "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember. If you loose this password, you will have to reinstall Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Changes require restart", "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.", "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.", -- cgit v1.2.3-70-g09d2 From 072e2fa9efdb5d3986c41693460c8b820e903232 Mon Sep 17 00:00:00 2001 From: Ferdi Bot <56048320+FerdiBot@users.noreply.github.com> Date: Tue, 14 Sep 2021 16:31:21 +0200 Subject: New Crowdin updates (#1937) --- src/i18n/locales/af.json | 30 +++----- src/i18n/locales/ar.json | 104 ++++++++++++-------------- src/i18n/locales/be.json | 30 +++----- src/i18n/locales/bs.json | 30 +++----- src/i18n/locales/ca.json | 86 ++++++++++----------- src/i18n/locales/cs.json | 78 +++++++++----------- src/i18n/locales/da.json | 106 ++++++++++++-------------- src/i18n/locales/de.json | 110 ++++++++++++--------------- src/i18n/locales/el.json | 78 +++++++++----------- src/i18n/locales/es.json | 110 ++++++++++++--------------- src/i18n/locales/fi.json | 108 ++++++++++++--------------- src/i18n/locales/fr.json | 108 ++++++++++++--------------- src/i18n/locales/ga.json | 78 +++++++++----------- src/i18n/locales/he.json | 88 ++++++++++------------ src/i18n/locales/hi.json | 30 +++----- src/i18n/locales/hr.json | 70 ++++++++---------- src/i18n/locales/hu.json | 102 +++++++++++-------------- src/i18n/locales/id.json | 94 +++++++++++------------ src/i18n/locales/it.json | 168 ++++++++++++++++++++---------------------- src/i18n/locales/ja.json | 118 +++++++++++++---------------- src/i18n/locales/ka.json | 58 ++++++--------- src/i18n/locales/ko.json | 98 +++++++++++------------- src/i18n/locales/nl-BE.json | 90 ++++++++++------------ src/i18n/locales/nl.json | 96 +++++++++++------------- src/i18n/locales/no.json | 104 ++++++++++++-------------- src/i18n/locales/pl.json | 102 +++++++++++-------------- src/i18n/locales/pt-BR.json | 112 +++++++++++++--------------- src/i18n/locales/pt.json | 104 ++++++++++++-------------- src/i18n/locales/ro.json | 32 +++----- src/i18n/locales/ru.json | 94 +++++++++++------------ src/i18n/locales/sk.json | 96 +++++++++++------------- src/i18n/locales/sl.json | 30 +++----- src/i18n/locales/sr.json | 78 +++++++++----------- src/i18n/locales/sv.json | 104 ++++++++++++-------------- src/i18n/locales/te.json | 30 +++----- src/i18n/locales/tr.json | 90 ++++++++++------------ src/i18n/locales/uk.json | 90 ++++++++++------------ src/i18n/locales/vi.json | 120 ++++++++++++++---------------- src/i18n/locales/zh-HANT.json | 76 ++++++++----------- src/i18n/locales/zh.json | 42 ++++------- 40 files changed, 1446 insertions(+), 1926 deletions(-) diff --git a/src/i18n/locales/af.json b/src/i18n/locales/af.json index 2c145d6f4..3a5094e84 100644 --- a/src/i18n/locales/af.json +++ b/src/i18n/locales/af.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reload", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -45,7 +44,7 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json index ae2952f86..d7cefc1bf 100644 --- a/src/i18n/locales/ar.json +++ b/src/i18n/locales/ar.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "إعادة التحميل", - "app.errorHandler.headline": "لقد حدث خطب ما", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "خادم مخصص", "changeserver.headline": "تغيير الخادم", "changeserver.label": "خادم", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "ماذا حدث؟", "connectionLostBanner.message": "أوه لا! فقد فردي الاتصال بـ.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "نشر معلومات تصحيح الأخطاء", "feature.nightlyBuilds.activate": "تفعيل", "feature.nightlyBuilds.info": "الإصدارات الليلية هي إصدارات تجريبية للغاية من فردي والتي قد تحتوي على ميزات غير مصقولة أو غير كاملة. يتم استخدام هذه الإنشاءات الليلية بشكل أساسي من قبل المطورين لاختبار ميزاتهم المطورة حديثًا وكيفية أدائهم في التصميم النهائي. إذا كنت لا تعرف ما تفعله ، فنقترح عدم تنشيط الإنشاءات الليلية.", "feature.nightlyBuilds.title": "المباني الليلية", @@ -24,30 +23,30 @@ "feature.quickSwitch.info": "حدد خدمة من خلال زر تاب، ↑ و ↓. افتح الخدمة بالظغط على زر الدخول.", "feature.quickSwitch.search": "بحث...", "feature.quickSwitch.title": "تبديل سريع", - "global.api.unhealthy": "لا يمكن الإتصال بخدمات فردي عبر الإنترنت", - "global.cancel": "إلغاء", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "تعديل", "global.no": "No", "global.notConnectedToTheInternet": "أنت غير متصل بالإنترنت.", "global.ok": "Ok", - "global.quit": "خروج", + "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "الإعدادات", + "global.settings": "Settings", "global.spellchecker.useDefault": "إستخدم الإعدادت الافتراضية ({default})", "global.spellchecking.autodetect": "الكشف عن اللغة تلقائياً", "global.spellchecking.autodetect.short": "تلقائي", "global.spellchecking.language": "لغة التدقيق الإملائي", - "global.submit": "إرسال", + "global.submit": "Submit", "global.userAgentHelp": "استخدم 'https://whatmyuseragent.com/' (لاكتشاف) أو 'https://developers.whatismybrowser.com/useragents/explore/' (لاختار) وكيل المستخدم المنشود و نسخه لصقه هنا.", "global.userAgentPref": "وكيل المستخدم", "global.yes": "Yes", "import.headline": "استيراد خدمات فردي الأربع", "import.notSupportedHeadline": "الخدمات غير مدعومة بعد في فردي الإصدار 5", "import.skip.label": "أريد أن أضيف الخدمات يدوياً", - "import.submit.label": "خدمات الاستيراد", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "حدثت أخطاء أثناء محاولة تنفيذ طلب المصادقة. الرجاء محاولة تسجيل الخروج والدخول مرة أخرى إذا استمر هذا الخطأ.", - "infobar.buttonChangelog": "ما الجديد؟", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "إعادة التشغيل وتثبيت التحديث", "infobar.buttonReloadServices": "إعادة تحميل الخدمات", "infobar.hide": "إخفاء", @@ -75,7 +74,7 @@ "login.email.label": "البريد الإلكتروني", "login.headline": "تسجيل الدخول", "login.invalidCredentials": "البريد الإلكتروني أو كلمة المرور غير صالحة", - "login.link.password": "إعادة تعيين كلمة المرور", + "login.link.password": "Reset password", "login.link.signup": "إنشاء حساب مجاني", "login.password.label": "كلمة المرور", "login.serverLogout": "انتهت صلاحية جلستك، الرجاء تسجيل الدخول مرة أخرى.", @@ -117,10 +116,10 @@ "menu.help.support": "الدعم الفني", "menu.help.tos": "شروط الخدمة", "menu.services": "الخدمات", - "menu.services.activatePreviousService": "تفعيل الخدمة السابقة", - "menu.services.addNewService": "إضافة خدمة جديدة", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "الرئيسية", - "menu.services.setNextServiceActive": "تفعيل الخدمة التالية", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "المهام", "menu.todos.enableTodos": "تفعيل المهام", "menu.view": "عرض", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "جميع الخدمات", "menu.workspaces.openWorkspaceDrawer": "فتحُ دُرجِ مساحة العمل", "password.email.label": "البريد الإلكتروني", - "password.headline": "إعادة تعيين كلمة المرور", + "password.headline": "Reset password", "password.link.login": "سجل الدخول لحسابك", "password.link.signup": "إنشاء حساب مجاني", - "password.noUser": "لم يُعثر على مُستخدمٍ بعنوانِ البريدِ هذا", - "password.successInfo": "رجاءً تحقق من عنوان بريدك الإلكتروني", - "pricing.features.accountSync": "مزامنةُ الحساب", - "pricing.features.customWebsites": "إضافة مواقع مخصصة", - "pricing.features.desktopNotifications": "إشعارات سطح المكتب", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "اختر من بين ما يزيد على 70 خدمة", - "pricing.features.serviceProxies": "وكلاء الخدمة", - "pricing.features.spellchecker": "دعم المدقق الإملائي", - "pricing.features.teamManagement": "فريق الإدارة", - "pricing.features.thirdPartyServices": "تنصيب خدمات الطرف الثالث", - "pricing.features.unlimitedServices": "إمكانية إضافة خدمات غير محدودة", - "pricing.features.workspaces": "مساحاتُ العمل", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "أعادة تحميل {name}", "service.crashHandler.autoReload": "محاولة الاستعادة التلقائية {name} في غضون {seconds} ثانية", "service.crashHandler.headline": "أوه لا!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "استخدام فردي بدون حساب", "services.welcome": "مرحبا بكم في فردي", - "settings.account.account.editButton": "تعديل الحساب", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "الحساب غير متوفر", "settings.account.accountUnavailableInfo": "أنت تستخدم فردي بدون حساب. إذا كنت ترغب في استخدام فردي مع حساب والحفاظ على مزامنة خدماتك عبر مختلف الحواسيب، الرجاء تحديد خادم في علامة تبويب الإعدادات ثم سجل الدخول.", "settings.account.buttonSave": "تحديث الملف الشخصي", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "لقد تلقيت رسالة بريد إلكتروني مع رابط لتأكيد حذف حسابك. لا يمكن استعادة حسابك وبياناتك!", "settings.account.deleteInfo": "إذا كنت لا تحتاج إلى حساب فردي الخاص بك بعد الآن، يمكنك حذف حسابك وجميع البيانات ذات الصلة من هنا.", "settings.account.headline": "الحساب", - "settings.account.headlineAccount": "معلومات الحساب", - "settings.account.headlineDangerZone": "منطقة الخطر", - "settings.account.headlineInvoices": "الفواتير", - "settings.account.headlinePassword": "تغيير كلمة المرور", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "تحديث الملف الشخصي", "settings.account.successInfo": "تم حفظ التغييرات الخاصة بك", "settings.account.tryReloadServices": "حاول مجددًا", "settings.account.tryReloadUserInfoRequest": "حاول مجددًا", "settings.account.userInfoRequestFailed": "تعذر تحميل معلومات المستخدم", - "settings.account.yourLicense": "رخصة فردي الخاصة بك", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "مسح ذاكرة التخزين المؤقت", "settings.app.buttonInstallUpdate": "إعادة التشغيل وتثبيت التحديث", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "خادم مهام مخصص", - "settings.app.form.darkMode": "تفعيل الوضع المظلم", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "تمكين الوضع المظلم", "settings.app.form.enableGPUAcceleration": "تفعيل التسريع بوحدة معالجة الرسومات", "settings.app.form.enableLock": "تفعيل القفل بكلمة المرور", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "تفعيل التصحيح الإملائي", - "settings.app.form.enableSystemTray": "إظهار فردي في شريط النظام", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "تفعيل فردي للمهام", "settings.app.form.hibernateOnStartup": "الإبقاء على الخدمات في وضع النوم عند بدء التشغيل", "settings.app.form.hibernationStrategy": "استراتيجية وضع النوم", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "إظهار شارة رسالة غير مقروءة عند تعطيل الإشعارات", "settings.app.form.startMinimized": "البدء بنافذة مصغرة", "settings.app.form.universalDarkMode": "تمكين الوضع المظلم الكامل", - "settings.app.form.useTouchIdToUnlock": "السماح باستخدام TouchID لفتح فردي", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "استخدام النمط الأفقي", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "متقدم", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "الترجمات الرسمية هي الإنكليزية والألمانية. وجميع اللغات الأخرى مبنية على ترجمات مساهمين.", "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}.", "settings.app.lockedPassword": "كلمة المرور", - "settings.app.lockedPasswordInfo": "الرجاء التأكد من تعيين كلمة مرور سوف تتذكرها.\nإذما فقدت كلمة المرور هذه، سوف تضطر إلى إعادة تثبيت فيردي.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "التغيرات تتطلب إعادة تشغيل", "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.", "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.", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", "settings.recipes.customService.headline.customRecipes": "وصفات طرف ثالث مخصصة", "settings.recipes.customService.headline.devRecipes": "وصفات خدمة التطوير الخاصة بك", - "settings.recipes.customService.intro": "لإضافة خدمة مخصصة، انسخ وصفة الخدمة إلى:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "وثائق المطور", - "settings.recipes.customService.openFolder": "فتح المجلد", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "الخدمات المتاحة", "settings.recipes.missingService": "خدمة مفقودة؟", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "تمت إضافة الخدمة بنجاح", "settings.searchService": "البحث عن خدمة", "settings.service.error.goBack": "العودة إلى الخدمات", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "سطوع الشاشة في وضع القراءة المظلم", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "حذف الخدمة", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "تحرير {name}", "settings.service.form.enableAudio": "تمكين الصوت", "settings.service.form.enableBadge": "إظهار شارات الرسائل غير المقروءة", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "فتح user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "استخدام بروكسي", - "settings.service.form.proxy.password": "كلمة المرور (اختياري)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "المنفذ", "settings.service.form.proxy.restartInfo": "الرجاء إعادة تشغيل فيردي بعد تغيير إعدادات البروكسي.", - "settings.service.form.proxy.user": "المستخدم (اختياري)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "حفظ الخدمة", "settings.service.form.tabHosted": "Hosted", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "غير ربحي", "settings.user.form.currentPassword": "الكلمة السرية الحالية", "settings.user.form.email": "البريد الألكتروني", - "settings.user.form.firstname": "الاسم الأول", - "settings.user.form.lastname": "اسم العائلة", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "كلمة سرّ جديدة", "settings.workspace.add.form.name": "الاسم", "settings.workspace.add.form.submitButton": "إنشاء مساحة عمل", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "تمكين الإشعارات والصوت", "signup.email.label": "البريد الإلكتروني", "signup.emailDuplicate": "مستخدم بهذا البريد الإلكتروني موجود بالفعل", - "signup.firstname.label": "الاسم الأول", + "signup.firstname.label": "First Name", "signup.headline": "التسجيل", - "signup.lastname.label": "اسم العائلة", + "signup.lastname.label": "Last Name", "signup.legal.info": "من خلال إنشاء حساب فيردي فإنك تقبل", "signup.legal.privacy": "بيان الخصوصية", "signup.legal.terms": "بنود الخدمة", @@ -430,11 +418,11 @@ "signup.password.label": "كلمة المرور", "signup.submit.label": "أنشئ حساب", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "حذف الخدمة", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "تعطيل الصوت", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "تعطيل الإشعارات", - "tabs.item.disableService": "تعطيل الخدمة", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "تمكين الصوت", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "تفعيل الإشعارات", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "إعادة التحميل", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} غير صالح", - "validation.minLength": "{field} يجب أن يكون على الأقل {length} حرفاً", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} مطلوب", - "validation.url": "{field} ليس عنوان URL صالح", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "الرجوع", "webControls.forward": "تقدم", "webControls.goHome": "الرئيسية", @@ -454,12 +442,12 @@ "webControls.reload": "إعادة التحميل", "welcome.loginButton": "تسجيل الدخول إلى حسابك", "welcome.signupButton": "إنشاء حساب مجاني", - "workspaceDrawer.addNewWorkspaceLabel": "إضافة مساحة عمل جديدة", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "جميع الخدمات", "workspaceDrawer.headline": "مساحاتُ العمل", "workspaceDrawer.item.contextMenuEdit": "تعديل", "workspaceDrawer.item.noServicesAddedYet": "لم تضف أي خدمات بعد", - "workspaceDrawer.workspaceFeatureInfo": "

    يُمكنك فيردي من التركيز على ما هو مهم لديك الآن. أنشاء مجموعات مختلفة من الخدمات وإداراتها والتنقل بينها بسهولة في أي وقت.

    أنتَ من يقرر أيّ الخدمات تحتاج ساعة تحتاج وأين تحتاج, لذا نستطيع مساعدتك لتبقى محافظ مع مستجدات ما تقوم به أو تستريح إن شئت.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "تعديل إعدادات مساحات العمل", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "التبديل إلى" } diff --git a/src/i18n/locales/be.json b/src/i18n/locales/be.json index 31a5111a9..5aa196618 100644 --- a/src/i18n/locales/be.json +++ b/src/i18n/locales/be.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Абнавіць", - "app.errorHandler.headline": "Нешта пайшло не так", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Паслужнік", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -45,7 +44,7 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/bs.json b/src/i18n/locales/bs.json index 2c145d6f4..3a5094e84 100644 --- a/src/i18n/locales/bs.json +++ b/src/i18n/locales/bs.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reload", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -45,7 +44,7 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json index 3cb52af9b..da86f4a83 100644 --- a/src/i18n/locales/ca.json +++ b/src/i18n/locales/ca.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Recarrega", - "app.errorHandler.headline": "Quelcom ha anat malament", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Servidor personalitzat", "changeserver.headline": "Canvía de Servidor", "changeserver.label": "Servidor", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Què ha passat?", "connectionLostBanner.message": "Oh no! Ferdi ha perdut la connexió a {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Registra la informació de depuració", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Seleccioneu un servei amb TAB, ↑ i ↓. Obriu un servei amb ENTER.", "feature.quickSwitch.search": "Cerca...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "No es pot connectar amb els serveis en línia de Ferdi", - "global.cancel": "Cancel·la", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Edita", "global.no": "No", "global.notConnectedToTheInternet": "No esteu connectat a Internet.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Configuració", + "global.settings": "Settings", "global.spellchecker.useDefault": "Utilitzar el predeterminat del sistema ({default})", "global.spellchecking.autodetect": "Detectar l'idioma automàticament", "global.spellchecking.autodetect.short": "Automàtic", "global.spellchecking.language": "Corrector ortogràfic", - "global.submit": "Enviar", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importa els teus serveis Ferdi 4", "import.notSupportedHeadline": "Serveis que encara no s'admeten a Ferdi 5", "import.skip.label": "Vull afegir serveis manualment", - "import.submit.label": "Importa serveis", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "S'han produït errors al intentar realitzar una sol·licitud autentificada. Proveu de tancar la sessió i tornar-hi si aquest error continua.", - "infobar.buttonChangelog": "Que hi ha de nou?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Reinicia i instal·la l'actualització", "infobar.buttonReloadServices": "Recarrega els serveis", "infobar.hide": "Amaga", @@ -75,7 +74,7 @@ "login.email.label": "Correu electrònic", "login.headline": "Accedir-hi", "login.invalidCredentials": "El correu electrònic o la contrasenya no són vàlids", - "login.link.password": "Restablir la contrasenya", + "login.link.password": "Reset password", "login.link.signup": "Crea un compte gratuït", "login.password.label": "Contrasenya", "login.serverLogout": "La teva sessió ha caducat, torna-la a iniciar.", @@ -117,10 +116,10 @@ "menu.help.support": "Suport", "menu.help.tos": "Condicions del Servei", "menu.services": "Serveis", - "menu.services.activatePreviousService": "Activa el servei anterior", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Inici", - "menu.services.setNextServiceActive": "Activa el següent servei", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Tasques", "menu.todos.enableTodos": "Activar Tasques", "menu.view": "Visualitza", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Tots els serveis", "menu.workspaces.openWorkspaceDrawer": "Obrir el calaix d'espais de treball", "password.email.label": "Correu electrònic", - "password.headline": "Restablir la contrasenya", + "password.headline": "Reset password", "password.link.login": "Inicia la sessió al teu compte", "password.link.signup": "Crea un compte gratuït", - "password.noUser": "No s'ha trobat cap usuari amb aquesta adreça de correu electrònic", - "password.successInfo": "Comproveu el vostre correu electrònic", - "pricing.features.accountSync": "Sincronització de Conte", - "pricing.features.customWebsites": "Afegir llocs web personalitzats", - "pricing.features.desktopNotifications": "Notificacions a l'escriptori", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Espais de treball", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Recarrega {name}", "service.crashHandler.autoReload": "Intentant restablir automàticament {name} en {seconds} segons", "service.crashHandler.headline": "Oh no!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Benvingut a Ferdi", - "settings.account.account.editButton": "Editar Compte", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Actualitzar el perfil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Has rebut un correu electrònic amb un enllaç per confirmar l'eliminació del compte. El teu compte i la seva informació no podran ser restaurats!", "settings.account.deleteInfo": "Si ja no necessites el teu compte de Ferdi, pots esborrar el teu compte i tota la seva informació emmagatzemada aquí.", "settings.account.headline": "Compte", - "settings.account.headlineAccount": "Informació del compte", - "settings.account.headlineDangerZone": "Zona de perill", - "settings.account.headlineInvoices": "Factures", - "settings.account.headlinePassword": "Canvia la contrasenya", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Actualitzar el perfil", "settings.account.successInfo": "S'han desat els canvis", "settings.account.tryReloadServices": "Torna a provar-ho", "settings.account.tryReloadUserInfoRequest": "Torna a provar-ho", "settings.account.userInfoRequestFailed": "No s'ha pogut carregar la informació de l'usuari", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Buida la memòria cau", "settings.app.buttonInstallUpdate": "Reinicia i instal·la l'actualització", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Activar el Mode Fosc", "settings.app.form.enableGPUAcceleration": "Activar acceleració GPU", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Habilita la comprobació ortogràfica", - "settings.app.form.enableSystemTray": "Mostra Ferdi a la safata del sistema", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Serveis disponibles", "settings.recipes.missingService": "Trobes a faltar algun servei?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "El servei s'ha afegit correctament", "settings.searchService": "Cercar servei", "settings.service.error.goBack": "Tornar als serveis", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Suprimeix el servei", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Edita {name}", "settings.service.form.enableAudio": "Activa l'àudio", "settings.service.form.enableBadge": "Mostra les insígnies als missatges no llegits.", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "Ajustaments Proxy HTTP/HTTPS", "settings.service.form.proxy.host": "Host Proxy / IP", - "settings.service.form.proxy.info": "Els ajustaments del Proxy no es sincronitzaran amb els servidors de Ferdi", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Utilitzar Proxy", - "settings.service.form.proxy.password": "Contrasenya (opcional)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Siusplau, reinicieu el Ferdi després de canviar els ajustaments de proxy", - "settings.service.form.proxy.user": "Usuari (opcional)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Desa el servei", "settings.service.form.tabHosted": "Allotjat", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Sense ànim de lucre", "settings.user.form.currentPassword": "Contrasenya actual", "settings.user.form.email": "Correu electrònic", - "settings.user.form.firstname": "Nom", - "settings.user.form.lastname": "Cognoms", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nova contrasenya", "settings.workspace.add.form.name": "Nom", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Activar notificacions i àudio", "signup.email.label": "Correu electrònic", "signup.emailDuplicate": "Ja existeix un usuari amb aquesta adreça de correu electrònic", - "signup.firstname.label": "Nom", + "signup.firstname.label": "First Name", "signup.headline": "Donar-se d'alta", - "signup.lastname.label": "Cognoms", + "signup.lastname.label": "Last Name", "signup.legal.info": "En crear un compte de Ferdi, accepteu", "signup.legal.privacy": "Declaració de privacitat", "signup.legal.terms": "Termes del Servei", @@ -430,11 +418,11 @@ "signup.password.label": "Contrasenya", "signup.submit.label": "Crea un compte", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Suprimeix el servei", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Desactiva l'àudio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Desactiva les notificacions", - "tabs.item.disableService": "Desactiva el servei", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Activa l'àudio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Activa les notificacions", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Recarrega", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} no es vàlid", - "validation.minLength": "{field} ha de ser al menys {length} caràcters de llargada", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} es requerit", - "validation.url": "{field} es una URL no vàlida", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Enrere", "webControls.forward": "Endavant", "webControls.goHome": "Inici", diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json index 1a82d3016..82594e782 100644 --- a/src/i18n/locales/cs.json +++ b/src/i18n/locales/cs.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Obnovit", - "app.errorHandler.headline": "Něco se pokazilo", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Vlastní server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Nemůžeme připojit Ferdi k online službám", - "global.cancel": "Zrušit", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Upravit", "global.no": "No", "global.notConnectedToTheInternet": "Připojení k internetu není k dispozici.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Nastavení", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Automaticky rozpoznat jazyk", "global.spellchecking.autodetect.short": "Automaticky", "global.spellchecking.language": "Oprava překlepů jazyka", - "global.submit": "Odeslat", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importovat služby z Ferdi 4", "import.notSupportedHeadline": "Služby nejsou podporovány ve verzi Ferdi 5", "import.skip.label": "Chci přidat službu ručně", - "import.submit.label": "Importovat služby", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Co je nového?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restartovat a nainstalovat aktualizace", "infobar.buttonReloadServices": "Obnovit služby", "infobar.hide": "Skrýt", @@ -75,7 +74,7 @@ "login.email.label": "E-mailová adresa", "login.headline": "Přihlásit se", "login.invalidCredentials": "Email nebo heslo nesouhlasí", - "login.link.password": "Obnovit heslo", + "login.link.password": "Reset password", "login.link.signup": "Vytvořit uživatelský účet zdarma", "login.password.label": "Password", "login.serverLogout": "Sezení vypršelo, je třeba se znovu přihlásit.", @@ -118,7 +117,7 @@ "menu.help.tos": "Podmínky použití", "menu.services": "Služby", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Všechny služby", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "E-mailová adresa", - "password.headline": "Obnovit heslo", + "password.headline": "Reset password", "password.link.login": "Přihlásit se k účtu", "password.link.signup": "Vytvořit uživatelský účet zdarma", - "password.noUser": "Pro emailovou adresu nebyl nalezený žádný uživatel", - "password.successInfo": "Prosím, zkontrolujte svůj e-mail", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Načíst znovu {name}", "service.crashHandler.autoReload": "Pokus o automatické obnovení {name} za {seconds} sekund", "service.crashHandler.headline": "Ale ne!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Vítejte v programu Ferdi", - "settings.account.account.editButton": "Upravit účet", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Aktualizovat profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Na váš mail byl odeslán email s odkazem pro potvrzení smazání účtu. Váš účet a data poté nepůjde obnovit!", "settings.account.deleteInfo": "Pokud již nepotřebujete váš Ferdi účet, můžete zde váš účet, a všechna data v něm, smazat.", "settings.account.headline": "Účet", - "settings.account.headlineAccount": "Informace o účtu", - "settings.account.headlineDangerZone": "Nebezpečná zóna", - "settings.account.headlineInvoices": "Faktury", - "settings.account.headlinePassword": "Změnit heslo", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Aktualizovat profil", "settings.account.successInfo": "Vaše změny byly uloženy", "settings.account.tryReloadServices": "Zkusit opět", "settings.account.tryReloadUserInfoRequest": "Zkusit opět", "settings.account.userInfoRequestFailed": "Nelze načíst informace o uživateli.", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Vyprázdnit mezipaměti", "settings.app.buttonInstallUpdate": "Restartovat a nainstalovat aktualizace", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Povolit Tmavý vzhled", "settings.app.form.enableGPUAcceleration": "Aktivovat GPU zrychlení", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Zapnout kontrolu pravopisu", - "settings.app.form.enableSystemTray": "Zobrazit Ferdi v systémové liště", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Dostupné služby", "settings.recipes.missingService": "Chybějící služba?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Služba byla úspěšně přidána", "settings.searchService": "Vyhledat službu", "settings.service.error.goBack": "Zpět na služby", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Odstranit službu", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Upravit {name}", "settings.service.form.enableAudio": "Zapnout zvuk", "settings.service.form.enableBadge": "Ukázat odznaky nepřečtených zpráv", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "Nastavení HTTP/HTTPS Proxy", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Nezisková organizace", "settings.user.form.currentPassword": "Aktuální heslo", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Jméno", - "settings.user.form.lastname": "Příjmení", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nové heslo", "settings.workspace.add.form.name": "Jméno", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Zapnout upozornění a zvuky", "signup.email.label": "E-mailová adresa", "signup.emailDuplicate": "Uživatel s touto emailovou adresou již existuje", - "signup.firstname.label": "Jméno", + "signup.firstname.label": "First Name", "signup.headline": "Přihlásit se", - "signup.lastname.label": "Příjmení", + "signup.lastname.label": "Last Name", "signup.legal.info": "Vytvořením účtu Ferdi souhlasíte s", "signup.legal.privacy": "Prohlášení o ochraně soukromí", "signup.legal.terms": "Podmínky služby", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "Vytvořit účet", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Odstranit službu", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Vypnout zvuk", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Zakázat upozornění", - "tabs.item.disableService": "Zakázat službu", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Zapnout zvuk", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Povolit upozornění", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Obnovit", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} není validní", - "validation.minLength": "{field} musí být alespoň {length} znaků dlouhé", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} je povinné", - "validation.url": "{field} není validní URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", diff --git a/src/i18n/locales/da.json b/src/i18n/locales/da.json index 31271cae5..4a266030e 100644 --- a/src/i18n/locales/da.json +++ b/src/i18n/locales/da.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Genindlæs", - "app.errorHandler.headline": "Noget gik galt", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Brugerdefineret server", "changeserver.headline": "Skift server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Hvad skete der?", "connectionLostBanner.message": "Åh nej! Ferdi mistede forbindelsen til {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Udgiv fejlfindingsoplysninger", "feature.nightlyBuilds.activate": "Aktiver", "feature.nightlyBuilds.info": "Natlige byg af Ferdi er meget eksperimentelle versioner, der kan indeholde ikke polerede eller ufærdige funktioner. Disse natlige byg bruges hovedsageligt af udviklere til at teste deres nyudviklede funktioner, og hvordan de vil opføre sig i den endelige version. Hvis du er usikker, foreslår vi ikke at aktivere natlige byg.", "feature.nightlyBuilds.title": "Natlige byg", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Vælg en tjeneste med TAB, ↑ og ↓. Åbn en tjeneste med ENTER.", "feature.quickSwitch.search": "Søg...", "feature.quickSwitch.title": "Hurtigskift", - "global.api.unhealthy": "Kan ikke oprette forbindelse til Ferdi onlinetjenester", - "global.cancel": "Annuller", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Rediger", "global.no": "No", "global.notConnectedToTheInternet": "Du har ikke forbindelse til internettet.", @@ -33,7 +32,7 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Indstillinger", + "global.settings": "Settings", "global.spellchecker.useDefault": "Benyt systemstandard ({default})", "global.spellchecking.autodetect": "Vælg sprog automatisk", "global.spellchecking.autodetect.short": "Automatisk", @@ -45,9 +44,9 @@ "import.headline": "Importer dine Ferdi 4-tjenester", "import.notSupportedHeadline": "Tjenester endnu ikke understøttet i Ferdi 5", "import.skip.label": "Jeg ønsker at tilføje tjenester manuelt", - "import.submit.label": "Importer tjenester", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Der var fejl under forsøget på at udføre en godkendt anmodning. Prøv at logge ud og ind igen hvis fejlen fortsætter.", - "infobar.buttonChangelog": "Hvad er nyt?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Genstart og installer opdatering", "infobar.buttonReloadServices": "Genindlæs tjenester", "infobar.hide": "Skjul", @@ -75,7 +74,7 @@ "login.email.label": "Mailadresse", "login.headline": "Log ind", "login.invalidCredentials": "Ugyldig mail eller adgangskode", - "login.link.password": "Nulstil adgangskode", + "login.link.password": "Reset password", "login.link.signup": "Opret en gratis konto", "login.password.label": "Adgangskode", "login.serverLogout": "Din session er udløbet, log ind igen.", @@ -117,10 +116,10 @@ "menu.help.support": "Support", "menu.help.tos": "Servicevilkår", "menu.services": "Tjenester", - "menu.services.activatePreviousService": "Gå til forrige tjeneste", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Hjem", - "menu.services.setNextServiceActive": "Gå til næste tjeneste", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Aktiver Todos", "menu.view": "Vis", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Alle tjenester", "menu.workspaces.openWorkspaceDrawer": "Åbn arbejdsrumspanel", "password.email.label": "Mailadresse", - "password.headline": "Nulstil adgangskode", + "password.headline": "Reset password", "password.link.login": "Log ind på din konto", "password.link.signup": "Opret en gratis konto", - "password.noUser": "Der blev ikke fundet nogen bruger med den mailadresse", - "password.successInfo": "Tjek venligst din mail", - "pricing.features.accountSync": "Kontosynkronisering", - "pricing.features.customWebsites": "Tilføj brugerdefinerede hjemmesider", - "pricing.features.desktopNotifications": "Skrivebordsnotifikationer", - "pricing.features.onPremise": "Lokale- & andre hostede tjenester", - "pricing.features.recipes": "Vælg mellem mere end 70 tjenester", - "pricing.features.serviceProxies": "Tjeneste-proxyer", - "pricing.features.spellchecker": "Understøttelse af stavekontrol", - "pricing.features.teamManagement": "Teamhåndtering", - "pricing.features.thirdPartyServices": "Installer tredjeparts tjenester", - "pricing.features.unlimitedServices": "Tilføj ubegrænsede tjenester", - "pricing.features.workspaces": "Arbejdsrum", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Genindlæs {name}", "service.crashHandler.autoReload": "Forsøger automatisk at gendanne {name} om {seconds} sekunder", "service.crashHandler.headline": "Åh nej!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Brug Ferdi uden en konto", "services.welcome": "Velkommen til Ferdi", - "settings.account.account.editButton": "Rediger konto", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Konto utilgængelig", "settings.account.accountUnavailableInfo": "Du bruger Ferdi uden en konto. Hvis du ønsker at bruge Ferdi med en konto og holde dine tjenester synkroniseret på tværs af enheder, vælg en server under fanen Indstillinger, og log derefter ind.", "settings.account.buttonSave": "Opdater profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Du har modtaget en mail med et link til at bekræfte sletning af din konto. Din konto og data kan ikke gendannes!", "settings.account.deleteInfo": "Hvis du ikke længere har brug for din Ferdi-konto, kan du slette den og alle relaterede data her.", "settings.account.headline": "Konto", - "settings.account.headlineAccount": "Kontooplysninger", - "settings.account.headlineDangerZone": "Farezone", - "settings.account.headlineInvoices": "Fakturaer", - "settings.account.headlinePassword": "Skift adgangskode", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Opdater profil", "settings.account.successInfo": "Dine ændringer er blevet gemt", "settings.account.tryReloadServices": "Prøv igen", "settings.account.tryReloadUserInfoRequest": "Prøv igen", "settings.account.userInfoRequestFailed": "Kunne ikke indlæse brugerinformation", - "settings.account.yourLicense": "Din Ferdi-licens", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Ryd cache", "settings.app.buttonInstallUpdate": "Genstart og installer opdatering", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Luk Ferdi til systembakken", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Brugerdefineret Todo server", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "Aktiver mørk tilstand", "settings.app.form.enableGPUAcceleration": "Aktiver GPU-acceleration", "settings.app.form.enableLock": "Aktiver adgangskodelås", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Aktiver stavekontrol", - "settings.app.form.enableSystemTray": "Vis Ferdi i systembakken", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Aktiver Ferdi Todos", "settings.app.form.hibernateOnStartup": "Sæt tjenester i dvale ved opstart", "settings.app.form.hibernationStrategy": "Dvale strategi", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Vis ulæst beskedikon når notifikationer er deaktiveret", "settings.app.form.startMinimized": "Start minimeret", "settings.app.form.universalDarkMode": "Aktiver universel mørk tilstand", - "settings.app.form.useTouchIdToUnlock": "Tillad brug af TouchID for at låse Ferdi op", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Avanceret", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Officielle oversættelser er engelske og tyske. Alle andre sprog er fællesskabsstyrede oversættelser.", "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}.", "settings.app.lockedPassword": "Adgangskode", - "settings.app.lockedPasswordInfo": "Sørg for at angive en adgangskode, du husker.\nHvis du mister denne adgangskode, vil du blive nødt til at geninstallere Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Ændringer kræver genstart", "settings.app.scheduledDNDInfo": "Planlagt Forstyr ikke giver dig mulighed for at definere et tidsrum, hvor du ikke ønsker at få meddelelser fra Ferdi.", "settings.app.scheduledDNDTimeInfo": "Tider er i 24-timer format. Sluttidspunktet kan være før starttidspunktet (f.eks. fra 17:00 til 09:00) for at aktivere Forstyr ikke natten over.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi bruger din Macs indbyggede stavekontrol. Hvis du ønsker at ændre de sprog, stavekontrollen kontrollerer for, kan du gøre det i din Macs systemindstillinger.", "settings.app.subheadlineCache": "Cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Denne server vil blive brugt til funktionen \"Ferdi Todo\".", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Hjælp os med at oversætte Ferdi til dit sprog.", "settings.app.universalDarkModeInfo": "Universel mørk tilstand forsøger at dynamisk generere mørk tilstand stilarter for tjenester, der ellers ikke er understøttet.", "settings.app.updateStatusAvailable": "Opdatering tilgængelig, downloader...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Fællesskabstyrede Tredjepartsopskrifter", "settings.recipes.customService.headline.customRecipes": "Brugerdefinerede Tredjepartsopskrifter", "settings.recipes.customService.headline.devRecipes": "Dine Udviklingsopskrifter", - "settings.recipes.customService.intro": "For at tilføje en brugerdefineret tjeneste, kopier tjenestens opskrift til:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Udvikler Dokumentation", - "settings.recipes.customService.openFolder": "Åbn mappe", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Tilgængelige tjenester", "settings.recipes.missingService": "Mangler du en service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Tjenesten blev tilføjet", "settings.searchService": "Søg tjeneste", "settings.service.error.goBack": "Tilbage til tjenester", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Mørk læser lysstyrke", "settings.service.form.darkReaderContrast": "Mørk læser kontrast", "settings.service.form.darkReaderSepia": "Mørk læser sepia", - "settings.service.form.deleteButton": "Slet tjeneste", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Rediger {name}", "settings.service.form.enableAudio": "Aktiver lyd", "settings.service.form.enableBadge": "Vis ulæste beskedbadges", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Åbn user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS proxyindstillinger", "settings.service.form.proxy.host": "Proxy vært/IP", - "settings.service.form.proxy.info": "Proxyindstillinger synkroniseres ikke med Ferdi serverne.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Brug Proxy", - "settings.service.form.proxy.password": "Adgangskode (valgfri)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Genstart Ferdi efter ændring af proxyindstillinger.", - "settings.service.form.proxy.user": "Bruger (valgfri)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Dine brugerfiler vil blive indsat i websiden, så du kan tilpasse tjenester lige som du ønsker. Brugerfiler gemmes kun lokalt og overføres ikke til andre enheder der bruger samme konto.", "settings.service.form.saveButton": "Gem service", "settings.service.form.tabHosted": "Hosted", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi er et \"open source\" og fællesskabsstyret program.

    Tak til de personer, der gør dette muligt:

    ", "settings.supportFerdi.bannerText": "Vil du hjælpe os med at forbedre Ferdi?", "settings.supportFerdi.headline": "Om Ferdi", - "settings.supportFerdi.openSurvey": "Åbn undersøgelse", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Hvis du har lyst til at støtte Ferdi's udviklere med en donation, kan du gøre det på både,", "settings.supportFerdi.textDonationAnd": "og", "settings.supportFerdi.textExpenses": "Omend frivillige gør det meste af arbejdet, er vi stadig nødt til at betale for servere og certifikater. Som et fællesskab er vi fuldt ud gennemsigtige med hensyn til de midler, vi indsamler og bruger - se vores", "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors", - "settings.supportFerdi.textListContributors": "Fuld liste over bidragsydere", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "her", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Støtte er altid velkommen. Du kan finde en liste over den hjælp, vi har brug for", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Nonprofit", "settings.user.form.currentPassword": "Nuværende adgangskode", "settings.user.form.email": "Mailadresse", - "settings.user.form.firstname": "Fornavn", - "settings.user.form.lastname": "Efternavn", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Ny adgangskode", "settings.workspace.add.form.name": "Navn", "settings.workspace.add.form.submitButton": "Opret arbejdsrum", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Prøv igen", "settings.workspaces.updatedInfo": "Dine ændringer er blevet gemt", "settings.workspaces.workspaceFeatureHeadline": "Mindre er mere: Introducerer Ferdi arbejdsrum", - "settings.workspaces.workspaceFeatureInfo": "Ferdi Arbejdsrum lader dig fokusere på, hvad der er vigtigt lige nu. Konfigurer forskellige sæt af tjenester og skift nemt mellem dem til enhver tid. Du bestemmer hvilke tjenester du har brug for hvor og hvornår, så vi kan hjælpe dig med at holde dig på toppen - eller nemt lukke ned for arbejdet, når du vil.", + "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.", "settings.workspaces.workspacesRequestFailed": "Kunne ikke indlæse dine arbejdsrum", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Aktiver notifikationer og lyd", "signup.email.label": "Mailadresse", "signup.emailDuplicate": "Der findes allerede en bruger med den mailadresse", - "signup.firstname.label": "Fornavn", + "signup.firstname.label": "First Name", "signup.headline": "Tilmeld dig", - "signup.lastname.label": "Efternavn", + "signup.lastname.label": "Last Name", "signup.legal.info": "Ved at oprette en Ferdi konto accepterer du", "signup.legal.privacy": "Privatlivspolitik", "signup.legal.terms": "Servicevilkårene", @@ -430,11 +418,11 @@ "signup.password.label": "Adgangskode", "signup.submit.label": "Opret konto", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Slet tjeneste", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Deaktiver lyd", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Deaktiver notifikationer", - "tabs.item.disableService": "Deaktiver tjeneste", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Aktiver lyd", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Aktiver notifikationer", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Genindlæs", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} er ugyldigt", - "validation.minLength": "{field} skal være på mindst {length} tegn", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Mindst én er påkrævet", - "validation.required": "{field} er obligatorisk", - "validation.url": "{field} er ikke en gyldig URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Tilbage", "webControls.forward": "Fremad", "webControls.goHome": "Hjem", @@ -454,12 +442,12 @@ "webControls.reload": "Genindlæs", "welcome.loginButton": "Log ind på din konto", "welcome.signupButton": "Opret en gratis konto", - "workspaceDrawer.addNewWorkspaceLabel": "Tilføj nyt arbejdsrum", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Alle tjenester", "workspaceDrawer.headline": "Arbejdsrum", "workspaceDrawer.item.contextMenuEdit": "rediger", "workspaceDrawer.item.noServicesAddedYet": "Ingen tjenester tilføjet endnu", - "workspaceDrawer.workspaceFeatureInfo": "

    Ferdi Arbejdsrum lader dig fokusere på, hvad der er vigtigt lige nu. Konfigurer forskellige sæt af tjenester og skift nemt mellem dem til enhver tid.

    \n

    Du bestemmer hvilke tjenester du har brug for hvor og hvornår, så vi kan hjælpe dig med at holde dig på toppen - eller nemt lukke ned for arbejdet, når du vil.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Rediger indstillinger for arbejdsrum", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Skifter til" } diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 1deee8e54..b9e0851f7 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Neu laden", - "app.errorHandler.headline": "Es ist ein Fehler aufgetreten", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Eigener Server", "changeserver.headline": "Server wechseln", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Was ist passiert?", "connectionLostBanner.message": "Oh nein! Ferdi hat die Verbindung zu {name} verloren.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Debug-Informationen veröffentlichen", "feature.nightlyBuilds.activate": "Aktivieren", "feature.nightlyBuilds.info": "Nightly builds sind experimentelle Versionen von Ferdi die unfertige Funktionen enthalten kann. Nightly builds werden hauptsächlich von Entwicklern genutzt um neu entwickelte Features zu testen und zu sehen wie sie sich in der finalen Version verhalten. Wenn du nicht genau weisst was du tust, empfehlen wir dir Nightly Builds nicht zu aktivieren.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Wähle einen Service mit TAB, ↑ und ↓. Um einen Service zu öffnen, drücke ENTER.", "feature.quickSwitch.search": "Suchen...", "feature.quickSwitch.title": "Schnellauswahl", - "global.api.unhealthy": "Verbindung zu den Ferdi Online Services fehlgeschlagen", - "global.cancel": "Abbrechen", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Bearbeiten", "global.no": "No", "global.notConnectedToTheInternet": "Du bist nicht mit dem Internet verbunden.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Einstellungen", + "global.settings": "Settings", "global.spellchecker.useDefault": "Standard benutzen ({default})", "global.spellchecking.autodetect": "Sprache automatisch erkennen", "global.spellchecking.autodetect.short": "Automatisch", "global.spellchecking.language": "Sprache für Rechtschreibprüfung", - "global.submit": "Absenden", + "global.submit": "Submit", "global.userAgentHelp": "Benutze 'https://whatmyuseragent.com/' (für das Entdecken) oder 'https://developers.whatismybrowser.com/useragents/explore/' (für die Wahl) deines gewünschten User Agenten und kopiere ihn hier hinein.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Deine Ferdi-4-Dienste importieren", "import.notSupportedHeadline": "Dienste, die noch nicht von Ferdi 5 unterstützt werden", "import.skip.label": "Ich möchte Dienste selbst hinzufügen", - "import.submit.label": "Dienste importieren", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Es sind Fehler während einem authentifizierten Anfrage an den Ferdi Server aufgetreten. Sollte dieser Fehler bestehen, logge dich bitte aus und wieder ein.", - "infobar.buttonChangelog": "Was gibt es Neues?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Neu starten & Update installieren", "infobar.buttonReloadServices": "Dienste neu laden", "infobar.hide": "Ausblenden", @@ -75,7 +74,7 @@ "login.email.label": "E-Mail-Adresse", "login.headline": "Anmelden", "login.invalidCredentials": "E-Mail-Adresse oder Passwort ungültig", - "login.link.password": "Passwort zurücksetzen", + "login.link.password": "Reset password", "login.link.signup": "Kostenloses Konto erstellen", "login.password.label": "Passwort", "login.serverLogout": "Deine Sitzung ist abgelaufen, bitte melde Dich erneut an.", @@ -117,10 +116,10 @@ "menu.help.support": "Hilfe", "menu.help.tos": "Nutzungsbedingungen", "menu.services": "Dienste", - "menu.services.activatePreviousService": "Vorheriger Dienst", - "menu.services.addNewService": "Neuen Dienst hinzufügen", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Startseite", - "menu.services.setNextServiceActive": "Nächster Dienst", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Todos aktivieren", "menu.view": "Darstellung", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Alle Dienste", "menu.workspaces.openWorkspaceDrawer": "Workspaces schließen", "password.email.label": "E-Mail-Adresse", - "password.headline": "Passwort zurücksetzen", + "password.headline": "Reset password", "password.link.login": "Mit deinem Konto anmelden", "password.link.signup": "Kostenloses Konto erstellen", - "password.noUser": "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden", - "password.successInfo": "Wir haben Dir eine E-Mail mit weiteren Anweisungen geschickt", - "pricing.features.accountSync": "Konto-Synchronisierung", - "pricing.features.customWebsites": "Hinzufügen von eigenen Websites", - "pricing.features.desktopNotifications": "Desktop Benachrichtigungen", - "pricing.features.onPremise": "On-premise & andere Hosted Services", - "pricing.features.recipes": "Wählen Sie aus mehr als 70 Diensten", - "pricing.features.serviceProxies": "Service-Proxies", - "pricing.features.spellchecker": "Rechtschreibprüfung", - "pricing.features.teamManagement": "Team-Management", - "pricing.features.thirdPartyServices": "Integration von Services über Drittanbieter", - "pricing.features.unlimitedServices": "Unbegrenztes hinzufügen von Services", - "pricing.features.workspaces": "Arbeitsbereiche", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "{name} neu laden", "service.crashHandler.autoReload": "{name} wird in {seconds} Sekunden automatisch wiederhergestellt", "service.crashHandler.headline": "Oh nein!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Ferdi ohne ein Konto verwenden", "services.welcome": "Willkommen bei Ferdi!", - "settings.account.account.editButton": "Konto bearbeiten", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Konto nicht verfügbar", "settings.account.accountUnavailableInfo": "Du verwendest Ferdi ohne ein Konto. Wenn du Ferdi mit einem Konto verwenden möchtest und deine Dienste über alle verschiedene Computer hinweg synchronisieren möchtest, wählen bitte einen Server in den Einstellungen und melde dich danach an.", "settings.account.buttonSave": "Profil aktualisieren", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Du hast eine E-Mail zur Bestätigung der Löschung Deines Benutzerkontos erhalten. Dein Benutzerkonto und Deine Daten können nach der Löschung nicht wiederhergestellt werden!", "settings.account.deleteInfo": "Wenn du dein Ferdi-Benutzerkonto nicht mehr länger benötigst, kannst du es hier mit allen dazugehörigen Daten löschen.", "settings.account.headline": "Konto", - "settings.account.headlineAccount": "Konto-Informationen", - "settings.account.headlineDangerZone": "Benutzerkonto löschen", - "settings.account.headlineInvoices": "Rechnungen", - "settings.account.headlinePassword": "Passwort ändern", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Profil aktualisieren", "settings.account.successInfo": "Deine Änderungen wurden gespeichert", "settings.account.tryReloadServices": "Erneut versuchen", "settings.account.tryReloadUserInfoRequest": "Erneut versuchen", "settings.account.userInfoRequestFailed": "Benutzerinformationen konnten nicht geladen werden", - "settings.account.yourLicense": "Deine Ferdi Lizenz", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Schreibe deine Akzentfarbe in einem CSS-kompatiblen Format. (Standard: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Cache leeren", "settings.app.buttonInstallUpdate": "Neu starten & Update installieren", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Keine Benachrichtigungen für Zwischenablagenereignisse anzeigen", "settings.app.form.closeToSystemTray": "Ferdi in Infobereich minimieren", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Eigener Todo Server", - "settings.app.form.darkMode": "Dunkles Design verwenden", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Dark Mode aktivieren", "settings.app.form.enableGPUAcceleration": "Hardwarebeschleunigung aktivieren", "settings.app.form.enableLock": "Passwort-Sperre aktivieren", "settings.app.form.enableMenuBar": "Ferdi immer in der Menüleiste anzeigen", "settings.app.form.enableSpellchecking": "Rechtschreibprüfung aktivieren", - "settings.app.form.enableSystemTray": "Ferdi im Infobereich anzeigen", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Ferdi Todos aktivieren", "settings.app.form.hibernateOnStartup": "Behalte Dienste im Ruhezustand beim Start", "settings.app.form.hibernationStrategy": "\"Service Hibernation\"-Strategie", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Ungelesene Nachrichten zeigen, wenn die Benachrichtigungen deaktiviert sind", "settings.app.form.startMinimized": "Minimiert starten", "settings.app.form.universalDarkMode": "Universellen Dark Mode aktivieren", - "settings.app.form.useTouchIdToUnlock": "Verwenden von Touch ID zum Entsperren von Ferdi erlauben", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Erweitert", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Offizielle Übersetzungen: Englisch & Deutsch. Alle anderen Sprachen sind Übersetzungen der Ferdi Community.", "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}.", "settings.app.lockedPassword": "Passwort", - "settings.app.lockedPasswordInfo": "Bitte stelle sicher, dass du ein Passwort setzt, an welches du dich erinnern kannst.\nSolltest du dieses Passwort vergessen, musst du Ferdi neu installieren.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Änderungen werden erst nach einem Neustart wirksam.", "settings.app.scheduledDNDInfo": "Die geplante \"Nicht-stören\"-Funktion erlaubt es dir eine Zeitspanne festzulegen, in der du keine Benachrichtigungen von Ferdi erhalten möchtest.", "settings.app.scheduledDNDTimeInfo": "Zeiten im 24-Stunden-Format (z.B. 18:00). Endzeit kann vor Beginn der Startzeit sein (z.B. 17:00 Uhr, Ende 09:00), um die Funktion über Nacht zu aktivieren.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi verwendet den eingebauten Rechtschreibprüfer deines Macs, um nach Tippfehlern zu suchen. Wenn du die zu überprüfenden Sprachen ändern möchtest, kannst du das in deinen Systemeinstellungen tun.", "settings.app.subheadlineCache": "Cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Dieser Server wird für die \"Ferdi Todo\"-Funktion verwendet.", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Hilf uns, Ferdi in Deine Sprache zu übersetzen.", "settings.app.universalDarkModeInfo": "Universeller Dark Mode versucht dynamisch Dienste abzudunkeln, die vom normalen Dark Mode noch nicht unterstützt werden.", "settings.app.updateStatusAvailable": "Update verfügbar, lädt herunter ...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Community Recipes", "settings.recipes.customService.headline.customRecipes": "Benutzerdefinierte Recipes", "settings.recipes.customService.headline.devRecipes": "Eigene Recipes", - "settings.recipes.customService.intro": "Um ein benutzerdefiniertes Service hinzuzufügen, kopiere das Service Recipe nach:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Entwicklerdokumentation", - "settings.recipes.customService.openFolder": "Ordner öffnen", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Verfügbare Dienste", "settings.recipes.missingService": "Fehlt ein Dienst?", - "settings.recipes.nothingFound": "Leider hat kein Dienst zu deinem Suchbegriff gepasst - aber du kannst ihn wahrscheinlich trotzdem über die Option \"Eigene Website\" hinzufügen. Bitte beachte, dass die Website möglicherweise weitere Dienste anzeigt, die seit deiner aktuellen Version zu Ferdi hinzugefügt wurden. Um diese neuen Dienste zu erhalten, erwäge bitte ein Upgrade auf eine neuere Version von Ferdi.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Dienst erfolgreich hinzugefügt", "settings.searchService": "Dienst suchen", "settings.service.error.goBack": "Zurück zu den Diensten", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Helligkeit", "settings.service.form.darkReaderContrast": "Dark Reader Kontrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Dienst löschen", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "{name} bearbeiten", "settings.service.form.enableAudio": "Audio aktivieren", "settings.service.form.enableBadge": "Nachrichten-Badge anzeigen", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Öffne user.js", "settings.service.form.proxy.headline": "HTTP-/HTTPS-Proxy-Einstellungen", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy-Einstellungen werden nicht mit den Ferdi Servern synchronisiert.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Proxy-Server verwenden", - "settings.service.form.proxy.password": "Passwort (optional)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Bitte starte Ferdi nach dem Ändern der Proxy-Einstellungen neu.", - "settings.service.form.proxy.user": "Benutzer (optional)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Deine \"user\" Dateien werden in die Webseite eingefügt, so dass du die Dienste in beliebiger Weise anpassen können. \"user\" Dateien werden nur lokal gespeichert und nicht auf andere Computer, welche das gleiche Konto nutzen, übertragen.", "settings.service.form.saveButton": "Dienst speichern", "settings.service.form.tabHosted": "Gehostet", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi ist eine Open-Source und von der Community-geführte Anwendung.

    Danke an die Personen, die das möglich machen:

    ", "settings.supportFerdi.bannerText": "Willst du uns helfen, Ferdi zu verbessern?", "settings.supportFerdi.headline": "Über Ferdi", - "settings.supportFerdi.openSurvey": "Umfrage öffnen", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Wenn du Lust hast, die Entwicklung von Ferdi mit einer Spende zu unterstützen, kannst du dies auf folgenden Seiten tun,", "settings.supportFerdi.textDonationAnd": "und", "settings.supportFerdi.textExpenses": "Während die meiste Arbeit von Freiwilligen geleistet wird, müssen wir dennoch für Server und Zertifikate bezahlen. Als Community sind wir völlig transparent über die Gelder, die wir sammeln und ausgeben - siehe unsere", "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsoren", - "settings.supportFerdi.textListContributors": "Vollständige Liste der Mitwirkenden", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "hier", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Unterstützung ist immer willkommen. Du findest eine Liste über Unterstützungen die wir benötigen", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Non-Profit", "settings.user.form.currentPassword": "Aktuelles Passwort", "settings.user.form.email": "E-Mail", - "settings.user.form.firstname": "Vorname", - "settings.user.form.lastname": "Nachname", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Neues Passwort", "settings.workspace.add.form.name": "Name", "settings.workspace.add.form.submitButton": "Workspace erstellen", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Erneut versuchen", "settings.workspaces.updatedInfo": "Deine Änderungen wurden gespeichert", "settings.workspaces.workspaceFeatureHeadline": "Weniger ist mehr: Ferdi Workspaces", - "settings.workspaces.workspaceFeatureInfo": "Mit Ferdi Workspaces hast du alles im Blick, was gerade wichtig ist - und nur das. Erstelle unterschiedliche Sets von Services, und wechsle jederzeit zwischen ihnen hin und her. Du entscheidest welche Services du wann und wo brauchst, um ungestört arbeiten zu können - oder zu Hause besser abzuschalten.", + "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.", "settings.workspaces.workspacesRequestFailed": "Workspaces konnte nicht geladen werden", "setupAssistant.headline": "Los geht's", "setupAssistant.subheadline": "Wähle von unseren meistgenutzten Diensten und bekomm deine Nachrichten wieder in den Griff.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Benachrichtigungen & Audio aktivieren", "signup.email.label": "E-Mail-Adresse", "signup.emailDuplicate": "Es existiert bereits ein Benutzer mit dieser E-Mail Adresse.", - "signup.firstname.label": "Vorname", + "signup.firstname.label": "First Name", "signup.headline": "Anmelden", - "signup.lastname.label": "Nachname", + "signup.lastname.label": "Last Name", "signup.legal.info": "Mit der Erstellung eines Ferdi-Kontos akzeptierst Du die", "signup.legal.privacy": "Datenschutzerklärung", "signup.legal.terms": "Nutzungsbedingungen", @@ -430,11 +418,11 @@ "signup.password.label": "Passwort", "signup.submit.label": "Konto erstellen", "tabs.item.confirmDeleteService": "Willst du den {serviceName} Dienst wirklich löschen?", - "tabs.item.deleteService": "Dienst löschen", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Audio deaktivieren", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Benachrichtigungen deaktivieren", - "tabs.item.disableService": "Dienst deaktivieren", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Audio aktivieren", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Benachrichtigungen aktivieren", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Neu laden", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} ist ungültig", - "validation.minLength": "{field} muss mindestens {length} Zeichen enthalten", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Mindestens ein Wert wird benötigt", - "validation.required": "{field} wird benötigt", - "validation.url": "{field} ist keine gültige URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Zurück", "webControls.forward": "Vorwärts", "webControls.goHome": "Startseite", @@ -454,12 +442,12 @@ "webControls.reload": "Neu laden", "welcome.loginButton": "Bei Ferdi einloggen", "welcome.signupButton": "Kostenloses Konto erstellen", - "workspaceDrawer.addNewWorkspaceLabel": "Neuen Workspace hinzufügen", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Alle Dienste", "workspaceDrawer.headline": "Arbeitsbereiche", "workspaceDrawer.item.contextMenuEdit": "Bearbeiten", "workspaceDrawer.item.noServicesAddedYet": "Noch keine Services hinzugefügt", - "workspaceDrawer.workspaceFeatureInfo": "Mit Ferdi Workspaces hast du alles im Blick, was gerade wichtig ist - und nur das. Erstelle unterschiedliche Sets von Services, und wechsle jederzeit zwischen ihnen hin und her. Du entscheidest welche Services du wann und wo brauchst, um ungestört arbeiten zu können - oder zu Hause besser abzuschalten.", - "workspaceDrawer.workspacesSettingsTooltip": "Workspaces bearbeiten", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Wechsle zu" } diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json index 6964a93f1..25187401b 100644 --- a/src/i18n/locales/el.json +++ b/src/i18n/locales/el.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Επαναφόρτωση", - "app.errorHandler.headline": "Κάτι δεν λειτουργεί", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Προσαρμοσμένος διακομιστής", "changeserver.headline": "Change server", "changeserver.label": "Διακομιστής", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Τι συνέβη;", "connectionLostBanner.message": "Ωχ όχι! Ο Ferdi έχασε την επικοινωνία με το", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Εγγραφή πληροφοριών εντοπισμού σφαλμάτων", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Δεν είναι δυνατή η σύνδεση με τις ζωντανές υπηρεσίες του Ferdi", - "global.cancel": "Ακύρωση", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Επεξεργασία", "global.no": "No", "global.notConnectedToTheInternet": "Έχετε αποσυνδεθεί από το Διαδίκτυο", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Ρυθμίσεις", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Detect language automatically", "global.spellchecking.autodetect.short": "Automatic", "global.spellchecking.language": "Spell checking language", - "global.submit": "Υποβολή", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Εισαγάγετε τις υπηρεσίες σας Ferdi 4", "import.notSupportedHeadline": "Υπηρεσίες που δεν υποστηρίζονται ακόμα στο Ferdi 5", "import.skip.label": "Θέλω να προσθέσω υπηρεσίες χειροκίνητα", - "import.submit.label": "Εισαγωγή υπηρεσιών", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Τι νέο υπάρχει;", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημερώσεων", "infobar.buttonReloadServices": "Ανανέωση υπηρεσιών", "infobar.hide": "Απόκρυψη", @@ -75,7 +74,7 @@ "login.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου", "login.headline": "Σύνδεση", "login.invalidCredentials": "Το email ή ο κωδικός πρόσβασης δεν είναι έγκυρος", - "login.link.password": "Επαναφορά κωδικού πρόσβασης", + "login.link.password": "Reset password", "login.link.signup": "Δημιουργία δωρεάν λογαριασμού", "login.password.label": "Password", "login.serverLogout": "Η συνεδρία σας έληξε, συνδεθείτε ξανά.", @@ -118,7 +117,7 @@ "menu.help.tos": "Όροι Χρήσης", "menu.services": "Υπηρεσίες", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Όλες οι υπηρεσίες", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου", - "password.headline": "Επαναφορά κωδικού πρόσβασης", + "password.headline": "Reset password", "password.link.login": "Σύνδεση στο λογαριασμό σας", "password.link.signup": "Δημιουργία δωρεάν λογαριασμού", - "password.noUser": "Δεν βρέθηκε χρήστης με τη συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου", - "password.successInfo": "Ελέγξτε το email σας", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Επαναφόρτωση {name}", "service.crashHandler.autoReload": "Γίνεται προσπάθεια αυτόματης ανάκτησης του {name} σε {seconds} δευτερόλεπτα", "service.crashHandler.headline": "Ω, όχι!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Καλώς ορίσατε στον Ferdi", - "settings.account.account.editButton": "Επεξεργασία λογαριασμού", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Ενημέρωση προφίλ", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Έχετε λάβει ένα email με έναν σύνδεσμο για την επιβεβαίωση της διαγραφής του λογαριασμού σας. Ο λογαριασμός και τα δεδομένα σας δεν μπορούν να ανακτηθούν!", "settings.account.deleteInfo": "Εάν δεν χρειάζεστε πλέον το λογαριασμό σας στο Ferdi, μπορείτε να διαγράψετε το λογαριασμό σας και όλα τα δεδομένα που σχετίζονται με αυτόν εδώ.", "settings.account.headline": "Λογαριασμός", - "settings.account.headlineAccount": "Πληροφορίες λογαριασμού", - "settings.account.headlineDangerZone": "Επικίνδυνη Ζώνη", - "settings.account.headlineInvoices": "Τιμολόγια", - "settings.account.headlinePassword": "Αλλαγή κωδικού πρόσβασης", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Ενημέρωση προφίλ", "settings.account.successInfo": "Οι αλλαγές σας έχουν αποθηκευτεί", "settings.account.tryReloadServices": "Δοκιμάστε ξανά", "settings.account.tryReloadUserInfoRequest": "Δοκιμάστε ξανά", "settings.account.userInfoRequestFailed": "Δεν ήταν δυνατή η φόρτωση πληροφοριών χρήστη", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Καθαρισμός λανθάνουσας μνήμης", "settings.app.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημερώσεων", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Ενεργοποιήση Ενίσχυσης GPU ", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Ενεργοποίηση ορθογραφικού ελέγχου", - "settings.app.form.enableSystemTray": "Εμφάνιση του Ferdi στη γραμμή ειδοποιήσεων", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Διαθέσιμες υπηρεσίες", "settings.recipes.missingService": "Λείπει κάποια υπηρεσία;", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Η υπηρεσία προστέθηκε με επιτυχία", "settings.searchService": "Αναζήτηση υπηρεσίας", "settings.service.error.goBack": "Επιστροφή στις υπηρεσίες", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Διαγραφή υπηρεσίας", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Επεξεργασία {name}", "settings.service.form.enableAudio": "Ενεργοποίηση ήχου", "settings.service.form.enableBadge": "Εμφάνιση εικονιδίων μη αναγνωσμένου μηνύματος", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Μη κερδοσκοπικός", "settings.user.form.currentPassword": "Τρέχων κωδικός πρόσβασης", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Όνομα", - "settings.user.form.lastname": "Επίθετο", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Νέος κωδικός πρόσβασης", "settings.workspace.add.form.name": "Όνομα", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Ενεργοποίηση ειδοποιήσεων & ήχου", "signup.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου", "signup.emailDuplicate": "Ένας χρήστης με τη συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου υπάρχει ήδη", - "signup.firstname.label": "Όνομα", + "signup.firstname.label": "First Name", "signup.headline": "Εγγραφή", - "signup.lastname.label": "Επίθετο", + "signup.lastname.label": "Last Name", "signup.legal.info": "Δημιουργώντας έναν λογαριασμό Ferdi αποδέχεστε τους", "signup.legal.privacy": "Δήλωση απορρήτου", "signup.legal.terms": "Όροι υπηρεσίας", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "Δημιουργία λογαριασμού", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Διαγραφή υπηρεσίας", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Απενεργοποίηση ήχου", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Απενεργοποίηση ειδοποιήσεων", - "tabs.item.disableService": "Απενεργοποίηση υπηρεσίας", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Ενεργοποίηση ήχου", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Ενεργοποίηση ειδοποιήσεων", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Επαναφόρτωση", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} δεν είναι έγκυρο", - "validation.minLength": "{field} πρέπει να είναι τουλάχιστον {length} χαρακτήρες", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} είναι υποχρεωτικό", - "validation.url": "{field} δεν είναι έγκυρος σύνδεσμος URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 9a5c248a2..46ccef5fc 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Volver a cargar", - "app.errorHandler.headline": "Algo salió mal.", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Servidor personalizado", "changeserver.headline": "Cambiar servidor", "changeserver.label": "Servidor", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "¿Qué ocurrió?", "connectionLostBanner.message": "¡Oh no! Ferdi perdió la conexión con {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publica la información de depuración", "feature.nightlyBuilds.activate": "Activar", "feature.nightlyBuilds.info": "Las \"Nightly builds\" son versiones altamente experimentales de Ferdi que pueden contener características sin pulir o sin completar. Estas versiones son utilizadas principalmente por los desarrolladores para probar sus nuevas características desarrolladas y cómo se comportarán en la versión final. Si no sabe lo que está haciendo, le sugerimos que no active las estas versiones.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Puede seleccionar un servicio usando TAB, ↑ y ↓. Puede abrir servicio usando ENTER.", "feature.quickSwitch.search": "Buscar...", "feature.quickSwitch.title": "Cambiar rápidamente", - "global.api.unhealthy": "No es posible conectarse a los servicios en línea de Ferdi.", - "global.cancel": "Cancelar", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Editar", "global.no": "No", "global.notConnectedToTheInternet": "No estás conectado a Internet", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Configuración", + "global.settings": "Settings", "global.spellchecker.useDefault": "Utilizar estándar del sistema ({default})", "global.spellchecking.autodetect": "Detectar el idioma automáticamente", "global.spellchecking.autodetect.short": "Automático", "global.spellchecking.language": "Corrector de ortografía", - "global.submit": "Enviar", + "global.submit": "Submit", "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.", "global.userAgentPref": "Navegador", "global.yes": "Yes", "import.headline": "Importa tus servicios de Ferdi 4", "import.notSupportedHeadline": "Servicios aún no admitidos en Ferdi 5", "import.skip.label": "Quiero agregar servicios manualmente", - "import.submit.label": "Importar servicios", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Error al intentar realizar la solicitud de autenticación. Por favor, cerrar la sesión y volver a entrar si este error persiste.", - "infobar.buttonChangelog": "¿Qué hay de nuevo?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Reiniciar e instalar actualización", "infobar.buttonReloadServices": "Recargar servicios", "infobar.hide": "Ocultar", @@ -75,7 +74,7 @@ "login.email.label": "Dirección de correo electrónico", "login.headline": "Iniciar sesión", "login.invalidCredentials": "Correo electrónico o contraseña no válidos ", - "login.link.password": "Restablecer contraseña", + "login.link.password": "Reset password", "login.link.signup": "Crear una cuenta gratuita", "login.password.label": "Contraseña", "login.serverLogout": "Tu sesión ha expirado, por favor inicia la sesión de nuevo.", @@ -117,10 +116,10 @@ "menu.help.support": "Soporte", "menu.help.tos": "Términos del Servicio", "menu.services": "Servicios", - "menu.services.activatePreviousService": "Activa el servicio previo", - "menu.services.addNewService": "Añadir Nuevo Servicio", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Inicio", - "menu.services.setNextServiceActive": "Activa el siguiente servicio", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Tareas pendientes", "menu.todos.enableTodos": "Habilitar Tareas pendientes", "menu.view": "Mostrar", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Todos los servicios", "menu.workspaces.openWorkspaceDrawer": "Abrir diseñador de espacios de trabajo", "password.email.label": "Dirección de correo electrónico", - "password.headline": "Restablecer contraseña", + "password.headline": "Reset password", "password.link.login": "Inicia sesión en tu cuenta", "password.link.signup": "Crear una cuenta gratuita", - "password.noUser": "No se encontró un usuario con esa dirección de correo electrónico", - "password.successInfo": "Por favor revisa tu correo electrónico", - "pricing.features.accountSync": "Sincronización de cuenta", - "pricing.features.customWebsites": "Agregue sitios personalizados", - "pricing.features.desktopNotifications": "Notificaciones de escritorio", - "pricing.features.onPremise": "En sitio y otros servicios alojados", - "pricing.features.recipes": "Elegir entre más de 70 servicios", - "pricing.features.serviceProxies": "Apoderados de Servicio", - "pricing.features.spellchecker": "Soporte de corrector ortográfico", - "pricing.features.teamManagement": "Administración de Equipo", - "pricing.features.thirdPartyServices": "Instalar servicios de terceros", - "pricing.features.unlimitedServices": "Agregar servicios ilimitados", - "pricing.features.workspaces": "Espacios de trabajo", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Recargar {name}", "service.crashHandler.autoReload": "Intentando recuperar automáticamente {name} en {seconds} segundos", "service.crashHandler.headline": "¡Oh, no!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Usar Ferdi sin una cuenta", "services.welcome": "Bienvenido a Ferdi", - "settings.account.account.editButton": "Editar cuenta", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "La cuenta no está disponible", "settings.account.accountUnavailableInfo": "Estás usando Ferdi sin una cuenta. Si desea utilizar Ferdi con una cuenta y así mantener sus servicios sincronizados entre instalaciones, debe seleccionar un servidor en la Configuración e iniciar sesión.", "settings.account.buttonSave": "Actualizar perfil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Has recibido un correo electrónico con un enlace para confirmar la eliminación de su cuenta. ¡Tu cuenta y datos no podrán ser restaurados!", "settings.account.deleteInfo": "Si ya no necesitas tu cuenta de Ferdi, puedes eliminarla junto a todos los datos aquí relacionados.", "settings.account.headline": "Cuenta", - "settings.account.headlineAccount": "Información de la cuenta", - "settings.account.headlineDangerZone": "Zona Peligrosa", - "settings.account.headlineInvoices": "Facturas", - "settings.account.headlinePassword": "Cambiar contraseña", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Actualizar perfil", "settings.account.successInfo": "Tus cambios han sido guardados", "settings.account.tryReloadServices": "Intentar de nuevo", "settings.account.tryReloadUserInfoRequest": "Intentar de nuevo", "settings.account.userInfoRequestFailed": "No se pudo cargar la información de usuario", - "settings.account.yourLicense": "Su Licencia Ferdi", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Escribe tu color de acento en un formato compatible con CSS. (Predeterminado: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Limpiar caché", "settings.app.buttonInstallUpdate": "Reiniciar e instalar actualización", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Dejar de mostrar notificaciones acerca del portapapeles", "settings.app.form.closeToSystemTray": "Cerrar Ferdi a la barra de tareas", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Servidor de Todo personalizado", - "settings.app.form.darkMode": "Activar tema oscuro", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Habilitar modo oscuro", "settings.app.form.enableGPUAcceleration": "Habilitar aceleración de GPU", "settings.app.form.enableLock": "Activar bloqueo por contraseña", "settings.app.form.enableMenuBar": "Mostrar a Ferdi en la barra de menús", "settings.app.form.enableSpellchecking": "Activar corrección ortográfica", - "settings.app.form.enableSystemTray": "Mostrar Ferdi en la bandeja del sistema", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Activar Ferdi Todos", "settings.app.form.hibernateOnStartup": "Mantener los servicios en hibernación al iniciar", "settings.app.form.hibernationStrategy": "Estrategia de hibernación", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Mostrar la insignia de mensajes sin leer cuando las notificaciones están desactivadas", "settings.app.form.startMinimized": "Iniciar minimizado", "settings.app.form.universalDarkMode": "Activar modo oscuro universal", - "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Avanzado", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Las traducciones oficiales son en inglés y alemán. Todos los demás idiomas son traducciones basadas en la comunidad.", "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}.", "settings.app.lockedPassword": "Contraseña", - "settings.app.lockedPasswordInfo": "Por favor, asegúrese de recordar la contraseña que establezca.\nSi la perdiera u olvidara, tendría que reinstalar Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Los cambios requieren reiniciar", "settings.app.scheduledDNDInfo": "El \"No molestar\" programado permite definir un período de tiempo en el que no recibir notificaciones de Ferdi.", "settings.app.scheduledDNDTimeInfo": "Horas en formato 24 horas. La hora de finalización puede ser anterior a la hora de inicio (por ejemplo, inicio 17:00, final 09:00) para habilitar No molestar la noche.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi utiliza el corrector ortográfico incluido en su Mac. Si desea cambiar los lenguajes que el corrector ortográfico revisa, lo puede hacer en las Preferencias del Sistema de su Mac.", "settings.app.subheadlineCache": "Caché", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Este servidor se utilizará para la función \"Ferdi Todo\".", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Ayúdanos a traducir Ferdi a tu idioma.", "settings.app.universalDarkModeInfo": "El Modo Oscuro Universal intenta generar dinámicamente estilos de modo oscuro para servicios que de otro modo no están soportados actualmente.", "settings.app.updateStatusAvailable": "Actualización disponible, descargando...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Recetas de terceros comunitarios", "settings.recipes.customService.headline.customRecipes": "Recetas de terceros comunitarios", "settings.recipes.customService.headline.devRecipes": "Sus recetas de Servicio de Desarrollo", - "settings.recipes.customService.intro": "Para añadir un servicio personalizado, copia la receta de servicio a:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Documentación para desarrolladores", - "settings.recipes.customService.openFolder": "Abrir carpeta", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Servicios disponibles", "settings.recipes.missingService": "¿Echas de menos algún servicio?", - "settings.recipes.nothingFound": "Lo sentimos, pero no pudimos encontrar ningún servicio similar a tu búsqueda, sin embargo: puedes agregarlo utilizando la opción de \"Sitio web personalizado\". \nRecuerda que pueden aparecer más servicios de los que has agregado a Ferdi desde la versión que estás utilizando. Para poder utilizar los nuevos servicios disponibles, considera actualizar a la versión más reciente.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Servicio añadido con éxito", "settings.searchService": "Buscar servicio", "settings.service.error.goBack": "Volver a los servicios", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Brillo del Lector Oscuro", "settings.service.form.darkReaderContrast": "Contraste del Lector Oscuro", "settings.service.form.darkReaderSepia": "Lector Oscuro Sepia", - "settings.service.form.deleteButton": "Eliminar servicio", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Editar {name}", "settings.service.form.enableAudio": "Habilitar audio", "settings.service.form.enableBadge": "Mostrar señal de mensajes no leídos", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Abrir user.js", "settings.service.form.proxy.headline": "Ajustes Proxy HTTP/HTTPS", "settings.service.form.proxy.host": "Servidor/IP Proxy", - "settings.service.form.proxy.info": "Las configuraciones de Proxy no se sincronizarán con los servidores de Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Utilizar Proxy", - "settings.service.form.proxy.password": "Contraseña (opcional)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Puerto", "settings.service.form.proxy.restartInfo": "Por favor reinicie Ferdi despues de modificar los ajustes proxy.", - "settings.service.form.proxy.user": "Usuario (opcional)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Sus archivos de usuario se insertarán en la página web para que pueda personalizar los servicios de la forma que desee. Los archivos de usuario sólo se almacenan localmente y no se transfieren a otros equipos usando la misma cuenta.", "settings.service.form.saveButton": "Guardar servicio", "settings.service.form.tabHosted": "Alojado", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi es una aplicación de código abierto y líder en la comunidad.

    Gracias a la gente que lo hace possbile:

    ", "settings.supportFerdi.bannerText": "¿Quieres ayudarnos a mejorar Ferdi?", "settings.supportFerdi.headline": "Acerca de Ferdi", - "settings.supportFerdi.openSurvey": "Abrir encuesta", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Si desea apoyar el desarrollo de Ferdi con una donación, puede hacerlo en ambos,", "settings.supportFerdi.textDonationAnd": "y", "settings.supportFerdi.textExpenses": "Si bien los voluntarios hacen la mayor parte del trabajo, todavía tenemos que pagar los servidores y los certificados. Como comunidad, somos completamente transparentes con los fondos que recaudamos y gastamos; consulte nuestra", "settings.supportFerdi.textGitHubSponsors": "Patrocinadores de GitHub", - "settings.supportFerdi.textListContributors": "Lista completa de colaboradores", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "aquí", "settings.supportFerdi.textOpenCollective": "Colectivo abierto", "settings.supportFerdi.textSupportWelcome": "El apoyo siempre es bienvenido. Puede encontrar una lista de la ayuda que necesitamos", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Sin ánimo de lucro", "settings.user.form.currentPassword": "Contraseña actual", "settings.user.form.email": "Correo electrónico", - "settings.user.form.firstname": "Nombre", - "settings.user.form.lastname": "Apellido", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nueva contraseña", "settings.workspace.add.form.name": "Nombre", "settings.workspace.add.form.submitButton": "Crear un sitio de trabajo", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Intentar de nuevo", "settings.workspaces.updatedInfo": "Tus cambios han sido guardados", "settings.workspaces.workspaceFeatureHeadline": "Menos es más: Presentación de Ferdi Workspaces", - "settings.workspaces.workspaceFeatureInfo": "Los espacios de trabajo Ferdi permiten centrarse en lo que es importante. Configure diferentes conjuntos de servicios y cambie fácilmente entre ellos en cualquier momento. Usted decide qué servicios necesita, cuándo y dónde, para que podamos ayudarte a mantenerte al tanto - o apartarte fácilmente del trabajo cuando asi lo desees.", + "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.", "settings.workspaces.workspacesRequestFailed": "No se han podido cargar sus áreas de trabajo", "setupAssistant.headline": "Empecemos", "setupAssistant.subheadline": "Elige entre nuestros servicios más utilizados y vuelve a ponerte al tanto de tu mensajería ahora.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Activar notificaciones y sonido", "signup.email.label": "Dirección de correo electrónico", "signup.emailDuplicate": "Ya existe un usuario con esa dirección de correo electrónico", - "signup.firstname.label": "Nombre", + "signup.firstname.label": "First Name", "signup.headline": "Registrarse", - "signup.lastname.label": "Apellido", + "signup.lastname.label": "Last Name", "signup.legal.info": "Al crear una cuenta en Ferdi usted acepta", "signup.legal.privacy": "Declaración de privacidad", "signup.legal.terms": "Términos de servicio", @@ -430,11 +418,11 @@ "signup.password.label": "Contraseña", "signup.submit.label": "Crear cuenta", "tabs.item.confirmDeleteService": "¿Estás seguro que quieres elimiar el servicio de {serviceName}?", - "tabs.item.deleteService": "Eliminar servicio", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Desactivar sonido", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Desactivar notificaciones", - "tabs.item.disableService": "Desactivar servicio", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Habilitar audio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Activar notificaciones", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Volver a cargar", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} no es válido", - "validation.minLength": "{field} debería tener al menos {length} caracteres", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Al menos uno es requerido", - "validation.required": "{field} es obligatorio", - "validation.url": "{field} no es una URL válida", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Volver", "webControls.forward": "Siguiente", "webControls.goHome": "Inicio", @@ -454,12 +442,12 @@ "webControls.reload": "Volver a cargar", "welcome.loginButton": "Accede a tu cuenta", "welcome.signupButton": "Crear una cuenta gratuita", - "workspaceDrawer.addNewWorkspaceLabel": "Añadir nuevo espacio de trabajo", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Todos los servicios", "workspaceDrawer.headline": "Espacios de trabajo", "workspaceDrawer.item.contextMenuEdit": "editar", "workspaceDrawer.item.noServicesAddedYet": "Ningún servicio ha sido añadido", - "workspaceDrawer.workspaceFeatureInfo": "

    Los espacios de trabajo Ferdi permiten centrarse en lo que es importante. Configure diferentes conjuntos de servicios y cambie fácilmente entre ellos en cualquier momento.

    Usted decide qué servicios necesita, cuándo y dónde, para que podamos ayudarte a mantenerte al tanto - o apartarte fácilmente del trabajo cuando asi lo desees.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Editar ajustes de áreas de trabajo", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Cambiando a" } diff --git a/src/i18n/locales/fi.json b/src/i18n/locales/fi.json index 5ccea37e5..1f7cd8303 100644 --- a/src/i18n/locales/fi.json +++ b/src/i18n/locales/fi.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Lataa uudelleen", - "app.errorHandler.headline": "Jotain meni pieleen", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Mukautettu palvelin", "changeserver.headline": "Vaihda palvelinta", "changeserver.label": "Palvelin", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Mitä tapahtui?", "connectionLostBanner.message": "Voi ei! Ferdi menetti yhteyden {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Julkaise virheraportti", "feature.nightlyBuilds.activate": "Aktivoi", "feature.nightlyBuilds.info": "Uusimmat versiot ovat Ferdin kokeellisia versioita, jotka voivat sisältää viimeistelemättömiä tai keskeneräisiä ominaisuuksia. Näitä uusimpia versioita käyttävät pääasiassa kehittäjät testaamaan uusia ominaisuuksia ja miten ne toimivat lopullisessa versiossa. Jos et tiedä mitä olet tekemässä, suosittelemme ettet aktivoi uusimpia versioita.", "feature.nightlyBuilds.title": "Uusimmat versiot", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Valitse palvelu painamalla TAB, ↑ ja ↓. Avaa palvelu painamalla ENTER.", "feature.quickSwitch.search": "Etsi...", "feature.quickSwitch.title": "Pikavalitsin", - "global.api.unhealthy": "Ferdin verkkopalveluihin ei saada yhteyttä", - "global.cancel": "Peruuta", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Muokkaa", "global.no": "No", "global.notConnectedToTheInternet": "Et ole yhteydessä internetiin.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Asetukset", + "global.settings": "Settings", "global.spellchecker.useDefault": "Käytä järjestelmän oletusasetusta ({default})", "global.spellchecking.autodetect": "Tunnista kieli automaattisesti", "global.spellchecking.autodetect.short": "Automaattinen", "global.spellchecking.language": "Oikeinkirjoituksen tarkistuskieli", - "global.submit": "Jatka", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Tuo Ferdin 4 palveluasi", "import.notSupportedHeadline": "Palvelut eivät vielä tue Ferdi 5-versiota", "import.skip.label": "Haluan lisätä palvelut manuaalisesti", - "import.submit.label": "Tuo palveluita", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Todennuspyynnön suoritamisessa tapahtui virhe. Jos tämä virhe toistuu, ole hyvä ja yritä kirjautua ulos. Kirjaudu sen jälkeen uudestaan sisälle.", - "infobar.buttonChangelog": "Mitä uutta?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Käynnistä uudelleen ja asenna päivitys", "infobar.buttonReloadServices": "Lataa palvelut uudestaan", "infobar.hide": "Piilota", @@ -75,7 +74,7 @@ "login.email.label": "Sähköpostiosoite", "login.headline": "Kirjaudu sisään", "login.invalidCredentials": "Sähköpostiosoite tai salasana ei kelpaa", - "login.link.password": "Nollaa salasana", + "login.link.password": "Reset password", "login.link.signup": "Luo ilmainen tili", "login.password.label": "Salasana", "login.serverLogout": "Istuntosi on vanhentunut. Kirjaudu uudelleen sisään.", @@ -117,10 +116,10 @@ "menu.help.support": "Tuki", "menu.help.tos": "Käyttöehdot", "menu.services": "Palvelut", - "menu.services.activatePreviousService": "Aktivoi edellinen palvelu", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Etusivu", - "menu.services.setNextServiceActive": "Aktivoi seuraava palvelu", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos-tehtävät", "menu.todos.enableTodos": "Ota Todos käyttöön", "menu.view": "Katso", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Kaikki palvelut", "menu.workspaces.openWorkspaceDrawer": "Avaa työtilan valikko", "password.email.label": "Sähköpostiosoite", - "password.headline": "Nollaa salasana", + "password.headline": "Reset password", "password.link.login": "Kirjaudu tilillesi", "password.link.signup": "Luo ilmainen tili", - "password.noUser": "Tälle sähköpostiosoiteelle ei löytynyt käyttäjää", - "password.successInfo": "Ole hyvä ja tarkista sähköpostisi", - "pricing.features.accountSync": "Tilin Synkronointi", - "pricing.features.customWebsites": "Lisää mukautettuja sivustoja", - "pricing.features.desktopNotifications": "Työpöytäilmoitukset", - "pricing.features.onPremise": "Toimitila ja muut Hosting-palvelut", - "pricing.features.recipes": "Valitse yli 70 Palvelusta", - "pricing.features.serviceProxies": "Palveluiden Välityspalvelimet", - "pricing.features.spellchecker": "Oikoluvun tuki", - "pricing.features.teamManagement": "Tiimin Hallinta", - "pricing.features.thirdPartyServices": "Asenna kolmannen osapuolen palveluita", - "pricing.features.unlimitedServices": "Lisää rajattomat palvelut", - "pricing.features.workspaces": "Työtilat", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Lataa uudestaan {name}", "service.crashHandler.autoReload": "Yritetään palauttaa {name} automaattisesti {seconds} sekunnin kuluttua", "service.crashHandler.headline": "Voi ei!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Käytä Ferdia ilman tiliä", "services.welcome": "Tervetuloa Ferdiin", - "settings.account.account.editButton": "Muokkaa tiliä", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Tili ei ole käytettävissä", "settings.account.accountUnavailableInfo": "Käytät Ferdia ilman tiliä. Jos haluat käyttää Ferdia tilin kanssa ja pitää palvelusi synkronoituna kaikissa asennuksissa, valitse Asetukset-välilehdessä palvelin ja kirjaudu sisään.", "settings.account.buttonSave": "Päivitä profiili", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Olet saanut sähköpostiviestissä linkin, jonka kautta voit vahvistaa tilisi poistamisen. Tiliäsi ja tietoja ei voi palauttaa!", "settings.account.deleteInfo": "Jos et enää tarvitse Ferdi-tiliäsi, voit poistaa tilisi ja kaikki siihen liittyvät tiedot täältä.", "settings.account.headline": "Tili", - "settings.account.headlineAccount": "Tilin tiedot", - "settings.account.headlineDangerZone": "Vaaravyöhyke", - "settings.account.headlineInvoices": "Laskut", - "settings.account.headlinePassword": "Vaihda salasana", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Päivitä profiili", "settings.account.successInfo": "Tekemäsi muutokset on tallennettu", "settings.account.tryReloadServices": "Yritä uudelleen", "settings.account.tryReloadUserInfoRequest": "Yritä uudelleen", "settings.account.userInfoRequestFailed": "Käyttäjätietoja ei voitu ladata", - "settings.account.yourLicense": "Sinun Ferdi-lisenssi", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Tyhjennä välimuisti", "settings.app.buttonInstallUpdate": "Käynnistä uudelleen ja asenna päivitys", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Mukautettu Todo-Palvelin", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "Ota tumma tila käyttöön", "settings.app.form.enableGPUAcceleration": "Ota Gpu-kiihdytys käyttöön", "settings.app.form.enableLock": "Ota Salasanan lukitus käyttöön", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Ota oikoluku käyttöön", - "settings.app.form.enableSystemTray": "Näytä Ferdi ilmoitusalueella", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Ota Ferdi Todos käyttöön", "settings.app.form.hibernateOnStartup": "Pidä palvelut horrostilassa käynnistettäessä", "settings.app.form.hibernationStrategy": "Horrostila-suunnitelma", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Näytä merkki lukemattomasta viestistä kun ilmoitukset on poistettu käytöstä", "settings.app.form.startMinimized": "Käynnistä pienennettynä", "settings.app.form.universalDarkMode": "Ota käyttöön yleinen tumma tila", - "settings.app.form.useTouchIdToUnlock": "Salli TouchID:n käyttö Ferdin avaamiseksi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Lisäasetukset", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Viralliset käännökset ovat englanti ja saksa. Kaikki muut kielet ovat yhteisön kääntämiä.", "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}.", "settings.app.lockedPassword": "Salasana", - "settings.app.lockedPasswordInfo": "Varmista, että luot salasanan, jonka muistat.\nJos hukkaat tämän salasanan, sinun täytyy asentaa Ferdi uudelleen.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Muutokset vaativat uudelleenkäynnistyksen", "settings.app.scheduledDNDInfo": "Ajastetun Älä häiritse-tilan avulla voit määritellä ajanjakson, jonka aikana et halua saada ilmoituksia Ferdistä.", "settings.app.scheduledDNDTimeInfo": "Ajastin 24 tunnin järjestelmässä. Kun Älä häiritse-tila otetaan yöksi käyttöön, päättymisaika voi olla ennen alkamisaikaa (esim. alku 17:00, loppu 09:00).", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi käyttää Macin sisäänrakennettua oikolukua tarkastaessaan kirjoitusvirheitä. Jos haluat muuttaa tarkastettavaa kieltä, voit tehdä sen Macin järjestelmän asetuksissa.", "settings.app.subheadlineCache": "Välimuisti", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Tätä palvelinta käytetään \"Ferdi Todo\" -toiminnossa.", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Auta meitä kääntämään Ferdi omalle kielellesi.", "settings.app.universalDarkModeInfo": "Yleinen Tumma-tila yrittää luoda palveluille tyylejä, joita ei tueta tällä hetkellä.", "settings.app.updateStatusAvailable": "Päivitys saatavilla, ladataan...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Yhteisön Kolmannen osapuolen Ohjeet", "settings.recipes.customService.headline.customRecipes": "Kolmannen osapuolen ohjeet", "settings.recipes.customService.headline.devRecipes": "Ohjeet palvelun kehittämiseen", - "settings.recipes.customService.intro": "Jos haluat lisätä mukautetun palvelun, kopioi palvelun ohje:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Ohjelmoijan dokumentaatio", - "settings.recipes.customService.openFolder": "Avaa kansio", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Käytettävissä olevat palvelut", "settings.recipes.missingService": "Palvelu puuttuu?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Palvelu lisätty onnistuneesti", "settings.searchService": "Hae palvelua", "settings.service.error.goBack": "Takaisin palveluihin", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Tumman tilan kirkkaus", "settings.service.form.darkReaderContrast": "Tumman tilan kontrasti", "settings.service.form.darkReaderSepia": "Tumman tilan seepia", - "settings.service.form.deleteButton": "Poista palvelu", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Muokkaa {name}", "settings.service.form.enableAudio": "Ota ääni käyttöön", "settings.service.form.enableBadge": "Näytä lukemattomat viestit", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Avaa user.js", "settings.service.form.proxy.headline": "Http/Https välityspalvelimen asetukset", "settings.service.form.proxy.host": "Välityspalvelimen Host/IP", - "settings.service.form.proxy.info": "Välityspalvelimen asetukset eivät synkronoidu Ferdin palvelimiin.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Käytä välityspalvelinta", - "settings.service.form.proxy.password": "Salasana (valinnainen)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Portti", "settings.service.form.proxy.restartInfo": "Käynnistä Ferdi välityspalvelimen asetusten vaihtamisen jälkeen.", - "settings.service.form.proxy.user": "Käyttäjä (valinnainen)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Käyttäjän tiedostot lisätään web-sivulle, jotta voit muokata palveluita millä tahansa tavalla. Käyttäjätiedostot tallennetaan vain paikallisesti eikä niitä siirretä muille tietokoneille käyttäen samaa tiliä.", "settings.service.form.saveButton": "Tallenna palvelu", "settings.service.form.tabHosted": "Hosted", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi on yhteisöjohtoinen ja avoimen lähdekoodin sovellus.

    Kiitos henkilöille, jotka tekevät tämän mahdolliseksi:

    ", "settings.supportFerdi.bannerText": "Haluatko auttaa meitä kehittämään Ferdiä?", "settings.supportFerdi.headline": "Tietoja Ferdistä", - "settings.supportFerdi.openSurvey": "Avaa mielipidekysely", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Jos haluat tukea Ferdin kehitystä lahjoituksella, voit tehdä niin molemmilla tavoilla,", "settings.supportFerdi.textDonationAnd": "ja", "settings.supportFerdi.textExpenses": "Vaikka vapaaehtoiset tekevät suurimman osan työstä, meidän on silti maksettava palvelemista ja sertifikaateista. Olemme yhteisönä täysin läpinäkyviä keräämiämme ja käyttämiemme varojen suhteen", "settings.supportFerdi.textGitHubSponsors": "GitHub sponsorit", - "settings.supportFerdi.textListContributors": "Täydellinen luettelo tukijoista", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "tästä", "settings.supportFerdi.textOpenCollective": "Avoin Kollektiivi", "settings.supportFerdi.textSupportWelcome": "Tuki on aina tervetullutta. Voit saada listan tarvitsemastamme avusta", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Voittoa tavoittelematon", "settings.user.form.currentPassword": "Nykyinen salasana", "settings.user.form.email": "Sähköposti", - "settings.user.form.firstname": "Etunimi", - "settings.user.form.lastname": "Sukunimi", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Uusi salasana", "settings.workspace.add.form.name": "Nimi", "settings.workspace.add.form.submitButton": "Luo työtila", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Yritä uudelleen", "settings.workspaces.updatedInfo": "Tekemäsi muutokset on tallennettu", "settings.workspaces.workspaceFeatureHeadline": "Vähemmän on enemmän: Esittelyssä Ferdi Työtilat", - "settings.workspaces.workspaceFeatureInfo": "Ferdi Työtilat antavat sinun keskittyä siihen, mikä on tärkeää juuri nyt. Määritä erilaisia palveluja ja vaihda helposti niiden välillä milloin tahansa. Sinä päätät mitä palveluita tarvitset milloin ja missä, jotta voimme auttaa sinua pysymään töissä - tai helposti pois töistä aina kun haluat.", + "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.", "settings.workspaces.workspacesRequestFailed": "Työtiloja ei voitu ladata", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Käytä ilmoituksia ja ääniä", "signup.email.label": "Sähköpostiosoite", "signup.emailDuplicate": "Käyttäjä, jolla on tämä sähköpostiosoite, on jo olemassa", - "signup.firstname.label": "Etunimi", + "signup.firstname.label": "First Name", "signup.headline": "Kirjaudu", - "signup.lastname.label": "Sukunimi", + "signup.lastname.label": "Last Name", "signup.legal.info": "Luomalla Ferdi-tilin hyväksyt", "signup.legal.privacy": "Tietosuojalauseke", "signup.legal.terms": "Käyttöehdot", @@ -430,11 +418,11 @@ "signup.password.label": "Salasana", "signup.submit.label": "Luo tili", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Poista palvelu", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Poista ääni käytöstä", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Poista ilmoitukset käytöstä", - "tabs.item.disableService": "Poista palvelu", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Ota ääni käyttöön", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Ota ilmoitukset käyttöön", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Lataa uudelleen", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} ei ole kelvollinen", - "validation.minLength": "{field} pitää olla vähintään {length} kirjainta", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Vähintään yksi kohde valittava", - "validation.required": "{field} on pakollinen", - "validation.url": "{field} ei ole kelvollinen URL-osoite", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Takaisin", "webControls.forward": "Eteenpäin", "webControls.goHome": "Etusivu", @@ -454,12 +442,12 @@ "webControls.reload": "Lataa uudelleen", "welcome.loginButton": "Kirjaudu tilillesi", "welcome.signupButton": "Luo ilmainen tili", - "workspaceDrawer.addNewWorkspaceLabel": "Lisää uusi työtila", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Kaikki palvelut", "workspaceDrawer.headline": "Työtilat", "workspaceDrawer.item.contextMenuEdit": "muokkaa", "workspaceDrawer.item.noServicesAddedYet": "Palveluja ei ole vielä lisätty", - "workspaceDrawer.workspaceFeatureInfo": "

    Ferdi Workspaces auttaa sinun keskittymään mikä on tärkeää juuri nyt. Määritä erilaisia palvelukokonaisuuksia ja vaihda helposti niiden välillä milloin tahansa.

    Sinä päätät mitä palveluita tarvitset milloin ja missä, jotta voimme auttaa sinua pysymään työsi äärellä - tai helpottamaan poistumista aina kun haluat.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Muokkaa työtilojen asetuksia", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Vaihdetaan" } diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index d81d23d79..e93bfc143 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Actualiser", - "app.errorHandler.headline": "On dirait que quelque chose ne va pas", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Serveur personnalisé", "changeserver.headline": "Changer de serveur", "changeserver.label": "Serveur", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Que s'est-il passé?", "connectionLostBanner.message": "Oh non ! Ferdi a perdu la connexion avec {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publier les informations de débogage", "feature.nightlyBuilds.activate": "Activer", "feature.nightlyBuilds.info": "Les versions de développement sont des versions expérimentales de Ferdi qui peuvent contenir des fonctionnalités non optimisées ou incomplètes. Ces versions de développement sont principalement utilisés par les développeurs pour tester leurs nouvelles fonctionnalités et leurs performances. Si vous ne savez pas ce que vous faites, nous vous suggérons de ne pas activer les versions de développement.", "feature.nightlyBuilds.title": "Versions de développement", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Sélectionner un service avec TAB, ↑ et ↓. Ouvrir un service avec ENTER.", "feature.quickSwitch.search": "Rechercher...", "feature.quickSwitch.title": "Changement rapide", - "global.api.unhealthy": "Impossible de se connecter aux services en ligne de Ferdi", - "global.cancel": "Annuler", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Éditer", "global.no": "No", "global.notConnectedToTheInternet": "Vous n'êtes pas connecté à Internet.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Paramètres", + "global.settings": "Settings", "global.spellchecker.useDefault": "Par défaut ({default})", "global.spellchecking.autodetect": "Détecter automatiquement la langue", "global.spellchecking.autodetect.short": "Automatiquement", "global.spellchecking.language": "Langue de la vérification orthographique", - "global.submit": "Soumettre", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importez vos services depuis la version 4 de Ferdi", "import.notSupportedHeadline": "Ces services ne sont pas encore supportés par la version 5 de Ferdi", "import.skip.label": "Je veux ajouter des services manuellement", - "import.submit.label": "Importer des services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Il y a eu des erreurs pendant l'authentification demandée. Essayer de vous déconnecter et de vous reconnecter pour voir si cette erreur persiste.", - "infobar.buttonChangelog": "Nouveautés?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Redémarrer et installer la mise à jour", "infobar.buttonReloadServices": "Recharger les services", "infobar.hide": "Masquer", @@ -75,7 +74,7 @@ "login.email.label": "Adresse Email", "login.headline": "S'identifier", "login.invalidCredentials": "Email ou mot de passe invalide", - "login.link.password": "Réinitialiser le mot de passe", + "login.link.password": "Reset password", "login.link.signup": "Créer un compte gratuit", "login.password.label": "Mot de passe", "login.serverLogout": "Votre session a expiré. Reconnectez-vous s'il vous plaît.", @@ -117,10 +116,10 @@ "menu.help.support": "Assistance", "menu.help.tos": "Conditions d'utilisation", "menu.services": "Services", - "menu.services.activatePreviousService": "Activer le service précédent", - "menu.services.addNewService": "Ajouter un nouveau service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Accueil", - "menu.services.setNextServiceActive": "Activer le service suivant", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Activer Todos", "menu.view": "Aperçu", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Tous les services", "menu.workspaces.openWorkspaceDrawer": "Ouvrir l'espace de travail", "password.email.label": "Adresse Email", - "password.headline": "Réinitialiser le mot de passe", + "password.headline": "Reset password", "password.link.login": "Connectez-vous à votre compte", "password.link.signup": "Créer un compte gratuit", - "password.noUser": "Aucun utilisateur n'a été trouvé avec cette adresse email", - "password.successInfo": "Merci de consulter vos emails", - "pricing.features.accountSync": "Synchronisation de compte", - "pricing.features.customWebsites": "Ajouter des sites web modifiés", - "pricing.features.desktopNotifications": "Notifications de bureau", - "pricing.features.onPremise": "Services hébergés sur place et autres", - "pricing.features.recipes": "Choisissez parmi de plus de 70 services", - "pricing.features.serviceProxies": "Service Proxy", - "pricing.features.spellchecker": "Support du correcteur orthographique", - "pricing.features.teamManagement": "Gestion d'équipe", - "pricing.features.thirdPartyServices": "Installer des services tiers", - "pricing.features.unlimitedServices": "Ajouter des services illimités", - "pricing.features.workspaces": "Espace de travail", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Recharger {name}", "service.crashHandler.autoReload": "Tentative de restauration automatique de {name} dans {seconds} secondes", "service.crashHandler.headline": "Oh non!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Utiliser Ferdi sans compte", "services.welcome": "Bienvenue dans Ferdi", - "settings.account.account.editButton": "Modifier le compte", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Compte indisponible", "settings.account.accountUnavailableInfo": "Vous utilisez Ferdi sans compte. Si vous souhaitez utiliser Ferdi avec un compte et garder vos services synchronisés entre les installations, sélectionnez un serveur dans l'onglet Paramètres, puis connectez-vous.", "settings.account.buttonSave": "Mettre à jour le profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Vous avez reçu un email contenant le lien pour confirmer la suppression de votre compte. Votre compte et les données qui lui sont associés ne pourront être récupérés!", "settings.account.deleteInfo": "Si vous n'avez plus besoin de votre compte Ferdi, vous pouvez le supprimer avec toutes ses données associées.", "settings.account.headline": "Compte", - "settings.account.headlineAccount": "Informations sur le compte", - "settings.account.headlineDangerZone": "Zone dangereuse", - "settings.account.headlineInvoices": "Factures", - "settings.account.headlinePassword": "Changer le mot de passe", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Mettre à jour le profil", "settings.account.successInfo": "Vos modifications ont été enregistrées", "settings.account.tryReloadServices": "Réessayer", "settings.account.tryReloadUserInfoRequest": "Réessayer", "settings.account.userInfoRequestFailed": "Impossible de charger les informations de l'utilisateur", - "settings.account.yourLicense": "Votre licence Ferdi", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Vider le cache", "settings.app.buttonInstallUpdate": "Redémarrer et installer la mise à jour", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Afficher Ferdi dans la barre d'état système", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Serveur Todo personnalisé", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "Activer le mode sombre", "settings.app.form.enableGPUAcceleration": "Activer l'accélération GPU", "settings.app.form.enableLock": "Activer le verrouillage par mot de passe", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Activer la vérification orthographique", - "settings.app.form.enableSystemTray": "Afficher Ferdi dans la barre d'état système", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Activer Ferdi Todos", "settings.app.form.hibernateOnStartup": "Garder les services en veille prolongée au démarrage", "settings.app.form.hibernationStrategy": "Stratégie d'hibernation", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Afficher les badges de messages non lus quand les notifications sont désactivées", "settings.app.form.startMinimized": "Démarrage minimisé", "settings.app.form.universalDarkMode": "Activer le mode sombre universel", - "settings.app.form.useTouchIdToUnlock": "Autoriser l'utilisation de TouchID pour déverrouiller Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Paramètres avancés", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Les traductions officielles sont l'anglais et l'allemand. Toutes les autres langues sont des traductions faites par la communauté.", "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}.", "settings.app.lockedPassword": "Mot de passe", - "settings.app.lockedPasswordInfo": "S'il vous plaît soyez sûre de mettre un mot de passe que vous allez vous rappelez.\nSi vous perdez ce mot de passe vous allez devoir réinstaller Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Les modifications nécessitent un redémarrage", "settings.app.scheduledDNDInfo": "Planifier le Ne-pas-Déranger vous permet de définir une période de temps dans lequel vous ne voulez pas de notifications de Ferdi.", "settings.app.scheduledDNDTimeInfo": "Le temps est en format 24 heures. La fin du temps peut être avant le début du temps (ex: début 17:00, fin 09:00) pour activer le Ne-pas-Déranger durant la nuit.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi utilise le correcteur orthographique intégré de votre Mac pour vérifier les fautes de frappe. Si vous voulez changer les langues pour lesquelles le correcteur vérifie l'orthographe, vous pouvez le faire dans les préférences système de votre Mac.", "settings.app.subheadlineCache": "Cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Ce serveur sera utilisé pour la fonctionnalité \"Ferdi Todo\".", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Aidez-nous à traduire Ferdi dans votre langue.", "settings.app.universalDarkModeInfo": "Le mode sombre universel tente de générer dynamiquement des styles de mode sombre pour les services qui ne sont pas encore supportés.", "settings.app.updateStatusAvailable": "Mise à jour disponible, téléchargement en cours...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Recettes tiers communautaire", "settings.recipes.customService.headline.customRecipes": "Recettes tiers modifiées", "settings.recipes.customService.headline.devRecipes": "Vos recettes de service de développement", - "settings.recipes.customService.intro": "Pour ajouter un service modifié, copié la recette à:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Documentation de Développeur", - "settings.recipes.customService.openFolder": "Ouvrir le dossier", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Services disponibles", "settings.recipes.missingService": "Un service est manquant?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Le service a été ajouté avec succès", "settings.searchService": "Chercher un service", "settings.service.error.goBack": "Retour aux services", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Luminosité de Dark Reader", "settings.service.form.darkReaderContrast": "Contraste de Dark Reader", "settings.service.form.darkReaderSepia": "Sepia de Dark Reader", - "settings.service.form.deleteButton": "Supprimer le service", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Modifier {name}", "settings.service.form.enableAudio": "Activer l'audio", "settings.service.form.enableBadge": "Afficher le badge des messages non lus", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Ouvrir user.js", "settings.service.form.proxy.headline": "Paramètres proxy HTTP/HTTPS", "settings.service.form.proxy.host": "Hôte/IP du proxy", - "settings.service.form.proxy.info": "Les paramètres de proxy ne seront pas synchronisés avec les serveurs de Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Utiliser un proxy", - "settings.service.form.proxy.password": "Mot de passe (facultatif)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Veuillez redémarrer Ferdi après avoir modifié les paramètres proxy.", - "settings.service.form.proxy.user": "Utilisateur (facultatif)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Vos fichiers utilisateur seront insérés dans la page Web afin que vous puissiez personnaliser les services comme vous le souhaitez. Les fichiers utilisateurs sont stockés localement et ne sont pas transférés à d'autres ordinateurs en utilisant le même compte.", "settings.service.form.saveButton": "Enregistrer le service", "settings.service.form.tabHosted": "Hébergé", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi est une application open-source et dirigée par la communauté.

    Merci à toutes les personnes qui rendent cela possible :

    ", "settings.supportFerdi.bannerText": "Voulez-vous nous aider à améliorer Ferdi ?", "settings.supportFerdi.headline": "À propos de Ferdi", - "settings.supportFerdi.openSurvey": "Ouvrir l'enquête", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Si vous avez envie de soutenir le développement de Ferdi par un don, vous pouvez le faire via", "settings.supportFerdi.textDonationAnd": "et", "settings.supportFerdi.textExpenses": "Bien que les bénévoles fassent la majeure partie du travail, nous avons besoin de payer pour les serveurs et les certificats. En tant que communauté, nous sommes totalement transparents sur les fonds que nous collectons et dépensons - voir nos", "settings.supportFerdi.textGitHubSponsors": "Sponsors sur GitHub", - "settings.supportFerdi.textListContributors": "Liste complète des contributeurs", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "ici", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Toute aide est toujours la bienvenue. Vous pouvez trouver une liste de l'aide dont nous avons besoin", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Non-lucratif", "settings.user.form.currentPassword": "Mot de passe actuel", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Prénom", - "settings.user.form.lastname": "Nom", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nouveau mot de passe", "settings.workspace.add.form.name": "Nom", "settings.workspace.add.form.submitButton": "Créer l'espace de travail", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Réessayer", "settings.workspaces.updatedInfo": "Vos modifications ont été enregistrées", "settings.workspaces.workspaceFeatureHeadline": "Présentation des Espaces de travail de Ferdi", - "settings.workspaces.workspaceFeatureInfo": "Les Espaces de travail de Ferdi vous permettant de rester concentré sur ce qui est important. Créez différents groupes de services et naviguez facilement entre eux à n'importe quel moment. Vous décidez de quels services vous avez besoin, où et quand, ainsi nous pouvons vous aider à rester concentré sur votre travail - ou à le quitter dès que vous le souhaitez.", + "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.", "settings.workspaces.workspacesRequestFailed": "Impossible de charger vos espaces de travail", "setupAssistant.headline": "Commençons", "setupAssistant.subheadline": "Choisissez parmi nos services les plus utilisés et revenez maintenant sur votre messagerie.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Activer les notifications et les sons", "signup.email.label": "Adresse Email", "signup.emailDuplicate": "Cette adresse email est déjà utilisée", - "signup.firstname.label": "Prénom", + "signup.firstname.label": "First Name", "signup.headline": "S'inscrire", - "signup.lastname.label": "Nom", + "signup.lastname.label": "Last Name", "signup.legal.info": "En créant un compte Ferdi, vous acceptez la", "signup.legal.privacy": "Déclaration de confidentialité", "signup.legal.terms": "Conditions d'utilisation", @@ -430,11 +418,11 @@ "signup.password.label": "Mot de passe", "signup.submit.label": "Créer un compte", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Supprimer le service", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Désactiver l'audio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Désactiver les notifications", - "tabs.item.disableService": "Désactiver le service", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Activer l'audio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Activer les notifications", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Actualiser", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} n'est pas valide", - "validation.minLength": "{field} doit contenir au moins {length} caractère(s)", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Au moins un de ces champs est requis", - "validation.required": "{field} est requis", - "validation.url": "{field} n'est pas une URL valide", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Revenir", "webControls.forward": "Avancer", "webControls.goHome": "Accueil", @@ -454,12 +442,12 @@ "webControls.reload": "Actualiser", "welcome.loginButton": "Se connecter sur son compte", "welcome.signupButton": "Créer un compte gratuit", - "workspaceDrawer.addNewWorkspaceLabel": "Ajouter un nouvel espace de travail", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Tous les services", "workspaceDrawer.headline": "Espace de travail", "workspaceDrawer.item.contextMenuEdit": "Modifier", "workspaceDrawer.item.noServicesAddedYet": "Aucun services ajoutés pour l'instant", - "workspaceDrawer.workspaceFeatureInfo": "

    Les Espaces de travail de Ferdi vous permettant de rester concentré sur ce qui est important. Créez différents groupes de services et naviguez facilement entre eux à n'importe quel moment.

    Vous décidez de quels services vous avez besoin, où et quand, ainsi nous pouvons vous aider à rester concentré sur votre travail - ou à le quitter dès que vous le souhaitez.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Éditer les paramètres de l'espace de travail", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Changement vers" } diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json index a78c90771..dc17905a4 100644 --- a/src/i18n/locales/ga.json +++ b/src/i18n/locales/ga.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Athlódáil", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Freastalaí saincheaptha", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Ní féidir nascadh le seirbhísí Ferdi ar líne", - "global.cancel": "Cealaigh", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Cuir in eagar", "global.no": "No", "global.notConnectedToTheInternet": "Níl tú nasctha leis an Idirlíon.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Socruithe", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Detect language automatically", "global.spellchecking.autodetect.short": "Automatic", "global.spellchecking.language": "Spell checking language", - "global.submit": "Cuir isteach", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Iompórtáil do sheirbhísí Ferdi 4", "import.notSupportedHeadline": "Níl na seirbhísí seo taca ag Ferdi 5 go fóill", "import.skip.label": "Ba mhaith liom seirbhísí a chur de láimh", - "import.submit.label": "Iompórtáil seirbhísí", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Cad atá nua?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Atosaigh ⁊ suiteáil nuashonrú", "infobar.buttonReloadServices": "Athlódáil seirbhísí", "infobar.hide": "Cuir Ferdi i bhfolach", @@ -75,7 +74,7 @@ "login.email.label": "Seoladh ríomhphoist", "login.headline": "Logáil isteach", "login.invalidCredentials": "Seoladh ríomhphoist nó pasfhocal neamhbhailí", - "login.link.password": "Athshocraigh pasfhocal", + "login.link.password": "Reset password", "login.link.signup": "Cruthaigh cuntas saor in aisce", "login.password.label": "Password", "login.serverLogout": "D'éag do sheisiún, logáil isteach arís le do thoil.", @@ -118,7 +117,7 @@ "menu.help.tos": "Téarmaí tagartha", "menu.services": "Seirbhísí", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Gach seirbhís", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Seoladh ríomhphoist", - "password.headline": "Athshocraigh pasfhocal", + "password.headline": "Reset password", "password.link.login": "Logáil isteach i do chuntas", "password.link.signup": "Cruthaigh cuntas saor in aisce", - "password.noUser": "Níor aimsíodh úsáideoir leis an seoladh ríomhphoist seo", - "password.successInfo": "Seiceáil do chuid ríomhphoist le do thoil", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Athlódáil {name}", "service.crashHandler.autoReload": "Ag iarraidh {name} a thabhairt ar ais go huathoibríoch i gceann {seconds} shoicind", "service.crashHandler.headline": "Oró, ní hea!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Fáilte go Ferdi", - "settings.account.account.editButton": "Cuir cuntas in eagar", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Nuashonraigh próifíl", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Fuair tú ríomhphost chun scriosadh do chuntais a dheimhniú. Ní féidir do chuntas agus do chuid sonraí a thabhairt ar ais!", "settings.account.deleteInfo": "Más rud é nár ghá cuntas Ferdi a bheith agat a thuilleadh, is féidir do chuntas agus gach sonraí riachtanach a scriosadh anseo.", "settings.account.headline": "Cuntas", - "settings.account.headlineAccount": "Eolas faoin gcuntas", - "settings.account.headlineDangerZone": "Scrios cuntas", - "settings.account.headlineInvoices": "Sonraisc", - "settings.account.headlinePassword": "Athraigh pasfhocal", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Nuashonraigh próifíl", "settings.account.successInfo": "Sábháladh do chuid athruithe", "settings.account.tryReloadServices": "Atriail", "settings.account.tryReloadUserInfoRequest": "Atriail", "settings.account.userInfoRequestFailed": "Ní féidir eolas úsáideora a lódáil", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Glan taisce", "settings.app.buttonInstallUpdate": "Atosaigh ⁊ suiteáil nuashonrú", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Cumasaigh luasghéarú APG", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Cumasaigh seiceáil litrithe", - "settings.app.form.enableSystemTray": "Taispeáin Ferdi i dtráidire an chórais", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Seirbhísí le fáil", "settings.recipes.missingService": "Seirbhís ar iarraidh?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Seirbhís curtha go rathúil", "settings.searchService": "Cuardaigh seirbhís", "settings.service.error.goBack": "Ar ais chuig seirbhísí", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Scrios seirbhís", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Cuir {name} in eagar", "settings.service.form.enableAudio": "Cumasaigh fuaim", "settings.service.form.enableBadge": "Taispeáin comhartha do theachtaireachtaí neamhléite", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Neamhbhrabúis", "settings.user.form.currentPassword": "Pasfhocal reatha", "settings.user.form.email": "Ríomhphost", - "settings.user.form.firstname": "Céadainm", - "settings.user.form.lastname": "Sloinne", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Pasfhocal nua", "settings.workspace.add.form.name": "Ainm", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Cumasaigh fógraí ⁊ fuaim", "signup.email.label": "Seoladh ríomhphoist", "signup.emailDuplicate": "Tá úsáideoir leis an seoladh ríomhphoist sin cheana féin", - "signup.firstname.label": "Céadainm", + "signup.firstname.label": "First Name", "signup.headline": "Cláraigh", - "signup.lastname.label": "Sloinne", + "signup.lastname.label": "Last Name", "signup.legal.info": "Agus tú ag cruthú cuntas Ferdi glacann tú le", "signup.legal.privacy": "Ráiteas phríobháideachais", "signup.legal.terms": "Tearmaí seirbhíse", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "Cruthaigh cuntas", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Scrios seirbhís", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Díchumasaigh fuaim", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Díchumasaigh fógraí", - "tabs.item.disableService": "Díchumasaigh seirbhís", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Cumasaigh fuaim", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Cumasaigh fógraí", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Athlódáil", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "Níl {field} neamhbhailí", - "validation.minLength": "Ba cheart go mbeadh {field} ar a laghad {length} charactar fada", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "Tá {field} de dhíth", - "validation.url": "Ní AAA bhailí é {field}", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", diff --git a/src/i18n/locales/he.json b/src/i18n/locales/he.json index 79e1532b5..994b39478 100644 --- a/src/i18n/locales/he.json +++ b/src/i18n/locales/he.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "רענן", - "app.errorHandler.headline": "משהו השתבש", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "שרת מותאם אישית", "changeserver.headline": "החלף שרת", "changeserver.label": "שרת", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "מה קרה?", "connectionLostBanner.message": "הו לא! פרדי איבד את החיבור ל {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "פרסם את פרטי ניפוי השגיאות", "feature.nightlyBuilds.activate": "הפעל", "feature.nightlyBuilds.info": "גרסאות נייטלי הם גרסאות נסיוניות ביותר של פרדי, העשויות להכיל פיצ'רים בלתי גמורים. גרסאות אלה מיועדות בעיקר לשימוש מפתחים על מנת לנסות את הפיצ'רים החדשים הנמצאים בפיתוח - לפני הכנסתם לגרסה הסופית. אם אתה לא יודע מה אתה עושה, אנו ממליצים שלא תפעיל את האופציה הזאת.", "feature.nightlyBuilds.title": "גרסאות נייטלי", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "בחר שירות עם מקש ה TAB, ↑ ו ↓. פתח שירות באמצעות מקש ה ENTER.", "feature.quickSwitch.search": "חיפוש...", "feature.quickSwitch.title": "החלפה מהירה", - "global.api.unhealthy": "לא ניתן להתחבר לשרותי האינטרנת של Ferdi", - "global.cancel": "בטל", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "ערוך", "global.no": "No", "global.notConnectedToTheInternet": "נראה שאתה לא מחובר לאינטרנט.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "הגדרות", + "global.settings": "Settings", "global.spellchecker.useDefault": "השתמש בברירת המחדל של המערכת ({default})", "global.spellchecking.autodetect": "זהה שפה באופן אוטומטי", "global.spellchecking.autodetect.short": "אוטומטי", "global.spellchecking.language": "שפה לבדיקת איות", - "global.submit": "שלח", + "global.submit": "Submit", "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.", "global.userAgentPref": "סוכן משתמש", "global.yes": "Yes", "import.headline": "ייבא את השירותים שלך מפרדי גרסה 4", "import.notSupportedHeadline": "השירות עדיין אינו נתמך בפרדי גרסה 5", "import.skip.label": "אני רוצה להוסיף שירותים באופן ידני", - "import.submit.label": "ייבא שירותים", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "אירעה שגיאה בניסיון ההתחברות. נסה להתנתק ולהתחבר מחדש.", - "infobar.buttonChangelog": "מה חדש?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "הפעל מחדש והתקן עדכונים", "infobar.buttonReloadServices": "טען מחדש את השירותים", "infobar.hide": "הסתר", @@ -75,7 +74,7 @@ "login.email.label": "כתובת דוא\"ל", "login.headline": "התחבר", "login.invalidCredentials": "כתובת הדוא\"ל או הסיסמא אינם תקינים", - "login.link.password": "איפוס סיסמה", + "login.link.password": "Reset password", "login.link.signup": "צור חשבון חדש בחינם", "login.password.label": "סיסמא", "login.serverLogout": "פג תוקף ההתחברות, אנא התחבר שוב.", @@ -117,10 +116,10 @@ "menu.help.support": "תמיכה", "menu.help.tos": "תנאי שימוש", "menu.services": "שירותים", - "menu.services.activatePreviousService": "הפעל את השירות הקודם", - "menu.services.addNewService": "הוסף שירות חדש", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "בית", - "menu.services.setNextServiceActive": "הפעל את השירות הבא", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "משימות", "menu.todos.enableTodos": "אפשר משימות", "menu.view": "הצג", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "כל השירותים", "menu.workspaces.openWorkspaceDrawer": "פתח את סרגל סביבות העבודה", "password.email.label": "כתובת דוא\"ל", - "password.headline": "איפוס סיסמה", + "password.headline": "Reset password", "password.link.login": "היכנס לחשבונך", "password.link.signup": "צור חשבון חדש בחינם", - "password.noUser": "לא נמצא משתמש עם כתובת הדוא\"ל הזאת", - "password.successInfo": "אנא בדוק את הדוא\"ל שלך", - "pricing.features.accountSync": "סנכון החשבון", - "pricing.features.customWebsites": "הוסף אתרים מותאמים אישית", - "pricing.features.desktopNotifications": "התראות שולחן העבודה", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "בחר מתוך יותר מ 70 שירותים", - "pricing.features.serviceProxies": "פרוקסי לשירותים", - "pricing.features.spellchecker": "תמיכה בבדיקת איות", - "pricing.features.teamManagement": "ניהול צוות", - "pricing.features.thirdPartyServices": "התקן שירותי צד שלישי", - "pricing.features.unlimitedServices": "הוסף שירותים בלי הגבלה", - "pricing.features.workspaces": "סביבות עבודה", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "טען מחדש {name}", "service.crashHandler.autoReload": "מנסה לשחזר את {name} באופן אוטומטי בעוד {seconds} שניות", "service.crashHandler.headline": "הו, לא!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "השתמש בפרדי ללא חשבון", "services.welcome": "ברוך הבא לפרדי", - "settings.account.account.editButton": "ערוך את החשבון", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "החשבון אינו זמין", "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.", "settings.account.buttonSave": "עדכן פרופיל", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "settings.account.headline": "חשבון", - "settings.account.headlineAccount": "פרטי חשבון", - "settings.account.headlineDangerZone": "אזור מסוכן", - "settings.account.headlineInvoices": "חשבוניות", - "settings.account.headlinePassword": "שנה סיסמה", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "עדכן פרופיל", "settings.account.successInfo": "השינויים שלך נשמרו", "settings.account.tryReloadServices": "נסה שוב", "settings.account.tryReloadUserInfoRequest": "נסה שוב", "settings.account.userInfoRequestFailed": "אי אפשר לטעון את פרטי המשתמש", - "settings.account.yourLicense": "רישיון הפרדי שלך", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "ניקוי המטמון", "settings.app.buttonInstallUpdate": "הפעל מחדש והתקן עדכונים", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "שרת מותאם אישית לרשימת המשימות", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "אפשר מצב לילה", "settings.app.form.enableGPUAcceleration": "אפשר האצת חומרה (GPU)", "settings.app.form.enableLock": "אפשר נעילה באמצעות סיסמא", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "הפעל בדיקת איות", - "settings.app.form.enableSystemTray": "הצג את פרדי בסרגל הכלים", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "אפשר את רשימת המשימות של Ferdi", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -296,10 +284,10 @@ "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "תיעוד למפתחים", - "settings.recipes.customService.openFolder": "פתח תיקיה", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "שירותים זמינים", "settings.recipes.missingService": "לא מוצא את השירות שלך?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "השירות נוסף בהצלחה", "settings.searchService": "חפש שירות", "settings.service.error.goBack": "חזור לשירותים", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "מחק שירות", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "ערוך {name}", "settings.service.form.enableAudio": "אפשר אודיו", "settings.service.form.enableBadge": "הצג חיווי על הודעות שלא נקראו", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "פתח את user.js", "settings.service.form.proxy.headline": "הגדרות פרוקסי ל HTTP/HTTPS", "settings.service.form.proxy.host": "מארח\\IP פרוקסי", - "settings.service.form.proxy.info": "הגדרות הפרוקסי לא יסונכרנו עם שרתי פרדי.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "השתמש בפרוקסי", - "settings.service.form.proxy.password": "סיסמה (אופציונלית)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "פורט", "settings.service.form.proxy.restartInfo": "אנא הפעל מחדש את פרדי אחרי שינוי הגדרות פרוקסי.", - "settings.service.form.proxy.user": "משתמש (אופציונלי)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "קבצי המשתמש שלך יוכנסו לתוך דף האינטרנט על מנת שתוכל להתאים את השירותים שלך כפי שתרצה. קבצי משתמש מאוחסנים לוקאלית ואינם מועברים למחשבים אחרים המשתמשים באותו חשבון.", "settings.service.form.saveButton": "שמור שירות", "settings.service.form.tabHosted": "Hosted", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi is an open-source and a community-lead application.

    Thanks to the people who make this possbile:

    ", "settings.supportFerdi.bannerText": "האם תרצה לעזור לנו לשפר את פרדי?", "settings.supportFerdi.headline": "אודות פרדי", - "settings.supportFerdi.openSurvey": "פתח סקר", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "אם תרצה לתמוך בפרדי באמצעות תרומה, אתה יכול לעשות זאת גם,", "settings.supportFerdi.textDonationAnd": "וגם", "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", "settings.supportFerdi.textGitHubSponsors": "תומכים בגיטהאב", - "settings.supportFerdi.textListContributors": "רשימת התומכים המלאה", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "כאן", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "ללא כוונת רווח", "settings.user.form.currentPassword": "הסיסמא הנוכחית", "settings.user.form.email": "דוא\"ל", - "settings.user.form.firstname": "שם פרטי", - "settings.user.form.lastname": "שם משפחה", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "סיסמא חדשה", "settings.workspace.add.form.name": "שם", "settings.workspace.add.form.submitButton": "צור סביבת עבודה", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "אפשר התראות ואודיו", "signup.email.label": "כתובת דוא\"ל", "signup.emailDuplicate": "כבר קיים חשבון עם כתובת דוא\"ל זו", - "signup.firstname.label": "שם פרטי", + "signup.firstname.label": "First Name", "signup.headline": "הרשם", - "signup.lastname.label": "שם משפחה", + "signup.lastname.label": "Last Name", "signup.legal.info": "ביצירת חשבון פרדי אתה מסכים ל", "signup.legal.privacy": "הצהרת פרטיות", "signup.legal.terms": "תנאי שימוש", @@ -430,11 +418,11 @@ "signup.password.label": "סיסמא", "signup.submit.label": "צור חשבון", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "מחק שירות", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "כבה אודיו", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "כבה התראות", - "tabs.item.disableService": "כבה שירות", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "אפשר אודיו", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "אפשר התראות", @@ -454,12 +442,12 @@ "webControls.reload": "רענן", "welcome.loginButton": "התחבר לחשבון שלך", "welcome.signupButton": "צור חשבון חדש בחינם", - "workspaceDrawer.addNewWorkspaceLabel": "הוסף סביבת עבודה חדשה", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "כל השירותים", "workspaceDrawer.headline": "סביבות עבודה", "workspaceDrawer.item.contextMenuEdit": "ערוך", "workspaceDrawer.item.noServicesAddedYet": "לא נוספו שירותים…", "workspaceDrawer.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.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "הגדרות סביבת עבודה", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "מעבר ל" } diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index be9bbb961..e2e0cdc83 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reload", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -45,7 +44,7 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json index f7e046ed9..194f4a910 100644 --- a/src/i18n/locales/hr.json +++ b/src/i18n/locales/hr.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Ponovno učitavanje", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Prilagođen server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Nije se moguće povezati na Francove on-line servise. ", - "global.cancel": "Odustani", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Uredi", "global.no": "No", "global.notConnectedToTheInternet": "Sada ste povezani s internetom. ", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Postavke", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Detect language automatically", "global.spellchecking.autodetect.short": "Automatic", "global.spellchecking.language": "Spell checking language", - "global.submit": "Pošalji", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Uvezite svoje Franc 4 servise. ", "import.notSupportedHeadline": "Franc 5 trenutno ne podržava taj servis", "import.skip.label": "Želim ručno dodati ove usluge", - "import.submit.label": "Uvezi servise", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Šta je novo?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje", "infobar.buttonReloadServices": "Ponovo učitaj servise", "infobar.hide": "Hide", @@ -75,7 +74,7 @@ "login.email.label": "Vaša e-adresa:", "login.headline": "Prijavite se", "login.invalidCredentials": "E-mail ili lozinka nisu točni", - "login.link.password": "Stvaranje nove lozinke", + "login.link.password": "Reset password", "login.link.signup": "Stvorite besplatan račun", "login.password.label": "Password", "login.serverLogout": "Vaša sesija je istekla, prijavite se ponovo.", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Sve usluge", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Vaša e-adresa:", - "password.headline": "Stvaranje nove lozinke", + "password.headline": "Reset password", "password.link.login": "Prijavite se na Vaš račun", "password.link.signup": "Stvorite besplatan račun", - "password.noUser": "Ne postoji ni jedan korisnik s tom e-mail adresom", - "password.successInfo": "Molimo Vas da provjerite svoju e-mail adresu", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Osvježi okvir", "service.crashHandler.autoReload": "Pokušati ću automatski povratiti {name} u {seconds} sekundi", "service.crashHandler.headline": "O, ne! ", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Dobrodošli u Ferdi", - "settings.account.account.editButton": "Uredi račun", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Ažuriraj profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Dobili ste email s linkom putem kojeg ćete potvrditi brisanje računa. Vaš račun i podatke neće biti moguće vratiti. ", "settings.account.deleteInfo": "Ako više ne trebate Ferdi račun, ovdje možete obrisati sve vezane podatke kao i račun.", "settings.account.headline": "Korisnički račun", - "settings.account.headlineAccount": "Informacije o računu", - "settings.account.headlineDangerZone": "Opasnost", - "settings.account.headlineInvoices": "Fakture", - "settings.account.headlinePassword": "Promijenite lozinku", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Ažuriraj profil", "settings.account.successInfo": "Vaše promjene su spremljene", "settings.account.tryReloadServices": "Pokušajte ponovno", "settings.account.tryReloadUserInfoRequest": "Pokušajte ponovno", "settings.account.userInfoRequestFailed": "Nije moguće učitati informacije o korisniku", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Očisti memoriju", "settings.app.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Omogući provjeru pravopisa", - "settings.app.form.enableSystemTray": "Prikaži aplikaciju u sustavskoj traci", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Dostupne usluge", "settings.recipes.missingService": "Da li neki servis nedostaje?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Usluga uspješno dodana. ", "settings.searchService": "Potraži servis", "settings.service.error.goBack": "Nazad do servisa", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Izbriši uslugu", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Uredite {name}", "settings.service.form.enableAudio": "Omogućite zvuk", "settings.service.form.enableBadge": "Show unread message badges", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Neprofitno ", "settings.user.form.currentPassword": "Trenutna lozinka:", "settings.user.form.email": "E-pošta", - "settings.user.form.firstname": "Ime", - "settings.user.form.lastname": "Prezime", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nova lozinka", "settings.workspace.add.form.name": "Ime", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Omogući obavijesti i zvuk", "signup.email.label": "Vaša e-adresa:", "signup.emailDuplicate": "Već postoji korisnik s tom e-mail adresom", - "signup.firstname.label": "Ime", + "signup.firstname.label": "First Name", "signup.headline": "Prijava", - "signup.lastname.label": "Prezime", + "signup.lastname.label": "Last Name", "signup.legal.info": "Prilikom stvaranja Ferdi računa, slažete se sa sljedećim stavkama:", "signup.legal.privacy": "Izjava o privatnosti ", "signup.legal.terms": "Uvjeti korištenja", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "Napravite novi račun", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Izbriši uslugu", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Onemogući zvuk", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Onemogući obavijesti", - "tabs.item.disableService": "Onemogući servis", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Omogućite zvuk", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Omogućite obavijesti", diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json index 84c8496b8..014e9bad7 100644 --- a/src/i18n/locales/hu.json +++ b/src/i18n/locales/hu.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Újratöltés", - "app.errorHandler.headline": "Valami nem jött össze", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Egyéni szerver", "changeserver.headline": "Szerver megváltoztatása", "changeserver.label": "Szerver", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Mi történt?", "connectionLostBanner.message": "Ja ne! Ferdi nem tud kapcsolodni {name}-hez.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Hibakeresési napló publikálása", "feature.nightlyBuilds.activate": "Aktiválás", "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.", "feature.nightlyBuilds.title": "Nightly verziók", @@ -24,30 +23,30 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Keresés...", "feature.quickSwitch.title": "Gyorsváltó", - "global.api.unhealthy": "Nem lehet csatlakozni a Ferdi online szolgáltatáshoz", - "global.cancel": "Mégsem", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Szerkesztés", "global.no": "No", "global.notConnectedToTheInternet": "Nincs hálózati kapcsolat.", "global.ok": "Ok", - "global.quit": "Kilépés", + "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Beállítások", + "global.settings": "Settings", "global.spellchecker.useDefault": "Rendszer alapbeállítás használata ({default})", "global.spellchecking.autodetect": "Automatikus nyelvdetektálás", "global.spellchecking.autodetect.short": "Automatikus", "global.spellchecking.language": "Helyesírás-ellenőrző nyelve", - "global.submit": "Küldés", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importáld szolgáltatásaidat a Ferdi 4-ből", "import.notSupportedHeadline": "Még nem támogatott szolgáltatások a Ferdi 5-ben", "import.skip.label": "Manuálisan szeretném hozzáadni a szolgáltatásokat", - "import.submit.label": "Szolgáltatások importálása", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Mi változott?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Újraindítás és frissítés telepítése", "infobar.buttonReloadServices": "Szolgáltatások újratöltése", "infobar.hide": "Elrejt", @@ -75,7 +74,7 @@ "login.email.label": "Email cím", "login.headline": "Bejelentkezés", "login.invalidCredentials": "Hibás email cím vagy jelszó", - "login.link.password": "Jelszó visszaállítás", + "login.link.password": "Reset password", "login.link.signup": "Új fiók létrehozása", "login.password.label": "Jelszó", "login.serverLogout": "A munkamenet lejárt, kérlek lépj be újra.", @@ -117,10 +116,10 @@ "menu.help.support": "Támogatás", "menu.help.tos": "Felhasználói feltételek", "menu.services": "Szolgáltatások", - "menu.services.activatePreviousService": "Előző szolgáltatás", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Kezdőlap", - "menu.services.setNextServiceActive": "Következő szolgáltatás", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Tennivalók", "menu.todos.enableTodos": "Enable Todos", "menu.view": "Nézet", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Összes szolgáltatás", "menu.workspaces.openWorkspaceDrawer": "Munkaterület panel kinyitása", "password.email.label": "Email cím", - "password.headline": "Jelszó visszaállítás", + "password.headline": "Reset password", "password.link.login": "Jelentkezz be a fiókodba", "password.link.signup": "Új fiók létrehozása", - "password.noUser": "Nem található felhasználó a megadott email címmel", - "password.successInfo": "Ellenőrizd az email fiókodat", - "pricing.features.accountSync": "Fiók szinkronizálás", - "pricing.features.customWebsites": "Egyéni weboldalak megadása", - "pricing.features.desktopNotifications": "Asztali értesítések", - "pricing.features.onPremise": "Helyi és egyéb távoli szolgáltatások", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Szolgáltatás Proxy-k", - "pricing.features.spellchecker": "Helyesírás-ellenőrzés támogatás", - "pricing.features.teamManagement": "Csapatkezelés", - "pricing.features.thirdPartyServices": "Harmadik féltől származó szolgáltatások használata", - "pricing.features.unlimitedServices": "Korlátlan szolgáltatások felvitele", - "pricing.features.workspaces": "Munkaterületek", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "{name} újratöltése", "service.crashHandler.autoReload": "{name} automatikusan helyreállítása {seconds} másodpercen belül", "service.crashHandler.headline": "Jajj ne!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Üdvözöl a Ferdi", - "settings.account.account.editButton": "Fiók szerkesztése", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "A Fiók nem érhető el", "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.", "settings.account.buttonSave": "Profil frissítése", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "A fiókod törléséhez egy e-mailt küldtük a törlést megerősítő linkkel. A linkre kattintást követően a fiókod és az adatait már nem állíthatók vissza többé!", "settings.account.deleteInfo": "Ha még nem szeretnéd fenntartani a Ferdi-fiókodat, akkor itt törölheted minden hozzá kapcsolódó adattal együtt.", "settings.account.headline": "Fiók", - "settings.account.headlineAccount": "Fiókinformációk", - "settings.account.headlineDangerZone": "Veszélyes terület", - "settings.account.headlineInvoices": "Számlák", - "settings.account.headlinePassword": "Jelszócsere", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Profil frissítése", "settings.account.successInfo": "A módosításokat elmentettük", "settings.account.tryReloadServices": "Próbáld újra", "settings.account.tryReloadUserInfoRequest": "Próbáld újra", "settings.account.userInfoRequestFailed": "A felhasználói adatok betöltése sikertelen", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Gyorsítótár törlése", "settings.app.buttonInstallUpdate": "Újraindítás és frissítés telepítése", @@ -225,7 +213,7 @@ "settings.app.form.enableLock": "Jelszavas zár engedélyezése", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Helyesírás-ellenőrzés engedélyezése", - "settings.app.form.enableSystemTray": "Ferdi mutatása a tálcán", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Ferdi Tennivalók bekapcsolása", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", "settings.recipes.customService.headline.customRecipes": "Egyéni, harmadik féltől származó receptek", "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", - "settings.recipes.customService.intro": "Az egyéni szolgáltatás hozzáadásához, másoljuk be annak receptjét:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Fejlesztői dokumentáció", - "settings.recipes.customService.openFolder": "Könyvtár megnyitása", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Elérhető szolgáltatások", "settings.recipes.missingService": "Hiányzik egy szolgáltatás?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Szolgáltatás sikeresen hozzáadva", "settings.searchService": "Szolgáltatások keresése", "settings.service.error.goBack": "Vissza a szolgáltatásokhoz", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Szolgáltatás törlése", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "{name} szerkesztése", "settings.service.form.enableAudio": "Hang engedélyezése", "settings.service.form.enableBadge": "Mutasd az olvasatlan jelzéseket", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "User.js megnyitása", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy beállítások", "settings.service.form.proxy.host": "Proxy hoszt/IP", - "settings.service.form.proxy.info": "Proxy beállítások nem szinkronizálódnak a Ferdi kiszolgálókkal.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Proxy használata", - "settings.service.form.proxy.password": "Jelszó (opcionális)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Kérjük indítsd újra a Ferdi-ot a proxy beállítások megváltoztatása után.", - "settings.service.form.proxy.user": "Felhasználó (opcionális)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Szolgáltatás mentése", "settings.service.form.tabHosted": "Üzemeltetett", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Nonprofit", "settings.user.form.currentPassword": "Jelenlegi jelszó", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Keresztnév", - "settings.user.form.lastname": "Vezetéknév", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Új jelszó", "settings.workspace.add.form.name": "Név", "settings.workspace.add.form.submitButton": "Új munkaterület", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Próbáld újra", "settings.workspaces.updatedInfo": "A módosításokat elmentettük", "settings.workspaces.workspaceFeatureHeadline": "A kevesebb több: Bemutatjuk a Ferdi Munkaterületeket", - "settings.workspaces.workspaceFeatureInfo": "A Ferdi Munkaterületek lehetővé teszik, hogy összpontosíts a jelenleg fontos dolgokra. Állítsd be a különböző szolgáltatáskészleteket és könnyedén válthatsz közöttük bármikor. Te döntöd el, hogy mely szolgáltatásokra van szükséged, mikor és hol, így segíthetünk abban, hogy a teljesítményed csúcsán maradhass, vagy ha csak akarod, egyszerűen kikapcsold a munkával kapcsolatos dolgokat.", + "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.", "settings.workspaces.workspacesRequestFailed": "Nem sikerült betölteni a munkaterületeket", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Értesítések és hangok engedélyezése", "signup.email.label": "Email cím", "signup.emailDuplicate": "Ezzel az e-mail címmel már létezik felhasználó", - "signup.firstname.label": "Keresztnév", + "signup.firstname.label": "First Name", "signup.headline": "Regisztráció", - "signup.lastname.label": "Vezetéknév", + "signup.lastname.label": "Last Name", "signup.legal.info": "A Ferdi fiók létrehozásával elfogadod az", "signup.legal.privacy": "Adatvédelmi Nyilatkozatot", "signup.legal.terms": "Felhasználási Feltételeket", @@ -430,23 +418,23 @@ "signup.password.label": "Jelszó", "signup.submit.label": "Fiók létrehozása", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Szolgáltatás törlése", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Hang letiltása", "tabs.item.disableDarkMode": "Sötét mód kikapcsolása", "tabs.item.disableNotifications": "Értesítések letiltása", - "tabs.item.disableService": "Szolgáltatás letiltása", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Hang engedélyezése", "tabs.item.enableDarkMode": "Sötét mód bekapcsolása", "tabs.item.enableNotification": "Értesítések engedélyezése", "tabs.item.enableService": "Szolgáltatás engedélyezése", - "tabs.item.hibernateService": "Szlgáltatás hibernálása", + "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Újratöltés", - "tabs.item.wakeUpService": "Szolgáltatás felébresztése", - "validation.email": "{field} nem érvényes", - "validation.minLength": "{field} mezőnek legalább {length} karakter hosszúnak kell lennie", + "tabs.item.wakeUpService": "Wake up service", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Legalább egy kitöltése szükséges", - "validation.required": "{field} kitöltése kötelező", - "validation.url": "{field} nem érvényes URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Vissza", "webControls.forward": "Előre", "webControls.goHome": "Kezdőlap", @@ -454,12 +442,12 @@ "webControls.reload": "Újratöltés", "welcome.loginButton": "Jelentkezz be a fiókodba", "welcome.signupButton": "Új fiók létrehozása", - "workspaceDrawer.addNewWorkspaceLabel": "Munkaterület hozzáadása", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Összes szolgáltatás", "workspaceDrawer.headline": "Munkaterületek", "workspaceDrawer.item.contextMenuEdit": "szerkeszt", "workspaceDrawer.item.noServicesAddedYet": "Még nincsenek hozzáadott szolgáltatások", - "workspaceDrawer.workspaceFeatureInfo": "

    A Ferdi Munkaterületek lehetővé teszik, hogy összpontosíts a jelenleg fontos dolgokra. Állítsd be a különböző szolgáltatáskészleteket és könnyedén válthatsz közöttük bármikor.

    Te döntöd el, hogy mely szolgáltatásokra van szükséged, mikor és hol, így segíthetünk abban, hogy a teljesítményed csúcsán maradhass, vagy ha csak akarod, egyszerűen kikapcsold a munkával kapcsolatos dolgokat.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Munkaterület beállítások szerkesztése", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Váltás" } diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json index 7a716a00c..e15d70f77 100644 --- a/src/i18n/locales/id.json +++ b/src/i18n/locales/id.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Muat Ulang", - "app.errorHandler.headline": "Terjadi kesalahan", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Server khusus", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Ada apa ini?", "connectionLostBanner.message": "Yah! Ferdi terputus dari {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Terbitkan informasi debug", "feature.nightlyBuilds.activate": "Mengaktifkan", "feature.nightlyBuilds.info": "Nightly builds adalah versi eksperimen dari Ferdi yang mungkin berisi fitur-fitur yang masih kasar dan tidak lengkap. Nightly builds ini biasa digunakan untuk para developer untuk mengetes fitur-fitur terbaru mereka dan bagaimana fitur-fitur itu berjalan di versi terakhir. Jika anda tidak tahu apa yang anda lakukan, kami sarankan untuk tidak mengaktivasi nightly builds.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Tidak dapat tersambung ke layanan Ferdi", - "global.cancel": "Batalkan", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Edit", "global.no": "No", "global.notConnectedToTheInternet": "Anda tidak tersambung ke internet.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Pengaturan", + "global.settings": "Settings", "global.spellchecker.useDefault": "Gunakan Bawaan Sistem ({default})", "global.spellchecking.autodetect": "Deteksi bahasa secara otomatis", "global.spellchecking.autodetect.short": "Otomatis", "global.spellchecking.language": "Periksa ejaan", - "global.submit": "Kirim", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Impor layanan Ferdi 4 Anda", "import.notSupportedHeadline": "Layanan belum didukung di Ferdi 5", "import.skip.label": "Saya ingin menambahkan layanan secara manual", - "import.submit.label": "Impor layanan", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Yang baru", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Mulai ulang & instal pembaruan", "infobar.buttonReloadServices": "Muat ulang layanan", "infobar.hide": "Sembunyikan", @@ -75,7 +74,7 @@ "login.email.label": "Alamat email", "login.headline": "Masuk", "login.invalidCredentials": "Email atau kata sandi tidak valid", - "login.link.password": "Setel ulang sandi", + "login.link.password": "Reset password", "login.link.signup": "Buat akun gratis", "login.password.label": "Password", "login.serverLogout": "Sesi Anda telah berakhir, silakan masuk kembali.", @@ -117,10 +116,10 @@ "menu.help.support": "Dukungan", "menu.help.tos": "Ketentuan Layanan", "menu.services": "Layanan", - "menu.services.activatePreviousService": "Aktifkan layanan sebelumnya", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Aktifkan layanan berikutnya", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Enable Todos", "menu.view": "Tampilan", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Semua layanan", "menu.workspaces.openWorkspaceDrawer": "Buka laci ruang kerja", "password.email.label": "Alamat email", - "password.headline": "Setel ulang sandi", + "password.headline": "Reset password", "password.link.login": "Masuk ke akun Anda", "password.link.signup": "Buat akun gratis", - "password.noUser": "Tidak ditemukan pengguna dengan email tersebut", - "password.successInfo": "Periksa email Anda", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Ruang kerja", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Muat Ulang {name}", "service.crashHandler.autoReload": "Mencoba memulihkan {name} secara otomatis dalam {seconds} detik", "service.crashHandler.headline": "Ya Ampun!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Selamat datang di Ferdi", - "settings.account.account.editButton": "Edit akun", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Perbarui profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Anda menerima email dengan tautan untuk mengonfirmasi penghapusan akun. Akun dan data Anda tidak bisa dipulihkan!", "settings.account.deleteInfo": "Jika Anda tidak membutuhkan akun Ferdi lagi, Anda bisa menghapus akun dan semua data terkait di sini.", "settings.account.headline": "Akun", - "settings.account.headlineAccount": "Informasi akun", - "settings.account.headlineDangerZone": "Wilayah Berbahaya", - "settings.account.headlineInvoices": "Tagihan", - "settings.account.headlinePassword": "Ubah sandi", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Perbarui profil", "settings.account.successInfo": "Perubahan Anda telah disimpan", "settings.account.tryReloadServices": "Coba lagi", "settings.account.tryReloadUserInfoRequest": "Coba lagi", "settings.account.userInfoRequestFailed": "Gagal memuat informasi pengguna", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Bersihkan singgahan", "settings.app.buttonInstallUpdate": "Mulai ulang & instal pembaruan", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Aktifkan Mode Gelap", "settings.app.form.enableGPUAcceleration": "Aktifkan Akselerasi GPU", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Aktifkan pemeriksaan ejaan", - "settings.app.form.enableSystemTray": "Tampilkan Ferdi di baki sistem", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Layanan tersedia", "settings.recipes.missingService": "Layanan tidak tersedia?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Layanan berhasil ditambahkan", "settings.searchService": "Cari layanan", "settings.service.error.goBack": "Kembali ke layanan", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Hapus layanan", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Edit {name}", "settings.service.form.enableAudio": "Aktifkan audio", "settings.service.form.enableBadge": "Tampilkan lencana pesan belum dibaca", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "Pengaturan Proxy HTTP/HTTPS", "settings.service.form.proxy.host": "Host/IP Proksi", - "settings.service.form.proxy.info": "Pengaturan proksi tidak akan disinkronkan dengan server Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Gunakan Proksi", - "settings.service.form.proxy.password": "Sandi (opsional)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Silahkan mulai ulang Ferdi setelah mengubah Setelan proxy", - "settings.service.form.proxy.user": "Pengguna (opsional)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Simpan layanan", "settings.service.form.tabHosted": "Hosted", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Nirlaba", "settings.user.form.currentPassword": "Sandi saat ini", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Nama Depan", - "settings.user.form.lastname": "Nama Belakang", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Sandi baru", "settings.workspace.add.form.name": "Nama", "settings.workspace.add.form.submitButton": "Buat ruang kerja", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Coba lagi", "settings.workspaces.updatedInfo": "Perubahan Anda telah disimpan", "settings.workspaces.workspaceFeatureHeadline": "Sedikit Namun Banyak: Memperkenalkan Ruang Kerja Ferdi", - "settings.workspaces.workspaceFeatureInfo": "Ruang Kerja Ferdi dapat digunakan untuk tetap fokus pada hal penting saat ini. Siapkan sekelompok layanan yang berbeda dan dengan mudah beralih ke yang lain. Anda yang memutuskan layanan mana yang Anda perlukan dan kapan, agar kami bisa membantu Anda tetap berada di garis depan - atau dengan mudah mengakhiri hari kerja kapan saja Anda inginkan.", + "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.", "settings.workspaces.workspacesRequestFailed": "Tidak dapat memuat ruang kerja Anda", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Aktifkan pemberitahuan", "signup.email.label": "Alamat email", "signup.emailDuplicate": "Pengguna dengan alamat email ini sudah ada", - "signup.firstname.label": "Nama Depan", + "signup.firstname.label": "First Name", "signup.headline": "Daftar", - "signup.lastname.label": "Nama Belakang", + "signup.lastname.label": "Last Name", "signup.legal.info": "Dengan membuat akun Ferdi, Anda menyetujui", "signup.legal.privacy": "Pernyataan Privasi", "signup.legal.terms": "Ketentuan layanan", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "Buat akun", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Hapus layanan", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Nonaktifkan audio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Nonaktifkan pemberitahuan", - "tabs.item.disableService": "Nonaktifkan layanan", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Aktifkan audio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Aktifkan pemberitahuan", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Muat Ulang", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} tidak benar", - "validation.minLength": "{field} setidaknya harus {length} karakter", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Setidaknya diperlukan satu", - "validation.required": "{field} wajib diisi", - "validation.url": "{field} bukan URL yang benar", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", @@ -454,12 +442,12 @@ "webControls.reload": "Muat Ulang", "welcome.loginButton": "Masuk ke akun Anda", "welcome.signupButton": "Buat akun gratis", - "workspaceDrawer.addNewWorkspaceLabel": "Tambah ruang kerja baru", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Semua layanan", "workspaceDrawer.headline": "Ruang kerja", "workspaceDrawer.item.contextMenuEdit": "edit", "workspaceDrawer.item.noServicesAddedYet": "Belum ada layanan yang ditambahkan", - "workspaceDrawer.workspaceFeatureInfo": "

    Ruang Kerja Ferdi dapat digunakan untuk tetap fokus pada hal penting saat ini. Siapkan sekelompok layanan yang berbeda dan dengan mudah beralih ke yang lain.

    Anda yang memutuskan layanan mana yang Anda perlukan dan kapan, agar kami bisa membantu Anda tetap berada di garis depan - atau dengan mudah mengakhiri hari kerja kapan saja Anda inginkan.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Edit setelan ruang kerja", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Beralih ke" } diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index d5539aa30..d833ec5dc 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Ricarica", - "app.errorHandler.headline": "Qualcosa è andato storto", + "app.errorHandler.headline": "Qualcosa è andato storto.", "changeserver.customServerLabel": "Server personalizzato", "changeserver.headline": "Cambia Server", "changeserver.label": "Server", @@ -9,8 +9,7 @@ "connectionLostBanner.cta": "Ricarica Servizio", "connectionLostBanner.informationLink": "Cos'è successo?", "connectionLostBanner.message": "Oh no! Ferdi ha perso la connessione con {name}.", - "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Pubblica informazioni di debug", + "feature.basicAuth.signIn": "Accedi", "feature.nightlyBuilds.activate": "Attivato", "feature.nightlyBuilds.info": "Le 'Nightly Builds' sono versioni sperimentali di Ferdi che possono contenere funzionalità incomplete o non perfettamente funzionanti. Queste versioni sono principalmente usate dagli sviluppatori per effettuare dei test sulle nuove caratteristiche e verificare come si integrano nella versione finale di Ferdi. Se non sei sicuro di quello che stai facendo, ti consigliamo di non attivare le 'Nightly Builds'.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,15 +23,15 @@ "feature.quickSwitch.info": "Seleziona un servizio con TAB, ↑ e ↓. Apri un servizio con INVIO.", "feature.quickSwitch.search": "Cerca...", "feature.quickSwitch.title": "Cambio Veloce", - "global.api.unhealthy": "Impossibile connettersi ai servizi online di Ferdi", + "global.api.unhealthy": "Can't connect to Ferdi online services", "global.cancel": "Annulla", "global.edit": "Modifica", "global.no": "No", "global.notConnectedToTheInternet": "Non sei connesso a Internet.", "global.ok": "Ok", - "global.quit": "Quit", - "global.quitConfirmation": "Do you really want to quit Ferdi?", - "global.save": "Save", + "global.quit": "Esci", + "global.quitConfirmation": "Sei sicuro di voler uscire da Ferdi?", + "global.save": "Salva", "global.settings": "Impostazioni", "global.spellchecker.useDefault": "Usa le impostazioni predefinite di sistema ({default})", "global.spellchecking.autodetect": "Rileva automaticamente la lingua", @@ -41,13 +40,13 @@ "global.submit": "Invia", "global.userAgentHelp": "Usa 'https://whatmyuseragent.com/' (per scoprire) o 'https://developers.whatismybrowser.com/useragents/explore/' (per scegliere) il tuo user agent desiderato e copialo qui.", "global.userAgentPref": "User Agent", - "global.yes": "Yes", + "global.yes": "Si", "import.headline": "Importa i servizi di Ferdi 4", "import.notSupportedHeadline": "Servizi non ancora supportati in Ferdi 5", "import.skip.label": "Voglio aggiungere i servizi manualmente", - "import.submit.label": "Importa servizi", + "import.submit.label": "Importa {count} servizi", "infobar.authRequestFailed": "Si sono verificati errori durante il tentativo di eseguire una richiesta autenticata. Si prega di provare a disconnettersi e tornare indietro se questo errore persiste.", - "infobar.buttonChangelog": "Cosa c'è di nuovo?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Riavvia e installa l'aggiornamento", "infobar.buttonReloadServices": "Ricarica servizi", "infobar.hide": "Nascondi", @@ -75,7 +74,7 @@ "login.email.label": "Indirizzo email", "login.headline": "Accedi", "login.invalidCredentials": "Email o password non valide", - "login.link.password": "Reimposta password", + "login.link.password": "Reset password", "login.link.signup": "Crea un account gratuito", "login.password.label": "Password", "login.serverLogout": "La tua sessione è scaduta, per favore accedi di nuovo.", @@ -87,40 +86,40 @@ "menu.app.autohideMenuBar": "Nascondi automaticamente la barra del menù", "menu.app.checkForUpdates": "Controlla aggiornamenti", "menu.app.hide": "Nascondi", - "menu.app.hideOthers": "Hide Others", - "menu.app.unhide": "Unhide", + "menu.app.hideOthers": "Nascondi altri", + "menu.app.unhide": "Mostra", "menu.edit": "Modifica", - "menu.edit.copy": "Copy", - "menu.edit.cut": "Cut", + "menu.edit.copy": "Copia", + "menu.edit.cut": "Taglia", "menu.edit.delete": "Elimina", "menu.edit.emojiSymbols": "Emoji e simboli", "menu.edit.findInPage": "Trova nella pagina", - "menu.edit.paste": "Paste", - "menu.edit.pasteAndMatchStyle": "Paste And Match Style", - "menu.edit.redo": "Redo", - "menu.edit.selectAll": "Select All", + "menu.edit.paste": "Incolla", + "menu.edit.pasteAndMatchStyle": "Incolla e abbina stile", + "menu.edit.redo": "Ripeti", + "menu.edit.selectAll": "Seleziona Tutto", "menu.edit.speech": "Sintesi Vocale", "menu.edit.startDictation": "Avvia Dettatura", "menu.edit.startSpeaking": "Avvia Pronuncia", "menu.edit.stopSpeaking": "Interrompi Pronuncia", - "menu.edit.undo": "Undo", + "menu.edit.undo": "Annulla", "menu.file": "File", - "menu.help": "Help", + "menu.help": "Aiuto", "menu.help.changelog": "Changelog", "menu.help.debugInfo": "Copia informazioni di debug", "menu.help.debugInfoCopiedBody": "Le tue informazioni di debug sono state copiate nella tua clipboard.", "menu.help.debugInfoCopiedHeadline": "Informazioni di debug di Ferdi", - "menu.help.importExportData": "Import/Export Configuration Data", + "menu.help.importExportData": "Importa/Esporta Dati Di Configurazione", "menu.help.learnMore": "Maggiori Informazioni", "menu.help.privacy": "Dichiarazione della Privacy", "menu.help.publishDebugInfo": "Pubblica le informazioni di debug", "menu.help.support": "Supporto", "menu.help.tos": "Termini di Servizio", "menu.services": "Servizi", - "menu.services.activatePreviousService": "Attiva servizio precedente", - "menu.services.addNewService": "Aggiungi un Nuovo Servizio", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Aggiungi nuovo servizio...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Attiva servizio seguente", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todo", "menu.todos.enableTodos": "Abilita Todos", "menu.view": "Visualizza", @@ -128,42 +127,31 @@ "menu.view.forward": "Avanti", "menu.view.lockFerdi": "Blocca Ferdi", "menu.view.openQuickSwitch": "Apri Cambio Rapido", - "menu.view.reloadFerdi": "Reload Ferdi", + "menu.view.reloadFerdi": "Ricarica Ferdi", "menu.view.reloadService": "Ricarica Servizio", "menu.view.reloadTodos": "Ricarica ToDos", - "menu.view.resetZoom": "Actual Size", + "menu.view.resetZoom": "Dimensione attuale", "menu.view.toggleDarkMode": "Attiva la modalità scura", "menu.view.toggleDevTools": "Attiva/Disattiva Strumenti Sviluppo", - "menu.view.toggleFullScreen": "Toggle Full Screen", + "menu.view.toggleFullScreen": "Attiva/Disattiva Schermo Intero", "menu.view.toggleServiceDevTools": "Attiva/Disattiva Strumenti per Sviluppatori di Servizi", "menu.view.toggleTodosDevTools": "Attiva/Disattiva gli strumenti di sviluppo delle Attività", - "menu.view.zoomIn": "Zoom In", - "menu.view.zoomOut": "Zoom Out", - "menu.window": "Window", - "menu.window.close": "Close", - "menu.window.minimize": "Minimize", + "menu.view.zoomIn": "Aumenta zoom", + "menu.view.zoomOut": "Diminuisci Zoom", + "menu.window": "Finestra", + "menu.window.close": "Chiudi", + "menu.window.minimize": "Riduzione a icona", "menu.workspaces": "Aree di lavoro", "menu.workspaces.addNewWorkspace": "Aggiungi un'area di lavoro...", "menu.workspaces.closeWorkspaceDrawer": "Chiudi il menu dei workspace", "menu.workspaces.defaultWorkspace": "Tutti i servizi", "menu.workspaces.openWorkspaceDrawer": "Apri il menu dei workspace", "password.email.label": "Indirizzo email", - "password.headline": "Reimposta password", + "password.headline": "Reset password", "password.link.login": "Accedi al tuo account", "password.link.signup": "Crea un account gratuito", - "password.noUser": "Non è stato trovato nessun utente con questo indirizzo email", - "password.successInfo": "Per favore controlla la tua email", - "pricing.features.accountSync": "Sincronizzazione account", - "pricing.features.customWebsites": "Aggiungi siti web personalizzati", - "pricing.features.desktopNotifications": "Notifiche desktop", - "pricing.features.onPremise": "Servizi ospitati & on-premise", - "pricing.features.recipes": "Scegli tra più di 70 Servizi", - "pricing.features.serviceProxies": "Proxy di servizio", - "pricing.features.spellchecker": "Supporto per il correttore ortografico", - "pricing.features.teamManagement": "Gestione del team", - "pricing.features.thirdPartyServices": "Installa servizi di terze parti", - "pricing.features.unlimitedServices": "Aggiungi servizi illimitati", - "pricing.features.workspaces": "Aree di lavoro", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Una nuova password è stata inviata al tuo indirizzo email", "service.crashHandler.action": "Ricarica {name}", "service.crashHandler.autoReload": "Tentativo di ripristino automatico di {name} in {seconds} secondi", "service.crashHandler.headline": "Oh no!", @@ -178,10 +166,10 @@ "service.webviewLoader.loading": "Caricamento {service}", "services.getStarted": "Iniziamo", "services.login": "Effettua il login per utlizzare Ferdi.", - "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!", + "services.serverInfo": "Facoltativamente, puoi cambiare il tuo server Ferdi cliccando l'ingranaggio nell'angolo in basso a sinistra. Se stai passando (da uno dei server ospitati) ad usare Ferdi senza un account, sappi che puoi esportare i tuoi dati da quel server e successivamente importarli usando il menu Aiuto per ripristinare tutti i tuoi spazi di lavoro e servizi configurati!", "services.serverless": "Usa Ferdi senza account", "services.welcome": "Benvenuto su Ferdi", - "settings.account.account.editButton": "Modifica account", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account non disponibile", "settings.account.accountUnavailableInfo": "Stai usando Ferdi senza un account. Se si desidera aggiungere un account, e tenere sincronizzati i servizi tra le installazioni, selezionare un server nel tab delle Impostazioni e quindi login.", "settings.account.buttonSave": "Aggiorna profilo", @@ -189,21 +177,21 @@ "settings.account.deleteEmailSent": "Hai ricevuto un'email con un link per confermare l'eliminazione del tuo account. I dati del tuo account non potranno più essere ripristinati!", "settings.account.deleteInfo": "Se non hai più bisogno dell'account Ferdi, puoi eliminare il tuo account e tutti i dati relativi qui.", "settings.account.headline": "Account", - "settings.account.headlineAccount": "Informazioni account", + "settings.account.headlineAccount": "Account information", "settings.account.headlineDangerZone": "Zona Pericolosa", "settings.account.headlineInvoices": "Fatture", - "settings.account.headlinePassword": "Cambia password", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Aggiorna profilo", "settings.account.successInfo": "Le tue modifiche sono state salvate", "settings.account.tryReloadServices": "Riprova", "settings.account.tryReloadUserInfoRequest": "Riprova", "settings.account.userInfoRequestFailed": "Impossibile caricare le informazioni dell'utente.", - "settings.account.yourLicense": "La tua licenza Ferdi", + "settings.account.yourLicense": "La tua licenza Ferdi:", "settings.app.accentColorInfo": "Inserisci il tuo colore in risalto in un formato compatibile con CSS. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Svuota la cache", "settings.app.buttonInstallUpdate": "Riavvia e installa l'aggiornamento", - "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder", - "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder", + "settings.app.buttonOpenFerdiProfileFolder": "Apri cartella del profilo utente", + "settings.app.buttonOpenFerdiServiceRecipesFolder": "Apri cartella ricette dei servizi", "settings.app.buttonSearchForUpdate": "Controlla aggiornamenti", "settings.app.cacheInfo": "Ferdi sta utilizzando {size} di spazio su disco.", "settings.app.cacheNotCleared": "Impossibile eliminare tutta la cache", @@ -218,14 +206,14 @@ "settings.app.form.beta": "Includi versioni beta", "settings.app.form.clipboardNotifications": "Non mostrare notifiche per eventi dagli appunti", "settings.app.form.closeToSystemTray": "Chiudi Ferdi nell'area di notifica", - "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Server Todo personalizzato", - "settings.app.form.darkMode": "Attiva modalità scura", + "settings.app.form.confirmOnQuit": "Conferma quando esci da Ferdi", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Attiva la modalità scura.", "settings.app.form.enableGPUAcceleration": "Attiva Accelerazione GPU", "settings.app.form.enableLock": "Abilita blocco con password", "settings.app.form.enableMenuBar": "Mostra sempre Ferdi nella barra dei menù", "settings.app.form.enableSpellchecking": "Attiva controllo ortografico", - "settings.app.form.enableSystemTray": "Mostra Ferdi nell'area di notifica", + "settings.app.form.enableSystemTray": "Mostra sempre icona Ferdi in area di notifica", "settings.app.form.enableTodos": "Abilità le Attività Ferdi", "settings.app.form.hibernateOnStartup": "Mantieni i servizi in ibernazione all'avvio", "settings.app.form.hibernationStrategy": "Strategia di ibernazione", @@ -253,9 +241,9 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Mostra l'etichetta dei messaggi non letti quando le notifiche sono disattivate", "settings.app.form.startMinimized": "Avvio ridotto a icona", "settings.app.form.universalDarkMode": "Abilita la modalità scura universale", - "settings.app.form.useTouchIdToUnlock": "Consenti l'utilizzo di TouchID per sbloccare Ferdi", - "settings.app.form.useVerticalStyle": "Use horizontal style", - "settings.app.form.wakeUpStrategy": "Wake up strategy", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", + "settings.app.form.useVerticalStyle": "Usa stile orizzontale", + "settings.app.form.wakeUpStrategy": "Strategia di risveglio", "settings.app.headlineAdvanced": "Avanzate", "settings.app.headlineAppearance": "Aspetto", "settings.app.headlineGeneral": "Generale", @@ -267,15 +255,15 @@ "settings.app.languageDisclaimer": "Le traduzioni ufficiali sono in Inglese e Tedesco. Tutte le altre lingue sono tradotte dalla community.", "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}.", "settings.app.lockedPassword": "Password", - "settings.app.lockedPasswordInfo": "Assicurati di impostare una password che ricordi.\nSe perdi questa password, dovrai reinstallare Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Le modifiche richiedono un riavvio", "settings.app.scheduledDNDInfo": "I Do-not-Disturb pianificati consentono di definire un periodo di tempo nel quale le notifiche da Ferdi saranno disabilitate.", "settings.app.scheduledDNDTimeInfo": "Ora in formato 24 ore. L'ora di fine può essere prima dell'ora di inizio (ad esempio inizio 17:00, fine 09:00) per abilitare Do-not-Disturb durante la notte.", - "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", + "settings.app.sentryInfo": "L'invio dei dati di telemetria ci permette di trovare errori in Ferdi - non invieremo nessuna informazione personale come i dati del tuo messaggio!", "settings.app.spellCheckerLanguageInfo": "Ferdi utilizza il controllo ortografico del tuo Mac per verificare la presenza di errori. Se si desidera modificare le lingue del controllo ortografico, è possibile farlo nelle preferenze di sistema del vostro Mac.", "settings.app.subheadlineCache": "Cache", - "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Questo server verrà usato per le funzionalità 'Ferdi Todo'.", + "settings.app.subheadlineFerdiProfile": "Profilo Ferdi", + "settings.app.todoServerInfo": "Questo server sarà utilizzato per la funzione \"Ferdi Todo\".", "settings.app.translationHelp": "Aiutaci a tradurre Ferdi nella tua lingua.", "settings.app.universalDarkModeInfo": "La modalità 'Dark Mode' universale cerca di generare dinamicamente uno stile di visualizzazione a sfondo scuro per quei servizi che non lo supportano nativamente.", "settings.app.updateStatusAvailable": "Aggiornamento disponibile, download in corso...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "'Recipe' (istruzioni) per applicazioni di terze parti della community", "settings.recipes.customService.headline.customRecipes": "'Recipe' (istruzioni) per applicazioni di terze parti personalizzate", "settings.recipes.customService.headline.devRecipes": "Le tue 'Recipe' (istruzioni) per applicazioni", - "settings.recipes.customService.intro": "Per aggiungere un servizio personalizzato copia la sua 'recipe' (istruzioni) in:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Documentazione per sviluppatori", - "settings.recipes.customService.openFolder": "Apri cartella", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Servizi disponibili", "settings.recipes.missingService": "Manca un servizio?", - "settings.recipes.nothingFound": "Ci scusiamo, ma nessun servizio corrisponde ai tuoi termini di ricerca - tuttavia è probabile che tu possa aggiungerlo in ogni caso utilizzando l'opzione \"Sito Web Personalizzato\". Ti informiamo che il sito web ufficiale potrebbe mostrare un numero maggiore di servizi rispetto alla versione attualmente in uso. Per ottenere tali servizi, è consigliato l'aggiornamento a una versione più recente di Ferdi.", + "settings.recipes.nothingFound": "Siamo spiacenti, ma nessun servizio corrisponde al tuo termine di ricerca. Si prega di notare che il sito web potrebbe mostrare altri servizi che sono stati aggiunti a Ferdi dalla versione in cui ti trovi attualmente. Per ottenere questi nuovi servizi, considera l'aggiornamento a una versione più recente di Ferdi.", "settings.recipes.servicesSuccessfulAddedInfo": "Servizio aggiunto con successo", "settings.searchService": "Cerca servizio", "settings.service.error.goBack": "Torna ai servizi", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Luminosità della Modalità Scura", "settings.service.form.darkReaderContrast": "Contrasto della Modalità Scura", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Elimina servizio", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Modifica {name}", "settings.service.form.enableAudio": "Attiva audio", "settings.service.form.enableBadge": "Mostra l'etichetta dei messaggi non letti", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Apri il file 'user.js'", "settings.service.form.proxy.headline": "Impostazioni Proxy HTTP/HTTPS", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Le impostazioni proxy non verranno sincronizzate con i server Ferdi.", + "settings.service.form.proxy.info": "Le impostazioni proxy non saranno sincronizzate con i server Ferdi.", "settings.service.form.proxy.isEnabled": "Usa un Proxy", - "settings.service.form.proxy.password": "Password (opzionale)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Porta", "settings.service.form.proxy.restartInfo": "Riavvia Ferdi dopo aver cambiato le impostazioni del proxy.", - "settings.service.form.proxy.user": "Utente (opzionale)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "I file utente (user file) verranno iniettati nella pagina web così da poter personalizzare il servizio nel modo che preferisci. Questi file verranno memorizzati solo localmente e non verranno trasferiti su altri computer anche se usano lo stesso account.", "settings.service.form.saveButton": "Salva servizio", "settings.service.form.tabHosted": "Hosted", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi è un'applicazione open source sviluppata dalla community.

    Un ringraziamento a tutti coloro che hanno reso questo possibile:

    ", "settings.supportFerdi.bannerText": "Vuoi aiutarci a migliorare Ferdi?", "settings.supportFerdi.headline": "Info su Ferdi", - "settings.supportFerdi.openSurvey": "Sondaggio aperto", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Se vuoi aiutare lo sviluppo di Ferdi con una donazione, puoi farlo", "settings.supportFerdi.textDonationAnd": "e", "settings.supportFerdi.textExpenses": "Nonostante la maggior parte del lavoro sia svolto da volontari è comunque necessario pagare per la gestione di server e certificati. Essendo una comunità vogliamo essere completamente trasparenti rispetto a come raccogliamo e spendiamo fondi", "settings.supportFerdi.textGitHubSponsors": "Sponsor GitHub", - "settings.supportFerdi.textListContributors": "Elenco dei contributori", + "settings.supportFerdi.textListContributors": "Elenco completo dei contributori", "settings.supportFerdi.textListContributorsHere": "qui", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Il tuo supporto è il benvenuto. Puoi trovare un elenco degli aiuti che ci servono", @@ -377,7 +365,7 @@ "settings.team.contentHeadline": "Franz Team Management", "settings.team.copy": "Il gestore di Team di Franz (Franz's Team Management) ti consente di gestire gli abbonamenti Franz (Franz Subscriptions) per più utenti. È importante ricordare che possedere un abbonamento Premium Franz non dà alcun beneficio nell'usare Ferdi. L'unico motivo per cui hai accesso al gestore di Team è perchè tu posa gestire i tuoi Team di Franz creati in precedenza così da non perdere alcuna funzionalità nella gestione del tuo account.", "settings.team.headline": "Gruppo", - "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", + "settings.team.intro": "Attualmente stai usando server di Franz, ed è per questo che hai accesso al Team Management.", "settings.team.manageAction": "Gestisci i tuoi Team su meetfranz.com", "settings.team.teamsUnavailable": "I Teams non sono disponibili", "settings.team.teamsUnavailableInfo": "I Team sono disponibili esclusivamente usando Franz Server e dopo aver attivato Franz Professional (a pagamento). Per poter utilizzare i Team è necessario modificare il server in https://api.franzinfra.com.", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "No profit", "settings.user.form.currentPassword": "Password attuale", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Nome", - "settings.user.form.lastname": "Cognome", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nuova password", "settings.workspace.add.form.name": "Nome", "settings.workspace.add.form.submitButton": "Crea workspace", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Riprova", "settings.workspaces.updatedInfo": "Le tue modifiche sono state salvate", "settings.workspaces.workspaceFeatureHeadline": "Meno è Meglio: Introduciamo le aree di lavoro di Ferdi", - "settings.workspaces.workspaceFeatureInfo": "Le aree di lavoro di Ferdi ti permettono di concentrarti su ciò che è importante. Configura diversi insiemi di servizi e passa facilmente da uno all’altro quando vuoi. Decidi di quali servizi hai bisogno quando e dove, così che ti possiamo aiutare a dare sempre il massimo - o semplicemente staccare dal lavoro quando ne hai bisogno.", + "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.", "settings.workspaces.workspacesRequestFailed": "Non è possibile caricare i tuoi workspace", "setupAssistant.headline": "Cominciamo", "setupAssistant.subheadline": "Scegli tra i nostri servizi più utilizzati e riprendi a messaggiare ora.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Attiva notifiche e audio", "signup.email.label": "Indirizzo email", "signup.emailDuplicate": "Esiste già un utente con lo stesso indirizzo email", - "signup.firstname.label": "Nome", + "signup.firstname.label": "First Name", "signup.headline": "Iscriviti", - "signup.lastname.label": "Cognome", + "signup.lastname.label": "Last Name", "signup.legal.info": "Creando un account di Ferdi accetti", "signup.legal.privacy": "Dichiarazione della Privacy", "signup.legal.terms": "Termini di Servizio", @@ -430,23 +418,23 @@ "signup.password.label": "Password", "signup.submit.label": "Crea un account", "tabs.item.confirmDeleteService": "Vuoi davvero eliminare il servizio {serviceName}?", - "tabs.item.deleteService": "Elimina servizio", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Disattiva audio", - "tabs.item.disableDarkMode": "Disable Dark mode", + "tabs.item.disableDarkMode": "Disattiva modalità scura", "tabs.item.disableNotifications": "Disattiva notifiche", - "tabs.item.disableService": "Disattiva servizio", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Attiva audio", - "tabs.item.enableDarkMode": "Enable Dark mode", + "tabs.item.enableDarkMode": "Attiva modalità scura", "tabs.item.enableNotification": "Attiva le notifiche", "tabs.item.enableService": "Attiva il servizio", "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Ricarica", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} non valido", - "validation.minLength": "{field} dovrebbe contenere almeno {length} caratteri", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Almeno un campo è richiesto", - "validation.required": "{field} è necessario", - "validation.url": "{field} non è un URL valido", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Indietro", "webControls.forward": "Avanti", "webControls.goHome": "Home", @@ -459,7 +447,7 @@ "workspaceDrawer.headline": "Aree di lavoro", "workspaceDrawer.item.contextMenuEdit": "Modifica", "workspaceDrawer.item.noServicesAddedYet": "Nessun servizio aggiunto", - "workspaceDrawer.workspaceFeatureInfo": "

    I workspace di Ferdi ti permettono di concentrarti su ciò che è importante. Configura diversi insiemi di servizi e passa facilmente da uno all’altro quando vuoi.

    Decidi di quali servizi hai bisogno quando e dove, così che ti possiamo aiutare a dare sempre il massimo - o semplicemente staccare dal lavoro quando ne hai bisogno.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Modifica le impostazioni dei workspace", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Passa a " } diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 118a2fb8e..38ef43691 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "再読み込み", - "app.errorHandler.headline": "間違えている部分があります", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "独自サーバー", "changeserver.headline": "サーバーの変更", "changeserver.label": "サーバー", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "何が起きましたか?", "connectionLostBanner.message": "{name}への接続が切断されました。", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "デバッグ情報の記録", "feature.nightlyBuilds.activate": "有効化", "feature.nightlyBuilds.info": "Nightlyビルドは未検証や未完成の機能が含まれる非常に実験的なバージョンです。このバージョンは、主に新機能のテストや最新ビルドでの検証を行う開発者が使用するものです。これを理解していない方は、Nightlyビルドを有効化しないことをおすすめします。", "feature.nightlyBuilds.title": "Nightlyビルド", @@ -24,30 +23,30 @@ "feature.quickSwitch.info": "Tab, ↑, ↓でサービスを選択します。Enterでサービスを開きます", "feature.quickSwitch.search": "検索...", "feature.quickSwitch.title": "クイックスイッチ", - "global.api.unhealthy": "Ferdiのオンラインサービスに接続できません。", - "global.cancel": "キャンセル", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "編集", "global.no": "No", "global.notConnectedToTheInternet": "インターネットに接続されていません。", "global.ok": "Ok", - "global.quit": "終了", + "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "設定", + "global.settings": "Settings", "global.spellchecker.useDefault": "システムデフォルトを使用する({default})", "global.spellchecking.autodetect": "言語を自動的に検出する", "global.spellchecking.autodetect.short": "自動", "global.spellchecking.language": "スペルチェックする言語", - "global.submit": "送信", + "global.submit": "Submit", "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.", "global.userAgentPref": "ユーザーエージェント", "global.yes": "Yes", "import.headline": "Ferdi 4のサービスをインポートして下さい", "import.notSupportedHeadline": "Ferdi 5ではこのサービスにまだ対応していません", "import.skip.label": "手動でサービスを追加する", - "import.submit.label": "サービスをインポートして下さい", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "認証済みリクエストの実行中にエラーが発生しました。このエラーが何度も発生する場合は、ログアウトして再度お試しください。", - "infobar.buttonChangelog": "更新履歴を見る", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "再起動して更新をインストールする", "infobar.buttonReloadServices": "サービスの再読み込み", "infobar.hide": "隠す", @@ -75,7 +74,7 @@ "login.email.label": "メールアドレス", "login.headline": "サインイン", "login.invalidCredentials": "メールアドレスまたはパスワードが間違っています", - "login.link.password": "パスワードをリセット", + "login.link.password": "Reset password", "login.link.signup": "無料アカウントを作成", "login.password.label": "パスワード", "login.serverLogout": "セッションの期限が切れました。ログインし直して下さい。", @@ -117,10 +116,10 @@ "menu.help.support": "サポート", "menu.help.tos": "サービス利用規約", "menu.services": "サービス", - "menu.services.activatePreviousService": "前のサービスを有効にする", - "menu.services.addNewService": "サービスを追加", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "ホーム", - "menu.services.setNextServiceActive": "次のサービスを有効にする", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "ToDo", "menu.todos.enableTodos": "ToDoを有効にする", "menu.view": "表示", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "すべてのサービス", "menu.workspaces.openWorkspaceDrawer": "ワークスペースドロワーを開く", "password.email.label": "メールアドレス", - "password.headline": "パスワードをリセット", + "password.headline": "Reset password", "password.link.login": "サインイン", "password.link.signup": "無料アカウントを作成", - "password.noUser": "このメールアドレスはまだ登録されていません", - "password.successInfo": "メールを確認して下さい", - "pricing.features.accountSync": "アカウントの同期", - "pricing.features.customWebsites": "カスタムサイトを追加", - "pricing.features.desktopNotifications": "デスクトップ通知", - "pricing.features.onPremise": "オンプレミスおよびその他のホスティングサービス", - "pricing.features.recipes": "70以上のサービスから選択", - "pricing.features.serviceProxies": "サービスプロキシ", - "pricing.features.spellchecker": "スペルチェックのサポート", - "pricing.features.teamManagement": "チーム管理", - "pricing.features.thirdPartyServices": "サードパーティ製サービスをインストール", - "pricing.features.unlimitedServices": "無制限にサービスを追加", - "pricing.features.workspaces": "ワークスペース", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "{name}を再読み込み", "service.crashHandler.autoReload": "{seconds}秒後、自動的に{name}の復旧を試みます", "service.crashHandler.headline": "しまった!", @@ -181,7 +169,7 @@ "services.serverInfo": "オプションとして、左下の歯車をクリックしてFerdiサーバーを変更することができます。他のホストされたサーバからアカウントなしでFerdiを使うように変更する場合は、そのサーバからデータをエクスポートし、その後ヘルプメニューを使ってインポートすることですべてのワークスペースと設定したサービスを復元させることができます。", "services.serverless": "アカウントなしでFerdiを使用する", "services.welcome": "Ferdiにようこそ", - "settings.account.account.editButton": "アカウントの編集", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "アカウントが利用できません", "settings.account.accountUnavailableInfo": "アカウントなしでFerdiを使用しています。 Ferdiのアカウントを使用してコンピューター間でサービスを同期させる場合、 設定タブでサーバーを選択してログインしてください。", "settings.account.buttonSave": "プロフィールの更新", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "アカウント削除の確認メールを送信しました。あなたのアカウントとデータは復旧できません!", "settings.account.deleteInfo": "今後Ferdiのアカウントが必要なければ、こちらでアカウントと関連する情報を削除できます。", "settings.account.headline": "アカウント", - "settings.account.headlineAccount": "アカウント情報", - "settings.account.headlineDangerZone": "注意!", - "settings.account.headlineInvoices": "請求書", - "settings.account.headlinePassword": "パスワードの変更", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "プロフィールの更新", "settings.account.successInfo": "変更内容が保存されました", "settings.account.tryReloadServices": "もう一度試す", "settings.account.tryReloadUserInfoRequest": "もう一度試す", "settings.account.userInfoRequestFailed": "ユーザ情報を読み込めませんでした", - "settings.account.yourLicense": "ご利用中のFerdiライセンス", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "CSSフォーマットでアクセントカラーを記述してください。(デフォルト: {defaultAccentColor})", "settings.app.buttonClearAllCache": "キャッシュを消去する", "settings.app.buttonInstallUpdate": "再起動して更新をインストールする", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "クリップボードイベントの通知を表示しない", "settings.app.form.closeToSystemTray": "Ferdiをシステムトレイに閉じる", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "カスタムToDoサーバー", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "ダークモードを有効にする", "settings.app.form.enableGPUAcceleration": "GPUアクセラレーションを有効にする", "settings.app.form.enableLock": "パスワードロックを有効にする", "settings.app.form.enableMenuBar": "Ferdi内にメニューバーを常時表示する", "settings.app.form.enableSpellchecking": "スペルチェックを有効にする", - "settings.app.form.enableSystemTray": "Ferdiをシステムトレイに表示する", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Ferdi ToDoを有効にする", "settings.app.form.hibernateOnStartup": "起動時にサービスを休止状態にする", "settings.app.form.hibernationStrategy": "休止状態の方法", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "通知の無効時に未読メッセージ件数を表示する", "settings.app.form.startMinimized": "最小化して起動", "settings.app.form.universalDarkMode": "ユニバーサルダークモードを有効にする", - "settings.app.form.useTouchIdToUnlock": "Touch IDを使用してFerdiのロックを解除する", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "起動方法", "settings.app.headlineAdvanced": "詳細", @@ -265,9 +253,9 @@ "settings.app.hibernateInfo": "デフォルトでは、Ferdiはすべてのサービスをバックグラウンドで開いて読み込んでおくので、使いたいときにすぐに使えます。 サービス休止機能は設定した時間が経過したら読み込んだサービスを解放します。これはRAMを節約したり、サービスでコンピューターの動作が重くなるのを防ぐのに役立ちます。", "settings.app.inactivityLockInfo": "休止状態までの時間(分)、この時間が経過後Ferdiは自動でロックします。0で無効化", "settings.app.languageDisclaimer": "公式の言語は英語とドイツ語です。他の言語はコミュニティによる翻訳です。", - "settings.app.lockInfo": "パスワードロックはメッセージを保護できます。\nパスワードロックを使用すると、Ferdiの起動時、または自分で左下のロックボタンを押すかショートカット{lockShortcut}でFerdiをロックしたときに、その都度パスワードの入力が求められます。", + "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}.", "settings.app.lockedPassword": "パスワード", - "settings.app.lockedPasswordInfo": "覚えられるパスワードを設定するようにしてください。\nパスワードを紛失すると、Ferdiの再インストールが必要になります。", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "変更には再起動が必要です", "settings.app.scheduledDNDInfo": "集中モードのスケジュールを有効にすると、Ferdiからの通知を受け取らない時間帯を設定することができます。", "settings.app.scheduledDNDTimeInfo": "24時間形式で入力してください。終了時刻を開始時刻よりも早く設定すると(例: 17:00開始、9:00終了)、集中モードを一晩中有効にできます。", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "FerdiはスペルチェックにmacOSシステムのスペルチェッカーを使用しています。スペルチェッカーでチェックする言語を変更するには、macOSのシステム環境設定から行ってください。", "settings.app.subheadlineCache": "キャッシュ", "settings.app.subheadlineFerdiProfile": "Ferdiプロフィール", - "settings.app.todoServerInfo": "このサーバーは「Ferdi ToDo」の機能に使用されます。", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Ferdiの翻訳作業にご協力をお願いします。", "settings.app.universalDarkModeInfo": "ユニバーサルダークモードは、現在ダークモードがサポートされていないサービス向けにダークモードを動的に生成します。", "settings.app.updateStatusAvailable": "更新が見つかりました。ダウンロードしています...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "コミュニティのサードパーティレシピ", "settings.recipes.customService.headline.customRecipes": "カスタムサードパーティレシピ", "settings.recipes.customService.headline.devRecipes": "開発サービスのレシピ", - "settings.recipes.customService.intro": "カスタムサービスを追加するには、サービスレシピを以下にコピーします:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "開発者ドキュメント", - "settings.recipes.customService.openFolder": "フォルダーを開く", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "利用可能なサービス", "settings.recipes.missingService": "使いたいサービスが一覧にありませんか?", - "settings.recipes.nothingFound": "残念ながら、検索語に一致するサービスはありませんでした。しかし、「カスタムウェブサイト」のオプションを使用して追加することができます。新しいバージョンのFerdiではウェブサイトで紹介されているような、より多くのサービスが追加されていることがあります。それらの新しいサービスを追加するには、Ferdiのアップデートをご検討ください。", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "サービスが追加されました", "settings.searchService": "サービスを検索", "settings.service.error.goBack": "サービスに戻る", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "ダークリーダーの明るさ", "settings.service.form.darkReaderContrast": "ダークリーダーのコントラスト", "settings.service.form.darkReaderSepia": "ダークリーダーのセピア", - "settings.service.form.deleteButton": "サービスの削除", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "{name}を編集", "settings.service.form.enableAudio": "オーディオを有効にする", "settings.service.form.enableBadge": "未読件数の通知バッジを表示する", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "user.jsを開く", "settings.service.form.proxy.headline": "HTTP/HTTPSのプロキシ設定", "settings.service.form.proxy.host": "プロキシサーバー/IP", - "settings.service.form.proxy.info": "プロキシ設定はFerdi アカウントで同期されません。", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "プロキシ設定を有効にする", - "settings.service.form.proxy.password": "パスワード(任意)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "ポート", "settings.service.form.proxy.restartInfo": "プロキシ設定を変更してから、Ferdiを再起動してください", - "settings.service.form.proxy.user": "ユーザー名(任意)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "ユーザーファイルがウェブページに挿入されるので、任意の方法でサービスをカスタマイズできます。 ユーザーファイルはローカルにのみ保存され、同じアカウントを使用する他のコンピューターには転送されません。", "settings.service.form.saveButton": "サービスの保存", "settings.service.form.tabHosted": "ホスト", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdiはオープンソースでコミュニティ主導開発のアプリケーションです。

    これを可能にしてくださった皆様に感謝します:

    ", "settings.supportFerdi.bannerText": "Ferdiの改良の手助けをしたいですか?", "settings.supportFerdi.headline": "バージョン情報", - "settings.supportFerdi.openSurvey": "アンケートを開く", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Ferdiの開発を寄付で応援したい場合、以下の方法でお願いします。", "settings.supportFerdi.textDonationAnd": "と", "settings.supportFerdi.textExpenses": "ボランティアがかなりの部分の作業を行っていますが、私たちもサーバー代と証明書を支払わなくてはなりません。コミュニティと同様に、私たちの収支は全て公開されています。以下を参照してください。", "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors", - "settings.supportFerdi.textListContributors": "全ての貢献者のリスト", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "ここ", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "支援はいつでも歓迎です。私たちが必要としている支援のリストがあります", @@ -377,7 +365,7 @@ "settings.team.contentHeadline": "Franzのチーム管理", "settings.team.copy": "Franzチーム管理では、複数のユーザーのFranzサブスクリプションを管理できます。Franzプレミアムのサブスクリプションは、Ferdiを使用する上で何の利点もないことに留意してください。レガシーなFranzのチームを管理し、アカウント管理機能を維持するためだけに、チーム管理にアクセスできるようになっています。", "settings.team.headline": "チーム", - "settings.team.intro": "現在Franzサーバーを使用しているため、チーム管理にアクセスできます。", + "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", "settings.team.manageAction": "meetfranz.com でチームを管理", "settings.team.teamsUnavailable": "チームは利用できません", "settings.team.teamsUnavailableInfo": "チームは現在、Franzサーバーを使用していて、Franzプロフェッショナルを契約した方のみが利用できます。チームを使用するには、サーバーを https://api.franzinfra.com に変更してください。", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "非営利", "settings.user.form.currentPassword": "現在のパスワード", "settings.user.form.email": "メールアドレス", - "settings.user.form.firstname": "名", - "settings.user.form.lastname": "姓", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "新しいパスワード", "settings.workspace.add.form.name": "氏名", "settings.workspace.add.form.submitButton": "ワークスペースを作成", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "もう一度試す", "settings.workspaces.updatedInfo": "変更内容が保存されました", "settings.workspaces.workspaceFeatureHeadline": "ヒント: Ferdiワークスペースの紹介", - "settings.workspaces.workspaceFeatureInfo": "Ferdiワークスペースを使用すると、すぐに重要なことに集中できます。異なるサービス群を設定し、いつでも簡単に切り替えることができます。 必要なサービスを、必要な時に、必要な場所でご利用いただけますので、仕事に集中することも、好きな時に仕事から離れることも可能です。", + "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.", "settings.workspaces.workspacesRequestFailed": "ワークスペースを読み込めませんでした", "setupAssistant.headline": "始めましょう", "setupAssistant.subheadline": "最も使用されているサービスの中から選択し、すぐにメッセージングの最新のやりとりに戻ってください。", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "通知とオーディオを有効化", "signup.email.label": "メールアドレス", "signup.emailDuplicate": "このメールアドレスは既に登録されています", - "signup.firstname.label": "名", + "signup.firstname.label": "First Name", "signup.headline": "アカウントの作成", - "signup.lastname.label": "姓", + "signup.lastname.label": "Last Name", "signup.legal.info": "Ferdiアカウントを作成することで、以下の規約に同意したものとみなします", "signup.legal.privacy": "プライバシーについて", "signup.legal.terms": "利用規約", @@ -430,23 +418,23 @@ "signup.password.label": "パスワード", "signup.submit.label": "アカウントの作成", "tabs.item.confirmDeleteService": "本当に{serviceName}サービスを削除しますか?", - "tabs.item.deleteService": "サービスの削除", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "オーディオの無効化", "tabs.item.disableDarkMode": "ダークモードを無効にする", "tabs.item.disableNotifications": "通知を無効にする", - "tabs.item.disableService": "サービスを無効にする", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "オーディオを有効にする", "tabs.item.enableDarkMode": "ダークモードを有効にする", "tabs.item.enableNotification": "通知を有効にする", "tabs.item.enableService": "サービスを有効にする", - "tabs.item.hibernateService": "サービスの休止", + "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "再読み込み", - "tabs.item.wakeUpService": "サービスの起動", - "validation.email": "{field}は正しくありません", - "validation.minLength": "{field}は少なくとも{length}文字以上でなければなりません", + "tabs.item.wakeUpService": "Wake up service", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "少なくとも1つは必要です", - "validation.required": "{field}は必須です", - "validation.url": "{field}は正しいURLではありません", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "戻る", "webControls.forward": "次へ", "webControls.goHome": "ホーム", @@ -454,12 +442,12 @@ "webControls.reload": "再読み込み", "welcome.loginButton": "アカウントにログイン", "welcome.signupButton": "無料アカウントを作成", - "workspaceDrawer.addNewWorkspaceLabel": "新しいワークスペースを追加する", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "すべてのサービス", "workspaceDrawer.headline": "ワークスペース", "workspaceDrawer.item.contextMenuEdit": "編集", "workspaceDrawer.item.noServicesAddedYet": "まだサービスが追加されていません", - "workspaceDrawer.workspaceFeatureInfo": "

    Ferdiワークスペースを使用すると、すぐに重要なことに集中できます。異なるサービス群を設定し、いつでも簡単に切り替えることができます。

    必要なサービスを、必要な時に、必要な場所でご利用いただけますので、仕事に集中することも、好きな時に仕事から離れることも可能です。

    ", - "workspaceDrawer.workspacesSettingsTooltip": "ワークスペースの設定を編集する", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "切り替え先:" } diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json index cc5a04aff..f5b4bc6ba 100644 --- a/src/i18n/locales/ka.json +++ b/src/i18n/locales/ka.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "ჩატვირთვა", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "კერძო სერვერი", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Ferdi-ის ონლაინ სერვისთან დაკავშირება ვერ მოხერხდა", - "global.cancel": "გაუქმება", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "რედაქტირება", "global.no": "No", "global.notConnectedToTheInternet": "თქვენ არ ხართ ინტერნეტთან დაკავშირებული.", @@ -33,19 +32,19 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "პარამეტრები", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Detect language automatically", "global.spellchecking.autodetect.short": "Automatic", "global.spellchecking.language": "Spell checking language", - "global.submit": "დადასტურება", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "შემოიტანე Ferdi 4-ის სერვისები", "import.notSupportedHeadline": "სერვისები ჯერ არ არის მხარდაჭერილი Ferdi 5-ში", "import.skip.label": "I want to add services manually", - "import.submit.label": "მოწვევის გაგზავნა", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "გადატვირთეთ და დააყენეთ განახლება", @@ -75,7 +74,7 @@ "login.email.label": "მეილი", "login.headline": "შესვლა", "login.invalidCredentials": "მეილი ან პაროლი არასწორია", - "login.link.password": "პაროლის აღდგენა", + "login.link.password": "Reset password", "login.link.signup": "ანგარიშის შექმნა", "login.password.label": "Password", "login.serverLogout": "თქვენს სესიას ვადა გაუვიდა, შედით ანგარიშში ხელახლა.", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "ყველა სერვისი", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "მეილი", - "password.headline": "პაროლის აღდგენა", + "password.headline": "Reset password", "password.link.login": "შედით თქვენს ანგარიშში", "password.link.signup": "ანგარიშის შექმნა", - "password.noUser": "მომხმარებელი მითითებული მეილით ვერ მოიძებნა", - "password.successInfo": "გთხოვთ შეამოწმეთ მეილი", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "მოგესალმებით Ferdi-ზე", - "settings.account.account.editButton": "ანგარიშის მართვა", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "პროფილის განახლება", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "settings.account.headline": "ანგარიში", - "settings.account.headlineAccount": "ანგარიშის ინფორმაცია", + "settings.account.headlineAccount": "Account information", "settings.account.headlineDangerZone": "Danger Zone", - "settings.account.headlineInvoices": "ინვოისები", - "settings.account.headlinePassword": "პაროლის შეცვლა", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "პროფილის განახლება", "settings.account.successInfo": "თქვენი ცვლილებები შენახულია", "settings.account.tryReloadServices": "სცადეთ ხელახლა", "settings.account.tryReloadUserInfoRequest": "სცადეთ ხელახლა", "settings.account.userInfoRequestFailed": "მომხმარებლის ინფორმაციის ჩატვირთვა ვერ მოხერხდა", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "გადატვირთეთ და დააყენეთ განახლება", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "აჩვენეთ Ferdi სისტემის უჯრაში", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "ხელმისაწვდომი სერვისები", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "სერვისი წარმატებით დაემატა", "settings.searchService": "Search service", "settings.service.error.goBack": "სერვისებში დაბრუნება", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "სერვისის წაშლა", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "შეასწორე {name}", "settings.service.form.enableAudio": "Enable audio", "settings.service.form.enableBadge": "Show unread message badges", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "ანგარიშის შექმნა", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "სერვისის წაშლა", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Disable audio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "შეტყობინებების გამორთვა", - "tabs.item.disableService": "სერვისის გაუქმება", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Enable audio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "შეტყობინებების ჩართვა", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index dfbfd63a3..08fb903bc 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "새로고침", - "app.errorHandler.headline": "문제가 발생했습니다", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "사용자 정의 서버", "changeserver.headline": "서버 번경", "changeserver.label": "서버", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "무슨 일인가요?", "connectionLostBanner.message": "오 저런! Ferdi가 {name} 과 연결이 끊겼습니다.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "디버깅 정보 공개", "feature.nightlyBuilds.activate": "활성화", "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.", "feature.nightlyBuilds.title": "나이틀리 빌드", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "서비스를 TAB, ↑, ↓을 이용해 선택할 수 있습니다. ENTER를 이용하여 서비스를 열 수 있습니다.", "feature.quickSwitch.search": "검색...", "feature.quickSwitch.title": "빠른 검색", - "global.api.unhealthy": "Ferdi 온라인 서비스에 연결할 수 없습니다.", - "global.cancel": "취소", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "편집", "global.no": "No", "global.notConnectedToTheInternet": "인터넷에 연결할 수 없습니다.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "설정", + "global.settings": "Settings", "global.spellchecker.useDefault": "시스템 기본 사용 ({default})", "global.spellchecking.autodetect": "언어 자동 탐색", "global.spellchecking.autodetect.short": "자동", "global.spellchecking.language": "철자 검사", - "global.submit": "제출", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Ferdi 5에서 아직 지원되지 않는 서비스입니다.", "import.skip.label": "수동으로 서비스 추가", - "import.submit.label": "서비스 가져오기", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "새로운 기능", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "재시작 후 업데이트 설치", "infobar.buttonReloadServices": "서비스 재시작", "infobar.hide": "숨기기", @@ -75,7 +74,7 @@ "login.email.label": "이메일 주소", "login.headline": "로그인", "login.invalidCredentials": "이메일 또는 비밀번호가 일치하지 않습니다", - "login.link.password": "비밀번호 초기화", + "login.link.password": "Reset password", "login.link.signup": "무료 계정 생성", "login.password.label": "비밀번호", "login.serverLogout": "세션이 만료되었습니다. 다시 로그인 하세요.", @@ -117,10 +116,10 @@ "menu.help.support": "지원", "menu.help.tos": "이용 약관", "menu.services": "서비스", - "menu.services.activatePreviousService": "이전 서비스 활성화", - "menu.services.addNewService": "새로운 서비스 추가", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "홈", - "menu.services.setNextServiceActive": "다음 서비스 활성화", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Todos 허용", "menu.view": "View", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "모든 서비스", "menu.workspaces.openWorkspaceDrawer": "작업영역 서랍 열기", "password.email.label": "이메일 주소", - "password.headline": "비밀번호 초기화", + "password.headline": "Reset password", "password.link.login": "계정에 로그인하세요.", "password.link.signup": "무료 계정 생성", - "password.noUser": "해당 이메일을 사용하는 유저를 찾을 수 없습니다.", - "password.successInfo": "이메일을 확인해 주세요.", - "pricing.features.accountSync": "계정 동기화", - "pricing.features.customWebsites": "사용자 지정 웹사이트 추가", - "pricing.features.desktopNotifications": "데스크탑 알림", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "서비스 프록시", - "pricing.features.spellchecker": "철자 검사 지원", - "pricing.features.teamManagement": "팀 관리", - "pricing.features.thirdPartyServices": "써드파티 서비스 설치", - "pricing.features.unlimitedServices": "무제한 서비스 추가", - "pricing.features.workspaces": "작업 공간", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "재시작 {name}", "service.crashHandler.autoReload": "{seconds} 초내에 자동으로 {name} 을 복원합니다.", "service.crashHandler.headline": "이런!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "계정없이 Ferdi 사용하기", "services.welcome": "Ferdi에 오신 것을 환영합니다.", - "settings.account.account.editButton": "계정 편집", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "계정을 사용할 수 없습니다.", "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.", "settings.account.buttonSave": "프로필 수정", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "받은 이메일에 있는 링크를 통해 계정 삭제를 확인했다면 계정과 데이터는 복구되지 않습니다.", "settings.account.deleteInfo": "더 이상 Ferdi 계정이 필요하지 않다면 여기서 모든 관련한 데이터와 계정을 삭제할 수 있습니다.", "settings.account.headline": "계정", - "settings.account.headlineAccount": "계정 정보", - "settings.account.headlineDangerZone": "위험 설정", - "settings.account.headlineInvoices": "청구서", - "settings.account.headlinePassword": "비밀번호 변경", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "프로필 수정", "settings.account.successInfo": "변경사항이 저장되었습니다.", "settings.account.tryReloadServices": "다시 시도하세요.", "settings.account.tryReloadUserInfoRequest": "다시 시도하세요.", "settings.account.userInfoRequestFailed": "사용자 정보를 불러올 수 없습니다.", - "settings.account.yourLicense": "Ferdi 라이센스", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "캐시 지우기", "settings.app.buttonInstallUpdate": "재시작 후 업데이트 설치", @@ -225,7 +213,7 @@ "settings.app.form.enableLock": "암호 잠금 활성화", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "맞춤법 검사 활성화", - "settings.app.form.enableSystemTray": "Ferdi 시스템 트레이에 표시", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "하이버네이션 전략", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "알림이 비활성화잉ㄹ 때 읽지 않은 메세지 배지 표시", "settings.app.form.startMinimized": "최소화 된 상태로 시작", "settings.app.form.universalDarkMode": "전체 다크 모드 활성화", - "settings.app.form.useTouchIdToUnlock": "TouchID로 Ferdi 여는 것을 허용", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "고급", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "공식 지우너 언어는 영어와 독일어이며 이외 언어들은 커뮤니티에 의해 번역되고 있습니다.", "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}.", "settings.app.lockedPassword": "비밀번호", - "settings.app.lockedPasswordInfo": "기억할 수 있는 비밀번호로 설정해주세요.\n만약 비밀번호를 잃어버리면 Ferdi 재설치를 해야합니다.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "변경사항을 적용하기 위해 재시작", "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.", "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.", @@ -296,10 +284,10 @@ "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "개발 문서", - "settings.recipes.customService.openFolder": "폴더 열기", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "사용가능 한 서비스", "settings.recipes.missingService": "서비스가 보이지 않습니까?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "서비스가 성공적으로 추가되었습니다.", "settings.searchService": "서비스 찾기", "settings.service.error.goBack": "서비스로 돌아가기", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "서비스 삭제", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "편집 {name}", "settings.service.form.enableAudio": "오디오 활성화", "settings.service.form.enableBadge": "읽지 않은 메세지 배지 표시", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "user.js 열기", "settings.service.form.proxy.headline": "HTTP/HTTPS 프록시 설정", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "프록시 설정이 Ferdi 서버와 동기화되지 않았습니다.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "프록시 사용하기", - "settings.service.form.proxy.password": "비밀번호 (선택)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "포트", "settings.service.form.proxy.restartInfo": "프록시 설정 변경 후 Ferdi를 재시작 해주세요.", - "settings.service.form.proxy.user": "사용자 옵션", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "서비스 저장", "settings.service.form.tabHosted": "Hosted", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi is an open-source and a community-lead application.

    Thanks to the people who make this possbile:

    ", "settings.supportFerdi.bannerText": "Ferdi 서비스 향상에 도움을 주기를 원하십니까?", "settings.supportFerdi.headline": "Ferdi에 대해", - "settings.supportFerdi.openSurvey": "설문조사 열기", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", "settings.supportFerdi.textDonationAnd": "그리고", "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", "settings.supportFerdi.textGitHubSponsors": "깃허브 후원자", - "settings.supportFerdi.textListContributors": "기여자 전체 목록", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "here", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "비영리", "settings.user.form.currentPassword": "현재 비밀번호", "settings.user.form.email": "이메일", - "settings.user.form.firstname": "이름(성 제외)", - "settings.user.form.lastname": "성", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "새로운 비밀번호", "settings.workspace.add.form.name": "이름", "settings.workspace.add.form.submitButton": "새로운 작업영역 생성하기", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "알림과 오디오 활성화", "signup.email.label": "이메일 주소", "signup.emailDuplicate": "해당 이메일을 가진 사용자가 이미 존재합니다", - "signup.firstname.label": "이름(성 제외)", + "signup.firstname.label": "First Name", "signup.headline": "회원 가입", - "signup.lastname.label": "성", + "signup.lastname.label": "Last Name", "signup.legal.info": "By creating a Ferdi account you accept the", "signup.legal.privacy": "개인정보보호정책", "signup.legal.terms": "이용 약관", @@ -430,11 +418,11 @@ "signup.password.label": "비밀번호", "signup.submit.label": "계정 만들기", "tabs.item.confirmDeleteService": "{serviceName} 서비스를 정말로 삭제하시겠습니까?", - "tabs.item.deleteService": "서비스 삭제", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "오디오 비활성화", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "알림 비활성화", - "tabs.item.disableService": "서비스 비활성화", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "오디오 활성화", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "알림 허용", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "새로고침", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} 는 유효하지 않습니다.", - "validation.minLength": "{field} 는 최소한 {length} 보다 길어야 합니다.", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "적어도 하나는 필요 합니다.", - "validation.required": "{field} 는 필수입니다.", - "validation.url": "{field} 는 유효하지 않은 URL입니다.", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "뒤로가기", "webControls.forward": "앞으로 가기", "webControls.goHome": "홈", @@ -454,12 +442,12 @@ "webControls.reload": "새로고침", "welcome.loginButton": "계정에 로그인하세요.", "welcome.signupButton": "무료 계정 생성", - "workspaceDrawer.addNewWorkspaceLabel": "새 작업영역을 만듭니다.", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "모든 서비스", "workspaceDrawer.headline": "작업 공간", "workspaceDrawer.item.contextMenuEdit": "편집", "workspaceDrawer.item.noServicesAddedYet": "추가된 서비스가 없습니다.", "workspaceDrawer.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.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "작업공간 설정 편집", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Switching to" } diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json index b9ca228ba..4c22a25bc 100644 --- a/src/i18n/locales/nl-BE.json +++ b/src/i18n/locales/nl-BE.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Herladen", - "app.errorHandler.headline": "Er ging iets mis", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Aangepaste server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi services", - "global.cancel": "Annuleren", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Bewerken", "global.no": "No", "global.notConnectedToTheInternet": "Je hebt geen internet verbinding.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Instellingen", + "global.settings": "Settings", "global.spellchecker.useDefault": "Gebruik Systeemstandaard ({default})", "global.spellchecking.autodetect": "Taal automatisch herkennen", "global.spellchecking.autodetect.short": "Automatisch", "global.spellchecking.language": "Taal spellingscontrole", - "global.submit": "Verzenden", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importeer je Ferdi 4 services", "import.notSupportedHeadline": "De volgende services worden nog niet ondersteund in Ferdi 5", "import.skip.label": "Ik wil services handmatig toevoegen", - "import.submit.label": "Importeer services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Wat is er nieuw?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Opnieuw opstarten & update installeren", "infobar.buttonReloadServices": "Services opnieuw laden", "infobar.hide": "Verbergen", @@ -75,7 +74,7 @@ "login.email.label": "E-mailadres", "login.headline": "Inloggen", "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig", - "login.link.password": "Wachtwoord resetten", + "login.link.password": "Reset password", "login.link.signup": "Maak een gratis account aan", "login.password.label": "Password", "login.serverLogout": "De sessie is verlopen, log opnieuw in alsjeblieft.", @@ -117,10 +116,10 @@ "menu.help.support": "Ondersteuning", "menu.help.tos": "Servicevoorwaarden", "menu.services": "Services", - "menu.services.activatePreviousService": "Vorige dienst activeren", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Volgende dienst activeren", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Enable Todos", "menu.view": "Weergave", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Alle services", "menu.workspaces.openWorkspaceDrawer": "Werkruimtepagina openen", "password.email.label": "E-mailadres", - "password.headline": "Wachtwoord resetten", + "password.headline": "Reset password", "password.link.login": "Log in op je account", "password.link.signup": "Maak een gratis account aan", - "password.noUser": "Geen gebruiker gevonden met dat e-mailadres", - "password.successInfo": "Controleer alsjeblieft je e-mail", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Werkruimten", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "{naam} herladen", "service.crashHandler.autoReload": "Ga proberen om {name} te herstellen over {seconds} seconden", "service.crashHandler.headline": "Oh nee!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Welkom bij Ferdi", - "settings.account.account.editButton": "Account bewerken", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Profiel bijwerken", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "U heeft een email ontvangen met een bevestiginslink om uw account te verwijderen. Uw account en de bijhorende gegevens kunnen niet meer worden herstel na deze actie!", "settings.account.deleteInfo": "Indien u uw Ferdi account niet meer nodig heeft, kan u hier uw account en alle gerelateerde gegevens verwijderen.", "settings.account.headline": "Account", - "settings.account.headlineAccount": "Account informatie", - "settings.account.headlineDangerZone": "Gevarenzone", - "settings.account.headlineInvoices": "Facturen", - "settings.account.headlinePassword": "Wijzig wachtwoord", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Profiel bijwerken", "settings.account.successInfo": "Je wijzigingen zijn opgeslagen", "settings.account.tryReloadServices": "Probeer opnieuw", "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw", "settings.account.userInfoRequestFailed": "Kon gebruikersinformatie niet laden", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Cache wissen", "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Dark Mode aanzetten", "settings.app.form.enableGPUAcceleration": "GPU Acceleratie Activeren", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Spellingcontrole inschakelen", - "settings.app.form.enableSystemTray": "Toon Ferdi in de systeembalk", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Beschikbare services", "settings.recipes.missingService": "Mist er een service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd", "settings.searchService": "Service zoeken", "settings.service.error.goBack": "Terug naar services", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Service verwijderen", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Bewerk {name}", "settings.service.form.enableAudio": "Audio inschakelen", "settings.service.form.enableBadge": "Toon badges met ongelezen berichten", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Instellingen", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy instellingen worden niet gesynchroniseerd met de Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Proxy gebruiken", - "settings.service.form.proxy.password": "Wachtwoord (optioneel)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Poort", "settings.service.form.proxy.restartInfo": "Start Ferdi opnieuw op na het aanpassen van proxy Instellingen.", - "settings.service.form.proxy.user": "Gebruiker (optioneel)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Service opslaan", "settings.service.form.tabHosted": "Gehost", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Non-Profit", "settings.user.form.currentPassword": "Huidig wachtwoord", "settings.user.form.email": "Email", - "settings.user.form.firstname": "Voornaam", - "settings.user.form.lastname": "Achternaam", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nieuw wachtwoord", "settings.workspace.add.form.name": "Naam", "settings.workspace.add.form.submitButton": "Maak werkruimte aan", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Berichten & geluid inschakelen", "signup.email.label": "E-mailadres", "signup.emailDuplicate": "Er bestaat al een gebruiker met dat e-mailadres", - "signup.firstname.label": "Voornaam", + "signup.firstname.label": "First Name", "signup.headline": "Registreren", - "signup.lastname.label": "Achternaam", + "signup.lastname.label": "Last Name", "signup.legal.info": "Door een account aan te maken aanvaard je de", "signup.legal.privacy": "Privacyverklaring", "signup.legal.terms": "Servicevoorwaarden", @@ -430,11 +418,11 @@ "signup.password.label": "Password", "signup.submit.label": "Account aanmaken", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Service verwijderen", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Audio uitschakelen", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Notificaties uitschakelen", - "tabs.item.disableService": "Service uitschakelen", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Audio inschakelen", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Notificaties aanzetten", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Herladen", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} is niet geldig", - "validation.minLength": "{field} moet minimaal {length} karakters lang zijn", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Ten minste één is vereist", - "validation.required": "{field} is vereist", - "validation.url": "{field} is niet een geldige URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", @@ -454,12 +442,12 @@ "webControls.reload": "Herladen", "welcome.loginButton": "Inloggen op je account", "welcome.signupButton": "Maak een gratis account aan", - "workspaceDrawer.addNewWorkspaceLabel": "Voeg een nieuwe werkruimte toe", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Alle services", "workspaceDrawer.headline": "Werkruimten", "workspaceDrawer.item.contextMenuEdit": "bewerken", "workspaceDrawer.item.noServicesAddedYet": "Nog geen diensten toegevoegd", "workspaceDrawer.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.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Pas werkruimte instellingen aan", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Overschakelen naar" } diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json index eac72627f..1d389c4b5 100644 --- a/src/i18n/locales/nl.json +++ b/src/i18n/locales/nl.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Herladen", - "app.errorHandler.headline": "Er is iets mis gegaan", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Aangepaste server", "changeserver.headline": "Server wijzigen", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Wat gebeurde er?", "connectionLostBanner.message": "Oh nee! Ferdi heeft de verbinding met {name} verloren.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Foutopsporingsinformatie publiceren", "feature.nightlyBuilds.activate": "Activeren", "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.", "feature.nightlyBuilds.title": "Nachtelijke builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Selecteer een service met TAB, ↑ en ↓. Open een service met ENTER.", "feature.quickSwitch.search": "Zoeken...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi-services.", - "global.cancel": "Annuleer", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Bewerk", "global.no": "No", "global.notConnectedToTheInternet": "U bent niet verbonden met het internet.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Instellingen", + "global.settings": "Settings", "global.spellchecker.useDefault": "Gebruik systeemstandaard ({default})", "global.spellchecking.autodetect": "Taal automatisch herkennen", "global.spellchecking.autodetect.short": "Automatisch", "global.spellchecking.language": "Taal voor spellingcontrole", - "global.submit": "Verzenden", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importeer uw Ferdi 4-services", "import.notSupportedHeadline": "Services die (nog) niet ondersteund worden in Ferdi 5", "import.skip.label": "Ik wil diensten handmatig toevoegen", - "import.submit.label": "Importeer services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Wat is er nieuw?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Opnieuw opstarten & update installeren", "infobar.buttonReloadServices": "Services opnieuw laden", "infobar.hide": "Verbergen", @@ -75,7 +74,7 @@ "login.email.label": "E-mailadres", "login.headline": "Inloggen", "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig", - "login.link.password": "Wachtwoord vergeten", + "login.link.password": "Reset password", "login.link.signup": "Maak een gratis account aan", "login.password.label": "Wachtwoord", "login.serverLogout": "De sessie is verlopen, log alsjeblieft opnieuw in.", @@ -117,10 +116,10 @@ "menu.help.support": "Ondersteuning", "menu.help.tos": "Servicevoorwaarden", "menu.services": "Services", - "menu.services.activatePreviousService": "Activeer vorige service", - "menu.services.addNewService": "Nieuwe service toevoegen", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Activeer volgende service", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Taken", "menu.todos.enableTodos": "Enable Todos", "menu.view": "Weergave", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Alle services", "menu.workspaces.openWorkspaceDrawer": "Werkruimtepagina openen", "password.email.label": "E-mailadres", - "password.headline": "Wachtwoord vergeten", + "password.headline": "Reset password", "password.link.login": "Log in op je account", "password.link.signup": "Maak een gratis account aan", - "password.noUser": "Geen gebruiker bekend met dat e-mailadres", - "password.successInfo": "Controleer je e-mail", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker ondersteuning", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Installeer diensten van derden", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Werkruimtes", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Laad {name} opnieuw", "service.crashHandler.autoReload": "Bezig om {name} te herstellen over {seconds} seconden", "service.crashHandler.headline": "Oh nee!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Welkom bij Ferdi", - "settings.account.account.editButton": "Bewerk account", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Update profiel", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Je hebt een e-mail ontvangen met een link om het verwijderen van je account te bevestigen. Je accountgegevens en -data kunnen na verwijderen niet meer worden teruggehaald!", "settings.account.deleteInfo": "Wanneer je je Ferdi-account niet langer wilt gebruiken, kun je je account en alle gerelateerde data verwijderen.", "settings.account.headline": "Account", - "settings.account.headlineAccount": "Accountinformatie", - "settings.account.headlineDangerZone": "Gevarenzone", - "settings.account.headlineInvoices": "Facturen", - "settings.account.headlinePassword": "Wijzig wachtwoord", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Update profiel", "settings.account.successInfo": "Je wijzigingen zijn opgeslagen", "settings.account.tryReloadServices": "Probeer opnieuw", "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw", "settings.account.userInfoRequestFailed": "Kon gebruikersinformatie niet laden", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Cache legen", "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Dark mode aanzetten", "settings.app.form.enableGPUAcceleration": "Schakel videokaart-acceleratie in ", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Zet spellingcontrole aan", - "settings.app.form.enableSystemTray": "Pictogram voor Ferdi in systeemvak tonen", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Ferdi spreekt officieel Engels en Duits. Alle andere talen worden beheerd door de community.", "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}.", "settings.app.lockedPassword": "Wachtwoord", - "settings.app.lockedPasswordInfo": "Zorg ervoor dat je een wachtwoord instelt dat je niet vergeet.\nAls je dit wachtwoord verliest, moet je Ferdi opnieuw installeren.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Deze wijziging heeft een herstart nodig", "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.", "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.", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Beschikbare services", "settings.recipes.missingService": "Mis je een service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd", "settings.searchService": "Zoek service", "settings.service.error.goBack": "Terug naar services", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Verwijder service", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Bewerk {name}", "settings.service.form.enableAudio": "Audio inschakelen", "settings.service.form.enableBadge": "Toon badges met ongelezen berichten", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy instellingen", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy instellingen worden niet gesynchroniseerd met de Ferdi servers", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Proxy gebruiken", - "settings.service.form.proxy.password": "Wachtwoord (optioneel)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Poort", "settings.service.form.proxy.restartInfo": "Start Ferdi opnieuw na het aanpassen van proxy instellingen.", - "settings.service.form.proxy.user": "Gebruiker (optioneel)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Service opslaan", "settings.service.form.tabHosted": "Gehost", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Non-Profit", "settings.user.form.currentPassword": "Huidige wachtwoord", "settings.user.form.email": "E-mailadres", - "settings.user.form.firstname": "Voornaam", - "settings.user.form.lastname": "Achternaam", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nieuw wachtwoord", "settings.workspace.add.form.name": "Naam", "settings.workspace.add.form.submitButton": "Maak werkruimte aan", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Probeer opnieuw", "settings.workspaces.updatedInfo": "Je wijzigingen zijn opgeslagen", "settings.workspaces.workspaceFeatureHeadline": "Less is More: Zie hier Ferdi Werkruimtes", - "settings.workspaces.workspaceFeatureInfo": "Ferdi werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van services aan en schakel wanneer je wilt tussen de verschillende sets. Jij beslist welke services je wanneer en waar nodig hebt. Zo helpen wij jou je focus te behouden - of net zo gemakkelijk te switchen van werk naar ontspanning.", + "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.", "settings.workspaces.workspacesRequestFailed": "Kan jouw werkruimtes niet laden", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Berichten & geluid inschakelen", "signup.email.label": "E-mailadres", "signup.emailDuplicate": "Er bestaat al een gebruiker met dat e-mailadres", - "signup.firstname.label": "Voornaam", + "signup.firstname.label": "First Name", "signup.headline": "Aanmelden", - "signup.lastname.label": "Achternaam", + "signup.lastname.label": "Last Name", "signup.legal.info": "Door een Ferdi-account aan te maken ga je akkoord met de", "signup.legal.privacy": "Privacyvoorwaarden", "signup.legal.terms": "Gebruiksvoorwaarden", @@ -430,11 +418,11 @@ "signup.password.label": "Wachtwoord", "signup.submit.label": "Account aanmaken", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Verwijder service", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Audio uitschakelen", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Meldingen uitschakelen", - "tabs.item.disableService": "Service uitschakelen", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Audio inschakelen", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Meldingen inschakelen", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Herladen", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} is niet geldig", - "validation.minLength": "{field} dient minimaal {length} karakters lang te zijn", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Minstens één vereist", - "validation.required": "{field} is vereist", - "validation.url": "{field} is geen geldige URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Terug", "webControls.forward": "Forward", "webControls.goHome": "Home", @@ -454,12 +442,12 @@ "webControls.reload": "Herladen", "welcome.loginButton": "Log in op je account", "welcome.signupButton": "Maak een gratis account aan", - "workspaceDrawer.addNewWorkspaceLabel": "Voeg een nieuwe werkruimte toe", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Alle services", "workspaceDrawer.headline": "Werkruimtes", "workspaceDrawer.item.contextMenuEdit": "bewerken", "workspaceDrawer.item.noServicesAddedYet": "Nog geen services toegevoegd", - "workspaceDrawer.workspaceFeatureInfo": "Ferdi werkruimtes laat je aandacht geven aan wat nu belangrijk is. Maak verschillende sets van services aan en schakel wanneer je wilt tussen de verschillende sets. Jij beslist welke services je wanneer en waar nodig hebt. Zo helpen wij jou je focus te behouden - of net zo gemakkelijk te switchen van werk naar ontspanning.", - "workspaceDrawer.workspacesSettingsTooltip": "Werkruimte instellingen aanpassen", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Overschakelen naar" } diff --git a/src/i18n/locales/no.json b/src/i18n/locales/no.json index 548cba3ce..b9fd741d1 100644 --- a/src/i18n/locales/no.json +++ b/src/i18n/locales/no.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Last inn på nytt", - "app.errorHandler.headline": "Noe gikk galt", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Egendefinert tjener", "changeserver.headline": "Bytt tjener", "changeserver.label": "Tjener", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Hva skjedde?", "connectionLostBanner.message": "Å nei! Ferdi mistet forbindelsen til {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publiser feilsøkingsinformasjon", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Velg en tjeneste med TAB, ↑ og ↓. Åpne en tjeneste med ENTER.", "feature.quickSwitch.search": "Søk...", "feature.quickSwitch.title": "Hurtigbytte", - "global.api.unhealthy": "Kan ikke koble til Ferdi online-tjenester", - "global.cancel": "Avbryt", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Rediger", "global.no": "No", "global.notConnectedToTheInternet": "Du er ikke koblet til Internett.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Innstillinger", + "global.settings": "Settings", "global.spellchecker.useDefault": "Bruk systemstandarden ({default})", "global.spellchecking.autodetect": "Oppdag språk automatisk", "global.spellchecking.autodetect.short": "Automatisk", "global.spellchecking.language": "Språk for stavekontroll", - "global.submit": "Send", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importer Ferdi 4-tjenestene dine", "import.notSupportedHeadline": "Tjenester som ikke støttes enda i Ferdi 5", "import.skip.label": "Jeg ønsker å legge til tjenester manuelt", - "import.submit.label": "Importer tjenester", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Det oppstod en feil under forsøket med en autentisert forespørsel. Prøv å logge ut og inn igjen om denne feilen vedvarer.", - "infobar.buttonChangelog": "Hva er nytt?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Start på nytt og installer oppdatering", "infobar.buttonReloadServices": "Last inn tjenestene på nytt", "infobar.hide": "Skjul", @@ -75,7 +74,7 @@ "login.email.label": "E-postadresse", "login.headline": "Logg inn", "login.invalidCredentials": "E-posten eller passordet er ikke gyldig", - "login.link.password": "Tilbakestill passord", + "login.link.password": "Reset password", "login.link.signup": "Opprett en gratis konto", "login.password.label": "Passord", "login.serverLogout": "Din økt er utløpet, vennligst logg inn igjen.", @@ -117,10 +116,10 @@ "menu.help.support": "Brukerstøtte", "menu.help.tos": "Vilkår for bruk", "menu.services": "Tjenester", - "menu.services.activatePreviousService": "Aktiver forrige tjeneste", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Hjem", - "menu.services.setNextServiceActive": "Aktiver neste tjeneste", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Gjøremål", "menu.todos.enableTodos": "Aktiver gjøremål", "menu.view": "Vis", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Alle tjenester", "menu.workspaces.openWorkspaceDrawer": "Åpne skuff for arbeidsområder", "password.email.label": "E-postadresse", - "password.headline": "Tilbakestill passord", + "password.headline": "Reset password", "password.link.login": "Logg inn på kontoen din", "password.link.signup": "Opprett en gratis konto", - "password.noUser": "Ingen bruker med den e-postadressen ble funnet", - "password.successInfo": "Vennligst sjekk e-posten din", - "pricing.features.accountSync": "Konto synkronisering", - "pricing.features.customWebsites": "Legg til egendefinerte nettsteder", - "pricing.features.desktopNotifications": "Skrivebord varsler", - "pricing.features.onPremise": "On-premise og andre selvbetjente tjenester", - "pricing.features.recipes": "Velg fra mer enn 70 tjenester", - "pricing.features.serviceProxies": "Mellomtjenere for tjenester", - "pricing.features.spellchecker": "Støtte for stavekontroll", - "pricing.features.teamManagement": "Team-administrasjon", - "pricing.features.thirdPartyServices": "Installer tredjepartstjenester", - "pricing.features.unlimitedServices": "Legg til ubegrenset antall tjenester", - "pricing.features.workspaces": "Arbeidsområder", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Last {name} inn på nytt", "service.crashHandler.autoReload": "Prøver å automatisk gjenopprette {name} om {seconds} sekunder", "service.crashHandler.headline": "Å nei!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Bruk Ferdi uten en konto", "services.welcome": "Velkommen til Ferdi", - "settings.account.account.editButton": "Rediger konto", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Kontoen er ikke tilgjengelig", "settings.account.accountUnavailableInfo": "Du bruker Ferdi uten en konto. Hvis du ønsker å bruke Ferdi med en konto og hold tjenestene dine synkronisert på tvers av installasjoner, velg en tjener i fanen innstillinger og logg inn.", "settings.account.buttonSave": "Oppdater profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Du har mottatt en e-post med en lenke for å bekrefte sletting av kontoen din. Din konto og dine data kan ikke gjenopprettes!", "settings.account.deleteInfo": "Hvis du ikke trenger Ferdi-kontoen din lenger, så kan du slette kontoen din og alle de relaterte dataene her.", "settings.account.headline": "Konto", - "settings.account.headlineAccount": "Kontoinformasjon", - "settings.account.headlineDangerZone": "Faresone", - "settings.account.headlineInvoices": "Fakturaer", - "settings.account.headlinePassword": "Endre passord", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Oppdater profil", "settings.account.successInfo": "Dine endringer har blitt lagret", "settings.account.tryReloadServices": "Prøv igjen", "settings.account.tryReloadUserInfoRequest": "Prøv igjen", "settings.account.userInfoRequestFailed": "Kunne ikke laste brukerinformasjonen", - "settings.account.yourLicense": "Din Ferdi lisens", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Tøm hurtiglager", "settings.app.buttonInstallUpdate": "Start på nytt og installer oppdatering", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Egendefinerte gjøremål-tjener", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "Aktiver mørkt tema", "settings.app.form.enableGPUAcceleration": "Aktiver GPU-akselerasjon", "settings.app.form.enableLock": "Aktiver passordlås", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Aktiver stavekontroll", - "settings.app.form.enableSystemTray": "Vis Ferdi i systemstatusfeltet", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Aktiver Ferdi gjøremål", "settings.app.form.hibernateOnStartup": "Hold tjenestene i dvalemodus ved oppstart", "settings.app.form.hibernationStrategy": "Dvalemodus-strategi", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Vis uleste meldingsetiketter når varsler er deaktivert", "settings.app.form.startMinimized": "Start minimert", "settings.app.form.universalDarkMode": "Aktiver universelt mørkt tema", - "settings.app.form.useTouchIdToUnlock": "Tillat å bruke TouchID for å låse opp Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Avansert", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Offisielle oversettelser er engelsk & tysk. Alle andre språk er samfunnsbaserte oversettelser.", "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}.", "settings.app.lockedPassword": "Passord", - "settings.app.lockedPasswordInfo": "Vennligst angi et passord du vil huske.\nHvis du mister dette passordet må du installere Ferdi på nytt.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Endringer krever omstart", "settings.app.scheduledDNDInfo": "Planlagt ikke-forstyrr lar deg definere en tidsperiode hvor du ikke vil få varsler fra Ferdi.", "settings.app.scheduledDNDTimeInfo": "Tider i 24-Hour-Format. Sluttiden kan være før starttiden (f.eks start 17:00, slutt 09:00) for å aktivere ikke-forstyrr over natten.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi bruker Mac'en sin innebygde stavekontroll, for å se etter skrivefeil. Hvis du vil endre språket på stavekontrollen, så kan du gjøre det under Mac'ens system-innstillinger.", "settings.app.subheadlineCache": "Hurtiglager", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Denne tjeneren vil ble brukt for \"Ferdi gjøremål\" funksjonen.", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Hjelp oss med å oversette Ferdi til ditt språk.", "settings.app.universalDarkModeInfo": "Universelt mørkt tema prøver å dynamisk generere mørke stiler for tjenester som ikke har denne støtten enda.", "settings.app.updateStatusAvailable": "Oppdatering tilgjengelig, laster ned...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Fellesskap 3. parts oppskrifter", "settings.recipes.customService.headline.customRecipes": "Tilpassede 3. parts oppskrifter", "settings.recipes.customService.headline.devRecipes": "Dine utviklingstjeneste oppskrifter", - "settings.recipes.customService.intro": "Hvis du vil legge til en egendefinert tjeneste, så kan du kopiere oppskriften for tjenesten til:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Utviklerdokumentasjon", - "settings.recipes.customService.openFolder": "Åpne mappe", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Tilgjengelige tjenester", "settings.recipes.missingService": "Mangler en tjeneste?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Tjenesten ble vellykket lagt til", "settings.searchService": "Søk etter tjeneste", "settings.service.error.goBack": "Tilbake til tjenester", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Lysstyrke for lesing i mørket", "settings.service.form.darkReaderContrast": "Kontrast for lesing i mørket", "settings.service.form.darkReaderSepia": "Sepia for lesing i mørket", - "settings.service.form.deleteButton": "Slett tjeneste", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Rediger {name}", "settings.service.form.enableAudio": "Aktiver lyd", "settings.service.form.enableBadge": "Vis uleste meldingsetiketter", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Åpne user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS mellomtjener-innstillinger", "settings.service.form.proxy.host": "Mellomtjener vert/IP", - "settings.service.form.proxy.info": "Mellomtjener-innstillinger vil ikke blir synkronisert med Ferdi tjenerne.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Bruk mellomtjener", - "settings.service.form.proxy.password": "Passord (valgfritt)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Vennligst start Ferdig på nytt etter å ha endre mellomtjener-innstillingene.", - "settings.service.form.proxy.user": "Bruker (valgfritt)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Brukerfilene dine vil bli plassert på nettsiden slik at du kan tilpasse tjenestene på alle måter du ønsker. Brukerfilene lagres bare lokalt og overføres ikke til andre datamaskiner som bruker samme konto.", "settings.service.form.saveButton": "Lagre tjeneste", "settings.service.form.tabHosted": "Selvbetjent", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Ikke-profittbasert", "settings.user.form.currentPassword": "Nåværende passord", "settings.user.form.email": "E-post", - "settings.user.form.firstname": "Fornavn", - "settings.user.form.lastname": "Etternavn", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nytt passord", "settings.workspace.add.form.name": "Navn", "settings.workspace.add.form.submitButton": "Opprett arbeidsområde", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Prøv igjen", "settings.workspaces.updatedInfo": "Dine endringer har blitt lagret", "settings.workspaces.workspaceFeatureHeadline": "Mindre er mer: Vi innfører Ferdi arbeidsområder", - "settings.workspaces.workspaceFeatureInfo": "Ferdi arbeidsområder lar deg fokusere på hva som er viktig akkurat nå. Sett opp forskjellige sett av tjenester, og veksle enkelt mellom dem når som helst. Du bestemmer hvilke tjenester du trenger når og hvor, så vi kan hjelpe deg med å bli best i spillet - eller enkelt koble av fra jobb når du måtte trenge det.", + "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.", "settings.workspaces.workspacesRequestFailed": "Kunne ikke laste dine arbeidsområder", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Aktiver varsler og lyd", "signup.email.label": "E-postadresse", "signup.emailDuplicate": "Det finnes allerede en bruker med den e-postadressen", - "signup.firstname.label": "Fornavn", + "signup.firstname.label": "First Name", "signup.headline": "Registrer deg", - "signup.lastname.label": "Etternavn", + "signup.lastname.label": "Last Name", "signup.legal.info": "Ved å opprette en Ferdi-konto godtar du", "signup.legal.privacy": "Personvernerklæring", "signup.legal.terms": "Vilkår for bruk", @@ -430,11 +418,11 @@ "signup.password.label": "Passord", "signup.submit.label": "Opprett konto", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Slett tjeneste", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Deaktiver lyd", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Deaktiver varslinger", - "tabs.item.disableService": "Deaktiver tjeneste", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Aktiver lyd", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Aktiver varsler", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Last inn på nytt", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} er ikke gyldig", - "validation.minLength": "{field} bør være minst {length} tegn", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Minst en er påkrevd", - "validation.required": "{field} er påkrevd", - "validation.url": "{field} er ikke en gyldig nettadresse", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Tilbake", "webControls.forward": "Videresend", "webControls.goHome": "Hjem", @@ -454,12 +442,12 @@ "webControls.reload": "Last inn på nytt", "welcome.loginButton": "Logg på kontoen din", "welcome.signupButton": "Opprett en gratis konto", - "workspaceDrawer.addNewWorkspaceLabel": "Opprett nytt arbeidsområde", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Alle tjenester", "workspaceDrawer.headline": "Arbeidsområder", "workspaceDrawer.item.contextMenuEdit": "rediger", "workspaceDrawer.item.noServicesAddedYet": "Ingen tjenester er lagt til ennå", - "workspaceDrawer.workspaceFeatureInfo": "

    Ferdi arbeidsområder lar deg fokusere på hva som er viktig akkurat nå. Sett opp forskjellige sett av tjenester, og veksle enkelt mellom dem når som helst.

    Du bestemmer hvilke tjenester du trenger når og hvor, så vi kan hjelpe deg med å bli best i spillet - eller enkelt koble av fra jobb når du måtte trenge det.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Rediger innstillinger for arbeidsområder", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Bytter til" } diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index ea37ec76c..d0bbe725d 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Odśwież", - "app.errorHandler.headline": "Coś poszło nie tak", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Spersonalizowany serwer", "changeserver.headline": "Zmień serwer", "changeserver.label": "Serwer", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Co się stało?", "connectionLostBanner.message": "O nie! Ferdi stracił połączenie z {name}.", "feature.basicAuth.signIn": "Zaloguj się", - "feature.debugger.title": "Opublikuj dane diagnostyczne", "feature.nightlyBuilds.activate": "Aktywuj", "feature.nightlyBuilds.info": "Kompilacje testowe to wysoce eksperymentalne wersje Ferdi, które mogą zawierać niedopracowane lub nieukończone funkcje. Te kompilacje są przewidziane głównie dla programistów testujących nowe funkcje będące w opracowaniu oraz ostateczne działanie ukończonej kompilacji. Jeśli nie masz pewności co do tej funkcji, zalecamy nie włączać wersji testowych.", "feature.nightlyBuilds.title": "Kompilacje testowe", @@ -24,7 +23,7 @@ "feature.quickSwitch.info": "Wybierz usługę naciskając TAB, ↑ oraz ↓. Otwórz usługę naciskając ENTER.", "feature.quickSwitch.search": "Szukaj...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Nie można połączyć się z usługami Ferdi online", + "global.api.unhealthy": "Can't connect to Ferdi online services", "global.cancel": "Anuluj", "global.edit": "Edytuj", "global.no": "Nie", @@ -45,9 +44,9 @@ "import.headline": "Importuj usługi Ferdi 4", "import.notSupportedHeadline": "Usługi, które nie są jeszcze obsługiwane w Ferdi 5", "import.skip.label": "Chcę dodać usługi samodzielnie", - "import.submit.label": "Zaimportuj usługi", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Pojawiły się błędy podczas próby uwierzytelniania. Proszę spróbuj się wylogować i zalogować ponownie, jeśli ten błąd będzie się powtarzał.", - "infobar.buttonChangelog": "Co nowego?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizację", "infobar.buttonReloadServices": "Odśwież usługi", "infobar.hide": "Ukryj", @@ -75,7 +74,7 @@ "login.email.label": "Adres email", "login.headline": "Zaloguj się", "login.invalidCredentials": "Adres email lub hasło są błędne", - "login.link.password": "Zresetuj hasło", + "login.link.password": "Reset password", "login.link.signup": "Załóż darmowe konto", "login.password.label": "Hasło", "login.serverLogout": "Twoja sesja wygasła, zaloguj się ponownie.", @@ -117,10 +116,10 @@ "menu.help.support": "Wsparcie", "menu.help.tos": "Warunki użytkowania", "menu.services": "Usługi", - "menu.services.activatePreviousService": "Poprzednia usługa", - "menu.services.addNewService": "Dodaj nową usługę", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Strona główna", - "menu.services.setNextServiceActive": "Następna usługa", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Lista zadań", "menu.todos.enableTodos": "Włącz listę zadań", "menu.view": "Widok", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Wszystkie usługi", "menu.workspaces.openWorkspaceDrawer": "Otwórz edytor obszaru roboczego", "password.email.label": "Adres email", - "password.headline": "Zresetuj hasło", + "password.headline": "Reset password", "password.link.login": "Zaloguj się na swoje konto", "password.link.signup": "Załóż darmowe konto", - "password.noUser": "Nie znaleziono użytkownika z takim adresem email", - "password.successInfo": "Proszę sprawdzić swój email", - "pricing.features.accountSync": "Synchronizacja konta", - "pricing.features.customWebsites": "Dodawanie dowolnych stron internetowych", - "pricing.features.desktopNotifications": "Powiadomienia na pulpicie", - "pricing.features.onPremise": "Lokalne i inne hostowane usługi", - "pricing.features.recipes": "Wybierz spośród ponad 70 usług", - "pricing.features.serviceProxies": "Proxy usługi", - "pricing.features.spellchecker": "Obsługa sprawdzania pisowni", - "pricing.features.teamManagement": "Zarządzanie zespołem", - "pricing.features.thirdPartyServices": "Instalacja zewnętrznych usług", - "pricing.features.unlimitedServices": "Dodawanie nielimitowanych usług", - "pricing.features.workspaces": "Obszary robocze", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Przeładuj {name}", "service.crashHandler.autoReload": "Próba automatycznego odnowienia {name} za {seconds} sekund/y", "service.crashHandler.headline": "O nie!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Używaj Ferdi bez konta", "services.welcome": "Witaj w programie Ferdi", - "settings.account.account.editButton": "Modyfikuj konta", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Konto jest niedostępne", "settings.account.accountUnavailableInfo": "Używasz Ferdi bez konta. Jeśli chcesz używać Ferdi z kontem i synchronizować swoje usługi pomiędzy klientami, wybierz serwer w zakładce Ustawienia i zaloguj się.", "settings.account.buttonSave": "Uaktualnij profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Wysłaliśmy email z linkiem do potwierdzenia usunięcia konta. Konto oraz dane są usuwane trwale i nie można tego cofnąć!", "settings.account.deleteInfo": "Jeżeli nie potrzebujesz już konta Ferdi, możesz je usunąć oraz wszystkie dane na nim zapisane.", "settings.account.headline": "Konto", - "settings.account.headlineAccount": "Informacje o koncie", - "settings.account.headlineDangerZone": "Niebezpieczna strefa", - "settings.account.headlineInvoices": "Faktury", - "settings.account.headlinePassword": "Zmień hasło", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Uaktualnij profil", "settings.account.successInfo": "Twoje zmiany zostały zapisane", "settings.account.tryReloadServices": "Spróbuj ponownie", "settings.account.tryReloadUserInfoRequest": "Spróbuj ponownie", "settings.account.userInfoRequestFailed": "Nie można wczytać informacji o użytkowniku", - "settings.account.yourLicense": "Twoja licencja Ferdi", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Zdefiniuj kolor akcentu w formacie zgodnym z CSS. (Domyślnie: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Wyczyść pamięć podręczną (cache)", "settings.app.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizację", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Nie wyświetlaj powiadomień dla schowka", "settings.app.form.closeToSystemTray": "Zminimalizuj Ferdi do paska zadań", "settings.app.form.confirmOnQuit": "Potwierdź podczas opuszczania Ferdi", - "settings.app.form.customTodoServer": "Własny serwer listy zadań", - "settings.app.form.darkMode": "Włącz tryb ciemny", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Włącz Ciemny motyw", "settings.app.form.enableGPUAcceleration": "Włącz akcelerację GPU", "settings.app.form.enableLock": "Włącz blokadę hasłem", "settings.app.form.enableMenuBar": "Zawsze wyświetlaj Ferdi na pasku zadań", "settings.app.form.enableSpellchecking": "Włącz sprawdzanie pisowni", - "settings.app.form.enableSystemTray": "Pokaż Ferdia w obszarze powiadomień", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Włącz Zadania Ferdi", "settings.app.form.hibernateOnStartup": "Hibernacja usług po starcie systemu", "settings.app.form.hibernationStrategy": "Strategia hibernacji", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Pokaż licznik nieprzeczytanych wiadomości gdy powiadomienia są wyłączone", "settings.app.form.startMinimized": "Uruchom zminimalizowany", "settings.app.form.universalDarkMode": "Włącz uniwersalny tryb ciemny", - "settings.app.form.useTouchIdToUnlock": "Zezwól na odblokowanie Ferdi przez Touch ID", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Użyj stylu poziomego", "settings.app.form.wakeUpStrategy": "Strategia wybudzania", "settings.app.headlineAdvanced": "Zaawansowane", @@ -296,10 +284,10 @@ "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Dokumentacja deweloperska", - "settings.recipes.customService.openFolder": "Otwórz folder", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Dostępne usługi", "settings.recipes.missingService": "Brak usługi?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Usługa została dodana pomyślnie", "settings.searchService": "Wyszukaj usługę", "settings.service.error.goBack": "Wróć do usług", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Usuń usługę", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Edytuj {name}", "settings.service.form.enableAudio": "Włącz dźwięk", "settings.service.form.enableBadge": "Pokaż znacznik nieprzeczytanych wiadomości", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Otwórz user.js", "settings.service.form.proxy.headline": "Ustawienia Proxy HTTP/HTTPS", "settings.service.form.proxy.host": "Host Proxy/IP", - "settings.service.form.proxy.info": "Ustawienia proxy nie będą zsynchronizowane z serwerami Ferdia.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Użyj Proxy", - "settings.service.form.proxy.password": "Hasło (opcjonalnie)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Uruchom ponownie Ferdi po zmianie ustawień proxy.", - "settings.service.form.proxy.user": "Użytkownik (opcjonalnie)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Zapisz usługę", "settings.service.form.tabHosted": "Hostowane", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi is an open-source and a community-lead application.

    Thanks to the people who make this possbile:

    ", "settings.supportFerdi.bannerText": "Do you want to help us improve Ferdi?", "settings.supportFerdi.headline": "O Ferdi", - "settings.supportFerdi.openSurvey": "Otwarta ankieta", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", "settings.supportFerdi.textDonationAnd": "i", "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", "settings.supportFerdi.textGitHubSponsors": "Sponsor na Guthub", - "settings.supportFerdi.textListContributors": "Pełna lista współtwórców", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "tutaj", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Doceniamy każde wsparcie. Listę rzeczy, z którymi potrzebujemy pomocy znajdziesz", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Non-Profit", "settings.user.form.currentPassword": "Obecne hasło", "settings.user.form.email": "Adres email", - "settings.user.form.firstname": "Imię", - "settings.user.form.lastname": "Nazwisko", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nowe hasło", "settings.workspace.add.form.name": "Imię", "settings.workspace.add.form.submitButton": "Stwórz obszar roboczy", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Spróbuj ponownie", "settings.workspaces.updatedInfo": "Twoje zmiany zostały zapisane", "settings.workspaces.workspaceFeatureHeadline": "Mniej znaczy więcej: Wprowadzenie do obszarów roboczych Ferdi", - "settings.workspaces.workspaceFeatureInfo": "Obszary robocze programu Ferdi pozawala Ci na skupieniu się na tym co ważne w danym momencie. Ustaw różne zestawy usług i przełączaj się między nimi w łatwiejszy sposób w dowolnym momencie. Decyduj, które usługi potrzebujesz , więc pomagamy Ci pozostawać na szczycie gry - lub łatwiej wyłączyć się z pracy kiedy tego potrzebujesz.", + "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.", "settings.workspaces.workspacesRequestFailed": "Nie można załadować obszaru roboczego", "setupAssistant.headline": "Zaczynajmy", "setupAssistant.subheadline": "Wybierz spośród naszych najczęściej używanych usług i powróć do rutynowej komunikacji.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Włącz powiadomienia i dźwięki", "signup.email.label": "Adres email", "signup.emailDuplicate": "Użytkownik z takim adresem email już istnieje", - "signup.firstname.label": "Imię", + "signup.firstname.label": "First Name", "signup.headline": "Zarejestruj się", - "signup.lastname.label": "Nazwisko", + "signup.lastname.label": "Last Name", "signup.legal.info": "Poprzez utworzenie konta Ferdi akceptujesz", "signup.legal.privacy": "Polityka prywatności", "signup.legal.terms": "Warunki świadczenia usług", @@ -430,23 +418,23 @@ "signup.password.label": "Hasło", "signup.submit.label": "Stwórz konto", "tabs.item.confirmDeleteService": "Czy na pewno chcesz usunąć usługę {serviceName}?", - "tabs.item.deleteService": "Usuń usługę", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Wyłącz dźwięk", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Wyłącz powiadomienia", - "tabs.item.disableService": "Wyłącz usługę", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Włącz dźwięk", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Aktywuj powiadomienia", "tabs.item.enableService": "Aktywuj usługę", - "tabs.item.hibernateService": "Hibernuj usługę", + "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Odśwież", - "tabs.item.wakeUpService": "Wybudź usługę", - "validation.email": "Pole {field} nie jest poprawne", - "validation.minLength": "Pole {field} powinno składać się z co najmniej {length} znaków", + "tabs.item.wakeUpService": "Wake up service", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Przynajmniej jeden jest wymagany", - "validation.required": "Pole {field} jest wymagane", - "validation.url": "Pole {field} nie jest poprawnym ciągiem URL.", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Wstecz", "webControls.forward": "Prześlij dalej", "webControls.goHome": "Strona główna", @@ -454,12 +442,12 @@ "webControls.reload": "Odśwież", "welcome.loginButton": "Zaloguj się na swoje konto", "welcome.signupButton": "Załóż darmowe konto", - "workspaceDrawer.addNewWorkspaceLabel": "Dodaj nowy obszar roboczy", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Wszystkie usługi", "workspaceDrawer.headline": "Obszary robocze", "workspaceDrawer.item.contextMenuEdit": "Edycja", "workspaceDrawer.item.noServicesAddedYet": "Żadne usługi nie zostały jeszcze dodane", - "workspaceDrawer.workspaceFeatureInfo": "

    Obszary robocze programu Ferdi pozawala Ci na skupieniu się na tym co ważne w danym momencie. Ustaw różne zestawy usług i przełączaj się między nimi w łatwiejszy sposób w dowolnym momencie.

    Decyduj, które usługi potrzebujesz , więc pomagamy Ci pozostawać na szczycie gry - lub łatwiej wyłączyć się z pracy kiedy tego potrzebujesz.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Edytuj ustawienia obszaru roboczego", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Przełącz do" } diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 7760834a4..33c42beb4 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Recarregar", - "app.errorHandler.headline": "Algo deu errado", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Servidor personalizado", "changeserver.headline": "Alterar servidor", "changeserver.label": "Servidor", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "O que aconteceu?", "connectionLostBanner.message": "Ah não! Ferdi perdeu a conexão com {name}.", "feature.basicAuth.signIn": "Acessar", - "feature.debugger.title": "Publicar informações de depuração", "feature.nightlyBuilds.activate": "Ativar", "feature.nightlyBuilds.info": "Versões noturnas são versões do Ferdi altamente experimentais que podem conter funcionalidades não finalizadas ou não concluídas. Essas compilações noturnas são usadas principalmente por desenvolvedores para testar seus recursos recém-desenvolvidos e como eles irão se comportar na versão final. Se você não sabe o que está fazendo, sugerimos não ativar versões noturnas.", "feature.nightlyBuilds.title": "Versões noturnas", @@ -24,7 +23,7 @@ "feature.quickSwitch.info": "Selecione um serviço com TAB, ↑ e ↓. Abra um serviço com ENTER.", "feature.quickSwitch.search": "Localizar...", "feature.quickSwitch.title": "Troca Rápida", - "global.api.unhealthy": "Não foi possível estabelecer ligação aos serviços do Ferdi", + "global.api.unhealthy": "Can't connect to Ferdi online services", "global.cancel": "Cancelar", "global.edit": "Editar", "global.no": "Não", @@ -45,9 +44,9 @@ "import.headline": "Importar os seus serviços do Ferdi 4", "import.notSupportedHeadline": "Estes serviços ainda não são suportados pelo Ferdi 5", "import.skip.label": "Eu quero adicionar serviços manualmente", - "import.submit.label": "Importar serviços", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Ocorreram erros ao tentar autenticar. Por favor, tente desconectar e autenticar novamente se o erro persistir.", - "infobar.buttonChangelog": "O que há de novo?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Reiniciar e instalar atualizações", "infobar.buttonReloadServices": "Recarregar serviços", "infobar.hide": "Ocultar", @@ -75,7 +74,7 @@ "login.email.label": "Endereço de e-mail", "login.headline": "Iniciar Sessão", "login.invalidCredentials": "O email ou a palavra-passe incorretos", - "login.link.password": "Repor a minha palavra-passe", + "login.link.password": "Reset password", "login.link.signup": "Criar uma conta gratuita", "login.password.label": "Senha", "login.serverLogout": "A sua sessão expirou, inicie sessão novamente.", @@ -117,10 +116,10 @@ "menu.help.support": "Suporte", "menu.help.tos": "Termos do Serviço", "menu.services": "Serviços", - "menu.services.activatePreviousService": "Ativar o serviço anterior", - "menu.services.addNewService": "Adicionar Novo Serviço", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Início", - "menu.services.setNextServiceActive": "Ativar o próximo serviço", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Tarefas", "menu.todos.enableTodos": "Ativar Tarefas", "menu.view": "Ver", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Todos os serviços", "menu.workspaces.openWorkspaceDrawer": "Abrir a janela da Área de trabalho", "password.email.label": "Endereço de e-mail", - "password.headline": "Repor a minha palavra-passe", + "password.headline": "Reset password", "password.link.login": "Iniciar sessão", "password.link.signup": "Criar uma conta gratuita", - "password.noUser": "Não existe nenhuma conta associada a esse endereço de e-mail", - "password.successInfo": "Por favor, verifique seu e-mail", - "pricing.features.accountSync": "Sincronização da conta", - "pricing.features.customWebsites": "Adicionar Websites Personalizados", - "pricing.features.desktopNotifications": "Notificações no ambiente de trabalho", - "pricing.features.onPremise": "On-Premise & Outros serviços hospedados", - "pricing.features.recipes": "Escolha entre mais de 70 serviços", - "pricing.features.serviceProxies": "Serviços de proxy", - "pricing.features.spellchecker": "Suporte ao corretor ortográfico", - "pricing.features.teamManagement": "Gestão de Equipes", - "pricing.features.thirdPartyServices": "Instalar serviços de terceiros", - "pricing.features.unlimitedServices": "Instalar serviços ilimitados", - "pricing.features.workspaces": "Áreas de trabalho", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Recarregar {name}", "service.crashHandler.autoReload": "A tentar restaurar automaticamente {name} em {seconds} segundos", "service.crashHandler.headline": "Oh não!", @@ -181,7 +169,7 @@ "services.serverInfo": "Opcionalmente, você pode alterar seu servidor Ferdi clicando na engrenagem no canto inferior esquerdo. Se você está mudando (de um dos servidores hospedados) para usar Ferdi sem uma conta, por favor, saiba que você pode exportar seus dados desse servidor e posteriormente, importá-lo usando o menu Ajuda para restaurar todas as suas áreas de trabalho e serviços configurados!", "services.serverless": "Use Ferdi sem uma conta", "services.welcome": "Bem-vindo ao Ferdi", - "settings.account.account.editButton": "Editar conta", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Conta indisponível", "settings.account.accountUnavailableInfo": "Você está utilizando Ferdis sem uma conta. Se você deseja usar o Ferdi com uma conta e manter seus serviços atualizados, Por favor selecione um servidor em Configurações seção Servidor.", "settings.account.buttonSave": "Atualizar o perfil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Recebeu um email com um endereço para confirmar a remoção da sua conta. A sua conta e dados não poderão ser restaurados!", "settings.account.deleteInfo": "Se já não necessita da sua conta Ferdi, pode apagar a sua conta e todos os dados aqui.", "settings.account.headline": "Conta", - "settings.account.headlineAccount": "Informação da conta", - "settings.account.headlineDangerZone": "Zona de perigo", - "settings.account.headlineInvoices": "Faturas", - "settings.account.headlinePassword": "Alterar senha", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Atualizar o perfil", "settings.account.successInfo": "As suas alterações foram efetuadas com sucesso", "settings.account.tryReloadServices": "Tentar novamente", "settings.account.tryReloadUserInfoRequest": "Tentar novamente", "settings.account.userInfoRequestFailed": "Não é possível carregar a informação do utilizador", - "settings.account.yourLicense": "Sua lincença Ferdi", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Informe sua cor de destaque em um formato compatível com CSS. (Padrão: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Limpar cache", "settings.app.buttonInstallUpdate": "Reiniciar e instalar atualizações", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Não exibir notificações para eventos da área de transferência", "settings.app.form.closeToSystemTray": "Fechar o Ferdi para a barra do sistema", "settings.app.form.confirmOnQuit": "Exigir confirmação ao sair do Ferdi", - "settings.app.form.customTodoServer": "Servidor de Tarefas Personalizado", - "settings.app.form.darkMode": "Habilitar modo noturno", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Ativar o Tema Escuro", "settings.app.form.enableGPUAcceleration": "Ativar Aceleração de GPU", "settings.app.form.enableLock": "Habilitar bloqueio por senha", "settings.app.form.enableMenuBar": "Sempre exibir Ferdi na Barra de Menu", "settings.app.form.enableSpellchecking": "Ativar verificação ortográfica", - "settings.app.form.enableSystemTray": "Mostrar o Ferdi na barra do sistema", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Ativar Tarefas", "settings.app.form.hibernateOnStartup": "Manter os serviços em hibernação ao inicializar", "settings.app.form.hibernationStrategy": "Estratégia de Hibernação", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Apresentar emblema com o número de mensagens não lidas quando as notificações estão desativadas", "settings.app.form.startMinimized": "Iniciar minimizado", "settings.app.form.universalDarkMode": "Habilitar modo noturno universal", - "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Usar estilo horizontal", "settings.app.form.wakeUpStrategy": "Estratégia de despertar", "settings.app.headlineAdvanced": "Avançado", @@ -265,9 +253,9 @@ "settings.app.hibernateInfo": "Por padrão, Ferdi manterá todos seus serviços abertos e carregados, assim eles estarão disponíveis quando você for usá-los. O Serviço de Hibernação irá finalizar seus serviços após um período específico. Isso é útil para evitar consumo excessivo de memória RAM evitando também que seu computador fique lento.", "settings.app.inactivityLockInfo": "Minutos de inatividade, após este tempo Ferdi irá automaticamente bloquear. Utilize 0 para desabilitar", "settings.app.languageDisclaimer": "As traduções oficiais são em inglês e alemão. As demais traduções são baseadas na ajuda da comunidade.", - "settings.app.lockInfo": "O bloqueio por senha permite a você proteger suas mensagens.\nUsando o bloqueio por senha, será necessário informar sua senha toda vez que o Ferdi for iniciado ou você solicite o bloqueio.", + "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}.", "settings.app.lockedPassword": "Senha", - "settings.app.lockedPasswordInfo": "Tenha certeza que a senha definida será lembrada.\nCaso você esqueça a senha, será necessário reinstalar o Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Essa alteração requer uma reinicialização", "settings.app.scheduledDNDInfo": "O modo Não perturbe agendado permite definir um período de tempo em que você não deseja receber notificações do Ferdi.", "settings.app.scheduledDNDTimeInfo": "Horários no formato de 24 horas. O horário de término pode ser anterior ao horário de início (por exemplo, início às 17:00 e término às 09:00) para ativar a opção Não perturbe da noite para o dia.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "O Ferdi utiliza o corretor ortográfico integrado do Mac para verificar se há erros de digitação. Se quiser alterar os idiomas que o corretor ortográfico verifica, você pode fazer isso nas Preferências do Sistema do Mac.", "settings.app.subheadlineCache": "Memória Cache", "settings.app.subheadlineFerdiProfile": "Perfil do Ferdi", - "settings.app.todoServerInfo": "Este servidor será usado para o recurso \"Tarefas do Ferdi\".", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Ajude-nos a traduzir a Ferdi para a sua língua.", "settings.app.universalDarkModeInfo": "O Modo Noturno Universal tenta gerar dinamicamente estilos para serviços que, de outra forma, não são suportados no momento.", "settings.app.updateStatusAvailable": "Atualização disponivel, a transferir...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Serviços da comunidade", "settings.recipes.customService.headline.customRecipes": "Serviços personalizados", "settings.recipes.customService.headline.devRecipes": "Serviços em Desenvolvimento", - "settings.recipes.customService.intro": "Para adicionar um serviço personalizado, copie o serviço para:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Documentação do Desenvolvedor", - "settings.recipes.customService.openFolder": "Abrir pasta", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Serviços disponíveis", "settings.recipes.missingService": "Falta um serviço?", - "settings.recipes.nothingFound": "Desculpe, nenhum serviço corresponde ao seu termo de pesquisa - mas você provavelmente pode adicioná-lo usando a opção \"Site personalizado\". Por favor, note que o site pode mostrar mais serviços que foram adicionados ao Ferdi desde a versão em que você está atualmente. Para obter esses novos serviços, por favor, considere atualizar para uma versão mais recente da Ferdi.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Serviço adicionado com sucesso", "settings.searchService": "Pesquisar serviço", "settings.service.error.goBack": "Voltar aos serviços", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Brilho do Dark Reader", "settings.service.form.darkReaderContrast": "Contraste do Dark Reader", "settings.service.form.darkReaderSepia": "Sépia do Dark Reader", - "settings.service.form.deleteButton": "Apagar serviço", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Editar {name}", "settings.service.form.enableAudio": "Ativar áudio", "settings.service.form.enableBadge": "Mostrar emblemas de mensagens não lidas", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Abrir user.js", "settings.service.form.proxy.headline": "Definições HTTP/HTTPS Proxy", "settings.service.form.proxy.host": "Host/IP proxy", - "settings.service.form.proxy.info": "As definições do proxy não serão guardadas nos servidores do Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Usar Proxy", - "settings.service.form.proxy.password": "Palavra-chave (opcional)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Porta", "settings.service.form.proxy.restartInfo": "Reinicie, por favor, após atualizar as definições do Ferdi", - "settings.service.form.proxy.user": "Utilizador (opcional)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Seus arquivos de usuário serão inseridos na página web para que você possa personalizar os serviços da forma que preferir. Os arquivos de usuário são armazenados localmente e não são transferidos para outros computadores utilizando a mesma conta.", "settings.service.form.saveButton": "Salvar serviço", "settings.service.form.tabHosted": "Com domínio", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi é um aplicativo de código aberto e uma aplicação de líder de comunidade.

    Obrigado às pessoas que tornam isso possível:

    ", "settings.supportFerdi.bannerText": "Deseja nos ajudar a melhorar o Ferdi?", "settings.supportFerdi.headline": "Sobre o Ferdi", - "settings.supportFerdi.openSurvey": "Abrir pesquisa", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Se você quiser apoiar o desenvolvimento de Ferdi com uma doação, você pode fazê-lo em ambos,", "settings.supportFerdi.textDonationAnd": "e", "settings.supportFerdi.textExpenses": "Enquanto os voluntários fazem a maior parte do trabalho, ainda precisamos pagar por servidores e certificados. Como uma comunidade, somos totalmente transparentes com os fundos que coletamos e gastamos - veja", "settings.supportFerdi.textGitHubSponsors": "Patrocinador do GitHub", - "settings.supportFerdi.textListContributors": "Lista completa de contribuidores", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "aqui", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "O suporte é sempre bem-vindo. Você pode encontrar uma lista da ajuda de que precisamos", @@ -377,7 +365,7 @@ "settings.team.contentHeadline": "Gerenciamento de Equipe Franz", "settings.team.copy": "O Gerenciamento de Equipes de Franz permite gerenciar assinaturas do Franz para múltiplos usuários. Por favor, entenda que ter uma assinatura Franz Premium não lhe dará nenhuma vantagem em usar o Ferdi. A única razão em manter o acesso ao Gerenciamento de Equipes é permitir o gerenciamento de suas equipes legadas e não perder nenhuma funcionalidade no gerenciamento da sua conta.", "settings.team.headline": "Equipa", - "settings.team.intro": "Você está atualmente usando os Servidores de Franz, por isso tem acesso ao Gerenciamento de Times.", + "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", "settings.team.manageAction": "Gerencie sua Equipe em meetfranz.com", "settings.team.teamsUnavailable": "A funcionalidade de Equipes está indisponível", "settings.team.teamsUnavailableInfo": "Atualmente a funcionalidade de Equipes está disponível apenas utilizando o servidor Franz após adquirir um plano Franz Profissional. Por favor altere o seridor par https://api.franzinfra.com para utilizar esta funcionalidade.", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Sem fins lucrativos", "settings.user.form.currentPassword": "Palavra-passe atual", "settings.user.form.email": "E-mail", - "settings.user.form.firstname": "Primeiro Nome", - "settings.user.form.lastname": "Último Nome", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nova palavra-passe", "settings.workspace.add.form.name": "Nome", "settings.workspace.add.form.submitButton": "Nova Área de Trabalho", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Tentar novamente", "settings.workspaces.updatedInfo": "As suas alterações foram efetuadas com sucesso", "settings.workspaces.workspaceFeatureHeadline": "Menos é Mais: Introduzindo as Áreas de trabalho Ferdi", - "settings.workspaces.workspaceFeatureInfo": "As áreas de trabalho do Ferdi permite você focar no que realmente é importante agora. Configure diferentes conjuntos de serviços e alterne entre eles facilmente em qualquer momento. Você decide quais serviços você precisa e onde deseja colocá-los, então nós podemos te ajudar a aumentar a produtividade de suas tarefas. Ou facilmente deletar os aplicativos que você nunca irá precisar.", + "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.", "settings.workspaces.workspacesRequestFailed": "Não foi possível carregar suas áreas de trabalho", "setupAssistant.headline": "Vamos começar", "setupAssistant.subheadline": "Escolha entre os serviços mais usados e volte a ter o controle das suas mensagens agora.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Ativar notificações e áudio", "signup.email.label": "Endereço de e-mail", "signup.emailDuplicate": "Já existe uma conta associada a este endereço de email", - "signup.firstname.label": "Primeiro Nome", + "signup.firstname.label": "First Name", "signup.headline": "Criar conta", - "signup.lastname.label": "Último Nome", + "signup.lastname.label": "Last Name", "signup.legal.info": "Ao criar uma conta Ferdi, aceita", "signup.legal.privacy": "Declaração de privacidade", "signup.legal.terms": "Termos do Serviço", @@ -430,23 +418,23 @@ "signup.password.label": "Senha", "signup.submit.label": "Criar uma conta", "tabs.item.confirmDeleteService": "Tem certeza de que deseja excluir o serviço {serviceName}?", - "tabs.item.deleteService": "Apagar serviço", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Desativar áudio", "tabs.item.disableDarkMode": "Desativar o modo escuro", "tabs.item.disableNotifications": "Desativar notificações", - "tabs.item.disableService": "Desativar serviço", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Ativar áudio", "tabs.item.enableDarkMode": "Ativar o modo escuro", "tabs.item.enableNotification": "Ativar notificações", "tabs.item.enableService": "Ativar serviço", - "tabs.item.hibernateService": "Serviço de hibernação", + "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Recarregar", - "tabs.item.wakeUpService": "Iniciar serviço", - "validation.email": "{field} não é válido", - "validation.minLength": "{field} deveria ter pelo menos {length} caracteres", + "tabs.item.wakeUpService": "Wake up service", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "É necessário pelo menos um", - "validation.required": "{field} é obrigatório", - "validation.url": "{field} não é uma hiperligação válida", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Anterior", "webControls.forward": "Próximo", "webControls.goHome": "Início", @@ -454,12 +442,12 @@ "webControls.reload": "Recarregar", "welcome.loginButton": "Iniciar sessão", "welcome.signupButton": "Criar uma conta gratuita", - "workspaceDrawer.addNewWorkspaceLabel": "Adicionar uma nova área de trabalho", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Todos os serviços", "workspaceDrawer.headline": "Áreas de trabalho", "workspaceDrawer.item.contextMenuEdit": "editar", "workspaceDrawer.item.noServicesAddedYet": "Nenhum serviço foi adicionado", - "workspaceDrawer.workspaceFeatureInfo": "

    As áreas de trabalho do Ferdi te ajuda a focar no que realmente é importante agora. Configure diferente cenários para serviços e mude entre eles facilmente em qualquer momento.

    Você decide quais serviços precisa e onde deseja posicioná-los, e então nós iremos te ajudar em aumentar a sua produtividade. Você pode desligar os serviços que não são úteis para você.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Editar configurações das áreas de trabalho", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Trocando para" } diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index da431f4e3..19b720cbc 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Atualizar", - "app.errorHandler.headline": "Alguma coisa correu mal", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Servidor personalizado", "changeserver.headline": "Alterar servidor", "changeserver.label": "Servidor", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "O que aconteceu?", "connectionLostBanner.message": "Oh não! O Ferdi perdeu a ligação com {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publicar informações de depuração", "feature.nightlyBuilds.activate": "Activar", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Seleccione um serviço com TAB, ↑ e ↓. Abra um serviço com ENTER.", "feature.quickSwitch.search": "A procurar...", "feature.quickSwitch.title": "Troca Rápida", - "global.api.unhealthy": "Não é possível ligar aos serviços online de Ferdi", - "global.cancel": "Cancelar", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Editar", "global.no": "No", "global.notConnectedToTheInternet": "Não está ligado à internet.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Configurações", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use o padrão de sistema ({default})", "global.spellchecking.autodetect": "Detectar idioma automaticamente", "global.spellchecking.autodetect.short": "Automático", "global.spellchecking.language": "Idioma para corrector ortográfico", - "global.submit": "Enviar", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importe os seus serviços do Ferdi 4", "import.notSupportedHeadline": "Serviços ainda não são suportados por Ferdi 5", "import.skip.label": "Quero adicionar serviços manualmente", - "import.submit.label": "Importar serviços", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Houve erros na autenticaçao. Se este erro persistir, por favor, tente desligar e autenticar novamente.", - "infobar.buttonChangelog": "O que há de novo?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Reiniciar e instalar atualizações", "infobar.buttonReloadServices": "Reiniciar serviços", "infobar.hide": "Ocultar", @@ -75,7 +74,7 @@ "login.email.label": "Endereço de E-mail", "login.headline": "Entrar", "login.invalidCredentials": "E-mail ou palavra-passe inválidos", - "login.link.password": "Redefinir palavra-passe", + "login.link.password": "Reset password", "login.link.signup": "Criar uma conta gratuita", "login.password.label": "Palavra-passe", "login.serverLogout": "A sua sessão expirou, faça login novamente.", @@ -117,10 +116,10 @@ "menu.help.support": "Suporte", "menu.help.tos": "Termos de Serviço", "menu.services": "Serviços", - "menu.services.activatePreviousService": "Ativar serviço anterior", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Início", - "menu.services.setNextServiceActive": "Ativar próximo serviço", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Tarefas", "menu.todos.enableTodos": "Ativar Tarefas", "menu.view": "Visualizar", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Todos os serviços", "menu.workspaces.openWorkspaceDrawer": "Abrir a barra lateral da área de trabalho", "password.email.label": "Endereço de E-mail", - "password.headline": "Redefinir palavra-passe", + "password.headline": "Reset password", "password.link.login": "Entrar na sua conta", "password.link.signup": "Criar uma conta gratuita", - "password.noUser": "Não foi encontrado nenhum utilizador com este e-mail", - "password.successInfo": "Por favor, verifique o seu e-mail", - "pricing.features.accountSync": "Sincronização de conta", - "pricing.features.customWebsites": "Adicionar Websites Personalizados", - "pricing.features.desktopNotifications": "Notificações no ambiente de trabalho", - "pricing.features.onPremise": "En sitio y otros servicios alojados", - "pricing.features.recipes": "Escolha entre mais de 70 serviços", - "pricing.features.serviceProxies": "Proxies de Serviço", - "pricing.features.spellchecker": "Suporte de correção ortográfica", - "pricing.features.teamManagement": "Gestão de Equipa", - "pricing.features.thirdPartyServices": "Instalar serviços de terceiros", - "pricing.features.unlimitedServices": "Adicionar serviços ilimitados", - "pricing.features.workspaces": "Áreas de trabalho", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Recarregar {name}", "service.crashHandler.autoReload": "A tentar restabelecer {name} automaticamente em {seconds} segundos", "service.crashHandler.headline": "Oh não!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi sem conta", "services.welcome": "Bem-vindo ao Ferdi", - "settings.account.account.editButton": "Editar conta", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Conta indisponível", "settings.account.accountUnavailableInfo": "Está a usar o Ferdi sem uma conta. Se deseja usar o Ferdi com uma conta e manter os seus serviços sincronizados entre instalações, por favor, selecione um servidor no separador Configurações e faça a autenticação.", "settings.account.buttonSave": "Atualizar perfil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Recebeu um e-mail com um link para confirmar o cancelamento da sua conta. Atenção! A sua conta e dados não poderão ser restaurados!", "settings.account.deleteInfo": "Se não precisa mais de sua conta Ferdi, pode apagá-la juntamente com toda a sua informação aqui.", "settings.account.headline": "Conta", - "settings.account.headlineAccount": "Informações de conta", - "settings.account.headlineDangerZone": "Zona Perigosa", - "settings.account.headlineInvoices": "Recibos", - "settings.account.headlinePassword": "Mudar palavra-passe", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Atualizar perfil", "settings.account.successInfo": "As suas alterações foram gravadas", "settings.account.tryReloadServices": "Tente novamente", "settings.account.tryReloadUserInfoRequest": "Tente novamente", "settings.account.userInfoRequestFailed": "Não foi possível carregar as informações de utilizador", - "settings.account.yourLicense": "A sua licença Ferdi", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Limpar cache", "settings.app.buttonInstallUpdate": "Reiniciar e instalar atualizações", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Servidor Personalizado de Tarefas", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "Ativar modo noturno", "settings.app.form.enableGPUAcceleration": "Ativar Aceleração de GPU", "settings.app.form.enableLock": "Ativar palavra-passe", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Ativar correção ortográfica", - "settings.app.form.enableSystemTray": "Mostrar Ferdi na barra de sistema", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Ativar Tarefas Ferdi", "settings.app.form.hibernateOnStartup": "Manter os serviços em hibernação durante a inicialização", "settings.app.form.hibernationStrategy": "Estratégia de hibernação", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Mostrar ícone de mensagem não lida quando as notificações estiverem desativadas", "settings.app.form.startMinimized": "Iniciar minimizado", "settings.app.form.universalDarkMode": "Ativar o Modo Noturno Universal", - "settings.app.form.useTouchIdToUnlock": "Permite usar o TouchID para desbloquear Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Avançado", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "As traduções oficiais são Inglês e Alemão. Todas as outras traduções são feitas pela comunidade.", "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}.", "settings.app.lockedPassword": "Palavra-passe", - "settings.app.lockedPasswordInfo": "Por favor certifique-se de definir uma palavra-passe que se lembre.\nSe perder esta palavra-passe, terá que reinstalar Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "As mudanças requerem reinício de sistema", "settings.app.scheduledDNDInfo": "O Não Incomodar permite definir um período de tempo em que não quer receber notificações.", "settings.app.scheduledDNDTimeInfo": "Horas em formato 24h. Pode definir a hora do fim antes da hora de início (p. ex. início 17:00, fim 09:00) para ativar o modo \"Não incomodar\" durante a noite.", @@ -275,7 +263,7 @@ "settings.app.spellCheckerLanguageInfo": "Ferdi usa o corretor ortográfico do seu Mac para verificar se há erros ortográficos. Se você quiser alterar os idiomas que o corretor ortográfico verifica, pode fazê-lo nas Preferências do Sistema do Mac.", "settings.app.subheadlineCache": "Memória cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Este servidor será usado para a funcionalidade \"Tarefas Ferdi\".", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Ajude-nos a traduzir o Ferdi para o seu idioma.", "settings.app.universalDarkModeInfo": "O Modo Noturno Universal tenta gerar dinamicamente os estilos do modo noturno para serviços que não o suportem de outra forma atualmente.", "settings.app.updateStatusAvailable": "Atualização disponível, a fazer download...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Receitas da comunidade de terceiros", "settings.recipes.customService.headline.customRecipes": "Receitas personalizadas de terceiros", "settings.recipes.customService.headline.devRecipes": "As suas Receitas de Serviço de Desenvolvimento", - "settings.recipes.customService.intro": "Para adicionar um serviço personalizado, copie a receita do serviço para:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Documentação para programadores", - "settings.recipes.customService.openFolder": "Abrir pasta", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Serviços disponíveis", "settings.recipes.missingService": "Sente falta de algum serviço?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Serviço adicionado com sucesso", "settings.searchService": "Procurar serviço", "settings.service.error.goBack": "Voltar aos serviços", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Brilho do Leitor Escuro", "settings.service.form.darkReaderContrast": "Contraste do Leitor Noturno", "settings.service.form.darkReaderSepia": "Leitor Noturno Sépia", - "settings.service.form.deleteButton": "Apagar serviço", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Editar {name}", "settings.service.form.enableAudio": "Ativar áudio", "settings.service.form.enableBadge": "Mostrar aviso de mensagens não lidas", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Abrir user.js", "settings.service.form.proxy.headline": "Configurações de HTTP/HTTPS Proxy", "settings.service.form.proxy.host": "Servidor/IP Proxy", - "settings.service.form.proxy.info": "As configurações de proxy não serão sincronizadas com os servidores de Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Usar Proxy", - "settings.service.form.proxy.password": "Palavra-passe (opcional)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Porta", "settings.service.form.proxy.restartInfo": "Por favor, reinicie o Ferdi após alterar as configurações de proxy.", - "settings.service.form.proxy.user": "Utilizador (opcional)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Os seus ficheiros serão inseridos na página da web para que possa personalizar os serviços da maneira que desejar. Os ficheiros são apenas armazenados localmente e não são transferidos para outros computadores usando a mesma conta.", "settings.service.form.saveButton": "Gravar serviço", "settings.service.form.tabHosted": "Alojado", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Sem fins lucrativos", "settings.user.form.currentPassword": "Palavra-passe atual", "settings.user.form.email": "E-mail", - "settings.user.form.firstname": "Nome", - "settings.user.form.lastname": "Apelido", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nova palavra-passe", "settings.workspace.add.form.name": "Nome", "settings.workspace.add.form.submitButton": "Criar área de trabalho", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Tente novamente", "settings.workspaces.updatedInfo": "As suas alterações foram gravadas", "settings.workspaces.workspaceFeatureHeadline": "Menos é Mais: Apresentando áreas de trabalho Ferdi", - "settings.workspaces.workspaceFeatureInfo": "As áreas de trabalho do Ferdi permitem que se concentre no que realmente é importante. Configure diferentes conjuntos de serviços e mude-os facilmente e a qualquer momento. Você decide quais os serviços que precisa e onde colocá-los, para que o possamos ajudar a estar no seu melhor. - Ou desligar do trabalho quando quiser.", + "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.", "settings.workspaces.workspacesRequestFailed": "Não foi possível carregar suas áreas de trabalho", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Ativar notificações e áudio", "signup.email.label": "Endereço de E-mail", "signup.emailDuplicate": "Já existe um utilizador com este endereço de e-mail", - "signup.firstname.label": "Nome", + "signup.firstname.label": "First Name", "signup.headline": "Entrar", - "signup.lastname.label": "Apelido", + "signup.lastname.label": "Last Name", "signup.legal.info": "Ao criar uma conta Ferdi, você aceita os", "signup.legal.privacy": "Declaração de Privacidade", "signup.legal.terms": "Termos de serviço", @@ -430,11 +418,11 @@ "signup.password.label": "Palavra-passe", "signup.submit.label": "Criar conta", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Apagar serviço", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Desativar áudio", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Desativar notificações", - "tabs.item.disableService": "Desativar serviço", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Ativar áudio", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Ativar notificações", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Atualizar", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} é inválido", - "validation.minLength": "{field} deve ter pelo menos {length} caracteres", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "É necessário pelo menos um", - "validation.required": "{field} é obrigatório", - "validation.url": "{field} não é um URL válido", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Anterior", "webControls.forward": "Seguinte", "webControls.goHome": "Início", @@ -454,12 +442,12 @@ "webControls.reload": "Atualizar", "welcome.loginButton": "Entrar na sua conta", "welcome.signupButton": "Criar uma conta gratuita", - "workspaceDrawer.addNewWorkspaceLabel": "Adicionar nova área de trabalho", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Todos os serviços", "workspaceDrawer.headline": "Áreas de trabalho", "workspaceDrawer.item.contextMenuEdit": "editar", "workspaceDrawer.item.noServicesAddedYet": "Nenhum serviço adicionado", - "workspaceDrawer.workspaceFeatureInfo": "

    As áreas de trabalho do Ferdi permitem que se concentre no que realmente é importante. Configure diferentes conjuntos de serviços e mude-os facilmente e a qualquer momento.

    Você decide quais os serviços que precisa e onde colocá-los, para que o possamos ajudar a estar no seu melhor. - Ou desligar do trabalho quando quiser.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Editar configurações das áreas de trabalho", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "A mudar para" } diff --git a/src/i18n/locales/ro.json b/src/i18n/locales/ro.json index 6e2ee4c19..668b9e9d0 100644 --- a/src/i18n/locales/ro.json +++ b/src/i18n/locales/ro.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reîncărcare", - "app.errorHandler.headline": "Ceva nu a funcționat corect", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Ce s-a întâmplat?", "connectionLostBanner.message": "Oh nu! Ferdi a pierdut conexiunea cu {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activare", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,7 +23,7 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Căutare...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Nu se pot conecta la Ferdi servicii online", + "global.api.unhealthy": "Can't connect to Ferdi online services", "global.cancel": "Cancel", "global.edit": "Edit", "global.no": "No", @@ -45,7 +44,7 @@ "import.headline": "Importă serviciile tale Ferdi 4", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 4a7222914..b0c87da05 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Перезагрузить", - "app.errorHandler.headline": "Что-то пошло не так", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Пользовательский сервер", "changeserver.headline": "Изменить сервер", "changeserver.label": "Сервер", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Что случилось?", "connectionLostBanner.message": "О нет! Ферди потерял связь с {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Опубликовать отладочную информацию", "feature.nightlyBuilds.activate": "Активировать", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Выберите сервис с Tab, вверх и вниз. Откройте сервис нажав на ENTER.", "feature.quickSwitch.search": "Поиск...", "feature.quickSwitch.title": "Быстрое переключение", - "global.api.unhealthy": "Невозможно подключиться к онлайн-сервисам Ferdi", - "global.cancel": "Отмена", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Правка", "global.no": "No", "global.notConnectedToTheInternet": "Вы не подключены к сети Интернет", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Настройки", + "global.settings": "Settings", "global.spellchecker.useDefault": "Использовать системные параметры по умолчанию ({default})", "global.spellchecking.autodetect": "Найти язык автоматически", "global.spellchecking.autodetect.short": "Авто", "global.spellchecking.language": "Проверка правописания", - "global.submit": "Принять", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Импортировать ваши сервисы из Ferdi 4", "import.notSupportedHeadline": "Сервисы пока ещё не поддерживаются в Ferdi 5", "import.skip.label": "Я хочу добавить сервисы вручную", - "import.submit.label": "Импортировать сервисы", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "При попытке выполнить запрос на аутентификацию произошли ошибки. Пожалуйста, попробуйте выйти из системы и вернуться назад, если эта ошибка повторяется.", - "infobar.buttonChangelog": "Что новенького?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Перезапустить и установить обновления", "infobar.buttonReloadServices": "Перезагрузить сервисы", "infobar.hide": "Скрыть", @@ -75,7 +74,7 @@ "login.email.label": "Адрес электронной почты", "login.headline": "Вход", "login.invalidCredentials": "Неправильный адрес электронной почты или пароль", - "login.link.password": "Восстановить пароль", + "login.link.password": "Reset password", "login.link.signup": "Создать бесплатный аккаунт", "login.password.label": "Пароль", "login.serverLogout": "Сессия устарела, пожалуйста, войдите снова.", @@ -117,10 +116,10 @@ "menu.help.support": "Поддержка", "menu.help.tos": "Условия использования", "menu.services": "Сервис", - "menu.services.activatePreviousService": "Активировать предыдущий сервич", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Домой", - "menu.services.setNextServiceActive": "Активировать следующий сервис", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Задачи", "menu.todos.enableTodos": "Включить задачи", "menu.view": "Вид", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Все сервисы", "menu.workspaces.openWorkspaceDrawer": "Открыть меню окружений", "password.email.label": "Адрес электронной почты", - "password.headline": "Восстановить пароль", + "password.headline": "Reset password", "password.link.login": "Вход", "password.link.signup": "Создать бесплатный аккаунт", - "password.noUser": "Не найдено пользователя с таким адресом электронной почты", - "password.successInfo": "Проверьте вашу электронную почту", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Добавить пользовательские веб-сайты", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Прокси сервиса", - "pricing.features.spellchecker": "Поддержка Spellchecker", - "pricing.features.teamManagement": "Команда управления", - "pricing.features.thirdPartyServices": "Установить сторонние сервисы", - "pricing.features.unlimitedServices": "Добавить неограниченные сервисы", - "pricing.features.workspaces": "Окружение", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Перезагрузить {name}", "service.crashHandler.autoReload": "Пытаюсь автоматически восстановить {name} в течение {seconds} секунд", "service.crashHandler.headline": "О, нет!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Добро пожаловать во Ferdi", - "settings.account.account.editButton": "Редактировать аккаунт", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Обновить профиль", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Вам выслано письмо с ссылкой для подтверждения удаления аккаунта. После этого ваш аккаунт и данные не смогут быть восстановлены!", "settings.account.deleteInfo": "Если вам больше не нужна ваша учетная запись в Ferdi, вы можете удалить аккаунт и всю связанную с ней информацию.", "settings.account.headline": "Аккаунт", - "settings.account.headlineAccount": "Информация аккаунта", - "settings.account.headlineDangerZone": "Запретная Зона", - "settings.account.headlineInvoices": "Счета", - "settings.account.headlinePassword": "Сменить пароль", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Обновить профиль", "settings.account.successInfo": "Ваши изменения были сохранены", "settings.account.tryReloadServices": "Попробовать снова", "settings.account.tryReloadUserInfoRequest": "Попробовать снова", "settings.account.userInfoRequestFailed": "Невозможно загрузить информацию пользователя", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Очистить кэш", "settings.app.buttonInstallUpdate": "Перезапустить и установить обновления", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Включить Тёмный режим", "settings.app.form.enableGPUAcceleration": "Включить ускорение GPU", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Включить проверку правописания", - "settings.app.form.enableSystemTray": "Показывать Ferdi в системном трее", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes", "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", - "settings.recipes.customService.intro": "Чтобы добавить пользовательский сервис, скопируйте файлы сервиса:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Документация для разработчиков", - "settings.recipes.customService.openFolder": "Открыть папку", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Доступные сервисы", "settings.recipes.missingService": "Не можете найти сервис?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Сервис успешно добавлен", "settings.searchService": "Найти сервис", "settings.service.error.goBack": "Вернуться к сервисам", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Удалить сервис", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Редактирование {name}", "settings.service.form.enableAudio": "Включить звук", "settings.service.form.enableBadge": "Показывать иконку непрочитанных сообщений", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Открыть user.js", "settings.service.form.proxy.headline": "Настройки Прокси HTTP/HTTPS", "settings.service.form.proxy.host": "Прокси Host/IP", - "settings.service.form.proxy.info": "Настройки прокси не будут синхронизированны с серверами Ferdi", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Использовать прокси", - "settings.service.form.proxy.password": "Пароль (опционально)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Порт", "settings.service.form.proxy.restartInfo": "Пожалуйста перезапустите Ferdi после изменения настроек прокси.", - "settings.service.form.proxy.user": "Пользователь (опционально)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Ваши пользовательские файлы будут вставлены на веб-страницу, чтобы вы могли настроить сервисы в любом удобном вам виде. Файлы пользователей хранятся только локально и не передаются на другие компьютеры, использующие ту же учетную запись.", "settings.service.form.saveButton": "Сохранить сервис", "settings.service.form.tabHosted": "Размещено", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ферди является приложением с открытым исходным кодом и разрабатывается сообществом.

    Спасибо людям, которые делают это возможным:

    ", "settings.supportFerdi.bannerText": "Вы хотите помочь нам улучшить Ферди?", "settings.supportFerdi.headline": "О Ferdi", - "settings.supportFerdi.openSurvey": "Открыть опрос", + "settings.supportFerdi.openSurvey": "Open survey", "settings.supportFerdi.textDonation": "Если вы хотите поддержать развитие Ферди с пожертвованием, вы можете сделать это двумя способами,", "settings.supportFerdi.textDonationAnd": "и", "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", "settings.supportFerdi.textGitHubSponsors": "Спонсоры на Github", - "settings.supportFerdi.textListContributors": "Полный список участников", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "here", "settings.supportFerdi.textOpenCollective": "Open Collective", "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Некоммерческий", "settings.user.form.currentPassword": "Текущий пароль", "settings.user.form.email": "Адрес электронной почты", - "settings.user.form.firstname": "Имя", - "settings.user.form.lastname": "Фамилия", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Новый пароль", "settings.workspace.add.form.name": "Имя", "settings.workspace.add.form.submitButton": "Создать окружение", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Включить уведомления и звук", "signup.email.label": "Адрес электронной почты", "signup.emailDuplicate": "Пользователь с таким адресом электронной почты уже существует", - "signup.firstname.label": "Имя", + "signup.firstname.label": "First Name", "signup.headline": "Регистрация", - "signup.lastname.label": "Фамилия", + "signup.lastname.label": "Last Name", "signup.legal.info": "Создавая аккаунт Ferdi, вы принимаете", "signup.legal.privacy": "Политика конфиденциальности", "signup.legal.terms": "Условия обслуживания", @@ -430,11 +418,11 @@ "signup.password.label": "Пароль", "signup.submit.label": "Создать аккаунт", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Удалить сервис", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Отключить звук", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Отключить уведомления", - "tabs.item.disableService": "Отключить сервис", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Включить звук", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Включить уведомления", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Перезагрузить", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} недействительно", - "validation.minLength": "{field} должно быть не менее {length} символов", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} обязательно", - "validation.url": "{field} является недействительной ссылкой", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Назад", "webControls.forward": "Переслать", "webControls.goHome": "Домой", diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json index 7e84088d1..5027a086b 100644 --- a/src/i18n/locales/sk.json +++ b/src/i18n/locales/sk.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Obnoviť", - "app.errorHandler.headline": "Niečo sa pokazilo", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Vlastný server", "changeserver.headline": "Zmeniť server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Čo sa stalo?", "connectionLostBanner.message": "Oh nie! Ferdi stratil pripojenie k {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Zverejniť informácie ladenia", "feature.nightlyBuilds.activate": "Aktivovať", "feature.nightlyBuilds.info": "Tzv. \"nočné verzie\" sú vysoko experimentálne verzie Ferdi, ktoré môžu obsahovať nedoladená alebo nedokončené funkcie. Tieto verzie sú používané predovšetkým vývojármi, aby otestovali novo-vyvíjané funkcie a spôsob, akým sa budú správať vo finálnej verzii. Ak neviete čo robíte, navrhujeme neaktivovať tieto experimentálne verzie.", "feature.nightlyBuilds.title": "Vývojárske verzie", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Hľadať...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Nedá sa pripojiť k online službám Ferdi", - "global.cancel": "Zrušiť", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Upraviť", "global.no": "No", "global.notConnectedToTheInternet": "Nie ste pripojení k internetu.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Nastavenia", + "global.settings": "Settings", "global.spellchecker.useDefault": "Použiť predvolené nastavenie systému ({default})", "global.spellchecking.autodetect": "Automaticky rozpoznať jazyk", "global.spellchecking.autodetect.short": "Automatický", "global.spellchecking.language": "Jazyk kontroly pravopisu", - "global.submit": "Odoslať", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importovať vaše služby z Ferdi 4", "import.notSupportedHeadline": "Služby zatiaľ nie sú podporované vo verzii Ferdi 5", "import.skip.label": "Chcem pridať služby ručne", - "import.submit.label": "Importovať služby", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Čo je nového?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Reštartovať a nainštalovať aktualizáciu", "infobar.buttonReloadServices": "Obnoviť služby", "infobar.hide": "Skryť", @@ -75,7 +74,7 @@ "login.email.label": "E-mailová adresa", "login.headline": "Prihlásiť sa", "login.invalidCredentials": "E-mail alebo heslo nesúhlasia", - "login.link.password": "Obnoviť heslo", + "login.link.password": "Reset password", "login.link.signup": "Vytvoriť používateľský účet zdarma", "login.password.label": "Heslo", "login.serverLogout": "Vaša relácia vypršala, prihláste sa prosím znovu.", @@ -117,10 +116,10 @@ "menu.help.support": "Podpora", "menu.help.tos": "Podmienky použitia", "menu.services": "Služby", - "menu.services.activatePreviousService": "Aktivovať predchádzajúcu službu", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Úvod", - "menu.services.setNextServiceActive": "Aktivujte ďalšiu službu", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Enable Todos", "menu.view": "Zobraziť", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Všetky služby", "menu.workspaces.openWorkspaceDrawer": "Otvoriť workspace záložku", "password.email.label": "E-mailová adresa", - "password.headline": "Obnoviť heslo", + "password.headline": "Reset password", "password.link.login": "Prihlásiť sa do vášho účtu", "password.link.signup": "Vytvoriť používateľský účet zdarma", - "password.noUser": "Používateľ s touto e-mailovou adresou nebol nájdený", - "password.successInfo": "Skontrolujte prosím váš e-mail", - "pricing.features.accountSync": "Synchronizácia účtu", - "pricing.features.customWebsites": "Pridať vlastnú webstránku", - "pricing.features.desktopNotifications": "Upozornenie na ploche", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Proxy servery", - "pricing.features.spellchecker": "Podpora kontroly pravopisu", - "pricing.features.teamManagement": "Manažment tímu", - "pricing.features.thirdPartyServices": "Inštalovať inú službu", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Pracovný priestor", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Znovu načítať {name}", "service.crashHandler.autoReload": "Najbližší pokus o automatické obnovenie {name} o {seconds} sekúnd", "service.crashHandler.headline": "Ale nie!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Vítajte v aplikácii Ferdi", - "settings.account.account.editButton": "Upraviť účet", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Aktualizovať profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Bol vám odoslaný e-mail s odkazom pre potvrdenie odstránenia vášho účtu. Váš účet a údaje sa nebudú dať obnoviť!", "settings.account.deleteInfo": "Ak už nepotrebujete váš Ferdi účet, tu ho môžete zmazať spolu so všetkými prislúchajúcimi údajmi.", "settings.account.headline": "Účet", - "settings.account.headlineAccount": "Informácie o účte", - "settings.account.headlineDangerZone": "Nebezpečná zóna", - "settings.account.headlineInvoices": "Faktúry", - "settings.account.headlinePassword": "Zmeniť heslo", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Aktualizovať profil", "settings.account.successInfo": "Vaše zmeny boli uložené", "settings.account.tryReloadServices": "Skúsiť znova", "settings.account.tryReloadUserInfoRequest": "Skúsiť znova", "settings.account.userInfoRequestFailed": "Nebolo možné načítať informácie o používateľovi", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Vyčistiť vyrovnávaciu pamäť", "settings.app.buttonInstallUpdate": "Reštartovať a nainštalovať aktualizáciu", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Zapnúť Dark Mode", "settings.app.form.enableGPUAcceleration": "Zapnúť GPU zrýchlenie", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Zapnúť kontrolu pravopisu", - "settings.app.form.enableSystemTray": "Zobrazovať Ferdi v systémovej lište", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -296,10 +284,10 @@ "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Developer Documentation", - "settings.recipes.customService.openFolder": "Otvoriť priečinok", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Dostupné služby", "settings.recipes.missingService": "Chýba vám služba?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Služba bola úspešne pridaná", "settings.searchService": "Vyhľadať službu", "settings.service.error.goBack": "Späť na služby", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Odstrániť službu", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Upraviť {name}", "settings.service.form.enableAudio": "Zapnúť zvuk", "settings.service.form.enableBadge": "Zobraziť symboly neprečítaných správ", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Nastavenia servera proxy sa nebudú synchronizovať so servermi Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Použiť Proxy", - "settings.service.form.proxy.password": "Heslo (voliteľné)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Po zmene nastavení servera proxy reštartujte Ferdi.", - "settings.service.form.proxy.user": "Používateľ (voliteľné)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Uložiť službu", "settings.service.form.tabHosted": "Hostované", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Nezisková organizácia", "settings.user.form.currentPassword": "Súčasné heslo", "settings.user.form.email": "E-mail", - "settings.user.form.firstname": "Krstné meno", - "settings.user.form.lastname": "Priezvisko", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nové heslo", "settings.workspace.add.form.name": "Meno", "settings.workspace.add.form.submitButton": "Vytvoriť pracovný priestor", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Skúsiť znova", "settings.workspaces.updatedInfo": "Vaše zmeny boli uložené", "settings.workspaces.workspaceFeatureHeadline": "Menej je viac: Predstavenie Ferdi Pracovné priestory", - "settings.workspaces.workspaceFeatureInfo": "Ferdi Workspace vám umožňujú sústrediť sa na to, čo je práve dôležité. Nastavte si rozličné skupiny služieb a jednoducho medzi nimi kedykoľvek prepínajte. Vy rozhodujete ktoré služby, kedy a kde potrebujete, a my vám potom vieme pomôcť sústrediť sa na prácu - alebo jednoducho prepnúť z práce na čokoľvek iné.", + "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.", "settings.workspaces.workspacesRequestFailed": "Nebolo možné načítať vaše workspace", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Povoliť oznámenia a zvuky", "signup.email.label": "E-mailová adresa", "signup.emailDuplicate": "Používateľ s touto e-mailovou adresou už jestvuje", - "signup.firstname.label": "Krstné meno", + "signup.firstname.label": "First Name", "signup.headline": "Prihlásiť sa", - "signup.lastname.label": "Priezvisko", + "signup.lastname.label": "Last Name", "signup.legal.info": "Vytvorením účtu Ferdi súhlasíte s", "signup.legal.privacy": "Vyhlásenie o ochrane súkromia", "signup.legal.terms": "Podmienky služby", @@ -430,11 +418,11 @@ "signup.password.label": "Heslo", "signup.submit.label": "Vytvoriť účet", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Odstrániť službu", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Vypnúť zvuk", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Zakázať oznámenia", - "tabs.item.disableService": "Vypnúť službu", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Zapnúť zvuk", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Povoliť oznámenia", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Obnoviť", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} je neplatný", - "validation.minLength": "{field} by malo byť dlhé aspoň {length} znakov", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Je nutné zadať aspoň jeden", - "validation.required": "{field} je povinné", - "validation.url": "{field} nie je platné URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Naspäť", "webControls.forward": "Forward", "webControls.goHome": "Úvod", @@ -454,12 +442,12 @@ "webControls.reload": "Obnoviť", "welcome.loginButton": "Prihlásiť sa do vášho účtu", "welcome.signupButton": "Vytvoriť používateľský účet zdarma", - "workspaceDrawer.addNewWorkspaceLabel": "Pridať nový workspace", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Všetky služby", "workspaceDrawer.headline": "Pracovný priestor", "workspaceDrawer.item.contextMenuEdit": "Upraviť", "workspaceDrawer.item.noServicesAddedYet": "Zatiaľ žiadne služby", - "workspaceDrawer.workspaceFeatureInfo": "

    Ferdi Workspace vám umožňujú sústrediť sa na to, čo je práve dôležité. Nastavte si rozličné skupiny služieb a jednoducho medzi nimi kedykoľvek prepínajte.

    Vy rozhodujete ktoré služby, kedy a kde potrebujete, a my vám potom vieme pomôcť sústrediť sa na prácu - alebo jednoducho prepnúť z práce na čokoľvek iné.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Upraviť nastavenia workspace", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Prepínanie na" } diff --git a/src/i18n/locales/sl.json b/src/i18n/locales/sl.json index 2c145d6f4..3a5094e84 100644 --- a/src/i18n/locales/sl.json +++ b/src/i18n/locales/sl.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reload", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -45,7 +44,7 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json index 8ee9417f6..363fb8835 100644 --- a/src/i18n/locales/sr.json +++ b/src/i18n/locales/sr.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Ponovno učitavanje", - "app.errorHandler.headline": "Дошло је до грешке", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Prilagođen server", "changeserver.headline": "Change server", "changeserver.label": "Сервер", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Шта се десило?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Активирај", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Nije moguće pristupiti Ferdi-ovim on-line servisima. ", - "global.cancel": "Odustani", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Uredi", "global.no": "No", "global.notConnectedToTheInternet": "Niste povezani sa serverom.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Postavke", + "global.settings": "Settings", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Detect language automatically", "global.spellchecking.autodetect.short": "Аутоматски", "global.spellchecking.language": "Spell checking language", - "global.submit": "Pošalji", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Uvezite svoje Ferdi 4 servise", "import.notSupportedHeadline": "Servis trenutno nije podržan u Ferdi 5", "import.skip.label": "Желим да додам услуге ручно", - "import.submit.label": "Uvezi servise", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Šta je novo? ", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje ", "infobar.buttonReloadServices": "Ponovo učitaj servise ", "infobar.hide": "Sakrij", @@ -75,7 +74,7 @@ "login.email.label": "Vaša e-adresa", "login.headline": "Prijavite se", "login.invalidCredentials": "E-mail ili lozinka nisu točni", - "login.link.password": "Stvaranje nove lozinke", + "login.link.password": "Reset password", "login.link.signup": "Stvorite besplatan račun", "login.password.label": "Лозинка", "login.serverLogout": "Vaša sesija je istekla, prijavite se ponovo.", @@ -118,7 +117,7 @@ "menu.help.tos": "Услови коришћења услуге", "menu.services": "Usluge", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Sve usluge", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Vaša e-adresa", - "password.headline": "Stvaranje nove lozinke", + "password.headline": "Reset password", "password.link.login": "Prijavite se na Vaš račun", "password.link.signup": "Stvorite besplatan račun", - "password.noUser": "Ne postoji ni jedan korisnik s tom e-mail adresom", - "password.successInfo": "Molimo Vas da provjerite vašu e-mail adresu", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Osvježi {name}", "service.crashHandler.autoReload": "Pokušaću automatski povratiti {name} u {seconds} sekundi", "service.crashHandler.headline": "O, ne! ", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Dobrodošli u Ferdi", - "settings.account.account.editButton": "Uredi račun", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Account is unavailable", "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.", "settings.account.buttonSave": "Ažuriraj profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Добили сте имејл са линком путем којег потврђујете брисање свог налога. Ваш налог и подаци не могу бити повраћени!", "settings.account.deleteInfo": "Уколико Вам више није потребан Франз налог, овде можете обрисати свој налог и све податке везане за исти.", "settings.account.headline": "Korisnički nalog", - "settings.account.headlineAccount": "Podaci o nalogu", - "settings.account.headlineDangerZone": "Зона опреза", - "settings.account.headlineInvoices": "Fakture", - "settings.account.headlinePassword": "Promijenite lozinku", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Ažuriraj profil", "settings.account.successInfo": "Vaše promjene su spremljene", "settings.account.tryReloadServices": "Pokušajte ponovno", "settings.account.tryReloadUserInfoRequest": "Pokušajte ponovno", "settings.account.userInfoRequestFailed": "Nije moguće učitati informacije o korisniku", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Очисти кеш", "settings.app.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje ", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Омогући убрзање графичке јединице", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Omogući provjeru pravopisa", - "settings.app.form.enableSystemTray": "Prikaži aplikaciju u sustavskoj traci", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Dostupne usluge", "settings.recipes.missingService": "Da li neki servis nedostaje?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Usluga uspješno dodana", "settings.searchService": "Претражи услуге", "settings.service.error.goBack": "Nazad do servisa", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Izbriši uslugu", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Uredite {name}", "settings.service.form.enableAudio": "Omogućite zvuk", "settings.service.form.enableBadge": "Покажи беџеве за непрочитане поруке", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Neprofitno", "settings.user.form.currentPassword": "Trenutna lozinka", "settings.user.form.email": "E-pošta", - "settings.user.form.firstname": "Ime", - "settings.user.form.lastname": "Prezime", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nova lozinka", "settings.workspace.add.form.name": "Ime", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Искључи обавештења и звукове", "signup.email.label": "Vaša e-adresa", "signup.emailDuplicate": "Već postoji korisnik s tom e-mail adresom", - "signup.firstname.label": "Ime", + "signup.firstname.label": "First Name", "signup.headline": "Prijava", - "signup.lastname.label": "Prezime", + "signup.lastname.label": "Last Name", "signup.legal.info": "Prilikom stvaranja Ferdi računa, slažete se sa sljedećim stavkama", "signup.legal.privacy": "Izjava o privatnosti", "signup.legal.terms": "Uvjeti korištenja", @@ -430,11 +418,11 @@ "signup.password.label": "Лозинка", "signup.submit.label": "Napravite novi račun", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Izbriši uslugu", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Onemogući zvuk", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Onemogući obavijesti", - "tabs.item.disableService": "Onemogući servis", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Omogućite zvuk", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Omogućite obavijesti", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Ponovno učitavanje", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} није валидно", - "validation.minLength": "{field} треба да буде најмање {length} карактера дугачко", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} је неопходно", - "validation.url": "{field} није валидан УРЛ", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Back", "webControls.forward": "Forward", "webControls.goHome": "Home", diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json index 87b92e398..0b43e5a71 100644 --- a/src/i18n/locales/sv.json +++ b/src/i18n/locales/sv.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Ladda om", - "app.errorHandler.headline": "Någonting gick snett", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Anpassad server", "changeserver.headline": "Byt server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Vad hände?", "connectionLostBanner.message": "Åh nej! Ferdi förlorade anslutningen till {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Skicka felsökningsinformation", "feature.nightlyBuilds.activate": "Aktivera", "feature.nightlyBuilds.info": "Nattliga kompileringar är väldigt experimentella versioner av Ferdi som kan innehålla ofärdiga och ännu ej testade funktioner. Nattliga kompilering är i första hand tänkt för utvecklare för att kunna testa hur nya funktioner fungerar och presterar. Är du osäker på vad detta innebär rekommenderas du att inte aktivera nattliga kompileringar.", "feature.nightlyBuilds.title": "Nattlig kompilering", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Välj en tjänst med TAB, ↑ and ↓. Öppna en tjänst med ENTER.", "feature.quickSwitch.search": "Sök...", "feature.quickSwitch.title": "Snabbväxling", - "global.api.unhealthy": "Kan inte ansluta till Ferdis onlinetjänster", - "global.cancel": "Avbryt", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Redigera", "global.no": "No", "global.notConnectedToTheInternet": "Du är inte ansluten till Internet.", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Inställningar", + "global.settings": "Settings", "global.spellchecker.useDefault": "Använd systemstandard ({default})", "global.spellchecking.autodetect": "Identifiera språk automatiskt", "global.spellchecking.autodetect.short": "Automatisk", "global.spellchecking.language": "Rättstavningsspråk", - "global.submit": "Skicka", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Importera dina Ferdi 4-tjänster", "import.notSupportedHeadline": "Tjänster som ännu inte stöds i Ferdi 5", "import.skip.label": "Jag vill lägga till tjänster manuellt", - "import.submit.label": "Importera tjänster", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Det uppstod fel vid försök då en autentiserad begäran utfördes. Prova att logga ut och in igen om felet kvarstår.", - "infobar.buttonChangelog": "Vad nytt har hänt?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Starta om & installera uppdatering", "infobar.buttonReloadServices": "Ladda om tjänster", "infobar.hide": "Dölj", @@ -75,7 +74,7 @@ "login.email.label": "E-postadress", "login.headline": "Logga in", "login.invalidCredentials": "E-post eller lösenord är felaktigt", - "login.link.password": "Återställ lösenord", + "login.link.password": "Reset password", "login.link.signup": "Skapa ett gratis konto", "login.password.label": "Lösenord", "login.serverLogout": "Din session har gått ut. Vänligen logga in på nytt.", @@ -117,10 +116,10 @@ "menu.help.support": "Support", "menu.help.tos": "Användarvillkor", "menu.services": "Tjänster", - "menu.services.activatePreviousService": "Aktivera föregående tjänst", - "menu.services.addNewService": "Lägg till ny tjänst", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Hem", - "menu.services.setNextServiceActive": "Aktivera nästa tjänst", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", "menu.todos.enableTodos": "Aktivera Todos", "menu.view": "Visa", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Alla tjänster", "menu.workspaces.openWorkspaceDrawer": "Öppna arbetsytan", "password.email.label": "E-postadress", - "password.headline": "Återställ lösenord", + "password.headline": "Reset password", "password.link.login": "Logga in på ditt konto", "password.link.signup": "Skapa ett gratis konto", - "password.noUser": "Ingen användare med den e-postadressen hittades", - "password.successInfo": "Vänligen kontrollera din e-post", - "pricing.features.accountSync": "Synkronisering av konto", - "pricing.features.customWebsites": "Lägg till egna webbplatser", - "pricing.features.desktopNotifications": "Skrivbordsaviseringar", - "pricing.features.onPremise": "Lokala tjänster och andra värdtjänster", - "pricing.features.recipes": "Välj mellan fler än 70 tjänster", - "pricing.features.serviceProxies": "Tjänstens proxies", - "pricing.features.spellchecker": "Stöd för stavningskontroll", - "pricing.features.teamManagement": "Hantera grupp", - "pricing.features.thirdPartyServices": "Installera tjänster från tredje part", - "pricing.features.unlimitedServices": "Lägg till obegränsat antal tjänster", - "pricing.features.workspaces": "Arbetsytor", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Ladda om {name}", "service.crashHandler.autoReload": "Försöker automatiskt återställa {name} om {seconds} sekunder", "service.crashHandler.headline": "Åh nej!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Använd Ferdi utan ett konto", "services.welcome": "Välkommen till Ferdi", - "settings.account.account.editButton": "Redigera konto", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Kontot är inte tillgängligt", "settings.account.accountUnavailableInfo": "Du använder Ferdi utan ett konto. Om du vill använda Ferdi med ett konto och hålla dina tjänster synkroniserade mellan installationer, välj en server i fliken Inställningar och logga in.", "settings.account.buttonSave": "Uppdatera profil", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Du har fått ett e-postmeddelande med en länk för att bekräfta raderingen av ditt konto. Ditt konto och data kan inte återställas!", "settings.account.deleteInfo": "Om du inte behöver ditt Ferdi-konto längre, kan du ta bort ditt konto och all anknuten information här.", "settings.account.headline": "Konto", - "settings.account.headlineAccount": "Kontoinformation", - "settings.account.headlineDangerZone": "Högrisksområde", - "settings.account.headlineInvoices": "Fakturor", - "settings.account.headlinePassword": "Ändra lösenord", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Uppdatera profil", "settings.account.successInfo": "Dina ändringar har sparats", "settings.account.tryReloadServices": "Försök igen", "settings.account.tryReloadUserInfoRequest": "Försök igen", "settings.account.userInfoRequestFailed": "Kunde inte ladda användarinformation", - "settings.account.yourLicense": "Din Ferdi-licens", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Rensa cache", "settings.app.buttonInstallUpdate": "Starta om & installera uppdatering", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Anpassad Todo-server", + "settings.app.form.customTodoServer": "Custom Todo Server", "settings.app.form.darkMode": "Aktivera mörkt läge", "settings.app.form.enableGPUAcceleration": "Aktivera GPU-hårdvaruacceleration", "settings.app.form.enableLock": "Aktivera lösenordslås", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Aktivera stavningskontroll", - "settings.app.form.enableSystemTray": "Visa Ferdi i systemfältet", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Aktivera Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Strategi för vila", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Visa antal olästa meddelanden när aviseringar är inaktiverade", "settings.app.form.startMinimized": "Starta i minimerat läge", "settings.app.form.universalDarkMode": "Aktivera globalt mörkt läge", - "settings.app.form.useTouchIdToUnlock": "Tillåt att TouchID används för att låsa upp Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Avancerat", @@ -267,7 +255,7 @@ "settings.app.languageDisclaimer": "Engelska och tyska är officella översättningar. Övriga språk har översatts av gemenskapen.", "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}.", "settings.app.lockedPassword": "Lösenord", - "settings.app.lockedPasswordInfo": "Se till att du anger ett lösenord du kommer att komma ihåg.\nOm du tappar bort detta lösenord måste du installera om Ferdi.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Ändringar kräver omstart", "settings.app.scheduledDNDInfo": "Schemalagd \"Stör ej\" låter dig definiera en tidsperiod inom vilken du inte vill få meddelanden från Ferdi.", "settings.app.scheduledDNDTimeInfo": "Tid i 24-timmarsformat. Sluttid kan vara före starttid (t.ex. start 17:00, slut 09:00) för att aktivera \"Stör ej\" över natten.", @@ -275,7 +263,7 @@ "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.", "settings.app.subheadlineCache": "Cache", "settings.app.subheadlineFerdiProfile": "Ferdi Profile", - "settings.app.todoServerInfo": "Denna server kommer att användas för \"Ferdi Todo\"-funktionen.", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Hjälp oss att översätta Ferdi till ditt språk.", "settings.app.universalDarkModeInfo": "Globalt mörkt läge försöker att dynamiskt generera en mörk stil för tjänster som ännu inte stöds.", "settings.app.updateStatusAvailable": "Uppdatering tillgänglig, laddar ner...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Tredjepartsrecept från gemenskapen", "settings.recipes.customService.headline.customRecipes": "Egna tredjepartsrecept", "settings.recipes.customService.headline.devRecipes": "Dina recept för utvecklingsservice", - "settings.recipes.customService.intro": "För att lägga till en anpassad tjänst, kopiera receptet för tjänsten till:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Dokumentation för utvecklare", - "settings.recipes.customService.openFolder": "Öppna mapp", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Tillgängliga tjänster", "settings.recipes.missingService": "Saknar du en tjänst?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Tjänsten har lagts till", "settings.searchService": "Sök efter tjänst", "settings.service.error.goBack": "Tillbaka till tjänster", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Ta bort tjänst", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Redigera {name}", "settings.service.form.enableAudio": "Aktivera ljud", "settings.service.form.enableBadge": "Visa olästa meddelandemärken", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Öppna user.js", "settings.service.form.proxy.headline": "Inställningar för HTTP/HTTPS-proxy", "settings.service.form.proxy.host": "Proxy-värd/IP", - "settings.service.form.proxy.info": "Proxyinställningar kommer inte att synkroniseras med Ferdi-servrarna.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Använd proxy", - "settings.service.form.proxy.password": "Lösenord (frivilligt)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Vänligen starta om Ferdi efter att du ändrat proxyinställningar.", - "settings.service.form.proxy.user": "Användare (valfritt)", + "settings.service.form.proxy.user": "User (optional)", "settings.service.form.recipeFileInfo": "Dina användarfiler kommer att infogas i webbsidan så att du kan anpassa tjänsterna hur du vill. Användarfiler lagras endast lokalt och överförs inte till andra datorer som använer samma konto.", "settings.service.form.saveButton": "Spara tjänst", "settings.service.form.tabHosted": "Värd", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Ideell organisation", "settings.user.form.currentPassword": "Nuvarande lösenord", "settings.user.form.email": "E-post", - "settings.user.form.firstname": "Förnamn", - "settings.user.form.lastname": "Efternamn", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Nytt lösenord", "settings.workspace.add.form.name": "Namn", "settings.workspace.add.form.submitButton": "Skapa arbetsyta", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Försök igen", "settings.workspaces.updatedInfo": "Dina ändringar har sparats", "settings.workspaces.workspaceFeatureHeadline": "\"Less is more\": Vi presenterar Ferdi-arbetsytor", - "settings.workspaces.workspaceFeatureInfo": "Ferdi-arbetsytor låter dig fokusera på det som är viktigt just nu. Konfigurera olika uppsättningar av tjänster och växla enkelt mellan dem när som helst. Du bestämmer vilka tjänster du behöver när och var, så att vi kan hjälpa dig att hålla koll på läget - eller enkelt koppla bort från jobbet när du vill.", + "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.", "settings.workspaces.workspacesRequestFailed": "Kunde inte ladda dina arbetsytor", "setupAssistant.headline": "Let's get started", "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Aktivera aviseringar och ljud", "signup.email.label": "E-postadress", "signup.emailDuplicate": "En användare med den e-postadressen finns redan", - "signup.firstname.label": "Förnamn", + "signup.firstname.label": "First Name", "signup.headline": "Registrera dig", - "signup.lastname.label": "Efternamn", + "signup.lastname.label": "Last Name", "signup.legal.info": "Genom att skapa ett Ferdi konto accepterar du", "signup.legal.privacy": "Integritetspolicy", "signup.legal.terms": "Användarvillkor", @@ -430,11 +418,11 @@ "signup.password.label": "Lösenord", "signup.submit.label": "Skapa konto", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Ta bort tjänst", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Inaktivera ljud", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Inaktivera aviseringar", - "tabs.item.disableService": "Inaktivera tjänst", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Aktivera ljud", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Aktivera aviseringar", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Ladda om", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} är felaktig", - "validation.minLength": "{field} bör vara minst {length} tecken lång", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Minst en krävs", - "validation.required": "{field} är obligatoriskt", - "validation.url": "{field} är inte en giltig URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Tillbaka", "webControls.forward": "Framåt", "webControls.goHome": "Hem", @@ -454,12 +442,12 @@ "webControls.reload": "Ladda om", "welcome.loginButton": "Logga in på ditt konto", "welcome.signupButton": "Skapa ett gratis konto", - "workspaceDrawer.addNewWorkspaceLabel": "Skapa ny arbetsyta", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Alla tjänster", "workspaceDrawer.headline": "Arbetsytor", "workspaceDrawer.item.contextMenuEdit": "redigera", "workspaceDrawer.item.noServicesAddedYet": "Inga tjänster har lagts till", - "workspaceDrawer.workspaceFeatureInfo": "

    Ferdi-arbetsytor låter dig fokusera på det som är viktigt just nu. Konfigurera olika uppsättningar av tjänster och växla enkelt mellan dem när som helst.

    Du bestämmer vilka tjänster du behöver när och var, så att vi kan hjälpa dig att hålla koll på läget - eller enkelt koppla bort från jobbet när du vill.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Redigera inställningar för arbetsytor", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Byter till" } diff --git a/src/i18n/locales/te.json b/src/i18n/locales/te.json index be9bbb961..e2e0cdc83 100644 --- a/src/i18n/locales/te.json +++ b/src/i18n/locales/te.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Reload", - "app.errorHandler.headline": "Something went wrong", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "Server", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Publish debugging information", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -45,7 +44,7 @@ "import.headline": "Import your Ferdi 4 services", "import.notSupportedHeadline": "Services not yet supported in Ferdi 5", "import.skip.label": "I want to add services manually", - "import.submit.label": "Import services", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Restart & install update", @@ -118,7 +117,7 @@ "menu.help.tos": "Terms of Service", "menu.services": "Services", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Home", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "Restart & install update", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json index 3b91dfad0..b0c13cf79 100644 --- a/src/i18n/locales/tr.json +++ b/src/i18n/locales/tr.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Yenile", - "app.errorHandler.headline": "Bir terslik çıktı", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Özel sunucu", "changeserver.headline": "Sunucuyu değiştir", "changeserver.label": "Sunucu", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Ne oldu?", "connectionLostBanner.message": "Nayır, nolamaz! Ferdi {name} ile bağlantısını yitirdi.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Hata ayıklama bilgisini yayımla", "feature.nightlyBuilds.activate": "Etkinleştir", "feature.nightlyBuilds.info": "Nightly yapılar Ferdi'nin deneysel sürümleri olup tamamlanmamış özellikler içerebilir. Bu nightly yapılar genellikle geliştiriciler tarafından yeni özellikleri deneyip geliştirmek için kullanılır. Ne yaptığınızı bilmiyorsanız nightly yapıları etkinleştirmeyin.", "feature.nightlyBuilds.title": "Nightly Yapılar", @@ -24,30 +23,30 @@ "feature.quickSwitch.info": "TAB, ↑ ve ↓ ile bir servis seç. ENTER ile bir servisi aç.", "feature.quickSwitch.search": "Ara...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "Ferdi hizmetlerine şu anda erişilemiyor", - "global.cancel": "İptal", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Düzenle", "global.no": "No", "global.notConnectedToTheInternet": "İnternete bağlı değilsiniz.", "global.ok": "Ok", - "global.quit": "Çık", + "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Ayarlar", + "global.settings": "Settings", "global.spellchecker.useDefault": "Sistem Dilini Kullan ({default})", "global.spellchecking.autodetect": "Dili otomatik tespit et", "global.spellchecking.autodetect.short": "Otomatik", "global.spellchecking.language": "İmla kontrol dili", - "global.submit": "Gönder", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "Ferdi 4 servislerinizi içeri aktarın", "import.notSupportedHeadline": "Henüz Ferdi 5'te desteklenmeyen servisler", "import.skip.label": "Servisleri kendim eklemek istiyorum", - "import.submit.label": "Servisleri içe aktar", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "Yetkili bir işlem yapılmaya çalışırken hatalar ortaya çıktı. Lütfen bu hata tekrarlarsa çıkış yapıp tekrar girmeyi dene.", - "infobar.buttonChangelog": "Yeni ne var?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Yeniden Başlat ve Güncelleştirmeleri Kur", "infobar.buttonReloadServices": "Hizmetleri yeniden yükle", "infobar.hide": "Gizle", @@ -75,7 +74,7 @@ "login.email.label": "E-posta adresi", "login.headline": "Oturum Aç", "login.invalidCredentials": "Yanlış parola ya da e-posta adresi", - "login.link.password": "Parola sıfırla", + "login.link.password": "Reset password", "login.link.signup": "Ücretsiz hesap oluştur", "login.password.label": "Şifre", "login.serverLogout": "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.", @@ -117,10 +116,10 @@ "menu.help.support": "Destek", "menu.help.tos": "Kullanım Şartları", "menu.services": "Hizmetler", - "menu.services.activatePreviousService": "Bir önceki servisi aktive et", - "menu.services.addNewService": "Yeni Servis Ekle", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Ana Sayfa", - "menu.services.setNextServiceActive": "Bir sonraki servisi aktive et", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Yapılacaklar", "menu.todos.enableTodos": "Yapılacaklar Listesi'ni Aç", "menu.view": "Görünüm", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Tüm servisler", "menu.workspaces.openWorkspaceDrawer": "Çalışma alanı çekmecesini aç", "password.email.label": "E-posta adresi", - "password.headline": "Parola sıfırla", + "password.headline": "Reset password", "password.link.login": "Hesabına giriş yap", "password.link.signup": "Ücretsiz hesap oluştur", - "password.noUser": "Bu e-posta adresinde bir kullanıcı bulunamadı", - "password.successInfo": "E-postanızı kontrol ediniz", - "pricing.features.accountSync": "Hesap Eşitleme", - "pricing.features.customWebsites": "Özel Siteler Ekle", - "pricing.features.desktopNotifications": "Masaüstü Bildirimleri", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Servis proxy'leri", - "pricing.features.spellchecker": "Yazım denetimi desteği", - "pricing.features.teamManagement": "Takım yönetimi", - "pricing.features.thirdPartyServices": "3. parti servisleri yükleme", - "pricing.features.unlimitedServices": "Sınırsız servis ekleme", - "pricing.features.workspaces": "Çalışma Alanları", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "{name} yeniden yükle", "service.crashHandler.autoReload": "{name}'i {seconds} saniye içerisinde otomatik onarmayı deniyoruz", "service.crashHandler.headline": "Olamaz!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Ferdi'yi bir hesap olmadan kullan", "services.welcome": "Ferdi'a Hoşgeldiniz", - "settings.account.account.editButton": "Hesabı düzenle", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Hesap kullanılamıyor", "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.", "settings.account.buttonSave": "Profili güncelle", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Hesabınızın silinmesini onaylamanız için e-posta adresinize gönderilen bağlantıya tıklayınız. Bu işlem sonrasında hesabınız ve bilgileriniz geri getirilemez!", "settings.account.deleteInfo": "Ferdi hesabınıza artık ihtiyaç duymuyorsanız, hesabınızı ve buradaki bütün bağlantılı bilgilerinizi silebilirsiniz.", "settings.account.headline": "Hesap", - "settings.account.headlineAccount": "Hesap bilgileri", - "settings.account.headlineDangerZone": "Tehlike Bölgesi", - "settings.account.headlineInvoices": "Faturalar", - "settings.account.headlinePassword": "Parolayı değiştir", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Profili güncelle", "settings.account.successInfo": "Değişikliklerin kaydedildi", "settings.account.tryReloadServices": "Tekrar deneyin", "settings.account.tryReloadUserInfoRequest": "Tekrar deneyin", "settings.account.userInfoRequestFailed": "Kullanıcı bilgisi yüklenemedi", - "settings.account.yourLicense": "Ferdi Lisansınız", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Önbelleği temizle", "settings.app.buttonInstallUpdate": "Yeniden Başlat ve Güncelleştirmeleri Kur", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Karanlık modu aç", "settings.app.form.enableGPUAcceleration": "Grafik İşlemci Ünitesi (GPU) Hızlandırıcısını Aktif et", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Yazım denetimini etkinleştir", - "settings.app.form.enableSystemTray": "Ferdi'ı sistem tepsisinde göster", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -296,10 +284,10 @@ "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Developer Documentation", - "settings.recipes.customService.openFolder": "Klasör aç", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Mevcut servisler", "settings.recipes.missingService": "Aradığın servisi bulamadın mı?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Servis başarıyla eklendi", "settings.searchService": "Hizmeti ara", "settings.service.error.goBack": "Servislere geri dön", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Servisi sil", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "{name} düzenle", "settings.service.form.enableAudio": "Sesi etkinleştirin", "settings.service.form.enableBadge": "Okunmamış mesajları göster", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Ayarları", "settings.service.form.proxy.host": "Proxy Sunucusu/IP", - "settings.service.form.proxy.info": "Proxy ayarları Ferdi serverlarına yüklenmeyecektir.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Proxy Kullan", - "settings.service.form.proxy.password": "Parola (opsiyonel)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", "settings.service.form.proxy.restartInfo": "Proxy ayarlarını değiştirdikten sonra Ferdi'ı yeniden başlatınız.", - "settings.service.form.proxy.user": "Kullanıcı (opsiyonel)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Servisi kaydet", "settings.service.form.tabHosted": "Barındırılan", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Kar amacı gütmeyen", "settings.user.form.currentPassword": "Mevcut şifre", "settings.user.form.email": "E-posta", - "settings.user.form.firstname": "Ad", - "settings.user.form.lastname": "Soyad", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Yeni şifre", "settings.workspace.add.form.name": "Ad", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Bildirimleri ve sesli uyarıları etkinleştir", "signup.email.label": "E-posta adresi", "signup.emailDuplicate": "Bu email adresine sahip bir kullanıcı zaten mevcut", - "signup.firstname.label": "Ad", + "signup.firstname.label": "First Name", "signup.headline": "Hesap oluştur", - "signup.lastname.label": "Soyad", + "signup.lastname.label": "Last Name", "signup.legal.info": "Ferdi'ı hesabı oluşturark kabul ediyorsun", "signup.legal.privacy": "Gizlilik Sözleşmesi", "signup.legal.terms": "Kullanım Koşulları", @@ -430,11 +418,11 @@ "signup.password.label": "Şifre", "signup.submit.label": "Hesap oluştur", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Servisi sil", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Sesi kapat", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Bildirimleri devre dışı bırak", - "tabs.item.disableService": "Servisi devre dışı bırak", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Sesi etkinleştirin", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Bildirimleri etkinleştir", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Yenile", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} geçerli değil", - "validation.minLength": "{field} en az {length} karakter uzunluğunda olmalı", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} gereklidir", - "validation.url": "{field} geçerli bir URL değil", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Geri", "webControls.forward": "İleri", "webControls.goHome": "Ana Sayfa", diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index b4f1fb66c..c94c3b9ac 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Перезавантажити", - "app.errorHandler.headline": "Щось пішло не так", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Користувацький сервер", "changeserver.headline": "Змінити сервер", "changeserver.label": "Сервер", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Що трапилось?", "connectionLostBanner.message": "О ні! Ферді втратив з'єднання з {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Опублікувати інформацію для налагодження", "feature.nightlyBuilds.activate": "Активувати", "feature.nightlyBuilds.info": "Нічні збірки - це високоекспериментальні версії Ferdi, що можуть містити \"неполіровані\" або незавершені функції. Нічні збірки в основному використовуються розробниками, щоб перевірити свої нові функції та те, як вони будуть працювати в фінальній версії. Якщо ви не знаєте, що ви робите, то радимо не активувати нічні збірки.", "feature.nightlyBuilds.title": "Нічні збірки", @@ -24,30 +23,30 @@ "feature.quickSwitch.info": "Виберіть сервіс за допомогою TAB, стрілок ↑ та ↓. Натисніть ENTER, щоб відкрити.", "feature.quickSwitch.search": "Пошук...", "feature.quickSwitch.title": "Швидке перемикання", - "global.api.unhealthy": "Не можливо підключитись до онлайн сервісів Ferdi", - "global.cancel": "Відмінити", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Редагувати", "global.no": "No", "global.notConnectedToTheInternet": "Ви не підключені до Інтернету.", "global.ok": "Ok", - "global.quit": "Вийти", + "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Налаштування", + "global.settings": "Settings", "global.spellchecker.useDefault": "Використовувати системні параметри за змовчуванням ({default})", "global.spellchecking.autodetect": "Автоматично визначати мову", "global.spellchecking.autodetect.short": "Автоматично", "global.spellchecking.language": "Мова перевірки правопису", - "global.submit": "Подати", + "global.submit": "Submit", "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.", "global.userAgentPref": "Ідентифікатор браузера", "global.yes": "Yes", "import.headline": "Імпортувати ваші сервіси з Ferdi 4", "import.notSupportedHeadline": "Наразі сервіси не підтримуються у Ferdi 5", "import.skip.label": "Я бажаю додати сервіс вручну", - "import.submit.label": "Імпортувати сервіси", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "Що нового?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Перезавантажити і встановити оновлення", "infobar.buttonReloadServices": "Перезавантажити сервіси", "infobar.hide": "Приховати", @@ -75,7 +74,7 @@ "login.email.label": "Email адреса", "login.headline": "Увійти", "login.invalidCredentials": "Email або пароль некоректні", - "login.link.password": "Скинути пароль", + "login.link.password": "Reset password", "login.link.signup": "Створити безплатний акаунт", "login.password.label": "Пароль", "login.serverLogout": "Ваша сесія закінчилась, будь ласка, увійдіть знову.", @@ -117,10 +116,10 @@ "menu.help.support": "Підтримка", "menu.help.tos": "Умови використання", "menu.services": "Служби", - "menu.services.activatePreviousService": "Активувати попередню службу", - "menu.services.addNewService": "Додати новий сервіс", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Головна", - "menu.services.setNextServiceActive": "Активувати наступний сервіс", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Завдання", "menu.todos.enableTodos": "Увімкнути Завдання", "menu.view": "Вигляд", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Усі сервіси", "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", "password.email.label": "Email адреса", - "password.headline": "Скинути пароль", + "password.headline": "Reset password", "password.link.login": "Увійти до вашого акаунту", "password.link.signup": "Створити безплатний акаунт", - "password.noUser": "Не знайдено жодного користувача з цією email адресою", - "password.successInfo": "Будь ласка, перевірте ваш email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Перезавантажити {name}", "service.crashHandler.autoReload": "Спробую автоматично відновити {name} через {seconds} с", "service.crashHandler.headline": "О, ні!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "Ласкаво просимо в Ferdi", - "settings.account.account.editButton": "Редагувати акаунт", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Обліковий запис недоступний", "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.", "settings.account.buttonSave": "Оновити профіль", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "Ви отримали електронного листа з посиланням, щоб підтвердити видалення облікового запису. Ваш обліковий запис і дані не можна буде відновити!", "settings.account.deleteInfo": "Якщо Вам більше не потрібний обліковий запис Ferdi, Ви можете його видалити і всі суміжні дані.", "settings.account.headline": "Акаунт", - "settings.account.headlineAccount": "Інформація про акаунт", - "settings.account.headlineDangerZone": "На свій страх і ризик", - "settings.account.headlineInvoices": "Інвойси", - "settings.account.headlinePassword": "Змінити пароль", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Оновити профіль", "settings.account.successInfo": "Ваші зміни були збережені", "settings.account.tryReloadServices": "Спробуйте ще раз", "settings.account.tryReloadUserInfoRequest": "Спробуйте ще раз", "settings.account.userInfoRequestFailed": "Не вдалося завантажити інформацію користувача", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Очистити кеш", "settings.app.buttonInstallUpdate": "Перезавантажити і встановити оновлення", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Переходь на Темну Сторону", "settings.app.form.enableGPUAcceleration": "Ввімкнути прискорення GPU", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Увімкнути перевірку орфографії", - "settings.app.form.enableSystemTray": "Показувати Ferdi у системному лотку", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Показувати значок непрочитаних повідомлень коли сповіщення вимкнені", "settings.app.form.startMinimized": "Запускати згорнутим", "settings.app.form.universalDarkMode": "Увімкнути універсальний темний режим", - "settings.app.form.useTouchIdToUnlock": "Дозволити використання TouchID для розблокування Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Use horizontal style", "settings.app.form.wakeUpStrategy": "Wake up strategy", "settings.app.headlineAdvanced": "Додаткові налаштування", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Доступні сервіси", "settings.recipes.missingService": "Не знайшли сервісу?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Сервіс успішно додано", "settings.searchService": "Знайти сервіс", "settings.service.error.goBack": "Повернутись до сервісів", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Видалити сервіс", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Редагувати {name}", "settings.service.form.enableAudio": "Увімкнути звук", "settings.service.form.enableBadge": "Показувати непрочитані повідомлення", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Відкрити user.js", "settings.service.form.proxy.headline": "Налаштування HTTP/HTTPS проксі ", "settings.service.form.proxy.host": "Проксі Host/IP", - "settings.service.form.proxy.info": "Налаштування проксі не будуть синхронізовані із серверами Ferdi", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Використовувати проксі", - "settings.service.form.proxy.password": "Пароль (опційно)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Порт", "settings.service.form.proxy.restartInfo": "Будь ласка, перезапустіть Ferdi після зміни налуштувань проксі", - "settings.service.form.proxy.user": "Користувач (опційно)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Зберегти сервіс", "settings.service.form.tabHosted": "Розміщений", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Некомерційний", "settings.user.form.currentPassword": "Поточний пароль", "settings.user.form.email": "Ел. пошта", - "settings.user.form.firstname": "Ім`я", - "settings.user.form.lastname": "Прізвище", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Новий пароль", "settings.workspace.add.form.name": "Ім'я", "settings.workspace.add.form.submitButton": "Create workspace", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Увімкнути сповіщення та звуки", "signup.email.label": "Email адреса", "signup.emailDuplicate": "Користувач із цією email адресою вже існує", - "signup.firstname.label": "Ім`я", + "signup.firstname.label": "First Name", "signup.headline": "Увійти", - "signup.lastname.label": "Прізвище", + "signup.lastname.label": "Last Name", "signup.legal.info": "Створенням акаунту Ferdi ви приймаєте", "signup.legal.privacy": "Заява про конфіденційність", "signup.legal.terms": "Умови використання", @@ -430,11 +418,11 @@ "signup.password.label": "Пароль", "signup.submit.label": "Створити акаунт", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "Видалити сервіс", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "відключити звук", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "Вимкнути сповіщення", - "tabs.item.disableService": "Вимкнути сервіс", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Увімкнути звук", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "Увімкнути сповіщення", @@ -442,11 +430,11 @@ "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Перезавантажити", "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} не валідне", - "validation.minLength": "Кількість символів в {field} повина бути не меньше {length} ", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "At least one is required", - "validation.required": "{field} обов'язвоке", - "validation.url": "{field} не валідний URL", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Назад", "webControls.forward": "Вперед", "webControls.goHome": "Головна", diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json index 0bf52bf1d..d02ef9110 100644 --- a/src/i18n/locales/vi.json +++ b/src/i18n/locales/vi.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "Tải lại", - "app.errorHandler.headline": "Đã xảy ra lỗi", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Máy chủ tùy chỉnh", "changeserver.headline": "Thay đổi máy chủ", "changeserver.label": "Máy chủ", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "Điều gì đã xảy ra?", "connectionLostBanner.message": "Mất kết nối tới {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "Gửi thông tin gỡ lỗi", "feature.nightlyBuilds.activate": "Kích hoạt", "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.", "feature.nightlyBuilds.title": "Phiên bản Nightly", @@ -24,30 +23,30 @@ "feature.quickSwitch.info": "Chọn một dịch vụ với TAB, ↑ và ↓. Mở một dịch vụ bằng ENTER.", "feature.quickSwitch.search": "Tìm kiếm...", "feature.quickSwitch.title": "Chuyển đổi nhanh", - "global.api.unhealthy": "Không thể kết nối đến máy chủ trực tuyến của Ferdi", - "global.cancel": "Hủy", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "Chỉnh sửa", "global.no": "No", "global.notConnectedToTheInternet": "Bạn không kết nối với Internet.", "global.ok": "Ok", - "global.quit": "Thoát", + "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "Các thiết lập", + "global.settings": "Settings", "global.spellchecker.useDefault": "Dùng mặc định hệ thống ({default})", "global.spellchecking.autodetect": "Tự động phát hiện ngôn ngữ", "global.spellchecking.autodetect.short": "Tự động", "global.spellchecking.language": "Ngôn ngữ kiểm tra chính tả", - "global.submit": "Gửi", + "global.submit": "Submit", "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.", "global.userAgentPref": "Tác nhân Người dùng", "global.yes": "Yes", "import.headline": "Nhập các dịch vụ Ferdi 4 của bạn", "import.notSupportedHeadline": "Các dịch vụ chưa được hỗ trợ trong Ferdi 5", "import.skip.label": "Tôi muốn thêm dịch vụ theo cách thủ công", - "import.submit.label": "Nhập Dịch vụ", + "import.submit.label": "Import {count} services", "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.", - "infobar.buttonChangelog": "Có gì mới?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật", "infobar.buttonReloadServices": "Tải lại dịch vụ", "infobar.hide": "Ẩn", @@ -75,7 +74,7 @@ "login.email.label": "Địa chỉ E-mail", "login.headline": "Đăng nhập", "login.invalidCredentials": "Email hoặc mật khẩu chưa chính xác", - "login.link.password": "Đặt lại mật khẩu", + "login.link.password": "Reset password", "login.link.signup": "Tạo tài khoản miễn phí", "login.password.label": "Mật khẩu", "login.serverLogout": "Phiên làm việc của bạn bị quá hạn, hãy đăng nhập lại.", @@ -117,10 +116,10 @@ "menu.help.support": "Hỗ trợ", "menu.help.tos": "Điều khoản Dịch vụ", "menu.services": "Dịch vụ", - "menu.services.activatePreviousService": "Kích hoạt dịch vụ trước đó", - "menu.services.addNewService": "Thêm Dịch vụ mới", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "Trang chủ", - "menu.services.setNextServiceActive": "Kích hoạt dịch vụ tiếp theo", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Danh sách cần làm", "menu.todos.enableTodos": "Mở danh sách cần làm", "menu.view": "Hiển thị", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "Tất cả Dịch vụ", "menu.workspaces.openWorkspaceDrawer": "Mở không gian làm việc", "password.email.label": "Địa chỉ E-mail", - "password.headline": "Đặt lại mật khẩu", + "password.headline": "Reset password", "password.link.login": "Đăng nhập Tài khoản", "password.link.signup": "Tạo tài khoản miễn phí", - "password.noUser": "Không tìm thấy người dùng được đăng ký với địa chỉ e-mail này", - "password.successInfo": "Vui lòng kiểm tra hộp thư của bạn", - "pricing.features.accountSync": "Đồng bộ hóa Tài khoản", - "pricing.features.customWebsites": "Thêm Trang web tùy chỉnh", - "pricing.features.desktopNotifications": "Thông báo", - "pricing.features.onPremise": "Tại chỗ & các dịch vụ được lưu trữ khác", - "pricing.features.recipes": "Chọn từ hơn 70 Dịch vụ", - "pricing.features.serviceProxies": "Các Proxy Dịch vụ", - "pricing.features.spellchecker": "Hỗ trợ Công cụ kiểm tra chính tả", - "pricing.features.teamManagement": "Quản lý nhóm", - "pricing.features.thirdPartyServices": "Cài đặt dịch vụ của bên thứ 3", - "pricing.features.unlimitedServices": "Thêm dịch vụ không giới hạn", - "pricing.features.workspaces": "Không gian làm việc", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Tải lại {name}", "service.crashHandler.autoReload": "Đang cố gắng tự động khôi phục {name} sau {seconds} giây", "service.crashHandler.headline": "Ồ không!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Sử dụng Ferdi không cần Đăng nhập Tài khoản", "services.welcome": "Chào mừng bạn đến với Ferdi", - "settings.account.account.editButton": "Chỉnh sửa Tài khoản", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "Tài khoản không hợp lệ", "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.", "settings.account.buttonSave": "Cập nhật Hồ sơ", @@ -189,16 +177,16 @@ "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!", "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.", "settings.account.headline": "Tài khoản", - "settings.account.headlineAccount": "Thông tin Tài khoản", - "settings.account.headlineDangerZone": "Vùng Nguy hiểm", - "settings.account.headlineInvoices": "Thanh toán", - "settings.account.headlinePassword": "Thay đổi Mật khẩu", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Cập nhật Hồ sơ", "settings.account.successInfo": "Mọi thay đổi đã được lưu lại", "settings.account.tryReloadServices": "Thử lại", "settings.account.tryReloadUserInfoRequest": "Thử lại", "settings.account.userInfoRequestFailed": "Không thể tải được thông tin người dùng", - "settings.account.yourLicense": "Giấy phép Ferdi của bạn", + "settings.account.yourLicense": "Your Ferdi License:", "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})", "settings.app.buttonClearAllCache": "Xóa bộ nhớ cache", "settings.app.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật", @@ -219,13 +207,13 @@ "settings.app.form.clipboardNotifications": "Không hiển thị thông báo cho các sự kiện khay nhớ tạm", "settings.app.form.closeToSystemTray": "Thu nhỏ Ferdi xuống khay hệ thống", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", - "settings.app.form.customTodoServer": "Tùy chỉnh Server Todo", - "settings.app.form.darkMode": "Cho phép Chế độ nền tối", + "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.darkMode": "Cho phép chế độ nền tối", "settings.app.form.enableGPUAcceleration": "Bật Tăng tốc GPU", "settings.app.form.enableLock": "Cho phép khóa bằng mật khẩu", "settings.app.form.enableMenuBar": "Luôn hiển thị Ferdi trong Menu Bar", "settings.app.form.enableSpellchecking": "Kích hoạt tính năng kiểm tra chính tả", - "settings.app.form.enableSystemTray": "Hiển thị Ferdi trong khay hệ thống", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Cho phép Ferdi Todos", "settings.app.form.hibernateOnStartup": "Giữ các dịch vụ ở chế độ ngủ đông khi khởi động", "settings.app.form.hibernationStrategy": "Chiến lược ngủ đông", @@ -253,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Hiển thị huy hiệu tin nhắn chưa đọc khi tắt thông báo", "settings.app.form.startMinimized": "Bắt đầu thu nhỏ", "settings.app.form.universalDarkMode": "Bật Chế độ tối chung", - "settings.app.form.useTouchIdToUnlock": "Cho phép sử dụng TouchID để mở khóa Ferdi", + "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", "settings.app.form.useVerticalStyle": "Sử dụng kiểu ngang", "settings.app.form.wakeUpStrategy": "Chiến lược đánh thức", "settings.app.headlineAdvanced": "Nâng cao", @@ -265,9 +253,9 @@ "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.", "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", "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.", - "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}.", + "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}.", "settings.app.lockedPassword": "Mật khẩu", - "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.", + "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Các thay đổi yêu cầu khởi động lại", "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.", "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.", @@ -275,7 +263,7 @@ "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.", "settings.app.subheadlineCache": "Bộ nhớ đệm", "settings.app.subheadlineFerdiProfile": "Hồ sơ Ferdi", - "settings.app.todoServerInfo": "Máy chủ này sẽ được sử dụng cho tính năng \"Ferdi Todo\".", + "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", "settings.app.translationHelp": "Giúp chúng tôi dịch Ferdi sang ngôn ngữ của bạn.", "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ợ.", "settings.app.updateStatusAvailable": "Bản cập nhật phù hợp, đang tải...", @@ -294,12 +282,12 @@ "settings.recipes.customService.headline.communityRecipes": "Công thức của cộng đồng bên thứ 3", "settings.recipes.customService.headline.customRecipes": "Công thức của tùy chỉnh bên thứ 3", "settings.recipes.customService.headline.devRecipes": "Công thức dịch vụ phát triển của bạn", - "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:", + "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Tài liệu dành cho nhà phát triển", - "settings.recipes.customService.openFolder": "Mở thư mục", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Các dịch vụ có sẵn", "settings.recipes.missingService": "Thiếu một dịch vụ?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Đã thêm dịch vụ thành công", "settings.searchService": "Tìm kiếm dịch vụ", "settings.service.error.goBack": "Quay lại dịch vụ", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Độ sáng trình đọc tối", "settings.service.form.darkReaderContrast": "Độ tương phản trình đọc tối", "settings.service.form.darkReaderSepia": "Màu nâu đỏ của trình đọc tối", - "settings.service.form.deleteButton": "Xóa dịch vụ", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "Chỉnh sửa {name}", "settings.service.form.enableAudio": "Cho phép âm thanh", "settings.service.form.enableBadge": "Hiển thị huy hiệu tin nhắn chưa đọc", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Mở user.js", "settings.service.form.proxy.headline": "Cài đặt Proxy HTTP / HTTPS", "settings.service.form.proxy.host": "Máy chủ Proxy/IP", - "settings.service.form.proxy.info": "Cài đặt proxy sẽ không được đồng bộ hóa với máy chủ Ferdi.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Sử dụng Proxy", - "settings.service.form.proxy.password": "Mật khẩu (tùy chọn)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Cổng", "settings.service.form.proxy.restartInfo": "Vui lòng khởi động lại Ferdi sau khi thay đổi Cài đặt proxy.", - "settings.service.form.proxy.user": "Người dùng (tùy chọn)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "Lưu dịch vụ", "settings.service.form.tabHosted": "Trở thành host", @@ -362,12 +350,12 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi là một ứng dụng mã nguồn mở và dẫn dắt cộng đồng.

    Cảm ơn những người tạo nên sự khả thi này:

    ", "settings.supportFerdi.bannerText": "Bạn có muốn giúp chúng tôi cải thiện Ferdi không?", "settings.supportFerdi.headline": "Giới thiệu về phần mềm Ferdi", - "settings.supportFerdi.openSurvey": "Mở khảo sát", + "settings.supportFerdi.openSurvey": "Open survey", "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,", "settings.supportFerdi.textDonationAnd": "và", "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", "settings.supportFerdi.textGitHubSponsors": "Tài trợ bởi GitHub", - "settings.supportFerdi.textListContributors": "Toàn danh sách người đóng góp", + "settings.supportFerdi.textListContributors": "Full list of contributors", "settings.supportFerdi.textListContributorsHere": "tại đây", "settings.supportFerdi.textOpenCollective": "Mở Cộng đồng", "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", @@ -377,7 +365,7 @@ "settings.team.contentHeadline": "Quản lý nhóm Franz", "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.", "settings.team.headline": "Nhóm", - "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.", + "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", "settings.team.manageAction": "Quản lý Nhóm của bạn trên meetfranz.com", "settings.team.teamsUnavailable": "Các đội không có sẵn", "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.", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "Phi lợi nhuận", "settings.user.form.currentPassword": "Mật khẩu hiện tại", "settings.user.form.email": "E-mail", - "settings.user.form.firstname": "Tên", - "settings.user.form.lastname": "Họ, tên đệm", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "Mật khẩu mới", "settings.workspace.add.form.name": "Tên", "settings.workspace.add.form.submitButton": "Tạo không gian làm việc", @@ -405,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Thử lại", "settings.workspaces.updatedInfo": "Mọi thay đổi đã được lưu lại", "settings.workspaces.workspaceFeatureHeadline": "Ít hơn là Nhiều hơn: Giới thiệu Không gian làm việc Ferdi", - "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.", + "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.", "settings.workspaces.workspacesRequestFailed": "Không thể tải không gian làm việc của bạn", "setupAssistant.headline": "Bắt đầu nào", "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ờ.", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "Bật thông báo và âm thanh", "signup.email.label": "Địa chỉ E-mail", "signup.emailDuplicate": "Một người dùng với địa chỉ email đó đã tồn tại", - "signup.firstname.label": "Tên", + "signup.firstname.label": "First Name", "signup.headline": "Đăng ký", - "signup.lastname.label": "Họ, tên đệm", + "signup.lastname.label": "Last Name", "signup.legal.info": "Bằng cách tạo tài khoản Ferdi, bạn chấp nhận", "signup.legal.privacy": "Cam kết Bảo mật", "signup.legal.terms": "Điều khoản dịch vụ", @@ -430,23 +418,23 @@ "signup.password.label": "Mật khẩu", "signup.submit.label": "Tạo Tài khoản", "tabs.item.confirmDeleteService": "Bạn có thực sự muốn xóa dịch vụ {serviceName} không?", - "tabs.item.deleteService": "Xóa dịch vụ", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Vô hiệu hóa âm thanh", "tabs.item.disableDarkMode": "Vô hiệu hóa chế độ tối", "tabs.item.disableNotifications": "Vô hiệu hóa thông báo", - "tabs.item.disableService": "Vô hiệu hóa dịch vụ", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "Cho phép âm thanh", "tabs.item.enableDarkMode": "Kích hoạt chế độ tối", "tabs.item.enableNotification": "Kích hoạt thông báo", "tabs.item.enableService": "Kích hoạt dịch vụ", - "tabs.item.hibernateService": "Đưa dịch vụ vào trạng thái ngủ đông", + "tabs.item.hibernateService": "Hibernate service", "tabs.item.reload": "Tải lại", - "tabs.item.wakeUpService": "Đánh thức dịch vụ", - "validation.email": "{field} không hợp lệ", - "validation.minLength": "{field} phải dài ít nhất {length} ký tự", + "tabs.item.wakeUpService": "Wake up service", + "validation.email": "{field} is not valid", + "validation.minLength": "{field} should be at least {length} characters long", "validation.oneRequired": "Ít nhất một cái được yêu cầu", - "validation.required": "{field} là bắt buộc", - "validation.url": "{field} không phải là URL hợp lệ", + "validation.required": "{field} is required", + "validation.url": "{field} is not a valid URL", "webControls.back": "Quay lại", "webControls.forward": "Tới trước", "webControls.goHome": "Trang chủ", @@ -454,12 +442,12 @@ "webControls.reload": "Tải lại", "welcome.loginButton": "Đăng nhập vào tài khoản của bạn", "welcome.signupButton": "Tạo tài khoản miễn phí", - "workspaceDrawer.addNewWorkspaceLabel": "Thêm Không gian làm việc mới", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "Tất cả Dịch vụ", "workspaceDrawer.headline": "Không gian làm việc", "workspaceDrawer.item.contextMenuEdit": "chỉnh sửa", "workspaceDrawer.item.noServicesAddedYet": "Không có dịch vụ bổ sung", - "workspaceDrawer.workspaceFeatureInfo": "

    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.

    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.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Chỉnh sửa cài đặt không gian làm việc", + "workspaceDrawer.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.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Chuyển sang" } diff --git a/src/i18n/locales/zh-HANT.json b/src/i18n/locales/zh-HANT.json index 22a0b6771..9731b71a9 100644 --- a/src/i18n/locales/zh-HANT.json +++ b/src/i18n/locales/zh-HANT.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "重新加載", - "app.errorHandler.headline": "出現錯誤", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "切換服務器", "changeserver.label": "伺服器", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "發布除錯訊息", "feature.nightlyBuilds.activate": "Activate", "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.", "feature.nightlyBuilds.title": "Nightly Builds", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "搜尋...", "feature.quickSwitch.title": "QuickSwitch", - "global.api.unhealthy": "無法連接到Ferdi網路服務", - "global.cancel": "取消", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "編輯", "global.no": "No", "global.notConnectedToTheInternet": "您未連上網際網路", @@ -33,21 +32,21 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "設置", + "global.settings": "Settings", "global.spellchecker.useDefault": "使用系統預設值({default})", "global.spellchecking.autodetect": "自動檢測語言", "global.spellchecking.autodetect.short": "自動", "global.spellchecking.language": "拼字檢查語言", - "global.submit": "送出", + "global.submit": "Submit", "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.", "global.userAgentPref": "User Agent", "global.yes": "Yes", "import.headline": "匯入您的 Ferdi 4 服務", "import.notSupportedHeadline": "此服務不被 Ferdi 5 支持", "import.skip.label": "我想手動匯入", - "import.submit.label": "匯入服務", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", - "infobar.buttonChangelog": "最新消息!", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "重新啟動並且更新", "infobar.buttonReloadServices": "重新載入", "infobar.hide": "隱藏", @@ -75,7 +74,7 @@ "login.email.label": "電子郵件信箱", "login.headline": "登入", "login.invalidCredentials": "電子郵件帳戶或密碼有誤", - "login.link.password": "密碼重設", + "login.link.password": "Reset password", "login.link.signup": "建立一個免費帳戶", "login.password.label": "密碼", "login.serverLogout": "登入狀態過期,請重新登入", @@ -118,7 +117,7 @@ "menu.help.tos": "服務條款", "menu.services": "服務", "menu.services.activatePreviousService": "Activate previous service", - "menu.services.addNewService": "Add New Service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "主頁", "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "Todos", @@ -148,22 +147,11 @@ "menu.workspaces.defaultWorkspace": "所有服務", "menu.workspaces.openWorkspaceDrawer": "打開工作區", "password.email.label": "電子郵件信箱", - "password.headline": "密碼重設", + "password.headline": "Reset password", "password.link.login": "登入您的帳戶", "password.link.signup": "建立一個免費帳戶", - "password.noUser": "此電子郵件帳戶不存在", - "password.successInfo": "請重新確認您的電子郵件信箱", - "pricing.features.accountSync": "帳號同步", - "pricing.features.customWebsites": "添加自訂網站", - "pricing.features.desktopNotifications": "桌面通知", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "工作區", + "password.noUser": "No user with that email address was found", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "唉呀 糟糕!", @@ -181,7 +169,7 @@ "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!", "services.serverless": "Use Ferdi without an Account", "services.welcome": "歡迎使用 Ferdi", - "settings.account.account.editButton": "更改帳戶資訊", + "settings.account.account.editButton": "Edit account", "settings.account.accountUnavailable": "帳號無法使用", "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.", "settings.account.buttonSave": "更新帳戶資訊", @@ -189,16 +177,16 @@ "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "settings.account.deleteInfo": "If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "settings.account.headline": "帳戶", - "settings.account.headlineAccount": "帳戶資訊", - "settings.account.headlineDangerZone": "危險操作區", - "settings.account.headlineInvoices": "发票", - "settings.account.headlinePassword": "更改密碼", + "settings.account.headlineAccount": "Account information", + "settings.account.headlineDangerZone": "Danger Zone", + "settings.account.headlineInvoices": "Invoices", + "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "更新帳戶資訊", "settings.account.successInfo": "您的更改已經儲存", "settings.account.tryReloadServices": "再試一次", "settings.account.tryReloadUserInfoRequest": "再試一次", "settings.account.userInfoRequestFailed": "無法載入帳戶資訊", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "清除緩存", "settings.app.buttonInstallUpdate": "重新啟動並且更新", @@ -225,7 +213,7 @@ "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "在系統匣上顯示", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -296,10 +284,10 @@ "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", "settings.recipes.customService.openDevDocs": "Developer Documentation", - "settings.recipes.customService.openFolder": "開啟資料夾", + "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "可用服務", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "新增服務成功", "settings.searchService": "Search service", "settings.service.error.goBack": "返回", @@ -312,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "刪除", + "settings.service.form.deleteButton": "Delete service", "settings.service.form.editServiceHeadline": "編輯 {name}", "settings.service.form.enableAudio": "啟用音效", "settings.service.form.enableBadge": "Show unread message badges", @@ -337,12 +325,12 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "使用代理", - "settings.service.form.proxy.password": "密碼(可選擇)", + "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "連接埠", "settings.service.form.proxy.restartInfo": "Please restart Ferdi after changing proxy Settings.", - "settings.service.form.proxy.user": "用戶(可選擇)", + "settings.service.form.proxy.user": "User (optional)", "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.", "settings.service.form.saveButton": "儲存", "settings.service.form.tabHosted": "Hosted", @@ -387,8 +375,8 @@ "settings.user.form.accountType.non-profit": "非營利", "settings.user.form.currentPassword": "舊密碼", "settings.user.form.email": "電子郵件信箱", - "settings.user.form.firstname": "名子", - "settings.user.form.lastname": "姓氏", + "settings.user.form.firstname": "First Name", + "settings.user.form.lastname": "Last Name", "settings.user.form.newPassword": "新密碼", "settings.workspace.add.form.name": "名子", "settings.workspace.add.form.submitButton": "建立工作區", @@ -420,9 +408,9 @@ "sidebar.unmuteApp": "啟用通知", "signup.email.label": "電子郵件信箱", "signup.emailDuplicate": "此電子郵件信箱已被註冊", - "signup.firstname.label": "名子", + "signup.firstname.label": "First Name", "signup.headline": "註冊", - "signup.lastname.label": "姓氏", + "signup.lastname.label": "Last Name", "signup.legal.info": "在建立帳戶同時,您同意:", "signup.legal.privacy": "隱私聲明", "signup.legal.terms": "服務條款", @@ -430,11 +418,11 @@ "signup.password.label": "密碼", "signup.submit.label": "建立帳戶", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", - "tabs.item.deleteService": "刪除", + "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "停用音效", "tabs.item.disableDarkMode": "Disable Dark mode", "tabs.item.disableNotifications": "停用通知", - "tabs.item.disableService": "停用服務", + "tabs.item.disableService": "Disable service", "tabs.item.enableAudio": "啟用音效", "tabs.item.enableDarkMode": "Enable Dark mode", "tabs.item.enableNotification": "啟用通知", @@ -454,7 +442,7 @@ "webControls.reload": "重新加載", "welcome.loginButton": "登入", "welcome.signupButton": "建立一個免費帳戶", - "workspaceDrawer.addNewWorkspaceLabel": "新增工作區", + "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", "workspaceDrawer.allServices": "所有服務", "workspaceDrawer.headline": "工作區", "workspaceDrawer.item.contextMenuEdit": "編輯", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index fa30d636a..e20ca75d0 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -1,6 +1,6 @@ { "app.errorHandler.action": "重新加载", - "app.errorHandler.headline": "出了些问题", + "app.errorHandler.headline": "Something went wrong.", "changeserver.customServerLabel": "Custom server", "changeserver.headline": "Change server", "changeserver.label": "服务器:", @@ -10,7 +10,6 @@ "connectionLostBanner.informationLink": "发生了什么?", "connectionLostBanner.message": "哦不!Ferdi失去了与 {name} 的连接。", "feature.basicAuth.signIn": "Sign In", - "feature.debugger.title": "发布调试信息", "feature.nightlyBuilds.activate": "激活", "feature.nightlyBuilds.info": "每夜版(Nightly builds) 是Ferdi的实验性版本,可能包含未完善或未完成的功能。这些每夜版主要由开发人员来测试他们新开发的功能及它们在最终版本的的表现。如果您不知道自己在做什么,我们建议您不要激活每夜版。", "feature.nightlyBuilds.title": "每夜版", @@ -24,8 +23,8 @@ "feature.quickSwitch.info": "使用 TAB ,↑ 和 ↓ 选择服务。使用回车键(ENTER)打开服务", "feature.quickSwitch.search": "搜索...", "feature.quickSwitch.title": "快速切换", - "global.api.unhealthy": "无法链接到 Ferdi 在线服务", - "global.cancel": "取消", + "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.cancel": "Cancel", "global.edit": "编辑", "global.no": "No", "global.notConnectedToTheInternet": "您没有连接到互联网。", @@ -33,7 +32,7 @@ "global.quit": "Quit", "global.quitConfirmation": "Do you really want to quit Ferdi?", "global.save": "Save", - "global.settings": "设置", + "global.settings": "Settings", "global.spellchecker.useDefault": "使用系统默认值 ({default})", "global.spellchecking.autodetect": "自动检测语言", "global.spellchecking.autodetect.short": "自动", @@ -45,9 +44,9 @@ "import.headline": "导入你的 Ferdi 4 服务", "import.notSupportedHeadline": "Ferdi 5尚未支持的服务", "import.skip.label": "我想手动添加服务", - "import.submit.label": "导入服务", + "import.submit.label": "Import {count} services", "infobar.authRequestFailed": "尝试进行身份验证时出错。如果此错误仍存在,请尝试注销并重新登录。", - "infobar.buttonChangelog": "有什么新鲜事?", + "infobar.buttonChangelog": "What is new?", "infobar.buttonInstallUpdate": "重启并安装更新", "infobar.buttonReloadServices": "重载服务", "infobar.hide": "隐藏", @@ -117,10 +116,10 @@ "menu.help.support": "支持", "menu.help.tos": "服务条款", "menu.services": "服务", - "menu.services.activatePreviousService": "激活以前的服务", - "menu.services.addNewService": "Add New Service", + "menu.services.activatePreviousService": "Activate previous service", + "menu.services.addNewService": "Add New Service...", "menu.services.goHome": "主页", - "menu.services.setNextServiceActive": "激活下一个服务", + "menu.services.setNextServiceActive": "Activate next service", "menu.todos": "待办事项", "menu.todos.enableTodos": "启用待办事项", "menu.view": "查看", @@ -152,18 +151,7 @@ "password.link.login": "Sign in to your account", "password.link.signup": "Create a free account", "password.noUser": "No user with that email address was found", - "password.successInfo": "Please check your email", - "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.customWebsites": "Add Custom Websites", - "pricing.features.desktopNotifications": "Desktop Notifications", - "pricing.features.onPremise": "On-premise & other Hosted Services", - "pricing.features.recipes": "Choose from more than 70 Services", - "pricing.features.serviceProxies": "Service Proxies", - "pricing.features.spellchecker": "Spellchecker support", - "pricing.features.teamManagement": "Team Management", - "pricing.features.thirdPartyServices": "Install 3rd party services", - "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.workspaces": "Workspaces", + "password.successInfo": "Your new password was sent to your email address", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -198,7 +186,7 @@ "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", "settings.account.userInfoRequestFailed": "Could not load user information", - "settings.account.yourLicense": "Your Ferdi License", + "settings.account.yourLicense": "Your Ferdi License:", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "settings.app.buttonClearAllCache": "Clear cache", "settings.app.buttonInstallUpdate": "重启并安装更新", @@ -220,12 +208,12 @@ "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", "settings.app.form.confirmOnQuit": "Confirm when quitting Ferdi", "settings.app.form.customTodoServer": "Custom Todo Server", - "settings.app.form.darkMode": "Enable dark mode", + "settings.app.form.darkMode": "Enable Dark Mode", "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration", "settings.app.form.enableLock": "Enable Password Lock", "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", "settings.app.form.enableSpellchecking": "Enable spell checking", - "settings.app.form.enableSystemTray": "Show Ferdi in system tray", + "settings.app.form.enableSystemTray": "Always show Ferdi in System Tray", "settings.app.form.enableTodos": "Enable Ferdi Todos", "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", "settings.app.form.hibernationStrategy": "Hibernation strategy", @@ -299,7 +287,7 @@ "settings.recipes.customService.openFolder": "Open folder", "settings.recipes.headline": "Available services", "settings.recipes.missingService": "Missing a service?", - "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.", + "settings.recipes.nothingFound": "Sorry, but no service matched your search term. 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.", "settings.recipes.servicesSuccessfulAddedInfo": "Service successfully added", "settings.searchService": "Search service", "settings.service.error.goBack": "Back to services", @@ -337,7 +325,7 @@ "settings.service.form.openUserJs": "Open user.js", "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy Settings", "settings.service.form.proxy.host": "Proxy Host/IP", - "settings.service.form.proxy.info": "Proxy settings will not synced with the Ferdi servers.", + "settings.service.form.proxy.info": "Proxy settings will not be synchronized with the Ferdi servers.", "settings.service.form.proxy.isEnabled": "Use Proxy", "settings.service.form.proxy.password": "Password (optional)", "settings.service.form.proxy.port": "Port", -- cgit v1.2.3-70-g09d2 From fe5fc3f8829421149a51892811d358b2e565b011 Mon Sep 17 00:00:00 2001 From: Ferdi Bot <56048320+FerdiBot@users.noreply.github.com> Date: Tue, 14 Sep 2021 19:41:03 +0200 Subject: New Crowdin updates (#1939) --- src/i18n/locales/it.json | 70 ++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index d833ec5dc..82ce4d40d 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -23,7 +23,7 @@ "feature.quickSwitch.info": "Seleziona un servizio con TAB, ↑ e ↓. Apri un servizio con INVIO.", "feature.quickSwitch.search": "Cerca...", "feature.quickSwitch.title": "Cambio Veloce", - "global.api.unhealthy": "Can't connect to Ferdi online services", + "global.api.unhealthy": "Impossibile connettersi ai servizi online di Ferdi", "global.cancel": "Annulla", "global.edit": "Modifica", "global.no": "No", @@ -46,7 +46,7 @@ "import.skip.label": "Voglio aggiungere i servizi manualmente", "import.submit.label": "Importa {count} servizi", "infobar.authRequestFailed": "Si sono verificati errori durante il tentativo di eseguire una richiesta autenticata. Si prega di provare a disconnettersi e tornare indietro se questo errore persiste.", - "infobar.buttonChangelog": "What is new?", + "infobar.buttonChangelog": "Cosa c'è di nuovo?", "infobar.buttonInstallUpdate": "Riavvia e installa l'aggiornamento", "infobar.buttonReloadServices": "Ricarica servizi", "infobar.hide": "Nascondi", @@ -74,7 +74,7 @@ "login.email.label": "Indirizzo email", "login.headline": "Accedi", "login.invalidCredentials": "Email o password non valide", - "login.link.password": "Reset password", + "login.link.password": "Reimposta password", "login.link.signup": "Crea un account gratuito", "login.password.label": "Password", "login.serverLogout": "La tua sessione è scaduta, per favore accedi di nuovo.", @@ -116,10 +116,10 @@ "menu.help.support": "Supporto", "menu.help.tos": "Termini di Servizio", "menu.services": "Servizi", - "menu.services.activatePreviousService": "Activate previous service", + "menu.services.activatePreviousService": "Attiva servizio precedente", "menu.services.addNewService": "Aggiungi nuovo servizio...", "menu.services.goHome": "Home", - "menu.services.setNextServiceActive": "Activate next service", + "menu.services.setNextServiceActive": "Attiva servizio seguente", "menu.todos": "Todo", "menu.todos.enableTodos": "Abilita Todos", "menu.view": "Visualizza", @@ -147,10 +147,10 @@ "menu.workspaces.defaultWorkspace": "Tutti i servizi", "menu.workspaces.openWorkspaceDrawer": "Apri il menu dei workspace", "password.email.label": "Indirizzo email", - "password.headline": "Reset password", + "password.headline": "Reimposta password", "password.link.login": "Accedi al tuo account", "password.link.signup": "Crea un account gratuito", - "password.noUser": "No user with that email address was found", + "password.noUser": "Non è stato trovato nessun utente con questo indirizzo email", "password.successInfo": "Una nuova password è stata inviata al tuo indirizzo email", "service.crashHandler.action": "Ricarica {name}", "service.crashHandler.autoReload": "Tentativo di ripristino automatico di {name} in {seconds} secondi", @@ -169,7 +169,7 @@ "services.serverInfo": "Facoltativamente, puoi cambiare il tuo server Ferdi cliccando l'ingranaggio nell'angolo in basso a sinistra. Se stai passando (da uno dei server ospitati) ad usare Ferdi senza un account, sappi che puoi esportare i tuoi dati da quel server e successivamente importarli usando il menu Aiuto per ripristinare tutti i tuoi spazi di lavoro e servizi configurati!", "services.serverless": "Usa Ferdi senza account", "services.welcome": "Benvenuto su Ferdi", - "settings.account.account.editButton": "Edit account", + "settings.account.account.editButton": "Modifica account", "settings.account.accountUnavailable": "Account non disponibile", "settings.account.accountUnavailableInfo": "Stai usando Ferdi senza un account. Se si desidera aggiungere un account, e tenere sincronizzati i servizi tra le installazioni, selezionare un server nel tab delle Impostazioni e quindi login.", "settings.account.buttonSave": "Aggiorna profilo", @@ -177,10 +177,10 @@ "settings.account.deleteEmailSent": "Hai ricevuto un'email con un link per confermare l'eliminazione del tuo account. I dati del tuo account non potranno più essere ripristinati!", "settings.account.deleteInfo": "Se non hai più bisogno dell'account Ferdi, puoi eliminare il tuo account e tutti i dati relativi qui.", "settings.account.headline": "Account", - "settings.account.headlineAccount": "Account information", + "settings.account.headlineAccount": "Informazioni account", "settings.account.headlineDangerZone": "Zona Pericolosa", "settings.account.headlineInvoices": "Fatture", - "settings.account.headlinePassword": "Change password", + "settings.account.headlinePassword": "Cambia password", "settings.account.headlineProfile": "Aggiorna profilo", "settings.account.successInfo": "Le tue modifiche sono state salvate", "settings.account.tryReloadServices": "Riprova", @@ -207,7 +207,7 @@ "settings.app.form.clipboardNotifications": "Non mostrare notifiche per eventi dagli appunti", "settings.app.form.closeToSystemTray": "Chiudi Ferdi nell'area di notifica", "settings.app.form.confirmOnQuit": "Conferma quando esci da Ferdi", - "settings.app.form.customTodoServer": "Custom Todo Server", + "settings.app.form.customTodoServer": "Server Todo personalizzato", "settings.app.form.darkMode": "Attiva la modalità scura.", "settings.app.form.enableGPUAcceleration": "Attiva Accelerazione GPU", "settings.app.form.enableLock": "Abilita blocco con password", @@ -241,7 +241,7 @@ "settings.app.form.showMessagesBadgesWhenMuted": "Mostra l'etichetta dei messaggi non letti quando le notifiche sono disattivate", "settings.app.form.startMinimized": "Avvio ridotto a icona", "settings.app.form.universalDarkMode": "Abilita la modalità scura universale", - "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", + "settings.app.form.useTouchIdToUnlock": "Consenti l'utilizzo di TouchID per sbloccare Ferdi", "settings.app.form.useVerticalStyle": "Usa stile orizzontale", "settings.app.form.wakeUpStrategy": "Strategia di risveglio", "settings.app.headlineAdvanced": "Avanzate", @@ -253,9 +253,9 @@ "settings.app.hibernateInfo": "Per impostazione predefinita, Ferdi manterrà tutti i servizi aperti e caricati in background in modo che siano pronti quando si desidera utilizzarli. Il servizio Hibernation sospenderà i servizi dopo un tempo specificato. Questo è utile per risparmiare RAM o per evitare che i servizi rallentino il computer.", "settings.app.inactivityLockInfo": "Minuti di inattività oltre i quali Ferdi si bloccherà automaticamente, 0 per disabilitare", "settings.app.languageDisclaimer": "Le traduzioni ufficiali sono in Inglese e Tedesco. Tutte le altre lingue sono tradotte dalla community.", - "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}.", + "settings.app.lockInfo": "Password Lock ti permette di mantenere i tuoi messaggi protetti. Usando Password Lock, ti verrà richiesto di inserire la tua password ogni volta che avvii Ferdi o di bloccare Ferdi stesso usando il simbolo del lucchetto nell'angolo in basso a sinistra o la scorciatoia {lockShortcut}.", "settings.app.lockedPassword": "Password", - "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", + "settings.app.lockedPasswordInfo": "Assicurati di impostare una password che ricordi.\nSe perdi questa password, dovrai reinstallare Ferdi.", "settings.app.restartRequired": "Le modifiche richiedono un riavvio", "settings.app.scheduledDNDInfo": "I Do-not-Disturb pianificati consentono di definire un periodo di tempo nel quale le notifiche da Ferdi saranno disabilitate.", "settings.app.scheduledDNDTimeInfo": "Ora in formato 24 ore. L'ora di fine può essere prima dell'ora di inizio (ad esempio inizio 17:00, fine 09:00) per abilitare Do-not-Disturb durante la notte.", @@ -282,9 +282,9 @@ "settings.recipes.customService.headline.communityRecipes": "'Recipe' (istruzioni) per applicazioni di terze parti della community", "settings.recipes.customService.headline.customRecipes": "'Recipe' (istruzioni) per applicazioni di terze parti personalizzate", "settings.recipes.customService.headline.devRecipes": "Le tue 'Recipe' (istruzioni) per applicazioni", - "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", + "settings.recipes.customService.intro": "Per aggiungere un servizio personalizzato copia la sua 'recipe' in:", "settings.recipes.customService.openDevDocs": "Documentazione per sviluppatori", - "settings.recipes.customService.openFolder": "Open folder", + "settings.recipes.customService.openFolder": "Apri cartella", "settings.recipes.headline": "Servizi disponibili", "settings.recipes.missingService": "Manca un servizio?", "settings.recipes.nothingFound": "Siamo spiacenti, ma nessun servizio corrisponde al tuo termine di ricerca. Si prega di notare che il sito web potrebbe mostrare altri servizi che sono stati aggiunti a Ferdi dalla versione in cui ti trovi attualmente. Per ottenere questi nuovi servizi, considera l'aggiornamento a una versione più recente di Ferdi.", @@ -300,7 +300,7 @@ "settings.service.form.darkReaderBrightness": "Luminosità della Modalità Scura", "settings.service.form.darkReaderContrast": "Contrasto della Modalità Scura", "settings.service.form.darkReaderSepia": "Dark Reader Sepia", - "settings.service.form.deleteButton": "Delete service", + "settings.service.form.deleteButton": "Elimina servizio", "settings.service.form.editServiceHeadline": "Modifica {name}", "settings.service.form.enableAudio": "Attiva audio", "settings.service.form.enableBadge": "Mostra l'etichetta dei messaggi non letti", @@ -327,10 +327,10 @@ "settings.service.form.proxy.host": "Proxy Host/IP", "settings.service.form.proxy.info": "Le impostazioni proxy non saranno sincronizzate con i server Ferdi.", "settings.service.form.proxy.isEnabled": "Usa un Proxy", - "settings.service.form.proxy.password": "Password (optional)", + "settings.service.form.proxy.password": "Password (opzionale)", "settings.service.form.proxy.port": "Porta", "settings.service.form.proxy.restartInfo": "Riavvia Ferdi dopo aver cambiato le impostazioni del proxy.", - "settings.service.form.proxy.user": "User (optional)", + "settings.service.form.proxy.user": "Utente (opzionale)", "settings.service.form.recipeFileInfo": "I file utente (user file) verranno iniettati nella pagina web così da poter personalizzare il servizio nel modo che preferisci. Questi file verranno memorizzati solo localmente e non verranno trasferiti su altri computer anche se usano lo stesso account.", "settings.service.form.saveButton": "Salva servizio", "settings.service.form.tabHosted": "Hosted", @@ -350,7 +350,7 @@ "settings.supportFerdi.aboutIntro": "

    Ferdi è un'applicazione open source sviluppata dalla community.

    Un ringraziamento a tutti coloro che hanno reso questo possibile:

    ", "settings.supportFerdi.bannerText": "Vuoi aiutarci a migliorare Ferdi?", "settings.supportFerdi.headline": "Info su Ferdi", - "settings.supportFerdi.openSurvey": "Open survey", + "settings.supportFerdi.openSurvey": "Apri sondaggio", "settings.supportFerdi.textDonation": "Se vuoi aiutare lo sviluppo di Ferdi con una donazione, puoi farlo", "settings.supportFerdi.textDonationAnd": "e", "settings.supportFerdi.textExpenses": "Nonostante la maggior parte del lavoro sia svolto da volontari è comunque necessario pagare per la gestione di server e certificati. Essendo una comunità vogliamo essere completamente trasparenti rispetto a come raccogliamo e spendiamo fondi", @@ -375,8 +375,8 @@ "settings.user.form.accountType.non-profit": "No profit", "settings.user.form.currentPassword": "Password attuale", "settings.user.form.email": "Email", - "settings.user.form.firstname": "First Name", - "settings.user.form.lastname": "Last Name", + "settings.user.form.firstname": "Nome", + "settings.user.form.lastname": "Cognome", "settings.user.form.newPassword": "Nuova password", "settings.workspace.add.form.name": "Nome", "settings.workspace.add.form.submitButton": "Crea workspace", @@ -393,7 +393,7 @@ "settings.workspaces.tryReloadWorkspaces": "Riprova", "settings.workspaces.updatedInfo": "Le tue modifiche sono state salvate", "settings.workspaces.workspaceFeatureHeadline": "Meno è Meglio: Introduciamo le aree di lavoro di Ferdi", - "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.", + "settings.workspaces.workspaceFeatureInfo": "Le aree di lavoro di Ferdi ti permettono di concentrarti su ciò che è importante. Configura diversi insiemi di servizi e passa facilmente da uno all’altro quando vuoi. Decidi di quali servizi hai bisogno quando e dove, così che ti possiamo aiutare a dare sempre il massimo - o semplicemente staccare dal lavoro quando ne hai bisogno.", "settings.workspaces.workspacesRequestFailed": "Non è possibile caricare i tuoi workspace", "setupAssistant.headline": "Cominciamo", "setupAssistant.subheadline": "Scegli tra i nostri servizi più utilizzati e riprendi a messaggiare ora.", @@ -408,9 +408,9 @@ "sidebar.unmuteApp": "Attiva notifiche e audio", "signup.email.label": "Indirizzo email", "signup.emailDuplicate": "Esiste già un utente con lo stesso indirizzo email", - "signup.firstname.label": "First Name", + "signup.firstname.label": "Nome", "signup.headline": "Iscriviti", - "signup.lastname.label": "Last Name", + "signup.lastname.label": "Cognome", "signup.legal.info": "Creando un account di Ferdi accetti", "signup.legal.privacy": "Dichiarazione della Privacy", "signup.legal.terms": "Termini di Servizio", @@ -418,23 +418,23 @@ "signup.password.label": "Password", "signup.submit.label": "Crea un account", "tabs.item.confirmDeleteService": "Vuoi davvero eliminare il servizio {serviceName}?", - "tabs.item.deleteService": "Delete service", + "tabs.item.deleteService": "Elimina servizio", "tabs.item.disableAudio": "Disattiva audio", "tabs.item.disableDarkMode": "Disattiva modalità scura", "tabs.item.disableNotifications": "Disattiva notifiche", - "tabs.item.disableService": "Disable service", + "tabs.item.disableService": "Disattiva servizio", "tabs.item.enableAudio": "Attiva audio", "tabs.item.enableDarkMode": "Attiva modalità scura", "tabs.item.enableNotification": "Attiva le notifiche", "tabs.item.enableService": "Attiva il servizio", - "tabs.item.hibernateService": "Hibernate service", + "tabs.item.hibernateService": "Iberna servizio", "tabs.item.reload": "Ricarica", - "tabs.item.wakeUpService": "Wake up service", - "validation.email": "{field} is not valid", - "validation.minLength": "{field} should be at least {length} characters long", + "tabs.item.wakeUpService": "Risveglia servizio", + "validation.email": "{field} non valido", + "validation.minLength": "{field} dovrebbe contenere almeno {length} caratteri", "validation.oneRequired": "Almeno un campo è richiesto", - "validation.required": "{field} is required", - "validation.url": "{field} is not a valid URL", + "validation.required": "{field} è obbligatorio", + "validation.url": "{field} non è un URL valido", "webControls.back": "Indietro", "webControls.forward": "Avanti", "webControls.goHome": "Home", @@ -447,7 +447,7 @@ "workspaceDrawer.headline": "Aree di lavoro", "workspaceDrawer.item.contextMenuEdit": "Modifica", "workspaceDrawer.item.noServicesAddedYet": "Nessun servizio aggiunto", - "workspaceDrawer.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.

    ", - "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", + "workspaceDrawer.workspaceFeatureInfo": "

    Le aree di lavoro di Ferdi ti permettono di concentrarti su ciò che è importante. Configura diversi insiemi di servizi e passa facilmente da uno all’altro quando vuoi.

    Decidi di quali servizi hai bisogno quando e dove, così che ti possiamo aiutare a dare sempre il massimo - o semplicemente staccare dal lavoro quando ne hai bisogno.

    ", + "workspaceDrawer.workspacesSettingsTooltip": "Modifica le impostazioni dell'area di lavoro", "workspaces.switchingIndicator.switchingTo": "Passa a " } -- cgit v1.2.3-70-g09d2 From f0d90a446dcdd5559ba36b391ff0f850945914b7 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 17:48:10 +0000 Subject: docs: add niutech as a contributor for code [skip ci] (#1940) --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 552b8cb93..bb3cf5c22 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -985,6 +985,15 @@ "contributions": [ "bug" ] + }, + { + "login": "niutech", + "name": "niu tech", + "avatar_url": "https://avatars.githubusercontent.com/u/384997?v=4", + "profile": "http://niute.ch", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 16, diff --git a/README.md b/README.md index 503723c1c..b33313dfd 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@

    GitHub Releases -Contributors +Contributors Open Collective backers Open Collective sponsors @@ -388,6 +388,7 @@ Thanks goes to these awesome people:

    +
    onItemClick(workspace)}> - {workspace.name} - onItemClick(workspace)}>{workspace.name}
    graves501 sad270 Tsakatacniutech
    -- cgit v1.2.3-70-g09d2 From cbf3446e65f1367f6ef3d8897647b7c26096ef99 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 23:24:27 +0530 Subject: docs: add sad270 as a contributor for bug, userTesting [skip ci] (#1941) --- .all-contributorsrc | 3 ++- README.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index bb3cf5c22..1457084cb 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -974,7 +974,8 @@ "profile": "https://www.ekino.com", "contributions": [ "code", - "bug" + "bug", + "userTesting" ] }, { diff --git a/README.md b/README.md index b33313dfd..5f7644084 100644 --- a/README.md +++ b/README.md @@ -386,7 +386,7 @@ Thanks goes to these awesome people: graves501 - sad270 + sad270 Tsakatac niutech -- cgit v1.2.3-70-g09d2 From 95df3522a15631abc51a4295cae0ea401a8d4e1e Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Tue, 14 Sep 2021 19:58:52 +0200 Subject: feat: add eslint-plugin-unicorn (#1936) --- .eslintrc | 165 ------------ .eslintrc.js | 186 +++++++++++++ package-lock.json | 86 ++++++ package.json | 4 +- packages/forms/src/button/index.tsx | 70 +++-- packages/forms/src/input/scorePassword.ts | 10 +- packages/forms/src/select/index.tsx | 7 +- packages/theme/src/themes/dark/index.ts | 2 +- scripts/build-theme-info.js | 40 +-- scripts/link-readme.js | 8 +- src/actions/lib/actions.ts | 3 + src/api/apiBase.ts | 17 +- src/api/server/ServerApi.js | 80 +++--- src/api/utils/auth.js | 15 +- src/app.js | 2 +- src/components/auth/Invite.js | 10 +- src/components/settings/SettingsLayout.js | 1 + .../settings/services/EditServiceForm.js | 4 +- .../settings/services/ServicesDashboard.js | 2 +- src/components/ui/ImageUpload.js | 4 +- src/components/ui/InfoBar.js | 3 +- src/components/ui/Infobox.js | 3 +- src/components/ui/Modal/index.js | 2 +- src/components/ui/Select.js | 2 +- src/components/ui/effects/Appear.js | 10 +- src/config.ts | 2 +- src/containers/settings/AccountScreen.js | 14 +- src/containers/settings/SettingsWindow.js | 4 +- src/electron/ipc-api/appIndicator.ts | 4 +- src/electron/ipc-api/autoUpdate.ts | 4 +- src/electron/ipc-api/cld.ts | 4 +- src/electron/ipc-api/dnd.ts | 4 +- src/electron/ipc-api/download.ts | 10 +- src/features/appearance/index.js | 26 +- src/features/communityRecipes/store.js | 8 +- src/features/quickSwitch/Component.js | 6 +- src/features/serviceProxy/index.js | 4 +- src/features/settingsWS/store.js | 20 +- src/features/todos/preload.js | 12 +- src/features/utils/FeatureStore.js | 8 +- .../webControls/containers/WebControlsScreen.js | 28 +- .../workspaces/components/EditWorkspaceForm.js | 2 +- .../workspaces/components/WorkspaceDrawerItem.js | 2 +- src/features/workspaces/models/Workspace.js | 2 +- src/features/workspaces/store.js | 8 +- src/helpers/i18n-helpers.ts | 12 +- src/helpers/password-helpers.ts | 14 +- src/helpers/recipe-helpers.ts | 14 +- src/helpers/schedule-helpers.ts | 8 +- src/helpers/url-helpers.ts | 2 +- src/helpers/userAgent-helpers.ts | 2 +- src/helpers/validation-helpers.ts | 19 +- src/i18n/apply-branding.js | 15 +- src/i18n/translations.js | 10 +- src/index.js | 6 +- .../app/Controllers/Http/RecipeController.js | 51 ++-- .../app/Controllers/Http/ServiceController.js | 16 +- .../app/Controllers/Http/UserController.js | 176 +++++++------ .../app/Middleware/ConvertEmptyStringsToNull.js | 2 +- src/internal-server/app/Models/Recipe.js | 3 +- src/internal-server/app/Models/Service.js | 3 +- src/internal-server/app/Models/Token.js | 3 +- src/internal-server/app/Models/User.js | 3 +- src/internal-server/app/Models/Workspace.js | 3 +- src/internal-server/config/shield.js | 3 +- src/internal-server/public/js/transfer.js | 20 +- src/internal-server/start/kernel.js | 10 +- src/internal-server/start/migrate.js | 24 +- src/internal-server/test.js | 2 +- src/lib/Menu.js | 38 +-- src/lib/TouchBar.js | 8 +- src/models/News.ts | 6 +- src/models/Recipe.ts | 6 +- src/models/RecipePreview.ts | 6 +- src/models/Service.js | 142 +++++++--- src/models/User.ts | 4 +- src/models/UserAgent.js | 19 +- src/prop-types.ts | 1 - src/stores/AppStore.js | 32 ++- src/stores/FeaturesStore.js | 16 +- src/stores/GlobalErrorStore.js | 10 +- src/stores/RecipesStore.js | 51 ++-- src/stores/RequestStore.js | 18 +- src/stores/ServicesStore.js | 291 +++++++++++---------- src/stores/SettingsStore.js | 60 +++-- src/stores/UserStore.js | 78 ++++-- src/stores/index.ts | 4 +- src/stores/lib/CachedRequest.js | 96 ++++--- src/stores/lib/Request.js | 2 +- src/stores/lib/Store.js | 6 +- src/webview/badge.ts | 2 +- src/webview/contextMenuBuilder.js | 248 +++++++++++------- src/webview/darkmode.ts | 6 +- src/webview/lib/RecipeWebview.js | 25 +- src/webview/lib/Userscript.js | 10 +- src/webview/recipe.js | 41 ++- src/webview/sessionHandler.ts | 17 +- src/webview/spellchecker.ts | 2 +- uidev/src/index.tsx | 2 +- 99 files changed, 1439 insertions(+), 1137 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 26159ed87..000000000 --- a/.eslintrc +++ /dev/null @@ -1,165 +0,0 @@ -{ - "root": true, - "parser": "@babel/eslint-parser", - "extends": "eslint-config-airbnb", - "plugins": [ - "jest" - ], - "overrides": [ - { - "files": [ - "**/*.ts", - "**/*.tsx" - ], - "env": { - "browser": true, - "es6": true, - "node": true - }, - "extends": [ - "airbnb-typescript" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 2018, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - // eslint - "arrow-parens": 0, - "array-callback-return": 1, - "class-methods-use-this": 0, - "consistent-return": 0, - "function-paren-newline": 0, - "implicit-arrow-linebreak": 0, - "linebreak-style": 0, - "max-len": 0, - "no-confusing-arrow": 0, - "no-console": 0, - "no-param-reassign": 0, - "no-return-assign": 1, - "no-underscore-dangle": 0, - "no-use-before-define": 0, - "prefer-destructuring": 1, - "object-curly-newline": 0, - "operator-linebreak": 0, - // @typescript-eslint - "@typescript-eslint/indent": 0, - "@typescript-eslint/no-shadow": 0, - "@typescript-eslint/no-unused-expressions": 0, - // eslint-plugin-import - "import/extensions": 0, - "import/no-cycle": 1, - "import/no-extraneous-dependencies": 0, - "import/no-unresolved": 0, - "import/prefer-default-export": 0, - // eslint-plugin-react - "react/destructuring-assignment": 0, - "react/button-has-type": 0, - "react/forbid-prop-types": 0, - "react/jsx-curly-newline": 0, - "react/jsx-no-bind": 0, - "react/jsx-no-target-blank": 0, - "react/jsx-props-no-spreading": 0, - "react/no-deprecated": 1, - "react/no-array-index-key": 0, - "react/prefer-stateless-function": 0, - "react/sort-comp": 0, - "react/state-in-constructor": 0, - "react/static-property-placement": 0, - // eslint-plugin-jsx-a11y - "jsx-a11y/click-events-have-key-events": 1, - "jsx-a11y/mouse-events-have-key-events": 1, - "jsx-a11y/label-has-for": [ - 2, - { - "components": [ - "Label" - ], - "required": { - "every": [ - "id" - ] - }, - "allowChildren": false - } - ], - "jsx-a11y/no-static-element-interactions": 0, - "jsx-a11y/no-noninteractive-element-interactions": 1 - } - } - ], - "settings": { - "react": { - "pragma": "React", // Pragma to use, default to "React" - "version": "detect" // React version. "detect" automatically picks the version you have installed. - } - }, - "globals": { - "window": true, - "document": true, - "FormData": true, - "localStorage": true, - "navigator": true, - "Element": true, - "use": true, - "FileReader": true - }, - "env": { - "jest/globals": true - }, - "rules": { - // eslint - "arrow-parens": 0, - "class-methods-use-this": 0, - "consistent-return": 1, - "implicit-arrow-linebreak": 0, - "function-paren-newline": 0, - "max-len": 0, - "no-await-in-loop": 1, - "no-console": [ - 1, - { - "allow": [ - "warn", - "error" - ] - } - ], - "no-param-reassign": 1, - "no-restricted-syntax": 0, - "no-underscore-dangle": 0, - "operator-linebreak": 0, - "prefer-destructuring": 1, - "object-curly-newline": 0, - // eslint-plugin-import - "import/extensions": 1, - "import/prefer-default-export": 0, - "import/no-extraneous-dependencies": 0, // various false positives, re-enable at some point - "import/no-unresolved": 1, - // eslint-plugin-react - "react/forbid-prop-types": 1, - "react/destructuring-assignment": 0, - "react/jsx-curly-newline": 0, - "react/jsx-filename-extension": 1, - "react/jsx-one-expression-per-line": 0, - "react/jsx-no-bind": 1, - "react/jsx-props-no-spreading": 0, - "react/prefer-stateless-function": 1, - "react/prop-types": 0, - "react/static-property-placement": 0, - "react/state-in-constructor": 1, - "react/sort-comp": 0, - // eslint-plugin-jsx-a11y - "jsx-a11y/click-events-have-key-events": 1, - "jsx-a11y/no-static-element-interactions": 1, - "jsx-a11y/no-noninteractive-element-interactions": 1 - } -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..057631708 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,186 @@ +module.exports = { + root: true, + parser: '@babel/eslint-parser', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 2018, + sourceType: 'module', + project: './tsconfig.json', + }, + extends: ['eslint-config-airbnb', 'plugin:unicorn/recommended'], + plugins: ['jest'], + settings: { + react: { + pragma: 'React', // Pragma to use, default to "React" + version: 'detect', // React version. "detect" automatically picks the version you have installed. + }, + }, + globals: { + window: true, + document: true, + FormData: true, + localStorage: true, + navigator: true, + Element: true, + use: true, + FileReader: true, + }, + env: { + browser: true, + es6: true, + node: true, + jest: true, + }, + overrides: [ + { + files: ['**/*.ts', '**/*.tsx'], + extends: ['airbnb-typescript', 'plugin:unicorn/recommended'], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint'], + rules: { + // eslint + 'arrow-parens': 0, + 'array-callback-return': 1, + 'class-methods-use-this': 0, + 'consistent-return': 0, + 'function-paren-newline': 0, + 'implicit-arrow-linebreak': 0, + 'linebreak-style': 0, + 'max-len': 0, + 'no-confusing-arrow': 0, + 'no-console': 0, + 'no-param-reassign': 0, + 'no-restricted-syntax': 0, + 'no-return-assign': 1, + 'no-underscore-dangle': 0, + 'no-use-before-define': 0, + 'prefer-destructuring': 1, + 'object-curly-newline': 0, + 'operator-linebreak': 0, + // @typescript-eslint + '@typescript-eslint/indent': 0, + '@typescript-eslint/no-shadow': 0, + '@typescript-eslint/no-unused-expressions': 0, + // eslint-plugin-import + 'import/extensions': 0, + 'import/no-cycle': 1, + 'import/no-extraneous-dependencies': 0, + 'import/no-unresolved': 0, + 'import/prefer-default-export': 0, + // eslint-plugin-react + 'react/destructuring-assignment': 0, + 'react/button-has-type': 0, + 'react/forbid-prop-types': 0, + 'react/jsx-curly-newline': 0, + 'react/jsx-no-bind': 0, + 'react/jsx-no-target-blank': 0, + 'react/jsx-props-no-spreading': 0, + 'react/no-deprecated': 1, + 'react/no-array-index-key': 0, + 'react/prefer-stateless-function': 0, + 'react/sort-comp': 0, + 'react/state-in-constructor': 0, + 'react/static-property-placement': 0, + // eslint-plugin-jsx-a11y + 'jsx-a11y/click-events-have-key-events': 1, + 'jsx-a11y/mouse-events-have-key-events': 1, + 'jsx-a11y/label-has-for': [ + 2, + { + components: ['Label'], + required: { + every: ['id'], + }, + allowChildren: false, + }, + ], + 'jsx-a11y/no-static-element-interactions': 0, + 'jsx-a11y/no-noninteractive-element-interactions': 1, + // eslint-plugin-unicorn + 'unicorn/filename-case': 0, + 'unicorn/no-null': 0, + 'unicorn/no-useless-undefined': 0, + 'unicorn/prefer-module': 0, + 'unicorn/prevent-abbreviations': 0, + 'unicorn/prefer-node-protocol': 0, + 'unicorn/import-style': [ + 2, + { + styles: { + path: { + named: true, + }, + }, + }, + ], + 'unicorn/consistent-destructuring': 0, + }, + }, + ], + rules: { + // eslint + 'arrow-parens': 0, + 'class-methods-use-this': 0, + 'consistent-return': 1, + 'implicit-arrow-linebreak': 0, + indent: 0, + 'function-paren-newline': 0, + 'linebreak-style': 0, + 'max-len': 0, + 'no-await-in-loop': 1, + 'no-console': [ + 1, + { + allow: ['warn', 'error'], + }, + ], + 'no-param-reassign': 1, + 'no-restricted-syntax': 0, + 'no-underscore-dangle': 0, + 'operator-linebreak': 0, + 'prefer-destructuring': 1, + 'object-curly-newline': 0, + // eslint-plugin-import + 'import/extensions': 0, + 'import/prefer-default-export': 0, + 'import/no-extraneous-dependencies': 0, // various false positives, re-enable at some point + 'import/no-unresolved': 0, + // eslint-plugin-react + 'react/forbid-prop-types': 1, + 'react/destructuring-assignment': 0, + 'react/jsx-curly-newline': 0, + 'react/jsx-filename-extension': 1, + 'react/jsx-one-expression-per-line': 0, + 'react/jsx-no-bind': 1, + 'react/jsx-props-no-spreading': 0, + 'react/prefer-stateless-function': 1, + 'react/prop-types': 0, + 'react/static-property-placement': 0, + 'react/state-in-constructor': 1, + 'react/sort-comp': 0, + // eslint-plugin-jsx-a11y + 'jsx-a11y/click-events-have-key-events': 1, + 'jsx-a11y/no-static-element-interactions': 1, + 'jsx-a11y/no-noninteractive-element-interactions': 1, + // eslint-plugin-unicorn + 'unicorn/filename-case': 0, + 'unicorn/no-null': 0, + 'unicorn/no-useless-undefined': 0, + 'unicorn/prefer-module': 0, + 'unicorn/prevent-abbreviations': 0, + 'unicorn/prefer-node-protocol': 0, + 'unicorn/import-style': [ + 2, + { + styles: { + path: { + named: true, + }, + }, + }, + ], + 'unicorn/consistent-destructuring': 0, + }, +}; diff --git a/package-lock.json b/package-lock.json index a278c76f1..a3076c7d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9851,6 +9851,12 @@ "sax": "^1.2.4" } }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -10394,6 +10400,15 @@ } } }, + "clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -14424,6 +14439,43 @@ "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", "dev": true }, + "eslint-plugin-unicorn": { + "version": "36.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-36.0.0.tgz", + "integrity": "sha512-xxN2vSctGWnDW6aLElm/LKIwcrmk6mdiEcW55Uv5krcrVcIFSWMmEgc/hwpemYfZacKZ5npFERGNz4aThsp1AA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "ci-info": "^3.2.0", + "clean-regexp": "^1.0.0", + "eslint-template-visitor": "^2.3.2", + "eslint-utils": "^3.0.0", + "is-builtin-module": "^3.1.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.23", + "safe-regex": "^2.1.1", + "semver": "^7.3.5" + }, + "dependencies": { + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "dev": true, + "requires": { + "regexp-tree": "~0.1.1" + } + } + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -14434,6 +14486,19 @@ "estraverse": "^4.1.1" } }, + "eslint-template-visitor": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz", + "integrity": "sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/eslint-parser": "^7.12.16", + "eslint-visitor-keys": "^2.0.0", + "esquery": "^1.3.1", + "multimap": "^1.1.0" + } + }, "eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", @@ -17902,6 +17967,15 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -22324,6 +22398,12 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", + "dev": true + }, "multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", @@ -25934,6 +26014,12 @@ } } }, + "regexp-tree": { + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz", + "integrity": "sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==", + "dev": true + }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", diff --git a/package.json b/package.json index 9add26ec6..d0675ba6b 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "dev": "cross-env NODE_ENV=development gulp dev", "test": "jest", "test:watch": "jest --watch", - "lint": "eslint \"{src,scripts,packages,uidev}/**/*.{js,jsx,ts,tsx}\" --quiet --fix", + "lint": "eslint \"{src,scripts,packages,uidev}/**/*.{js,jsx,ts,tsx}\" --quiet", + "lint:fix": "npm run lint -- --fix", "extract": "formatjs extract 'src/**/*.{js,ts}' --out-file temp.json --flatten --id-interpolation-pattern '[sha512:contenthash:base64:6]' --preserve-whitespace", "compile": "formatjs compile 'temp.json' --out-file src/i18n/locales/en-US.json", "manage-translations": "npm run extract && npm run compile && rimraf temp.json", @@ -187,6 +188,7 @@ "eslint-plugin-prettier": "3.4.0", "eslint-plugin-react": "7.25.1", "eslint-plugin-react-hooks": "4.2.0", + "eslint-plugin-unicorn": "36.0.0", "expect.js": "0.3.1", "gulp": "4.0.2", "gulp-babel": "8.0.0", diff --git a/packages/forms/src/button/index.tsx b/packages/forms/src/button/index.tsx index 48fb61635..c9ae47d55 100644 --- a/packages/forms/src/button/index.tsx +++ b/packages/forms/src/button/index.tsx @@ -227,44 +227,38 @@ class ButtonComponent extends Component { ); - let wrapperComponent: JSX.Element; - - if (!href) { - wrapperComponent = ( - - ); - } else { - wrapperComponent = ( - - {content} - - ); - } + const wrapperComponent = !href ? ( + + ) : ( + + {content} + + ); return wrapperComponent; } diff --git a/packages/forms/src/input/scorePassword.ts b/packages/forms/src/input/scorePassword.ts index bc30de4b8..59502e2b0 100644 --- a/packages/forms/src/input/scorePassword.ts +++ b/packages/forms/src/input/scorePassword.ts @@ -18,9 +18,9 @@ export function scorePasswordFunc(password: string): number { // award every unique letter until 5 repetitions const letters: ILetters = {}; - for (let i = 0; i < password.length; i += 1) { - letters[password[i]] = (letters[password[i]] || 0) + 1; - score += 5.0 / letters[password[i]]; + for (const element of password) { + letters[element] = (letters[element] || 0) + 1; + score += 5 / letters[element]; } // bonus points for mixing it up @@ -32,9 +32,9 @@ export function scorePasswordFunc(password: string): number { }; let variationCount = 0; - Object.keys(variations).forEach(key => { + for (const key of Object.keys(variations)) { variationCount += variations[key] === true ? 1 : 0; - }); + } score += (variationCount - 1) * 10; diff --git a/packages/forms/src/select/index.tsx b/packages/forms/src/select/index.tsx index d7479f63e..7806baa2a 100644 --- a/packages/forms/src/select/index.tsx +++ b/packages/forms/src/select/index.tsx @@ -187,10 +187,8 @@ class SelectComponent extends Component { componentDidUpdate() { const { open } = this.state; - if (this.searchInputRef && this.searchInputRef.current) { - if (open) { - this.searchInputRef.current.focus(); - } + if (this.searchInputRef && this.searchInputRef.current && open) { + this.searchInputRef.current.focus(); } } @@ -228,6 +226,7 @@ class SelectComponent extends Component { } componentWillUnmount() { + // eslint-disable-next-line unicorn/no-invalid-remove-event-listener window.removeEventListener('keydown', this.arrowKeysHandler.bind(this)); } diff --git a/packages/theme/src/themes/dark/index.ts b/packages/theme/src/themes/dark/index.ts index 87a68cb5d..aa132c743 100644 --- a/packages/theme/src/themes/dark/index.ts +++ b/packages/theme/src/themes/dark/index.ts @@ -9,7 +9,7 @@ export default (brandPrimary: string) => { let brandPrimaryColor = color(legacyStyles.themeBrandPrimary); try { brandPrimaryColor = color(defaultStyles.brandPrimary); - } catch (e) { + } catch { // Ignore invalid color and fall back to default. } diff --git a/scripts/build-theme-info.js b/scripts/build-theme-info.js index 4058be942..8aee96ab7 100644 --- a/scripts/build-theme-info.js +++ b/scripts/build-theme-info.js @@ -23,7 +23,7 @@ async function getRulesFromCssFile(file) { const cssSrc = (await fs.readFile(file)).toString(); const cssTree = css.parse(cssSrc); - return cssTree.stylesheet.rules; + return cssTree.stylesheet?.rules; } /** @@ -49,25 +49,30 @@ async function getRulesFromCssFile(file) { function getSelectorsDeclaringValues(rules, values) { const output = {}; - rules.forEach((rule) => { + for (const rule of rules) { if (rule.declarations) { - rule.declarations.forEach((declaration) => { - if (declaration.type === 'declaration' - && values.includes(declaration.value.toLowerCase())) { + for (const declaration of rule.declarations) { + if ( + declaration.type === 'declaration' && + values.includes(declaration.value.toLowerCase()) + ) { if (!output[declaration.property]) { output[declaration.property] = []; } - output[declaration.property] = output[declaration.property].concat(rule.selectors); + // eslint-disable-next-line unicorn/prefer-spread + output[declaration.property] = output[declaration.property].concat( + rule.selectors, + ); } - }); + } } - }); + } return output; } async function generateThemeInfo() { - if (!await fs.pathExists(cssFile)) { + if (!(await fs.pathExists(cssFile))) { console.log('Please make sure to build the project first.'); return; } @@ -75,23 +80,24 @@ async function generateThemeInfo() { // Read and parse css bundle const rules = await getRulesFromCssFile(cssFile); - console.log(`Found ${rules.length} rules`); + console.log(`Found ${rules?.length} rules`); // Get rules specifying the brand colors const brandRules = getSelectorsDeclaringValues(rules, accentColors); - console.log(`Found ${Object.keys(brandRules).join(', ')} properties that set color to brand color`); + console.log( + `Found ${Object.keys(brandRules).join( + ', ', + )} properties that set color to brand color`, + ); // Join array of declarations into a single string - Object.keys(brandRules).forEach((rule) => { + for (const rule of Object.keys(brandRules)) { brandRules[rule] = brandRules[rule].join(', '); - }); + } // Write object with theme info to file - fs.writeFile( - outputFile, - JSON.stringify(brandRules), - ); + fs.writeFile(outputFile, JSON.stringify(brandRules)); } generateThemeInfo(); diff --git a/scripts/link-readme.js b/scripts/link-readme.js index 1e47cddf8..2ab38912c 100644 --- a/scripts/link-readme.js +++ b/scripts/link-readme.js @@ -22,7 +22,7 @@ let replacements = 0; // Regex matches strings that don't begin with a "[", i.e. are not already linked // followed by a "franz#" and digits to indicate // a GitHub issue, and not ending with a "]" -readme = readme.replace(/(? { +readme = readme.replace(/(? { const issueNr = match.replace('franz#', ''); replacements += 1; return `[franz#${issueNr}](https://github.com/meetfranz/franz/issues/${issueNr})`; @@ -31,7 +31,7 @@ readme = readme.replace(/(? { // Replace external issues // Regex matches strings that don't begin with a "[", followed a repo name in the format "user/repo" // followed by a "#" and digits to indicate a GitHub issue, and not ending with a "]" -readme = readme.replace(/(? { +readme = readme.replace(/(? { const issueNr = match.replace(/\D/g, ''); const repo = match.replace(/#\d+/g, ''); replacements += 1; @@ -42,7 +42,7 @@ readme = readme.replace(/(? { // Regex matches strings that don't begin with a "[", i.e. are not already linked and // don't begin with "franz", i.e. are not Franz issues, followed by a "#" and digits to indicate // a GitHub issue, and not ending with a "]" -readme = readme.replace(/(? { +readme = readme.replace(/(? { const issueNr = match.replace('#', ''); replacements += 1; return `[#${issueNr}](https://github.com/getferdi/ferdi/issues/${issueNr})`; @@ -51,7 +51,7 @@ readme = readme.replace(/(? { // Link GitHub users // Regex matches strings that don't begin with a "[", i.e. are not already linked // followed by a "@" and at least one word character and not ending with a "]" -readme = readme.replace(/(? { +readme = readme.replace(/(? { const username = match.replace('@', ''); replacements += 1; return `[@${username}](https://github.com/${username})`; diff --git a/src/actions/lib/actions.ts b/src/actions/lib/actions.ts index ed42eabc0..412a0d895 100644 --- a/src/actions/lib/actions.ts +++ b/src/actions/lib/actions.ts @@ -1,5 +1,6 @@ export const createActionsFromDefinitions = (actionDefinitions, validate) => { const actions = {}; + // eslint-disable-next-line unicorn/no-array-for-each Object.keys(actionDefinitions).forEach(actionName => { const action = (params = {}) => { const schema = actionDefinitions[actionName]; @@ -14,6 +15,7 @@ export const createActionsFromDefinitions = (actionDefinitions, validate) => { listeners.splice(listeners.indexOf(listener), 1); }; action.notify = params => + // eslint-disable-next-line unicorn/no-array-for-each action.listeners.forEach(listener => listener(params)); }); return actions; @@ -21,6 +23,7 @@ export const createActionsFromDefinitions = (actionDefinitions, validate) => { export default (definitions, validate) => { const newActions = {}; + // eslint-disable-next-line unicorn/no-array-for-each Object.keys(definitions).forEach(scopeName => { newActions[scopeName] = createActionsFromDefinitions( definitions[scopeName], diff --git a/src/api/apiBase.ts b/src/api/apiBase.ts index dc10fad91..510ccb619 100644 --- a/src/api/apiBase.ts +++ b/src/api/apiBase.ts @@ -12,8 +12,6 @@ import { // Note: This cannot be used from the internal-server since we are not running within the context of a browser window const apiBase = (withVersion = true) => { - let url: string; - if ( !(window as any).ferdi || !(window as any).ferdi.stores.settings || @@ -23,15 +21,12 @@ const apiBase = (withVersion = true) => { // Stores have not yet been loaded - return SERVER_NOT_LOADED to force a retry when stores are loaded return SERVER_NOT_LOADED; } - if ((window as any).ferdi.stores.settings.all.app.server === LOCAL_SERVER) { - // Use URL for local server - url = `http://${LOCAL_HOSTNAME}:${ - (window as any).ferdi.stores.requests.localServerPort - }`; - } else { - // Load URL from store - url = (window as any).ferdi.stores.settings.all.app.server; - } + const url = + (window as any).ferdi.stores.settings.all.app.server === LOCAL_SERVER + ? `http://${LOCAL_HOSTNAME}:${ + (window as any).ferdi.stores.requests.localServerPort + }` + : (window as any).ferdi.stores.settings.all.app.server; return withVersion ? `${url}/${API_VERSION}` : url; }; diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js index b5042525a..fb0495b19 100644 --- a/src/api/server/ServerApi.js +++ b/src/api/server/ServerApi.js @@ -1,6 +1,16 @@ +/* eslint-disable global-require */ import { join } from 'path'; import tar from 'tar'; -import { readdirSync, statSync, writeFileSync, copySync, ensureDirSync, pathExistsSync, readJsonSync, removeSync } from 'fs-extra'; +import { + readdirSync, + statSync, + writeFileSync, + copySync, + ensureDirSync, + pathExistsSync, + readJsonSync, + removeSync, +} from 'fs-extra'; import { require as remoteRequire } from '@electron/remote'; import ServiceModel from '../../models/Service'; @@ -12,7 +22,14 @@ import UserModel from '../../models/User'; import { sleep } from '../../helpers/async-helpers'; import { SERVER_NOT_LOADED } from '../../config'; -import { osArch, osPlatform, asarRecipesPath, userDataRecipesPath, userDataPath, ferdiVersion } from '../../environment'; +import { + osArch, + osPlatform, + asarRecipesPath, + userDataRecipesPath, + userDataPath, + ferdiVersion, +} from '../../environment'; import apiBase from '../apiBase'; import { prepareAuthRequest, sendAuthRequest } from '../utils/auth'; @@ -310,22 +327,22 @@ export default class ServerApi { // Recipes async getInstalledRecipes() { const recipesDirectory = getRecipeDirectory(); - const paths = readdirSync(recipesDirectory) - .filter( - file => - statSync(join(recipesDirectory, file)).isDirectory() && - file !== 'temp' && - file !== 'dev', - ); + const paths = readdirSync(recipesDirectory).filter( + file => + statSync(join(recipesDirectory, file)).isDirectory() && + file !== 'temp' && + file !== 'dev', + ); this.recipes = paths .map(id => { - // eslint-disable-next-line + // eslint-disable-next-line import/no-dynamic-require const Recipe = require(id)(RecipeModel); return new Recipe(loadRecipeConfig(id)); }) .filter(recipe => recipe.id); + // eslint-disable-next-line unicorn/prefer-spread this.recipes = this.recipes.concat(this._getDevRecipes()); debug('StubServerApi::getInstalledRecipes resolves', this.recipes); @@ -425,8 +442,8 @@ export default class ServerApi { removeSync(join(recipesDirectory, recipeId, 'recipe.tar.gz')); return id; - } catch (err) { - console.error(err); + } catch (error) { + console.error(error); return false; } @@ -434,7 +451,9 @@ export default class ServerApi { // News async getLatestNews() { - const url = `${apiBase(true)}/news?platform=${osPlatform}&arch=${osArch}&version=${ferdiVersion}`; + const url = `${apiBase( + true, + )}/news?platform=${osPlatform}&arch=${osArch}&version=${ferdiVersion}`; const request = await sendAuthRequest(url); if (!request.ok) throw request; const data = await request.json(); @@ -494,7 +513,7 @@ export default class ServerApi { debug('ServerApi::getLegacyServices resolves', services); return services; } - } catch (err) { + } catch { console.error('ServerApi::getLegacyServices no config found'); } @@ -523,8 +542,8 @@ export default class ServerApi { } return new ServiceModel(service, recipe); - } catch (e) { - debug(e); + } catch (error) { + debug(error); return null; } } @@ -559,7 +578,7 @@ export default class ServerApi { return recipe; }), - ).catch(err => console.error("Can't load recipe", err)); + ).catch(error => console.error("Can't load recipe", error)); } _mapRecipePreviewModel(recipes) { @@ -567,8 +586,8 @@ export default class ServerApi { .map(recipe => { try { return new RecipePreviewModel(recipe); - } catch (e) { - console.error(e); + } catch (error) { + console.error(error); return null; } }) @@ -580,8 +599,8 @@ export default class ServerApi { .map(newsItem => { try { return new NewsModel(newsItem); - } catch (e) { - console.error(e); + } catch (error) { + console.error(error); return null; } }) @@ -591,22 +610,21 @@ export default class ServerApi { _getDevRecipes() { const recipesDirectory = getDevRecipeDirectory(); try { - const paths = readdirSync(recipesDirectory) - .filter( - file => - statSync(join(recipesDirectory, file)).isDirectory() && - file !== 'temp', - ); + const paths = readdirSync(recipesDirectory).filter( + file => + statSync(join(recipesDirectory, file)).isDirectory() && + file !== 'temp', + ); const recipes = paths .map(id => { let Recipe; try { - // eslint-disable-next-line + // eslint-disable-next-line import/no-dynamic-require Recipe = require(id)(RecipeModel); return new Recipe(loadRecipeConfig(id)); - } catch (err) { - console.error(err); + } catch (error) { + console.error(error); } return false; @@ -624,7 +642,7 @@ export default class ServerApi { }); return recipes; - } catch (err) { + } catch { debug('Could not load dev recipes'); return false; } diff --git a/src/api/utils/auth.js b/src/api/utils/auth.js index e493b2962..527c68840 100644 --- a/src/api/utils/auth.js +++ b/src/api/utils/auth.js @@ -1,7 +1,11 @@ import localStorage from 'mobx-localstorage'; import { ferdiLocale, ferdiVersion } from '../../environment'; -export const prepareAuthRequest = (options = { method: 'GET' }, auth = true) => { +export const prepareAuthRequest = ( + // eslint-disable-next-line unicorn/no-object-as-default-parameter + options = { method: 'GET' }, + auth = true, +) => { const request = Object.assign(options, { mode: 'cors', headers: { @@ -16,12 +20,13 @@ export const prepareAuthRequest = (options = { method: 'GET' }, auth = true) => }); if (auth) { - request.headers.Authorization = `Bearer ${localStorage.getItem('authToken')}`; + request.headers.Authorization = `Bearer ${localStorage.getItem( + 'authToken', + )}`; } return request; }; -export const sendAuthRequest = (url, options, auth) => ( - window.fetch(url, prepareAuthRequest(options, auth)) -); +export const sendAuthRequest = (url, options, auth) => + window.fetch(url, prepareAuthRequest(options, auth)); diff --git a/src/app.js b/src/app.js index e0d2dbc5a..8a1f99320 100644 --- a/src/app.js +++ b/src/app.js @@ -44,7 +44,7 @@ window.addEventListener('load', () => { ); - render(preparedApp, document.getElementById('root')); + render(preparedApp, document.querySelector('#root')); }, }; window.ferdi.render(); diff --git a/src/components/auth/Invite.js b/src/components/auth/Invite.js index 519691ede..df8980314 100644 --- a/src/components/auth/Invite.js +++ b/src/components/auth/Invite.js @@ -65,7 +65,7 @@ class Invite extends Component { { fields: { invite: [ - ...Array(3).fill({ + ...Array.from({ length: 3 }).fill({ fields: { name: { label: this.props.intl.formatMessage(messages.nameLabel), @@ -95,19 +95,19 @@ class Invite extends Component { this.props.intl, ); - document.querySelector('input:first-child').focus(); + document.querySelector('input:first-child')?.focus(); } submit(e) { e.preventDefault(); - this.form.submit({ + this.form?.submit({ onSuccess: form => { this.props.onSubmit({ invites: form.values().invite }); - this.form.clear(); + this.form?.clear(); // this.form.$('invite.0.name').focus(); // path accepted but does not focus ;( - document.querySelector('input:first-child').focus(); + document.querySelector('input:first-child')?.focus(); this.setState({ showSuccessInfo: true }); }, onError: () => {}, diff --git a/src/components/settings/SettingsLayout.js b/src/components/settings/SettingsLayout.js index 0574b3765..71250bd4d 100644 --- a/src/components/settings/SettingsLayout.js +++ b/src/components/settings/SettingsLayout.js @@ -29,6 +29,7 @@ class SettingsLayout extends Component { componentWillUnmount() { document.removeEventListener( 'keydown', + // eslint-disable-next-line unicorn/no-invalid-remove-event-listener this.handleKeyDown.bind(this), false, ); diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index 9a9abeab4..7df6d5c78 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js @@ -183,8 +183,8 @@ class EditServiceForm extends Component { removeTrailingSlash: false, }); isValid = await recipe.validateUrl(values.customUrl); - } catch (err) { - console.warn('ValidateURL', err); + } catch (error) { + console.warn('ValidateURL', error); isValid = false; } } diff --git a/src/components/settings/services/ServicesDashboard.js b/src/components/settings/services/ServicesDashboard.js index 847f2ea06..9272b05c9 100644 --- a/src/components/settings/services/ServicesDashboard.js +++ b/src/components/settings/services/ServicesDashboard.js @@ -91,7 +91,7 @@ class ServicesDashboard extends Component {

    {intl.formatMessage(messages.headline)}

    - {(services.length !== 0 || searchNeedle) && !isLoading && ( + {(services.length > 0 || searchNeedle) && !isLoading && ( filterServices({ needle })} diff --git a/src/components/ui/ImageUpload.js b/src/components/ui/ImageUpload.js index 8ea31ca40..49aff389b 100644 --- a/src/components/ui/ImageUpload.js +++ b/src/components/ui/ImageUpload.js @@ -30,14 +30,14 @@ class ImageUpload extends Component { onDrop(acceptedFiles) { const { field } = this.props; - acceptedFiles.forEach(file => { + for (const file of acceptedFiles) { const imgPath = isWindows ? file.path.replace(/\\/g, '/') : file.path; this.setState({ path: imgPath, }); this.props.field.onDrop(file); - }); + } field.set(''); } diff --git a/src/components/ui/InfoBar.js b/src/components/ui/InfoBar.js index f5cbad48b..dc6be10da 100644 --- a/src/components/ui/InfoBar.js +++ b/src/components/ui/InfoBar.js @@ -5,7 +5,6 @@ import classnames from 'classnames'; import Loader from 'react-loader'; import { defineMessages, injectIntl } from 'react-intl'; -// import { oneOrManyChildElements } from '../../prop-types'; import Appear from './effects/Appear'; const messages = defineMessages({ @@ -18,7 +17,7 @@ const messages = defineMessages({ @observer class InfoBar extends Component { static propTypes = { - // eslint-disable-next-line + // eslint-disable-next-line react/forbid-prop-types children: PropTypes.any.isRequired, onClick: PropTypes.func, type: PropTypes.string, diff --git a/src/components/ui/Infobox.js b/src/components/ui/Infobox.js index 13ae2303b..9e34bf110 100644 --- a/src/components/ui/Infobox.js +++ b/src/components/ui/Infobox.js @@ -15,7 +15,8 @@ const messages = defineMessages({ @observer class Infobox extends Component { static propTypes = { - children: PropTypes.any.isRequired, // eslint-disable-line + // eslint-disable-next-line react/forbid-prop-types + children: PropTypes.any.isRequired, icon: PropTypes.string, type: PropTypes.string, ctaOnClick: PropTypes.func, diff --git a/src/components/ui/Modal/index.js b/src/components/ui/Modal/index.js index 9e6830b0c..3c7c66c59 100644 --- a/src/components/ui/Modal/index.js +++ b/src/components/ui/Modal/index.js @@ -54,7 +54,7 @@ class Modal extends Component { portal={portal} onRequestClose={close} shouldCloseOnOverlayClick={shouldCloseOnOverlayClick} - appElement={document.getElementById('root')} + appElement={document.querySelector('#root')} > {showClose && close && (