Compare commits

...

144 Commits

Author SHA1 Message Date
Liyas Thomas
502da61b8b fix: ui styles 2023-12-07 14:43:22 +05:30
nivedin
f2777a9a75 chore: cleanup 2023-12-07 14:43:22 +05:30
nivedin
4bd3e89f89 refactor: update embed customize flow 2023-12-07 14:43:22 +05:30
nivedin
09e9601940 chore: add save option to modify sahred request 2023-12-07 14:43:22 +05:30
nivedin
fd4a5c626f chore: disable method and input 2023-12-07 14:43:22 +05:30
nivedin
67cfef82af chore: cleanup 2023-12-07 14:43:22 +05:30
nivedin
aa18249791 chore: use shared request properties for embed 2023-12-07 14:43:22 +05:30
nivedin
9d8fdb4d04 chore: add doc button if response is null 2023-12-07 14:43:22 +05:30
nivedin
fbca9b06c3 chore: add open app link 2023-12-07 14:43:22 +05:30
nivedin
bb0bf35164 feat: added embeds components wip 2023-12-07 14:43:22 +05:30
nivedin
5a35c098ec feat: mutations and small refactor in share req 2023-12-07 14:43:22 +05:30
Akash K
ab7c29d228 refactor: revamp the importers & exporters systems to be reused (#3425)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-12-06 21:24:29 +05:30
Joel Jacob Stephen
d9c75ed79e feat: introducing shared requests to admin dashboard (#3537)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-12-06 00:21:28 +05:30
Anwarul Islam
6fa722df7b chore: hoppscotch-ui improvements (#3497)
Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-12-06 00:08:44 +05:30
Balu Babu
18864bfecf feat: addition of data field into User and Team Collections (#3614)
* feat: added new columns into the TeamCollections and UserCollections models

* feat: completed addition of new data field in TeamCollection

* feat: completed addition of new data field in UserCollections

* chore: updated all tests in team-collection module

* chore: added tests for updateTeamCollection method in team-collection module

* chore: refactored all existing testcases in user-collection to reflect new changes

* chore: added new testcases for updateUserCollection method in user-collection module

* chore: made data field optional in team and user collections

* chore: fixed edgecases for data being null

* chore: resolved issue with team-request testcases

* chore: completed changes requested in PR review

* chore: changed target to prod in hoppscotch-old-backend service
2023-12-05 20:12:37 +05:30
Akash K
95754cb2b4 chore: bump deps for hoppscotch-common and hoppscotch-selfhost-web (#3575) 2023-12-05 17:33:25 +05:30
Gaurav K P
ed2a461dc5 feat(common): display status text from the API response if available (#3466)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-12-04 23:31:49 +05:30
Muhammed Ajmal M
8d5a456dbd fix(common): parentheses and single quotes support to curl imports (#3509) 2023-12-04 23:03:22 +05:30
Nivedin
2528bbb92f feat: shared request (#3486)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-12-04 22:51:18 +05:30
Liyas Thomas
259cd48dbb feat: init boring avatars (#3615) 2023-12-04 13:20:26 +05:30
Joel Jacob Stephen
b43531f200 feat: add ability to make banners dismissible + new info and warning color schemes added based on themes (#3586)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-12-04 00:57:37 +05:30
Muhammed Ajmal M
26da3e18a9 fix(common): prevented truncating parameters (#3502) 2023-12-04 00:49:45 +05:30
Rajdip Bhattacharya
bb4b640e58 feat: convert json to interfaces (#3566)
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
Co-authored-by: nivedin <nivedinp@gmail.com>
2023-12-03 23:14:26 +05:30
Liyas Thomas
1cc845e17d fix: minor ui improvements (#3603) 2023-11-29 22:45:40 +05:30
James George
60bfb6fe2c refactor: move persistence logic into a dedicated service (#3493) 2023-11-29 22:40:26 +05:30
Joel Jacob Stephen
144d14ab5b fix: email validation failure in cases when email entered is correct when trying to create a team in admin dashboard (#3588)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-11-29 21:49:49 +05:30
Anwarul Islam
8f1ca6e282 feat: platform definition added for additional settings components (#3503) 2023-11-29 21:42:51 +05:30
Dante Calderon
a93758c6b7 chore: Remove whitespace in env variables 2023-11-22 19:40:32 +05:30
James George
1829c088cc feat: support for subpath based access in SH apps (#3449)
Co-authored-by: Balu Babu <balub997@gmail.com>
2023-11-22 19:35:35 +05:30
Akash K
ee1425d0dd fix: XML body disappearing with invalid XML (#3567)
fix: catch xmlformatter errors
2023-11-20 15:02:07 +05:30
Joel Jacob Stephen
24ae090916 refactor: allow banner service to hold multiple banners and display the banner with the highest score (#3556) 2023-11-17 20:31:34 +05:30
Nivedin
a3aa9b68fc refactor: interceptor error display in graphql response (#3553) 2023-11-17 17:03:53 +05:30
Joel Jacob Stephen
50f475334e fix: enlarged hoppscotch logo on dashboard login screen (#3559)
fix: resize the dashboard login icon
2023-11-16 22:51:08 +05:30
Andrew Bastin
7b18526f24 chore: merge hoppscotch/main into hoppscotch/release/2023.12.0 2023-11-16 13:51:12 +05:30
Andrew Bastin
23afc201a1 chore: bump version to release/2023.8.4 2023-11-14 21:26:16 +05:30
Andrew Bastin
b1982d74a6 fix: make schema more lenient while parsing public data structures 2023-11-14 21:24:25 +05:30
Andrew Bastin
e93a37c711 fix: add i18n entries for oauth errors 2023-11-14 17:44:37 +05:30
Nivedin
8d7509cdea fix: interceptor error from extension issue (#3548) 2023-11-14 17:17:23 +05:30
Akash K
e24d0ce605 fix: oauth 2.0 authentication type is breaking (#3531) 2023-11-14 00:12:04 +05:30
Balu Babu
f5d2e4f11f feat: introducing shortcode into admin module (#3504)
* feat: added query in infra to fetch all shortcodes

* feat: added mutation in admin to delete shortcode

* chore: added new tests for methods in shortcode module

* chore: removed .vscode file

* chore: added a new ShortcodeCreator type to output of fetchAllShortcodes query

* chore: shortcodeCreator type is now nullable

* chore: added type defs to fetchAllShortcodes method in admin module

* docs: update code comments

* chore: changed target to prod in hoppscotch-old-backend

---------

Co-authored-by: Mir Arif Hasan <arif.ishan05@gmail.com>
2023-11-10 14:28:02 +05:30
Andrew Bastin
de725337d6 fix: window drag taking precedence on windows 2023-11-08 20:07:13 +05:30
Andrew Bastin
9d1d369f37 fix: performance issues due to mouse on header detection 2023-11-08 18:47:40 +05:30
Andrew Bastin
2bd925d441 chore: correct version of selfhost-desktop 2023-11-08 17:18:12 +05:30
Liyas Thomas
bb8dc6f7eb chore: updated brand assets (#3500)
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-11-08 15:47:35 +05:30
Anwarul Islam
be3e5ba7e7 fix: graphql query deprecation issue (#3506) 2023-11-08 14:51:39 +05:30
Andrew Bastin
663134839f feat: let platforms disable we are using cookies prompt 2023-11-07 20:49:07 +05:30
Andrew Bastin
736f83a70c fix: header inspector cookie inspection will not trigger if current interceptor supports cookies 2023-11-07 20:36:34 +05:30
Andrew Bastin
05d2175f43 fix: selfhost-desktop not running gql-codegen 2023-11-07 20:24:22 +05:30
Balu Babu
4caf0053cd feat: introduction of shared-requests (#3476)
* feat: added new property to existing shortcode model in prisma schema

* chore: created shared-requests module

* chore: created shared-request model

* chore: complete sharedRequest query

* chore: completed mutation to create a SharedRequest

* chore: completed subscription to create a SharedRequest

* chore: completed query to fetch all user created shared-requests

* chore: completed mutation to delete a SharedRequest

* chore: completed subscription to delete a SharedRequest

* chore: removed unused dependncues in share-requests module

* chore: added shared-requests into user deletion spec

* test: added all testcases for shared-request module

* test: modified all relevant tests in shortcode module

* chore: added deprecated label to all queries,mutations and subscriptions in the shortcode module

* chore: resolved all comments raised in review

* feat: added ability to update and listen to updates of shared-requests

* chore: added updatedOn field to shortcode model

* chore: fixed issue with updateSharedRequest method

* chore: fixed incorrect value getting updated

* chore: added all test-cases for updateSharedRequest method

* chore: created migration for shared-requests

* chore: moved shared-requests into shortcode module

* chore: added missing import in shortcode tests

* chore: changed properties to embedProperties in shortcode model

* feat: generated migrations file for new schema changes to Shortcodes table

* chore: changed target of old-backend service in docker-compose file

* chore: fixed issue with updatedOn field in shortcodes model

* chore: removed unused dependencies

* fix: handle invalid input for shortcode properties

* Revert "fix: handle invalid input for shortcode properties"

This reverts commit 4dcb0afb18.

* chore: changed updateShortcode method name to updateEmbedProperties

* chore: changed target of hoppscotch-old-backend service to prod

---------

Co-authored-by: Mir Arif Hasan <arif.ishan05@gmail.com>
2023-11-07 17:57:51 +05:30
Andrew Bastin
97bd808431 chore: set versions with a bump version 2023-11-07 16:04:02 +05:30
Andrew Bastin
a13c2fd4c1 chore: pin @codemirror/language to 6.9.0 2023-11-07 15:57:19 +05:30
Andrew Bastin
16044b5840 feat: desktop app
Co-authored-by: Vivek R <123vivekr@gmail.com>
Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
2023-11-07 14:20:03 +05:30
Andrew Bastin
93ce86f32d chore: merge hoppscotch/release/2023.8.3 into hoppscotch/release/2023.12.0 2023-11-06 18:56:01 +05:30
Andrew Bastin
4ebf850cb6 chore: bump version to 2023.8.3 2023-11-06 17:39:31 +05:30
Balu Babu
76af7d5e10 fix: mailer template issue (#3475) 2023-11-06 17:25:36 +05:30
Joel Jacob Stephen
507fe69efe feat: new banner service and added ability to bind additional services from other platforms (#3474)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-11-06 11:41:19 +05:30
Joel Jacob Stephen
23e3739718 feat: introducing a new smart table hoppscotch ui component (#3178)
Co-authored-by: Anwarul Islam <anwaarulislaam@gmail.com>
2023-11-06 11:31:55 +05:30
Nicolas Merget
5428a73811 fix: add optional chaining for teamMembers to handle undefined team (#3484)
Co-authored-by: James George <jamesgeorge998001@gmail.com>
2023-11-06 11:25:39 +05:30
Anwarul Islam
4a154e6569 chore: fix spelling mistake on type import (#3487) 2023-11-06 11:25:03 +05:30
Liyas Thomas
0aa5825d8b fix: cleanup ui and improve consistency in input elements (#3494) 2023-11-06 10:56:15 +05:30
Andrew Bastin
bdb63e99d5 fix: pin @lezer/highlight to 1.1.4 to prevent page breaks 2023-11-03 23:30:46 +05:30
Andrew Bastin
6daa043a1b chore: merge hoppscotch/release/2023.8.3 into hoppscotch/release/2023.12.0 2023-11-03 10:12:54 +05:30
James George
8175ec640a chore(data): bump dependencies (#3473) 2023-11-02 23:53:52 +05:30
James George
b5307e4a89 chore(common): implement enforced pre-commit type checks for FE service files (#3472) 2023-11-02 23:37:27 +05:30
Akash K
19294802be fix: graphql page crashing and broken syntax highlighting (#3488) 2023-11-02 23:10:37 +05:30
Andrew Bastin
cbe3e14b47 refactor: versioning and migration mechanism for public data structures (#3457)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-11-02 18:54:16 +05:30
Joel Jacob Stephen
9dcbc4a126 refactor: updated dashboard gql queries and components to use the new infra type of the updated schema (#3455) 2023-11-01 23:40:19 +05:30
Gaurav K P
01df1663ad fix(common): handle false negatives in url validation (#3465) 2023-11-01 22:23:33 +05:30
Anwarul Islam
a215860782 feat: replacing windicss by tailwindcss in hoppscotch-ui (#3076)
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
Co-authored-by: Joel Jacob Stephen <70131076+JoelJacobStephen@users.noreply.github.com>
Co-authored-by: nivedin <nivedinp@gmail.com>
2023-11-01 20:55:08 +05:30
Nivedin
abd5288da8 refactor: move sentry to platform (#3451) 2023-11-01 18:17:55 +05:30
Michel Tomas
a89bc473f6 fix(self-hosted/web): add "useCredentials: true" to Vite PWA options (#3460) 2023-11-01 09:46:20 +05:30
Mir Arif Hasan
59b5a50a97 HBE-296 feat: introducing 'infra' type and splitting model properties between 'admin' and 'infra' (#3445)
* feat: infra type added in admin module

* feat: infra-resolver added in admin module

* feat: feedback resolved

* feat: deprecated tag added in some admin ResolveFields

* build: update pnpm-lock file

* feat: add field in infra type

* feat: admin extends user partially

* feat: admin extends user with omitting some fields

* chore: remove unused imports

* build: conflict resolve in pnpm lock file
2023-10-30 17:03:43 +06:00
Andrew Bastin
57cb59027b chore: bump codemirror dependencies 2023-10-19 13:37:07 +05:30
Andrew Bastin
d1c9c3583f chore: merge hoppscotch/release/2023.8.3 into hoppscotch/release/2023.12.0 2023-10-19 09:34:49 +05:30
James George
2462492c86 chore(cli): bump dependencies (#3441)
* chore: bump CLI dependencies

* chore: update package.json

Bump version and specify minimum Node.js version
2023-10-16 18:23:22 +05:30
Joel Jacob Stephen
7a9f0c8756 refactor: improvements to the auth implementation in admin dashboard (#3444)
* refactor: abstract axios queries to a separate helper file

* chore: delete unnecessary file

* chore: remove unnecessary console logs

* refactor: updated urls for api and authquery helpers

* refactor: updated auth implementation

* refactor: use default axios instance

* chore: improve code readability

* refactor: separate instances for rest and gql calls

* refactor: removed async await from functions that do not need them

* refactor: removed probable login and probable user from the auth system

* refactor: better error handling in login component

* chore: deleted unnecessary files and restructured some files

* feat: new errors file with typed error message formats

* refactor: removed unwanted usage of async await

* refactor: optimizing the usage and return of promises in auth flow

* refactor: convey boolean return type in a better way

* chore: apply suggestions

* refactor: handle case when mailcatcher is not active

---------

Co-authored-by: nivedin <nivedinp@gmail.com>
Co-authored-by: James George <jamesgeorge998001@gmail.com>
2023-10-16 18:14:02 +05:30
Balu Babu
46caf9b198 refactor: removed all instances of rejectOnNotFound in prisma queries (#3377)
* chore: removed rejectOnNotFound property from prisma query in team-enviroment method

* chore: fixed issues with test cases in team-environment module

* chore: changed target of hoppscotch-old-backend service back to prod
2023-10-16 14:04:03 +05:30
Mir Arif Hasan
f5db54484c HBE-266 Update NestJS packages (#3389)
* build: update npm nest packages

* build: removed depricated apollo-server-plugin package

* build: pnpm-lock file added

* build: swc integrated

* Revert "build: swc integrated"

This reverts commit 803a01f38f210dfbcd603665893d29af565c8908.

* feat: upgrade graphql* packages version

* feat: upgrade point release

* feat: update pnpm-lock file
2023-10-16 12:23:55 +05:30
Mir Arif Hasan
8deb6471b9 HBE-270 Test-Case timestamp issue fix in backend (#3415)
test: timestamp issue fix in user-history
2023-10-16 12:11:15 +05:30
Liyas Thomas
73b3ff8e41 feat: improve import-export UI (#3452)
* chore: uniform styles across components

* chore: removed absolute wrapper divs

* feat: add import button when graphql collections are empty

* chore: add icon for button

---------

Co-authored-by: nivedin <nivedinp@gmail.com>
2023-10-13 17:57:14 +05:30
James George
016a18d3b2 fix(common): use tab service within helpers (#3448) 2023-10-12 13:15:45 +05:30
Anwarul Islam
ba31cdabea feat: tab service added (#3367) 2023-10-11 18:21:07 +05:30
Nivedin
51510566bc refactor: add import buttons in empty state for collections & environments (#3438) 2023-10-11 11:08:51 +05:30
Anwarul Islam
cabee0ecc8 fix: memory leak issue on TeamInvite modal (#3440)
* fix: memory leak issue

* feat: added rerun ability

* chore: lint fix
2023-10-11 07:59:12 +05:30
Anwarul Islam
2c2b39a236 feat: no permission warning added for users except owner while deleting team (#3328)
* feat: no permission warning added
* chore: changed to function reference
2023-10-09 19:31:48 +05:30
Liyas Thomas
78450c9316 fix: tooltip position in editor instance (#3374) 2023-10-09 11:37:52 +05:30
Joel Jacob Stephen
b18fd90b64 fix: blank screen in admin dashboard on authentication problems (#3385)
* fix: dashboard logs out user when cookie expires or is unauthorized

* fix: handles the 401 error thrown when trying to refresh tokens

* chore: updated wrong logic when returning state in refresh token function

* feat: introduced auth exchange to urql client to check for errors on each backend call

* fix: prevent multiple window reloads

---------

Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-10-09 10:08:35 +05:30
Andrew Bastin
0188a8d7db chore: bump version 2023-10-06 22:04:57 +05:30
Joel Jacob Stephen
6c63a8dc28 refactor: updated i18n implementation in the admin dashboard (#3395)
* feat: introduced new unplugin i18n and removed the old vite i18n package

* refactor: updated vite config to support the new plugin

* refactor: removed irrelevant logic from the i18n module
2023-10-06 17:36:19 +05:30
Rakibul Yeasin
17d6ae15a5 fix: Cannot set custom method #3406 (#3408)
* fix: #3406

* chore: remove console log

* fix: an unknown keyboard event issue

---------

Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
Co-authored-by: Anwarul Islam <anwaarulislaam@gmail.com>
2023-10-06 11:57:26 +05:30
Andrew Bastin
40f72278a9 fix: team collection resetting on unmount within app lifecycle (#3396)
* fix: team collection resetting on unmount within app lifecycle

* chore: linting

* refactor: eliminate redundancy

* chore: update comment about the watcher purpose

---------

Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2023-10-06 11:34:44 +05:30
5idereal
f717704731 chore(i18n): update tw.json (#3409) 2023-10-06 11:27:24 +05:30
Joel Jacob Stephen
185c225297 feat: introduces ability to export single environment variables and allow CLI to accept the export format used by the app (#3380)
* feat: add ability to export a single environment

* refactor: export environment without id

* feat: introducing zod for checking json format for environment variables

* refactor: new zod specific type for HoppEnvPair

* feat: add ability to export single environment in team environment

* refactor: moved zod as a dependency to devDependency

* refactor: separated repeating logic to helper file

* refactor: removed unnecessary to string operation

* chore: rearranged smart item placement

* refactor: introduced error type when a bulk environment export is used in cli

* refactor: removed unnecssary type exports and updated logic and variable names across most files

* refactor: better logic for type shapes

* chore: bump hoppscotch-cli package version

---------

Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-10-06 11:21:54 +05:30
James George
2694731c36 chore: remove stale type definitions (#3368) 2023-10-05 14:49:04 +05:30
James George
ae89af9978 feat: alert the user on empty collection/environment exports (#3416) 2023-10-05 14:38:38 +05:30
James George
87d617012f fix: environment variables usage in meta tags (#3418) 2023-10-05 13:51:42 +05:30
Liyas Thomas
2420b3fa42 chore: move deps in the root of monorepo into devDependencies (#3375)
chore: move deps in the root of monorepo into devDependencies
2023-09-28 22:25:22 +05:30
Anwarul Islam
175a991ec4 fix: gql teamID not being passed (#3392)
* chore: bump dependencies for path.charCodeAt issue
* fix: gql teamID is not passed issue
2023-09-28 22:04:02 +05:30
SamJakob
0301649aff chore: make devcontainer copy .env.example (#3318) 2023-09-28 21:58:17 +05:30
Joel Jacob Stephen
544b045300 fix: authorisation headers not being sent along with subscriptions when using graphql (#3354)
* fix: send auth headers to the payload

* refactor: alert user that headers are sent to connection_init

* refactor: send headers only when headers are populated

* chore: cleanup code
2023-09-28 21:57:07 +05:30
Andrew Bastin
65884293be chore: introduce docker buildx for multi-platform build 2023-09-18 21:16:23 +05:30
Andrew Bastin
3cb4861bac chore: pin netlify-cli version on ui deploy script 2023-09-18 20:51:42 +05:30
Andrew Bastin
7beed30815 chore: update ci to build for arm64 as well 2023-09-18 20:43:22 +05:30
Andrew Bastin
bb380f3751 chore: bump version to 2023.8.1 2023-09-18 20:18:23 +05:30
Andrew Bastin
33a7580e46 fix: support modal popping up on typing shift based commands on input 2023-09-18 20:10:17 +05:30
Liyas Thomas
ffb2b5c30a chore: improve button border radius 2023-09-18 19:51:22 +05:30
James George
7c238fa854 chore(cli): update error message (#3363) 2023-09-18 19:19:51 +05:30
Andrew Bastin
185b575e5b refactor: minor performance improvements on teams related operations 2023-09-18 18:50:57 +05:30
Andrew Bastin
bcc1147f81 fix: clear regression and extension recovers response for error status codes 2023-09-18 18:26:17 +05:30
Anwarul Islam
f5b130024e fix: missing baseurl on import openapi (#3323)
* fix: missing baseurl on import openapi

* fix: url parser for openapi v3

* chore: revert to baseURL for cases where doc servers is present but url is null

---------

Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-09-18 14:42:04 +05:30
Liyas Thomas
bb5c333bae fix: remove scrollbar from smart env input component on firefox (#3362) 2023-09-18 13:20:53 +05:30
Nivedin
3684d25848 fix: sticky searchbar hidden in codemirror (#3351)
* fix: sticky search bar in codemirror

* chore: use tailwind classes

* chore: improve consistency across editor instances

---------

Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
2023-09-18 12:45:14 +05:30
Anwarul Islam
8b0ba3a45e feat: differentiation for successful invites and failed invites (#3325)
feat: invites result splitted
2023-09-18 11:48:38 +05:30
Liyas Thomas
e847fb7b77 chore: clean up i18n (#3350) 2023-09-18 11:26:31 +05:30
Nivedin
5c78ae4dee fix: dirty tab count incorrect when closing tabs (#3359)
* fix: dirty tab count incorrect when closing tabs

* refactor: make the calculation more expressive

---------

Co-authored-by: amk-dev <akash.k.mohan98@gmail.com>
2023-09-18 11:20:26 +05:30
Nivedin
53ec605963 fix: duplicate tab reference bug (#3356) 2023-09-18 11:15:18 +05:30
Yuri Grand
75193a7aa8 i18n: translate locales to russian (#3312)
chore: translate locales to russian
2023-09-13 12:53:10 +05:30
tyo
b269c239d9 chore(i18n): update translation for Indonesian (#3284) 2023-09-13 12:48:46 +05:30
Liyas Thomas
72b4a1fc4e fix: typo in "twitter link" and "invite to hoppscotch" action (#3346) 2023-09-13 11:55:58 +05:30
DNT
d2d1674d31 i18n: update vi.json (#3241) 2023-09-13 11:52:37 +05:30
Joel Jacob Stephen
a6b57777e3 refactor: remove font sizes from the app (#3341)
* refactor: remove font size from settings

* refactor: remove font size from themes

* refactor: remove font size from spotlight

* refactor: remove default font size

* chore: clean up

---------

Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
2023-09-13 11:45:38 +05:30
Joel Jacob Stephen
65ef4db86f refactor: remove zen mode from the app (#3337)
* refactor: remove zen mode from settings

* refactor: remove zen mode from footer and options
2023-09-12 14:10:38 +05:30
Nivedin
7201147b55 fix: context-menu position fixed while scrolling (#3340) 2023-09-12 12:43:10 +05:30
Anwarul Islam
dd143c95a9 fix: unusual behavior while scrolling through spotlight entries (#3324)
* fix: spotlight scroll issue

* fix: entry hidden issue

* chore: back to loop mode
2023-09-12 12:42:44 +05:30
James George
005581ee7d fix: broken link to REST API Testing docs (#3333)
fix: broken link to REST API Testing docs
2023-09-12 12:32:10 +05:30
Joel Jacob Stephen
1431ecc6d7 refactor: keyboard shortcuts now supports different keyboard layouts including Dvorak (#3332)
* refactor: support mulitple keyboard layouts such as dvorak

* chore: replace redundant variable usage
2023-09-08 22:02:39 +05:30
Liyas Thomas
f34d896095 docs: updated screenshots and features list (#3310) 2023-09-05 12:06:47 +05:30
Andrew Bastin
e95ebb9226 chore: add release tag ci pipeline to push to docker hub 2023-08-31 15:49:32 +05:30
Andrew Bastin
57365eeae0 chore: bump version to 2023.8.0 2023-08-31 13:55:36 +05:30
Joel Jacob Stephen
b22bd97818 style: updated font size and truncation on fields in the invited users table in admin dashboard (#3300)
style: updated font size and fixed truncation issue on invited table
2023-08-28 23:27:55 +05:30
Anwarul Islam
b953b32ff4 fix: spotlight actions on graphql (#3299)
* fix: spotlight actions for graphql

* fix: environment actions

* fix: gql rename request

* fix: graphql spotlight actions

* fix: tab shortcuts not working properly

* fix: only show download and copy response when there is a response

---------

Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-08-28 20:40:01 +05:30
Liyas Thomas
0eacd6763b chore: improved command labels and icons (#3295)
* chore: improved command labels and icons

* chore: fix tests

---------

Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-08-28 18:15:00 +05:30
Anwarul Islam
8499ac7fec fix: graphql operation highlight on focus changed (#3297) 2023-08-28 17:55:42 +05:30
Nivedin
4adac4af38 fix: inspections bugs (#3277)
* fix: environment add bug in inspection

* chore: add 127.0.0.1 in url inspection

* chore: update browserextension inspection help url

* fix: team env not showing bug in selector

* chore: rework inspector systems to be reactive

* chore: handling tab changes gracefully

* refactor: move out url interceptor from the platform

* chore: add view function in inspector service to get views into the list

* fix: interceptors not kicking in on initial load

* fix: don't show no internet connection error unless browser deems so

* chore: fix tests

---------

Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-08-28 17:43:46 +05:30
Akash K
fd162e242c fix: issues with codegen (#3293)
* fix: fix issues with httpsnippet upgrade

* chore: fix HttpSnippet import
2023-08-28 15:57:44 +05:30
Andrew Bastin
3e83828722 chore: correct spelling for footer custom entries 2023-08-26 04:43:34 +05:30
Andrew Bastin
f7dc36e3f1 fix: correct typo 'additionalFooterMenuItems' 2023-08-26 03:09:11 +05:30
Andrew Bastin
a7566dfd86 feat: move crisp out of common (#3287)
* feat: move crisp out of common

* fix: update static spotlight searcher

* chore: fix typo
2023-08-26 03:00:58 +05:30
Mir Arif Hasan
d4d7a20fbd HBE-258 hotfix: skip parameter in findMany in shortcode module (#3294)
fix: skip parameter in findMany
2023-08-26 01:35:51 +05:30
Andrew Bastin
dfb281bcf7 chore: update prod.Dockerfile to add step for the backend container to not copy .env in 2023-08-25 21:03:00 +05:30
Andrew Bastin
c62482e81f fix: login component in app not respecting allowed auth provider ids 2023-08-25 19:13:03 +05:30
Anwarul Islam
886847ab7b fix: corrections for spotlight searchers (#3275) 2023-08-25 01:44:29 +05:30
Nivedin
a268cab11e fix: context menu bugs (#3279) 2023-08-25 00:27:03 +05:30
Nivedin
e9509b9fa1 fix: tab right click rename bug (#3286) 2023-08-25 00:20:08 +05:30
676 changed files with 44938 additions and 16266 deletions

View File

@@ -5,5 +5,5 @@
"features": { "features": {
"ghcr.io/NicoVIII/devcontainer-features/pnpm:1": {} "ghcr.io/NicoVIII/devcontainer-features/pnpm:1": {}
}, },
"postCreateCommand": "mv .env.example .env && pnpm i" "postCreateCommand": "cp .env.example .env && pnpm i"
} }

View File

@@ -12,8 +12,8 @@ SESSION_SECRET='add some secret here'
# Hoppscotch App Domain Config # Hoppscotch App Domain Config
REDIRECT_URL="http://localhost:3000" REDIRECT_URL="http://localhost:3000"
WHITELISTED_ORIGINS = "http://localhost:3170,http://localhost:3000,http://localhost:3100" WHITELISTED_ORIGINS="http://localhost:3170,http://localhost:3000,http://localhost:3100"
VITE_ALLOWED_AUTH_PROVIDERS = GOOGLE,GITHUB,MICROSOFT,EMAIL VITE_ALLOWED_AUTH_PROVIDERS=GOOGLE,GITHUB,MICROSOFT,EMAIL
# Google Auth Config # Google Auth Config
GOOGLE_CLIENT_ID="************************************************" GOOGLE_CLIENT_ID="************************************************"
@@ -59,3 +59,6 @@ VITE_BACKEND_API_URL=http://localhost:3170/v1
# Terms Of Service And Privacy Policy Links (Optional) # Terms Of Service And Privacy Policy Links (Optional)
VITE_APP_TOS_LINK=https://docs.hoppscotch.io/support/terms VITE_APP_TOS_LINK=https://docs.hoppscotch.io/support/terms
VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/support/privacy VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/support/privacy
# Set to `true` for subpath based access
ENABLE_SUBPATH_BASED_ACCESS=false

View File

@@ -0,0 +1,84 @@
name: "Push containers to Docker Hub on release"
on:
push:
tags:
- '*.*.*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup environment
run: cp .env.example .env
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push the backend container
uses: docker/build-push-action@v4
with:
context: .
file: ./prod.Dockerfile
target: backend
push: true
platforms: |
linux/amd64
linux/arm64
tags: |
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }}:latest
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_BACKEND_CONTAINER_NAME }}:${{ github.ref_name }}
- name: Build and push the frontend container
uses: docker/build-push-action@v4
with:
context: .
file: ./prod.Dockerfile
target: app
push: true
platforms: |
linux/amd64
linux/arm64
tags: |
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }}:latest
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_FRONTEND_CONTAINER_NAME }}:${{ github.ref_name }}
- name: Build and push the admin dashboard container
uses: docker/build-push-action@v4
with:
context: .
file: ./prod.Dockerfile
target: sh_admin
push: true
platforms: |
linux/amd64
linux/arm64
tags: |
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }}:latest
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_SH_ADMIN_CONTAINER_NAME }}:${{ github.ref_name }}
- name: Build and push the AIO container
uses: docker/build-push-action@v4
with:
context: .
file: ./prod.Dockerfile
target: aio
push: true
platforms: |
linux/amd64
linux/arm64
tags: |
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }}:latest
${{ secrets.DOCKER_ORG_NAME }}/${{ secrets.DOCKER_AIO_CONTAINER_NAME }}:${{ github.ref_name }}

View File

@@ -36,7 +36,7 @@ jobs:
# Deploy the ui site with netlify-cli # Deploy the ui site with netlify-cli
- name: Deploy to Netlify (ui) - name: Deploy to Netlify (ui)
run: npx netlify-cli deploy --dir=packages/hoppscotch-ui/.histoire/dist --prod run: npx netlify-cli@15.11.0 deploy --dir=packages/hoppscotch-ui/.histoire/dist --prod
env: env:
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_UI_SITE_ID }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_UI_SITE_ID }}
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}

View File

@@ -1,14 +0,0 @@
{
"recommendations": [
"antfu.iconify",
"vue.volar",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"editorconfig.editorconfig",
"csstools.postcss",
"folke.vscode-monorepo-workspace"
],
"unwantedRecommendations": [
"octref.vetur"
]
}

View File

@@ -6,8 +6,8 @@ We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status, identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity nationality, personal appearance, race, caste, color, religion, or sexual
and orientation. identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community. diverse, inclusive, and healthy community.
@@ -22,17 +22,17 @@ community include:
* Giving and gracefully accepting constructive feedback * Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, * Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience and learning from the experience
* Focusing on what is best not just for us as individuals, but for the * Focusing on what is best not just for us as individuals, but for the overall
overall community community
Examples of unacceptable behavior include: Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or * The use of sexualized language or imagery, and sexual attention or advances of
advances of any kind any kind
* Trolling, insulting or derogatory comments, and personal or political attacks * Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment * Public or private harassment
* Publishing others' private information, such as a physical or email * Publishing others' private information, such as a physical or email address,
address, without their explicit permission without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a * Other conduct which could reasonably be considered inappropriate in a
professional setting professional setting
@@ -82,15 +82,15 @@ behavior was inappropriate. A public apology may be requested.
### 2. Warning ### 2. Warning
**Community Impact**: A violation through a single incident or series **Community Impact**: A violation through a single incident or series of
of actions. actions.
**Consequence**: A warning with consequences for continued behavior. No **Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or like social media. Violating these terms may lead to a temporary or permanent
permanent ban. ban.
### 3. Temporary Ban ### 3. Temporary Ban
@@ -106,23 +106,27 @@ Violating these terms may lead to a permanent ban.
### 4. Permanent Ban ### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community **Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals. individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within **Consequence**: A permanent ban from any sort of public interaction within the
the community. community.
## Attribution ## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at version 2.1, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by [Mozilla's code of conduct Community Impact Guidelines were inspired by
enforcement ladder](https://github.com/mozilla/diversity). [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
https://www.contributor-covenant.org/translations. [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

190
README.md
View File

@@ -2,23 +2,18 @@
<a href="https://hoppscotch.io"> <a href="https://hoppscotch.io">
<img <img
src="https://avatars.githubusercontent.com/u/56705483" src="https://avatars.githubusercontent.com/u/56705483"
alt="Hoppscotch Logo" alt="Hoppscotch"
height="64" height="64"
/> />
</a> </a>
<br /> <h3>
<p>
<h3>
<b>
Hoppscotch
</b>
</h3>
</p>
<p>
<b> <b>
Open source API development ecosystem Hoppscotch
</b> </b>
</p> </h3>
<b>
Open Source API Development Ecosystem
</b>
<p> <p>
[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen?logo=github)](CODE_OF_CONDUCT.md) [![Website](https://img.shields.io/website?url=https%3A%2F%2Fhoppscotch.io&logo=hoppscotch)](https://hoppscotch.io) [![Tests](https://github.com/hoppscotch/hoppscotch/actions/workflows/tests.yml/badge.svg)](https://github.com/hoppscotch/hoppscotch/actions) [![Tweet](https://img.shields.io/twitter/url?url=https%3A%2F%2Fhoppscotch.io%2F)](https://twitter.com/share?text=%F0%9F%91%BD%20Hoppscotch%20%E2%80%A2%20Open%20source%20API%20development%20ecosystem%20-%20Helps%20you%20create%20requests%20faster,%20saving%20precious%20time%20on%20development.&url=https://hoppscotch.io&hashtags=hoppscotch&via=hoppscotch_io) [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen?logo=github)](CODE_OF_CONDUCT.md) [![Website](https://img.shields.io/website?url=https%3A%2F%2Fhoppscotch.io&logo=hoppscotch)](https://hoppscotch.io) [![Tests](https://github.com/hoppscotch/hoppscotch/actions/workflows/tests.yml/badge.svg)](https://github.com/hoppscotch/hoppscotch/actions) [![Tweet](https://img.shields.io/twitter/url?url=https%3A%2F%2Fhoppscotch.io%2F)](https://twitter.com/share?text=%F0%9F%91%BD%20Hoppscotch%20%E2%80%A2%20Open%20source%20API%20development%20ecosystem%20-%20Helps%20you%20create%20requests%20faster,%20saving%20precious%20time%20on%20development.&url=https://hoppscotch.io&hashtags=hoppscotch&via=hoppscotch_io)
@@ -34,23 +29,18 @@
</p> </p>
<br /> <br />
<p> <p>
<a href="https://hoppscotch.io/#gh-light-mode-only" target="_blank"> <a href="https://hoppscotch.io">
<img <picture>
src="./packages/hoppscotch-common/public/images/banner-light.png" <source media="(prefers-color-scheme: dark)" srcset="./packages/hoppscotch-common/public/images/banner-dark.png">
alt="Hoppscotch" <source media="(prefers-color-scheme: light)" srcset="./packages/hoppscotch-common/public/images/banner-light.png">
width="100%" <img alt="Hoppscotch" src="./packages/hoppscotch-common/public/images/banner-dark.png">
/> </picture>
</a>
<a href="https://hoppscotch.io/#gh-dark-mode-only" target="_blank">
<img
src="./packages/hoppscotch-common/public/images/banner-dark.png"
alt="Hoppscotch"
width="100%"
/>
</a> </a>
</p> </p>
</div> </div>
_We highly recommend you take a look at the [**Hoppscotch Documentation**](https://docs.hoppscotch.io) to learn more about the app._
#### **Support** #### **Support**
[![Chat on Discord](https://img.shields.io/badge/chat-Discord-7289DA?logo=discord)](https://hoppscotch.io/discord) [![Chat on Telegram](https://img.shields.io/badge/chat-Telegram-2CA5E0?logo=telegram)](https://hoppscotch.io/telegram) [![Discuss on GitHub](https://img.shields.io/badge/discussions-GitHub-333333?logo=github)](https://github.com/hoppscotch/hoppscotch/discussions) [![Chat on Discord](https://img.shields.io/badge/chat-Discord-7289DA?logo=discord)](https://hoppscotch.io/discord) [![Chat on Telegram](https://img.shields.io/badge/chat-Telegram-2CA5E0?logo=telegram)](https://hoppscotch.io/telegram) [![Discuss on GitHub](https://img.shields.io/badge/discussions-GitHub-333333?logo=github)](https://github.com/hoppscotch/hoppscotch/discussions)
@@ -59,9 +49,9 @@
❤️ **Lightweight:** Crafted with minimalistic UI design. ❤️ **Lightweight:** Crafted with minimalistic UI design.
⚡️ **Fast:** Send requests and get/copy responses in real-time. ⚡️ **Fast:** Send requests and get responses in real time.
**HTTP Methods** 🗄️ **HTTP Methods:** Request methods define the type of action you are requesting to be performed.
- `GET` - Requests retrieve resource information - `GET` - Requests retrieve resource information
- `POST` - The server creates a new entry in a database - `POST` - The server creates a new entry in a database
@@ -74,17 +64,15 @@
- `TRACE` - Performs a message loop-back test along the path to the target resource - `TRACE` - Performs a message loop-back test along the path to the target resource
- `<custom>` - Some APIs use custom request methods such as `LIST`. Type in your custom methods. - `<custom>` - Some APIs use custom request methods such as `LIST`. Type in your custom methods.
🌈 **Make it yours:** Customizable combinations for background, foreground, and accent colors — [customize now](https://hoppscotch.io/settings). 🌈 **Theming:** Customizable combinations for background, foreground, and accent colors — [customize now](https://hoppscotch.io/settings).
**Theming** - Choose a theme: System preference, Light, Dark, and Black
- Choose accent colors: Green, Teal, Blue, Indigo, Purple, Yellow, Orange, Red, and Pink
- Choose a theme: System (default), Light, Dark, and Black
- Choose accent color: Green (default), Teal, Blue, Indigo, Purple, Yellow, Orange, Red, and Pink
- Distraction-free Zen mode - Distraction-free Zen mode
_Customized themes are synced with cloud / local session_ _Customized themes are synced with your cloud/local session._
🔥 **PWA:** Install as a [PWA](https://web.dev/what-are-pwas/) on your device. 🔥 **PWA:** Install as a [Progressive Web App](https://web.dev/progressive-web-apps) on your device.
- Instant loading with Service Workers - Instant loading with Service Workers
- Offline support - Offline support
@@ -107,7 +95,7 @@ _Customized themes are synced with cloud / local session_
📡 **Server-Sent Events:** Receive a stream of updates from a server over an HTTP connection without resorting to polling. 📡 **Server-Sent Events:** Receive a stream of updates from a server over an HTTP connection without resorting to polling.
🌩 **Socket.IO:** Send and Receive data with SocketIO server. 🌩 **Socket.IO:** Send and Receive data with the SocketIO server.
🦟 **MQTT:** Subscribe and Publish to topics of an MQTT Broker. 🦟 **MQTT:** Subscribe and Publish to topics of an MQTT Broker.
@@ -127,7 +115,7 @@ _Customized themes are synced with cloud / local session_
- OAuth 2.0 - OAuth 2.0
- OIDC Access Token/PKCE - OIDC Access Token/PKCE
📢 **Headers:** Describes the format the body of your request is being sent as. 📢 **Headers:** Describes the format the body of your request is being sent in.
📫 **Parameters:** Use request parameters to set varying parts in simulated requests. 📫 **Parameters:** Use request parameters to set varying parts in simulated requests.
@@ -137,14 +125,14 @@ _Customized themes are synced with cloud / local session_
- FormData, JSON, and many more - FormData, JSON, and many more
- Toggle between key-value and RAW input parameter list - Toggle between key-value and RAW input parameter list
👋 **Response:** Contains the status line, headers, and the message/response body. 📮 **Response:** Contains the status line, headers, and the message/response body.
- Copy response to clipboard - Copy the response to the clipboard
- Download response as a file - Download the response as a file
- View response headers - View response headers
- View raw and preview of HTML, image, JSON, XML responses - View raw and preview HTML, image, JSON, and XML responses
**History:** Request entries are synced with cloud / local session storage to restore with a single click. **History:** Request entries are synced with your cloud/local session storage.
📁 **Collections:** Keep your API requests organized with collections and folders. Reuse them with a single click. 📁 **Collections:** Keep your API requests organized with collections and folders. Reuse them with a single click.
@@ -152,7 +140,32 @@ _Customized themes are synced with cloud / local session_
- Nested folders - Nested folders
- Export and import as a file or GitHub gist - Export and import as a file or GitHub gist
_Collections are synced with cloud / local session storage_ _Collections are synced with your cloud/local session storage._
📜 **Pre-Request Scripts:** Snippets of code associated with a request that is executed before the request is sent.
- Set environment variables
- Include timestamp in the request headers
- Send a random alphanumeric string in the URL parameters
- Any JavaScript functions
👨‍👩‍👧‍👦 **Teams:** Helps you collaborate across your teams to design, develop, and test APIs faster.
- Create unlimited teams
- Create unlimited shared collections
- Create unlimited team members
- Role-based access control
- Cloud sync
- Multiple devices
👥 **Workspaces:** Organize your personal and team collections environments into workspaces. Easily switch between workspaces to manage multiple projects.
- Create unlimited workspaces
- Switch between personal and team workspaces
⌨️ **Keyboard Shortcuts:** Optimized for efficiency.
> **[Read our documentation on Keyboard Shortcuts](https://docs.hoppscotch.io/documentation/features/shortcuts)**
🌐 **Proxy:** Enable Proxy Mode from Settings to access blocked APIs. 🌐 **Proxy:** Enable Proxy Mode from Settings to access blocked APIs.
@@ -161,60 +174,31 @@ _Collections are synced with cloud / local session storage_
- Access APIs served in non-HTTPS (`http://`) endpoints - Access APIs served in non-HTTPS (`http://`) endpoints
- Use your Proxy URL - Use your Proxy URL
_Official proxy server is hosted by Hoppscotch - **[GitHub](https://github.com/hoppscotch/proxyscotch)** - **[Privacy Policy](https://docs.hoppscotch.io/support/privacy)**_ _Official proxy server is hosted by Hoppscotch - **[GitHub](https://github.com/hoppscotch/proxyscotch)** - **[Privacy Policy](https://docs.hoppscotch.io/support/privacy)**._
📜 **Pre-Request Scripts β:** Snippets of code associated with a request that is executed before the request is sent.
- Set environment variables
- Include timestamp in the request headers
- Send a random alphanumeric string in the URL parameters
- Any JavaScript functions
📄 **API Documentation:** Create and share dynamic API documentation easily, quickly.
1. Add your requests to Collections and Folders
2. Export Collections and easily share your APIs with the rest of your team
3. Import Collections and Generate Documentation on-the-go
⌨️ **Keyboard Shortcuts:** Optimized for efficiency.
> **[Read our documentation on Keyboard Shortcuts](https://docs.hoppscotch.io/documentation/features/shortcuts)**
🌎 **i18n:** Experience the app in your language. 🌎 **i18n:** Experience the app in your language.
Help us to translate Hoppscotch. Please read [`TRANSLATIONS`](TRANSLATIONS.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md), and the process for submitting pull requests to us. Help us to translate Hoppscotch. Please read [`TRANSLATIONS`](TRANSLATIONS.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md) and the process for submitting pull requests to us.
📦 **Add-ons:** Official add-ons for hoppscotch. ☁️ **Auth + Sync:** Sign in and sync your data in real-time across all your devices.
- **[Proxy](https://github.com/hoppscotch/proxyscotch)** - A simple proxy server created for Hoppscotch **Sign in with:**
- **[CLI β](https://github.com/hoppscotch/hopp-cli)** - A CLI solution for Hoppscotch
- **[Browser Extensions](https://github.com/hoppscotch/hoppscotch-extension)** - Browser extensions that simplifies access to Hoppscotch
[![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_16x16.png) **Firefox**](https://addons.mozilla.org/en-US/firefox/addon/hoppscotch) &nbsp;|&nbsp; [![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_16x16.png) **Chrome**](https://chrome.google.com/webstore/detail/hoppscotch-extension-for-c/amknoiejhlmhancpahfcfcfhllgkpbld)
> **Extensions fixes `CORS` issues.**
- **[Hopp-Doc-Gen](https://github.com/hoppscotch/hopp-doc-gen)** - An API doc generator CLI for Hoppscotch
_Add-ons are developed and maintained under **[Hoppscotch Organization](https://github.com/hoppscotch)**._
☁️ **Auth + Sync:** Sign in and sync your data in real-time.
**Sign in with**
- GitHub - GitHub
- Google - Google
- Microsoft - Microsoft
- Email - Email
- SSO (Single Sign-On)[^EE]
**Synchronize your data** **🔄 Synchronize your data:** Handoff to continue tasks on your other devices.
- Workspaces
- History - History
- Collections - Collections
- Environments - Environments
- Settings - Settings
**Post-Request Tests β:** Write tests associated with a request that is executed after the request's response. **Post-Request Tests:** Write tests associated with a request that is executed after the request's response.
- Check the status code as an integer - Check the status code as an integer
- Filter response headers - Filter response headers
@@ -222,7 +206,7 @@ _Add-ons are developed and maintained under **[Hoppscotch Organization](https://
- Set environment variables - Set environment variables
- Write JavaScript code - Write JavaScript code
🌱 **Environments** : Environment variables allow you to store and reuse values in your requests and scripts. 🌱 **Environments:** Environment variables allow you to store and reuse values in your requests and scripts.
- Unlimited environments and variables - Unlimited environments and variables
- Initialize through the pre-request script - Initialize through the pre-request script
@@ -241,22 +225,31 @@ _Add-ons are developed and maintained under **[Hoppscotch Organization](https://
</details> </details>
👨‍👩‍👧‍👦 **Teams β:** Helps you collaborate across your team to design, develop, and test APIs faster.
- Unlimited teams
- Unlimited shared collections
- Unlimited team members
- Role-based access control
- Cloud sync
- Multiple devices
🚚 **Bulk Edit:** Edit key-value pairs in bulk. 🚚 **Bulk Edit:** Edit key-value pairs in bulk.
- Entries are separated by newline - Entries are separated by newline
- Keys and values are separated by `:` - Keys and values are separated by `:`
- Prepend `#` to any row you want to add but keep disabled - Prepend `#` to any row you want to add but keep disabled
**For more features, please read our [documentation](https://docs.hoppscotch.io).** 🎛️ **Admin dashboard:** Manage your team and invite members.
- Insights
- Manage users
- Manage teams
📦 **Add-ons:** Official add-ons for hoppscotch.
- **[Hoppscotch CLI](https://github.com/hoppscotch/hopp-cli)** - Command-line interface for Hoppscotch.
- **[Proxy](https://github.com/hoppscotch/proxyscotch)** - A simple proxy server created for Hoppscotch.
- **[Browser Extensions](https://github.com/hoppscotch/hoppscotch-extension)** - Browser extensions that enhance your Hoppscotch experience.
[![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_16x16.png) **Firefox**](https://addons.mozilla.org/en-US/firefox/addon/hoppscotch) &nbsp;|&nbsp; [![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_16x16.png) **Chrome**](https://chrome.google.com/webstore/detail/hoppscotch-extension-for-c/amknoiejhlmhancpahfcfcfhllgkpbld)
> **Extensions fix `CORS` issues.**
_Add-ons are developed and maintained under **[Hoppscotch Organization](https://github.com/hoppscotch)**._
**For a complete list of features, please read our [documentation](https://docs.hoppscotch.io).**
## **Demo** ## **Demo**
@@ -268,18 +261,9 @@ _Add-ons are developed and maintained under **[Hoppscotch Organization](https://
2. Click "Send" to simulate the request 2. Click "Send" to simulate the request
3. View the response 3. View the response
## **Built with**
- [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML)
- [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS), [SCSS](https://sass-lang.com), [Windi CSS](https://windicss.org)
- [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- [TypeScript](https://www.typescriptlang.org)
- [Vue](https://vuejs.org)
- [Vite](https://vitejs.dev)
## **Developing** ## **Developing**
Follow our [self-hosting guide](https://docs.hoppscotch.io/documentation/self-host/getting-started) to get started with the development environment. Follow our [self-hosting documentation](https://docs.hoppscotch.io/documentation/self-host/getting-started) to get started with the development environment.
## **Contributing** ## **Contributing**
@@ -297,7 +281,7 @@ See the [`CHANGELOG`](CHANGELOG.md) file for details.
## **Authors** ## **Authors**
This project exists thanks to all the people who contribute — [contribute](CONTRIBUTING.md). This project owes its existence to the collective efforts of all those who contribute — [contribute now](CONTRIBUTING.md).
<div align="center"> <div align="center">
<a href="https://github.com/hoppscotch/hoppscotch/graphs/contributors"> <a href="https://github.com/hoppscotch/hoppscotch/graphs/contributors">
@@ -309,4 +293,6 @@ This project exists thanks to all the people who contribute — [contribute](CON
## **License** ## **License**
This project is licensed under the [MIT License](https://opensource.org/licenses/MIT) - see the [`LICENSE`](LICENSE) file for details. This project is licensed under the [MIT License](https://opensource.org/licenses/MIT) see the [`LICENSE`](LICENSE) file for details.
[^EE]: Enterprise edition feature. [Learn more](https://docs.hoppscotch.io/documentation/self-host/getting-started).

View File

@@ -2,8 +2,9 @@
This document outlines security procedures and general policies for the Hoppscotch project. This document outlines security procedures and general policies for the Hoppscotch project.
1. [Reporting a security vulnerability](#reporting-a-security-vulnerability) - [Security Policy](#security-policy)
3. [Incident response process](#incident-response-process) - [Reporting a security vulnerability](#reporting-a-security-vulnerability)
- [Incident response process](#incident-response-process)
## Reporting a security vulnerability ## Reporting a security vulnerability

View File

@@ -9,26 +9,24 @@ Before you start working on a new language, please look through the [open pull r
if there is no existing translation, you can create a new one by following these steps: if there is no existing translation, you can create a new one by following these steps:
1. **[Fork the repository](https://github.com/hoppscotch/hoppscotch/fork).** 1. **[Fork the repository](https://github.com/hoppscotch/hoppscotch/fork).**
2. **Checkout the `i18n` branch for latest translations.** 2. **Checkout the `main` branch for latest translations.**
3. **Create a new branch for your translation with base branch `i18n`.** 3. **Create a new branch for your translation with base branch `main`.**
4. **Create target language file in the [`/packages/hoppscotch-common/locales`](https://github.com/hoppscotch/hoppscotch/tree/main/packages/hoppscotch-common/locales) directory.** 4. **Create target language file in the [`/packages/hoppscotch-common/locales`](https://github.com/hoppscotch/hoppscotch/tree/main/packages/hoppscotch-common/locales) directory.**
5. **Copy the contents of the source file [`/packages/hoppscotch-common/locales/en.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-common/locales/en.json) to the target language file.** 5. **Copy the contents of the source file [`/packages/hoppscotch-common/locales/en.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-common/locales/en.json) to the target language file.**
6. **Translate the strings in the target language file.** 6. **Translate the strings in the target language file.**
7. **Add your language entry to [`/packages/hoppscotch-common/languages.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-common/languages.json).** 7. **Add your language entry to [`/packages/hoppscotch-common/languages.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-common/languages.json).**
8. **Save & commit changes.** 8. **Save and commit changes.**
9. **Send a pull request.** 9. **Send a pull request.**
_You may send a pull request before all steps above are complete: e.g., you may want to ask for help with translations, or getting tests to pass. However, your pull request will not be merged until all steps above are complete._ _You may send a pull request before all steps above are complete: e.g., you may want to ask for help with translations, or getting tests to pass. However, your pull request will not be merged until all steps above are complete._
`i18n` branch will be merged into `main` branch once every week.
Completing an initial translation of the whole site is a fairly large task. One way to break that task up is to work with other translators through pull requests on your fork. You can also [add collaborators to your fork](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/inviting-collaborators-to-a-personal-repository) if you'd like to invite other translators to commit directly to your fork and share responsibility for merging pull requests. Completing an initial translation of the whole site is a fairly large task. One way to break that task up is to work with other translators through pull requests on your fork. You can also [add collaborators to your fork](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/inviting-collaborators-to-a-personal-repository) if you'd like to invite other translators to commit directly to your fork and share responsibility for merging pull requests.
## Updating a translation ## Updating a translation
### Corrections ### Corrections
If you notice spelling or grammar errors, typos, or opportunities for better phrasing, open a pull request with your suggested fix. If you see a problem that you aren't sure of or don't have time to fix, open an issue. If you notice spelling or grammar errors, typos, or opportunities for better phrasing, open a pull request with your suggested fix. If you see a problem that you aren't sure of or don't have time to fix, [open an issue](https://github.com/hoppscotch/hoppscotch/issues/new/choose).
### Broken links ### Broken links

View File

@@ -0,0 +1,19 @@
:3000 {
try_files {path} /
root * /site/selfhost-web
file_server
}
:3100 {
try_files {path} /
root * /site/sh-admin-multiport-setup
file_server
}
:3170 {
reverse_proxy localhost:8080
}
:80 {
respond 404
}

View File

@@ -0,0 +1,37 @@
:3000 {
respond 404
}
:3100 {
respond 404
}
:3170 {
reverse_proxy localhost:8080
}
:80 {
# Serve the `selfhost-web` SPA by default
root * /site/selfhost-web
file_server
handle_path /admin* {
root * /site/sh-admin-subpath-access
file_server
# Ensures any non-existent file in the server is routed to the SPA
try_files {path} /
}
# Handle requests under `/backend*` path
handle_path /backend* {
reverse_proxy localhost:8080
}
# Catch-all route for unknown paths, serves `selfhost-web` SPA
handle {
root * /site/selfhost-web
file_server
try_files {path} /
}
}

View File

@@ -1,11 +0,0 @@
:3000 {
try_files {path} /
root * /site/selfhost-web
file_server
}
:3100 {
try_files {path} /
root * /site/sh-admin
file_server
}

View File

@@ -49,7 +49,8 @@ execSync(`npx import-meta-env -x build.env -e build.env -p "/site/**/*"`)
fs.rmSync("build.env") fs.rmSync("build.env")
const caddyProcess = runChildProcessWithPrefix("caddy", ["run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"], "App/Admin Dashboard Caddy") const caddyFileName = process.env.ENABLE_SUBPATH_BASED_ACCESS === 'true' ? 'aio-subpath-access.Caddyfile' : 'aio-multiport-setup.Caddyfile'
const caddyProcess = runChildProcessWithPrefix("caddy", ["run", "--config", `/etc/caddy/${caddyFileName}`, "--adapter", "caddyfile"], "App/Admin Dashboard Caddy")
const backendProcess = runChildProcessWithPrefix("pnpm", ["run", "start:prod"], "Backend Server") const backendProcess = runChildProcessWithPrefix("pnpm", ["run", "start:prod"], "Backend Server")
caddyProcess.on("exit", (code) => { caddyProcess.on("exit", (code) => {

View File

@@ -17,7 +17,7 @@ services:
environment: environment:
# Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well) # Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well)
- DATABASE_URL=postgresql://postgres:testpass@hoppscotch-db:5432/hoppscotch?connect_timeout=300 - DATABASE_URL=postgresql://postgres:testpass@hoppscotch-db:5432/hoppscotch?connect_timeout=300
- PORT=3170 - PORT=8080
volumes: volumes:
# Uncomment the line below when modifying code. Only applicable when using the "dev" target. # Uncomment the line below when modifying code. Only applicable when using the "dev" target.
# - ./packages/hoppscotch-backend/:/usr/src/app # - ./packages/hoppscotch-backend/:/usr/src/app
@@ -26,6 +26,7 @@ services:
hoppscotch-db: hoppscotch-db:
condition: service_healthy condition: service_healthy
ports: ports:
- "3180:80"
- "3170:3170" - "3170:3170"
# The main hoppscotch app. This will be hosted at port 3000 # The main hoppscotch app. This will be hosted at port 3000
@@ -42,7 +43,8 @@ services:
depends_on: depends_on:
- hoppscotch-backend - hoppscotch-backend
ports: ports:
- "3000:8080" - "3080:80"
- "3000:3000"
# The Self Host dashboard for managing the app. This will be hosted at port 3100 # The Self Host dashboard for managing the app. This will be hosted at port 3100
# NOTE: To do TLS or play around with how the app is hosted, you can look into the Caddyfile for # NOTE: To do TLS or play around with how the app is hosted, you can look into the Caddyfile for
@@ -58,7 +60,8 @@ services:
depends_on: depends_on:
- hoppscotch-backend - hoppscotch-backend
ports: ports:
- "3100:8080" - "3280:80"
- "3100:3100"
# The service that spins up all 3 services at once in one container # The service that spins up all 3 services at once in one container
hoppscotch-aio: hoppscotch-aio:
@@ -76,6 +79,7 @@ services:
- "3000:3000" - "3000:3000"
- "3100:3100" - "3100:3100"
- "3170:3170" - "3170:3170"
- "3080:80"
# The preset DB service, you can delete/comment the below lines if # The preset DB service, you can delete/comment the below lines if
# you are using an external postgres instance # you are using an external postgres instance

View File

@@ -22,15 +22,22 @@
"workspaces": [ "workspaces": [
"./packages/*" "./packages/*"
], ],
"dependencies": {
"husky": "^7.0.4",
"lint-staged": "^12.3.8"
},
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^16.2.3", "@commitlint/cli": "^16.2.3",
"@commitlint/config-conventional": "^16.2.1", "@commitlint/config-conventional": "^16.2.1",
"@types/node": "^17.0.24", "@types/node": "17.0.27",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"http-server": "^14.1.1" "http-server": "^14.1.1",
"husky": "^7.0.4",
"lint-staged": "12.4.0"
},
"pnpm": {
"packageExtensions": {
"httpsnippet@^3.0.1": {
"peerDependencies": {
"ajv": "6.12.3"
}
}
}
} }
} }

View File

@@ -17,16 +17,16 @@
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"sideEffects": false, "sideEffects": false,
"dependencies": { "dependencies": {
"@codemirror/language": "^6.9.0", "@codemirror/language": "6.9.0",
"@lezer/highlight": "^1.1.6", "@lezer/highlight": "1.1.4",
"@lezer/lr": "^1.3.10" "@lezer/lr": "^1.3.13"
}, },
"devDependencies": { "devDependencies": {
"@lezer/generator": "^1.5.0", "@lezer/generator": "^1.5.1",
"mocha": "^9.2.2", "mocha": "^9.2.2",
"rollup": "^2.70.2", "rollup": "^3.29.3",
"rollup-plugin-dts": "^4.2.1", "rollup-plugin-dts": "^6.0.2",
"rollup-plugin-ts": "^2.0.7", "rollup-plugin-ts": "^3.4.5",
"typescript": "^4.6.3" "typescript": "^5.2.2"
} }
} }

View File

@@ -0,0 +1,3 @@
:80 :3170 {
reverse_proxy localhost:8080
}

View File

@@ -1,6 +1,6 @@
{ {
"name": "hoppscotch-backend", "name": "hoppscotch-backend",
"version": "2023.4.8", "version": "2023.8.4-1",
"description": "", "description": "",
"author": "", "author": "",
"private": true, "private": true,
@@ -24,18 +24,17 @@
"do-test": "pnpm run test" "do-test": "pnpm run test"
}, },
"dependencies": { "dependencies": {
"@nestjs-modules/mailer": "^1.8.1", "@apollo/server": "^4.9.4",
"@nestjs/apollo": "^10.1.6", "@nestjs-modules/mailer": "^1.9.1",
"@nestjs/common": "^9.2.1", "@nestjs/apollo": "^12.0.9",
"@nestjs/core": "^9.2.1", "@nestjs/common": "^10.2.6",
"@nestjs/graphql": "^10.1.6", "@nestjs/core": "^10.2.6",
"@nestjs/jwt": "^10.0.1", "@nestjs/graphql": "^12.0.9",
"@nestjs/passport": "^9.0.0", "@nestjs/jwt": "^10.1.1",
"@nestjs/platform-express": "^9.2.1", "@nestjs/passport": "^10.0.2",
"@nestjs/throttler": "^4.0.0", "@nestjs/platform-express": "^10.2.6",
"@nestjs/throttler": "^5.0.0",
"@prisma/client": "^4.16.2", "@prisma/client": "^4.16.2",
"apollo-server-express": "^3.11.1",
"apollo-server-plugin-base": "^3.7.1",
"argon2": "^0.30.3", "argon2": "^0.30.3",
"bcrypt": "^5.1.0", "bcrypt": "^5.1.0",
"cookie": "^0.5.0", "cookie": "^0.5.0",
@@ -43,9 +42,9 @@
"express": "^4.17.1", "express": "^4.17.1",
"express-session": "^1.17.3", "express-session": "^1.17.3",
"fp-ts": "^2.13.1", "fp-ts": "^2.13.1",
"graphql": "^15.5.0", "graphql": "^16.8.1",
"graphql-query-complexity": "^0.12.0", "graphql-query-complexity": "^0.12.0",
"graphql-redis-subscriptions": "^2.5.0", "graphql-redis-subscriptions": "^2.6.0",
"graphql-subscriptions": "^2.0.0", "graphql-subscriptions": "^2.0.0",
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
"io-ts": "^2.2.16", "io-ts": "^2.2.16",
@@ -63,9 +62,9 @@
"rxjs": "^7.6.0" "rxjs": "^7.6.0"
}, },
"devDependencies": { "devDependencies": {
"@nestjs/cli": "^9.1.5", "@nestjs/cli": "^10.1.18",
"@nestjs/schematics": "^9.0.3", "@nestjs/schematics": "^10.0.2",
"@nestjs/testing": "^9.2.1", "@nestjs/testing": "^10.2.6",
"@relmify/jest-fp-ts": "^2.0.2", "@relmify/jest-fp-ts": "^2.0.2",
"@types/argon2": "^0.15.0", "@types/argon2": "^0.15.0",
"@types/bcrypt": "^5.0.0", "@types/bcrypt": "^5.0.0",

View File

@@ -0,0 +1,15 @@
/*
Warnings:
- A unique constraint covering the columns `[id]` on the table `Shortcode` will be added. If there are existing duplicate values, this will fail.
*/
-- AlterTable
ALTER TABLE "Shortcode" ADD COLUMN "embedProperties" JSONB,
ADD COLUMN "updatedOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
-- CreateIndex
CREATE UNIQUE INDEX "Shortcode_id_key" ON "Shortcode"("id");
-- AddForeignKey
ALTER TABLE "Shortcode" ADD CONSTRAINT "Shortcode_creatorUid_fkey" FOREIGN KEY ("creatorUid") REFERENCES "User"("uid") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "TeamCollection" ADD COLUMN "data" JSONB;
-- AlterTable
ALTER TABLE "UserCollection" ADD COLUMN "data" JSONB;

View File

@@ -43,6 +43,7 @@ model TeamInvitation {
model TeamCollection { model TeamCollection {
id String @id @default(cuid()) id String @id @default(cuid())
parentID String? parentID String?
data Json?
parent TeamCollection? @relation("TeamCollectionChildParent", fields: [parentID], references: [id]) parent TeamCollection? @relation("TeamCollectionChildParent", fields: [parentID], references: [id])
children TeamCollection[] @relation("TeamCollectionChildParent") children TeamCollection[] @relation("TeamCollectionChildParent")
requests TeamRequest[] requests TeamRequest[]
@@ -68,10 +69,13 @@ model TeamRequest {
} }
model Shortcode { model Shortcode {
id String @id id String @id @unique
request Json request Json
creatorUid String? embedProperties Json?
createdOn DateTime @default(now()) creatorUid String?
User User? @relation(fields: [creatorUid], references: [uid])
createdOn DateTime @default(now())
updatedOn DateTime @default(now()) @updatedAt
@@unique(fields: [id, creatorUid], name: "creator_uid_shortcode_unique") @@unique(fields: [id, creatorUid], name: "creator_uid_shortcode_unique")
} }
@@ -102,6 +106,7 @@ model User {
currentGQLSession Json? currentGQLSession Json?
createdOn DateTime @default(now()) @db.Timestamp(3) createdOn DateTime @default(now()) @db.Timestamp(3)
invitedUsers InvitedUsers[] invitedUsers InvitedUsers[]
shortcodes Shortcode[]
} }
model Account { model Account {
@@ -192,6 +197,7 @@ model UserCollection {
userUid String userUid String
user User @relation(fields: [userUid], references: [uid], onDelete: Cascade) user User @relation(fields: [userUid], references: [uid], onDelete: Cascade)
title String title String
data Json?
orderIndex Int orderIndex Int
type ReqType type ReqType
createdOn DateTime @default(now()) @db.Timestamp(3) createdOn DateTime @default(now()) @db.Timestamp(3)

View File

@@ -0,0 +1,66 @@
#!/usr/local/bin/node
// @ts-check
import { spawn } from 'child_process';
import process from 'process';
function runChildProcessWithPrefix(command, args, prefix) {
const childProcess = spawn(command, args);
childProcess.stdout.on('data', (data) => {
const output = data.toString().trim().split('\n');
output.forEach((line) => {
console.log(`${prefix} | ${line}`);
});
});
childProcess.stderr.on('data', (data) => {
const error = data.toString().trim().split('\n');
error.forEach((line) => {
console.error(`${prefix} | ${line}`);
});
});
childProcess.on('close', (code) => {
console.log(`${prefix} Child process exited with code ${code}`);
});
childProcess.on('error', (stuff) => {
console.error('error');
console.error(stuff);
});
return childProcess;
}
const caddyProcess = runChildProcessWithPrefix(
'caddy',
['run', '--config', '/etc/caddy/backend.Caddyfile', '--adapter', 'caddyfile'],
'App/Admin Dashboard Caddy',
);
const backendProcess = runChildProcessWithPrefix(
'pnpm',
['run', 'start:prod'],
'Backend Server',
);
caddyProcess.on('exit', (code) => {
console.log(`Exiting process because Caddy Server exited with code ${code}`);
process.exit(code);
});
backendProcess.on('exit', (code) => {
console.log(
`Exiting process because Backend Server exited with code ${code}`,
);
process.exit(code);
});
process.on('SIGINT', () => {
console.log('SIGINT received, exiting...');
caddyProcess.kill('SIGINT');
backendProcess.kill('SIGINT');
process.exit(0);
});

View File

@@ -1,4 +1,9 @@
import { ObjectType } from '@nestjs/graphql'; import { ObjectType, OmitType } from '@nestjs/graphql';
import { User } from 'src/user/user.model';
@ObjectType() @ObjectType()
export class Admin {} export class Admin extends OmitType(User, [
'isAdmin',
'currentRESTSession',
'currentGQLSession',
]) {}

View File

@@ -10,6 +10,8 @@ import { TeamInvitationModule } from '../team-invitation/team-invitation.module'
import { TeamEnvironmentsModule } from '../team-environments/team-environments.module'; import { TeamEnvironmentsModule } from '../team-environments/team-environments.module';
import { TeamCollectionModule } from '../team-collection/team-collection.module'; import { TeamCollectionModule } from '../team-collection/team-collection.module';
import { TeamRequestModule } from '../team-request/team-request.module'; import { TeamRequestModule } from '../team-request/team-request.module';
import { InfraResolver } from './infra.resolver';
import { ShortcodeModule } from 'src/shortcode/shortcode.module';
@Module({ @Module({
imports: [ imports: [
@@ -22,8 +24,9 @@ import { TeamRequestModule } from '../team-request/team-request.module';
TeamEnvironmentsModule, TeamEnvironmentsModule,
TeamCollectionModule, TeamCollectionModule,
TeamRequestModule, TeamRequestModule,
ShortcodeModule,
], ],
providers: [AdminResolver, AdminService], providers: [InfraResolver, AdminResolver, AdminService],
exports: [AdminService], exports: [AdminService],
}) })
export class AdminModule {} export class AdminModule {}

View File

@@ -21,15 +21,15 @@ import { InvitedUser } from './invited-user.model';
import { GqlUser } from '../decorators/gql-user.decorator'; import { GqlUser } from '../decorators/gql-user.decorator';
import { PubSubService } from '../pubsub/pubsub.service'; import { PubSubService } from '../pubsub/pubsub.service';
import { Team, TeamMember } from '../team/team.model'; import { Team, TeamMember } from '../team/team.model';
import { User } from '../user/user.model';
import { TeamInvitation } from '../team-invitation/team-invitation.model';
import { PaginationArgs } from '../types/input-types.args';
import { import {
AddUserToTeamArgs, AddUserToTeamArgs,
ChangeUserRoleInTeamArgs, ChangeUserRoleInTeamArgs,
} from './input-types.args'; } from './input-types.args';
import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard'; import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard';
import { SkipThrottle } from '@nestjs/throttler'; import { SkipThrottle } from '@nestjs/throttler';
import { User } from 'src/user/user.model';
import { PaginationArgs } from 'src/types/input-types.args';
import { TeamInvitation } from 'src/team-invitation/team-invitation.model';
@UseGuards(GqlThrottlerGuard) @UseGuards(GqlThrottlerGuard)
@Resolver(() => Admin) @Resolver(() => Admin)
@@ -51,6 +51,7 @@ export class AdminResolver {
@ResolveField(() => [User], { @ResolveField(() => [User], {
description: 'Returns a list of all admin users in infra', description: 'Returns a list of all admin users in infra',
deprecationReason: 'Use `infra` query instead',
}) })
@UseGuards(GqlAuthGuard, GqlAdminGuard) @UseGuards(GqlAuthGuard, GqlAdminGuard)
async admins() { async admins() {
@@ -59,6 +60,7 @@ export class AdminResolver {
} }
@ResolveField(() => User, { @ResolveField(() => User, {
description: 'Returns a user info by UID', description: 'Returns a user info by UID',
deprecationReason: 'Use `infra` query instead',
}) })
@UseGuards(GqlAuthGuard, GqlAdminGuard) @UseGuards(GqlAuthGuard, GqlAdminGuard)
async userInfo( async userInfo(
@@ -76,6 +78,7 @@ export class AdminResolver {
@ResolveField(() => [User], { @ResolveField(() => [User], {
description: 'Returns a list of all the users in infra', description: 'Returns a list of all the users in infra',
deprecationReason: 'Use `infra` query instead',
}) })
@UseGuards(GqlAuthGuard, GqlAdminGuard) @UseGuards(GqlAuthGuard, GqlAdminGuard)
async allUsers( async allUsers(
@@ -88,6 +91,7 @@ export class AdminResolver {
@ResolveField(() => [InvitedUser], { @ResolveField(() => [InvitedUser], {
description: 'Returns a list of all the invited users', description: 'Returns a list of all the invited users',
deprecationReason: 'Use `infra` query instead',
}) })
async invitedUsers(@Parent() admin: Admin): Promise<InvitedUser[]> { async invitedUsers(@Parent() admin: Admin): Promise<InvitedUser[]> {
const users = await this.adminService.fetchInvitedUsers(); const users = await this.adminService.fetchInvitedUsers();
@@ -96,6 +100,7 @@ export class AdminResolver {
@ResolveField(() => [Team], { @ResolveField(() => [Team], {
description: 'Returns a list of all the teams in the infra', description: 'Returns a list of all the teams in the infra',
deprecationReason: 'Use `infra` query instead',
}) })
async allTeams( async allTeams(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -106,6 +111,7 @@ export class AdminResolver {
} }
@ResolveField(() => Team, { @ResolveField(() => Team, {
description: 'Returns a team info by ID when requested by Admin', description: 'Returns a team info by ID when requested by Admin',
deprecationReason: 'Use `infra` query instead',
}) })
async teamInfo( async teamInfo(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -123,6 +129,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return count of all the members in a team', description: 'Return count of all the members in a team',
deprecationReason: 'Use `infra` query instead',
}) })
async membersCountInTeam( async membersCountInTeam(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -140,6 +147,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return count of all the stored collections in a team', description: 'Return count of all the stored collections in a team',
deprecationReason: 'Use `infra` query instead',
}) })
async collectionCountInTeam( async collectionCountInTeam(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -155,6 +163,7 @@ export class AdminResolver {
} }
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return count of all the stored requests in a team', description: 'Return count of all the stored requests in a team',
deprecationReason: 'Use `infra` query instead',
}) })
async requestCountInTeam( async requestCountInTeam(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -171,6 +180,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return count of all the stored environments in a team', description: 'Return count of all the stored environments in a team',
deprecationReason: 'Use `infra` query instead',
}) })
async environmentCountInTeam( async environmentCountInTeam(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -187,6 +197,7 @@ export class AdminResolver {
@ResolveField(() => [TeamInvitation], { @ResolveField(() => [TeamInvitation], {
description: 'Return all the pending invitations in a team', description: 'Return all the pending invitations in a team',
deprecationReason: 'Use `infra` query instead',
}) })
async pendingInvitationCountInTeam( async pendingInvitationCountInTeam(
@Parent() admin: Admin, @Parent() admin: Admin,
@@ -205,6 +216,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return total number of Users in organization', description: 'Return total number of Users in organization',
deprecationReason: 'Use `infra` query instead',
}) })
async usersCount() { async usersCount() {
return this.adminService.getUsersCount(); return this.adminService.getUsersCount();
@@ -212,6 +224,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return total number of Teams in organization', description: 'Return total number of Teams in organization',
deprecationReason: 'Use `infra` query instead',
}) })
async teamsCount() { async teamsCount() {
return this.adminService.getTeamsCount(); return this.adminService.getTeamsCount();
@@ -219,6 +232,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return total number of Team Collections in organization', description: 'Return total number of Team Collections in organization',
deprecationReason: 'Use `infra` query instead',
}) })
async teamCollectionsCount() { async teamCollectionsCount() {
return this.adminService.getTeamCollectionsCount(); return this.adminService.getTeamCollectionsCount();
@@ -226,6 +240,7 @@ export class AdminResolver {
@ResolveField(() => Number, { @ResolveField(() => Number, {
description: 'Return total number of Team Requests in organization', description: 'Return total number of Team Requests in organization',
deprecationReason: 'Use `infra` query instead',
}) })
async teamRequestsCount() { async teamRequestsCount() {
return this.adminService.getTeamRequestsCount(); return this.adminService.getTeamRequestsCount();
@@ -428,6 +443,23 @@ export class AdminResolver {
return true; return true;
} }
@Mutation(() => Boolean, {
description: 'Revoke Shortcode by ID',
})
@UseGuards(GqlAuthGuard, GqlAdminGuard)
async revokeShortcodeByAdmin(
@Args({
name: 'code',
description: 'The shortcode to delete',
type: () => ID,
})
code: string,
): Promise<boolean> {
const res = await this.adminService.deleteShortcode(code);
if (E.isLeft(res)) throwErr(res.left);
return true;
}
/* Subscriptions */ /* Subscriptions */
@Subscription(() => InvitedUser, { @Subscription(() => InvitedUser, {

View File

@@ -15,6 +15,7 @@ import {
INVALID_EMAIL, INVALID_EMAIL,
USER_ALREADY_INVITED, USER_ALREADY_INVITED,
} from '../errors'; } from '../errors';
import { ShortcodeService } from 'src/shortcode/shortcode.service';
const mockPrisma = mockDeep<PrismaService>(); const mockPrisma = mockDeep<PrismaService>();
const mockPubSub = mockDeep<PubSubService>(); const mockPubSub = mockDeep<PubSubService>();
@@ -25,6 +26,7 @@ const mockTeamRequestService = mockDeep<TeamRequestService>();
const mockTeamInvitationService = mockDeep<TeamInvitationService>(); const mockTeamInvitationService = mockDeep<TeamInvitationService>();
const mockTeamCollectionService = mockDeep<TeamCollectionService>(); const mockTeamCollectionService = mockDeep<TeamCollectionService>();
const mockMailerService = mockDeep<MailerService>(); const mockMailerService = mockDeep<MailerService>();
const mockShortcodeService = mockDeep<ShortcodeService>();
const adminService = new AdminService( const adminService = new AdminService(
mockUserService, mockUserService,
@@ -36,6 +38,7 @@ const adminService = new AdminService(
mockPubSub as any, mockPubSub as any,
mockPrisma as any, mockPrisma as any,
mockMailerService, mockMailerService,
mockShortcodeService,
); );
const invitedUsers: InvitedUsers[] = [ const invitedUsers: InvitedUsers[] = [

View File

@@ -24,6 +24,7 @@ import { TeamRequestService } from '../team-request/team-request.service';
import { TeamEnvironmentsService } from '../team-environments/team-environments.service'; import { TeamEnvironmentsService } from '../team-environments/team-environments.service';
import { TeamInvitationService } from '../team-invitation/team-invitation.service'; import { TeamInvitationService } from '../team-invitation/team-invitation.service';
import { TeamMemberRole } from '../team/team.model'; import { TeamMemberRole } from '../team/team.model';
import { ShortcodeService } from 'src/shortcode/shortcode.service';
@Injectable() @Injectable()
export class AdminService { export class AdminService {
@@ -37,6 +38,7 @@ export class AdminService {
private readonly pubsub: PubSubService, private readonly pubsub: PubSubService,
private readonly prisma: PrismaService, private readonly prisma: PrismaService,
private readonly mailerService: MailerService, private readonly mailerService: MailerService,
private readonly shortcodeService: ShortcodeService,
) {} ) {}
/** /**
@@ -74,7 +76,7 @@ export class AdminService {
try { try {
await this.mailerService.sendUserInvitationEmail(inviteeEmail, { await this.mailerService.sendUserInvitationEmail(inviteeEmail, {
template: 'code-your-own', template: 'user-invitation',
variables: { variables: {
inviteeEmail: inviteeEmail, inviteeEmail: inviteeEmail,
magicLink: `${process.env.VITE_BASE_URL}`, magicLink: `${process.env.VITE_BASE_URL}`,
@@ -432,4 +434,35 @@ export class AdminService {
return E.right(teamInvite.right); return E.right(teamInvite.right);
} }
/**
* Fetch all created ShortCodes
*
* @param args Pagination arguments
* @param userEmail User email
* @returns ShortcodeWithUserEmail
*/
async fetchAllShortcodes(
cursorID: string,
take: number,
userEmail: string = null,
) {
return this.shortcodeService.fetchAllShortcodes(
{ cursor: cursorID, take },
userEmail,
);
}
/**
* Delete a Shortcode
*
* @param shortcodeID ID of Shortcode being deleted
* @returns Boolean on successful deletion
*/
async deleteShortcode(shortcodeID: string) {
const result = await this.shortcodeService.deleteShortcode(shortcodeID);
if (E.isLeft(result)) return E.left(result.left);
return E.right(result.right);
}
} }

View File

@@ -0,0 +1,10 @@
import { Field, ObjectType } from '@nestjs/graphql';
import { Admin } from './admin.model';
@ObjectType()
export class Infra {
@Field(() => Admin, {
description: 'Admin who executed the action',
})
executedBy: Admin;
}

View File

@@ -0,0 +1,225 @@
import { UseGuards } from '@nestjs/common';
import { Args, ID, Query, ResolveField, Resolver } from '@nestjs/graphql';
import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard';
import { Infra } from './infra.model';
import { AdminService } from './admin.service';
import { GqlAuthGuard } from 'src/guards/gql-auth.guard';
import { GqlAdminGuard } from './guards/gql-admin.guard';
import { User } from 'src/user/user.model';
import { AuthUser } from 'src/types/AuthUser';
import { throwErr } from 'src/utils';
import * as E from 'fp-ts/Either';
import { Admin } from './admin.model';
import { PaginationArgs } from 'src/types/input-types.args';
import { InvitedUser } from './invited-user.model';
import { Team } from 'src/team/team.model';
import { TeamInvitation } from 'src/team-invitation/team-invitation.model';
import { GqlAdmin } from './decorators/gql-admin.decorator';
import { ShortcodeWithUserEmail } from 'src/shortcode/shortcode.model';
@UseGuards(GqlThrottlerGuard)
@Resolver(() => Infra)
export class InfraResolver {
constructor(private adminService: AdminService) {}
@Query(() => Infra, {
description: 'Fetch details of the Infrastructure',
})
@UseGuards(GqlAuthGuard, GqlAdminGuard)
infra(@GqlAdmin() admin: Admin) {
const infra: Infra = { executedBy: admin };
return infra;
}
@ResolveField(() => [User], {
description: 'Returns a list of all admin users in infra',
})
@UseGuards(GqlAuthGuard, GqlAdminGuard)
async admins() {
const admins = await this.adminService.fetchAdmins();
return admins;
}
@ResolveField(() => User, {
description: 'Returns a user info by UID',
})
@UseGuards(GqlAuthGuard, GqlAdminGuard)
async userInfo(
@Args({
name: 'userUid',
type: () => ID,
description: 'The user UID',
})
userUid: string,
): Promise<AuthUser> {
const user = await this.adminService.fetchUserInfo(userUid);
if (E.isLeft(user)) throwErr(user.left);
return user.right;
}
@ResolveField(() => [User], {
description: 'Returns a list of all the users in infra',
})
@UseGuards(GqlAuthGuard, GqlAdminGuard)
async allUsers(@Args() args: PaginationArgs): Promise<AuthUser[]> {
const users = await this.adminService.fetchUsers(args.cursor, args.take);
return users;
}
@ResolveField(() => [InvitedUser], {
description: 'Returns a list of all the invited users',
})
async invitedUsers(): Promise<InvitedUser[]> {
const users = await this.adminService.fetchInvitedUsers();
return users;
}
@ResolveField(() => [Team], {
description: 'Returns a list of all the teams in the infra',
})
async allTeams(@Args() args: PaginationArgs): Promise<Team[]> {
const teams = await this.adminService.fetchAllTeams(args.cursor, args.take);
return teams;
}
@ResolveField(() => Team, {
description: 'Returns a team info by ID when requested by Admin',
})
async teamInfo(
@Args({
name: 'teamID',
type: () => ID,
description: 'Team ID for which info to fetch',
})
teamID: string,
): Promise<Team> {
const team = await this.adminService.getTeamInfo(teamID);
if (E.isLeft(team)) throwErr(team.left);
return team.right;
}
@ResolveField(() => Number, {
description: 'Return count of all the members in a team',
})
async membersCountInTeam(
@Args({
name: 'teamID',
type: () => ID,
description: 'Team ID for which team members to fetch',
nullable: false,
})
teamID: string,
): Promise<number> {
const teamMembersCount = await this.adminService.membersCountInTeam(teamID);
return teamMembersCount;
}
@ResolveField(() => Number, {
description: 'Return count of all the stored collections in a team',
})
async collectionCountInTeam(
@Args({
name: 'teamID',
type: () => ID,
description: 'Team ID for which team members to fetch',
})
teamID: string,
): Promise<number> {
const teamCollCount = await this.adminService.collectionCountInTeam(teamID);
return teamCollCount;
}
@ResolveField(() => Number, {
description: 'Return count of all the stored requests in a team',
})
async requestCountInTeam(
@Args({
name: 'teamID',
type: () => ID,
description: 'Team ID for which team members to fetch',
})
teamID: string,
): Promise<number> {
const teamReqCount = await this.adminService.requestCountInTeam(teamID);
return teamReqCount;
}
@ResolveField(() => Number, {
description: 'Return count of all the stored environments in a team',
})
async environmentCountInTeam(
@Args({
name: 'teamID',
type: () => ID,
description: 'Team ID for which team members to fetch',
})
teamID: string,
): Promise<number> {
const envsCount = await this.adminService.environmentCountInTeam(teamID);
return envsCount;
}
@ResolveField(() => [TeamInvitation], {
description: 'Return all the pending invitations in a team',
})
async pendingInvitationCountInTeam(
@Args({
name: 'teamID',
type: () => ID,
description: 'Team ID for which team members to fetch',
})
teamID: string,
) {
const invitations = await this.adminService.pendingInvitationCountInTeam(
teamID,
);
return invitations;
}
@ResolveField(() => Number, {
description: 'Return total number of Users in organization',
})
async usersCount() {
return this.adminService.getUsersCount();
}
@ResolveField(() => Number, {
description: 'Return total number of Teams in organization',
})
async teamsCount() {
return this.adminService.getTeamsCount();
}
@ResolveField(() => Number, {
description: 'Return total number of Team Collections in organization',
})
async teamCollectionsCount() {
return this.adminService.getTeamCollectionsCount();
}
@ResolveField(() => Number, {
description: 'Return total number of Team Requests in organization',
})
async teamRequestsCount() {
return this.adminService.getTeamRequestsCount();
}
@ResolveField(() => [ShortcodeWithUserEmail], {
description: 'Returns a list of all the shortcodes in the infra',
})
async allShortcodes(
@Args() args: PaginationArgs,
@Args({
name: 'userEmail',
nullable: true,
description: 'Users email to filter shortcodes by',
})
userEmail: string,
) {
return await this.adminService.fetchAllShortcodes(
args.cursor,
args.take,
userEmail,
);
}
}

View File

@@ -27,12 +27,7 @@ import { AppController } from './app.controller';
buildSchemaOptions: { buildSchemaOptions: {
numberScalarMode: 'integer', numberScalarMode: 'integer',
}, },
cors: {
origin: process.env.WHITELISTED_ORIGINS.split(','),
credentials: true,
},
playground: process.env.PRODUCTION !== 'true', playground: process.env.PRODUCTION !== 'true',
debug: process.env.PRODUCTION !== 'true',
autoSchemaFile: true, autoSchemaFile: true,
installSubscriptionHandlers: true, installSubscriptionHandlers: true,
subscriptions: { subscriptions: {
@@ -62,10 +57,12 @@ import { AppController } from './app.controller';
}), }),
driver: ApolloDriver, driver: ApolloDriver,
}), }),
ThrottlerModule.forRoot({ ThrottlerModule.forRoot([
ttl: +process.env.RATE_LIMIT_TTL, {
limit: +process.env.RATE_LIMIT_MAX, ttl: +process.env.RATE_LIMIT_TTL,
}), limit: +process.env.RATE_LIMIT_MAX,
},
]),
UserModule, UserModule,
AuthModule, AuthModule,
AdminModule, AdminModule,

View File

@@ -229,7 +229,7 @@ export class AuthService {
} }
await this.mailerService.sendEmail(email, { await this.mailerService.sendEmail(email, {
template: 'code-your-own', template: 'user-invitation',
variables: { variables: {
inviteeEmail: email, inviteeEmail: email,
magicLink: `${url}/enter?token=${generatedTokens.token}`, magicLink: `${url}/enter?token=${generatedTokens.token}`,

View File

@@ -254,6 +254,13 @@ export const TEAM_COLL_INVALID_JSON = 'team_coll/invalid_json';
*/ */
export const TEAM_NOT_OWNER = 'team_coll/team_not_owner' as const; export const TEAM_NOT_OWNER = 'team_coll/team_not_owner' as const;
/**
* The Team Collection data is not valid
* (TeamCollectionService)
*/
export const TEAM_COLL_DATA_INVALID =
'team_coll/team_coll_data_invalid' as const;
/** /**
* Tried to perform an action on a request that doesn't accept their member role level * Tried to perform an action on a request that doesn't accept their member role level
* (GqlRequestTeamMemberGuard) * (GqlRequestTeamMemberGuard)
@@ -318,18 +325,6 @@ export const TEAM_INVITATION_NOT_FOUND =
*/ */
export const SHORTCODE_NOT_FOUND = 'shortcode/not_found' as const; export const SHORTCODE_NOT_FOUND = 'shortcode/not_found' as const;
/**
* Invalid ShortCode format
* (ShortcodeService)
*/
export const SHORTCODE_INVALID_JSON = 'shortcode/invalid_json' as const;
/**
* ShortCode already exists in DB
* (ShortcodeService)
*/
export const SHORTCODE_ALREADY_EXISTS = 'shortcode/already_exists' as const;
/** /**
* Invalid or non-existent TEAM ENVIRONMENT ID * Invalid or non-existent TEAM ENVIRONMENT ID
* (TeamEnvironmentsService) * (TeamEnvironmentsService)
@@ -597,6 +592,13 @@ export const USER_COLL_REORDERING_FAILED =
export const USER_COLL_SAME_NEXT_COLL = export const USER_COLL_SAME_NEXT_COLL =
'user_coll/user_collection_and_next_user_collection_are_same' as const; 'user_coll/user_collection_and_next_user_collection_are_same' as const;
/**
* The User Collection data is not valid
* (UserCollectionService)
*/
export const USER_COLL_DATA_INVALID =
'user_coll/user_coll_data_invalid' as const;
/** /**
* The User Collection does not belong to the logged-in user * The User Collection does not belong to the logged-in user
* (UserCollectionService) * (UserCollectionService)
@@ -621,3 +623,24 @@ export const MAILER_SMTP_URL_UNDEFINED = 'mailer/smtp_url_undefined' as const;
*/ */
export const MAILER_FROM_ADDRESS_UNDEFINED = export const MAILER_FROM_ADDRESS_UNDEFINED =
'mailer/from_address_undefined' as const; 'mailer/from_address_undefined' as const;
/**
* SharedRequest invalid request JSON format
* (ShortcodeService)
*/
export const SHORTCODE_INVALID_REQUEST_JSON =
'shortcode/request_invalid_format' as const;
/**
* SharedRequest invalid properties JSON format
* (ShortcodeService)
*/
export const SHORTCODE_INVALID_PROPERTIES_JSON =
'shortcode/properties_invalid_format' as const;
/**
* SharedRequest invalid properties not found
* (ShortcodeService)
*/
export const SHORTCODE_PROPERTIES_NOT_FOUND =
'shortcode/properties_not_found' as const;

View File

@@ -27,6 +27,7 @@ import { UserRequestUserCollectionResolver } from './user-request/resolvers/user
import { UserEnvsUserResolver } from './user-environment/user.resolver'; import { UserEnvsUserResolver } from './user-environment/user.resolver';
import { UserHistoryUserResolver } from './user-history/user.resolver'; import { UserHistoryUserResolver } from './user-history/user.resolver';
import { UserSettingsUserResolver } from './user-settings/user.resolver'; import { UserSettingsUserResolver } from './user-settings/user.resolver';
import { InfraResolver } from './admin/infra.resolver';
/** /**
* All the resolvers present in the application. * All the resolvers present in the application.
@@ -34,6 +35,7 @@ import { UserSettingsUserResolver } from './user-settings/user.resolver';
* NOTE: This needs to be KEPT UP-TO-DATE to keep the schema accurate * NOTE: This needs to be KEPT UP-TO-DATE to keep the schema accurate
*/ */
const RESOLVERS = [ const RESOLVERS = [
InfraResolver,
AdminResolver, AdminResolver,
ShortcodeResolver, ShortcodeResolver,
TeamResolver, TeamResolver,
@@ -93,9 +95,7 @@ export async function emitGQLSchemaFile() {
numberScalarMode: 'integer', numberScalarMode: 'integer',
}); });
const schemaString = printSchema(schema, { const schemaString = printSchema(schema);
commentDescriptions: true,
});
logger.log(`Writing schema to GQL_SCHEMA_EMIT_LOCATION (${destination})`); logger.log(`Writing schema to GQL_SCHEMA_EMIT_LOCATION (${destination})`);

View File

@@ -3,8 +3,7 @@ import { Injectable } from '@nestjs/common';
@Injectable() @Injectable()
export class ThrottlerBehindProxyGuard extends ThrottlerGuard { export class ThrottlerBehindProxyGuard extends ThrottlerGuard {
protected getTracker(req: Record<string, any>): string { protected async getTracker(req: Record<string, any>): Promise<string> {
return req.ips.length ? req.ips[0] : req.ip; // individualize IP extraction to meet your own needs return req.ips.length ? req.ips[0] : req.ip; // individualize IP extraction to meet your own needs
// learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#directives
} }
} }

View File

@@ -8,7 +8,7 @@ export type MailDescription = {
}; };
export type UserMagicLinkMailDescription = { export type UserMagicLinkMailDescription = {
template: 'code-your-own'; template: 'user-invitation';
variables: { variables: {
inviteeEmail: string; inviteeEmail: string;
magicLink: string; magicLink: string;
@@ -16,7 +16,7 @@ export type UserMagicLinkMailDescription = {
}; };
export type AdminUserInvitationMailDescription = { export type AdminUserInvitationMailDescription = {
template: 'code-your-own'; template: 'user-invitation';
variables: { variables: {
inviteeEmail: string; inviteeEmail: string;
magicLink: string; magicLink: string;

View File

@@ -27,7 +27,7 @@ export class MailerService {
case 'team-invitation': case 'team-invitation':
return `${mailDesc.variables.invitee} invited you to join ${mailDesc.variables.invite_team_name} in Hoppscotch`; return `${mailDesc.variables.invitee} invited you to join ${mailDesc.variables.invite_team_name} in Hoppscotch`;
case 'code-your-own': case 'user-invitation':
return 'Sign in to Hoppscotch'; return 'Sign in to Hoppscotch';
} }
} }

View File

@@ -1,8 +1,9 @@
import { GraphQLSchemaHost } from '@nestjs/graphql'; import { GraphQLSchemaHost } from '@nestjs/graphql';
import { import {
ApolloServerPlugin, ApolloServerPlugin,
BaseContext,
GraphQLRequestListener, GraphQLRequestListener,
} from 'apollo-server-plugin-base'; } from '@apollo/server';
import { Plugin } from '@nestjs/apollo'; import { Plugin } from '@nestjs/apollo';
import { GraphQLError } from 'graphql'; import { GraphQLError } from 'graphql';
import { import {
@@ -17,7 +18,7 @@ const COMPLEXITY_LIMIT = 50;
export class GQLComplexityPlugin implements ApolloServerPlugin { export class GQLComplexityPlugin implements ApolloServerPlugin {
constructor(private gqlSchemaHost: GraphQLSchemaHost) {} constructor(private gqlSchemaHost: GraphQLSchemaHost) {}
async requestDidStart(): Promise<GraphQLRequestListener> { async requestDidStart(): Promise<GraphQLRequestListener<BaseContext>> {
const { schema } = this.gqlSchemaHost; const { schema } = this.gqlSchemaHost;
return { return {

View File

@@ -21,8 +21,8 @@ import {
} from 'src/team-request/team-request.model'; } from 'src/team-request/team-request.model';
import { TeamInvitation } from 'src/team-invitation/team-invitation.model'; import { TeamInvitation } from 'src/team-invitation/team-invitation.model';
import { InvitedUser } from '../admin/invited-user.model'; import { InvitedUser } from '../admin/invited-user.model';
import { UserCollection } from '@prisma/client';
import { import {
UserCollection,
UserCollectionRemovedData, UserCollectionRemovedData,
UserCollectionReorderData, UserCollectionReorderData,
} from 'src/user-collection/user-collections.model'; } from 'src/user-collection/user-collections.model';
@@ -69,5 +69,7 @@ export type TopicDef = {
[topic: `team_req/${string}/req_deleted`]: string; [topic: `team_req/${string}/req_deleted`]: string;
[topic: `team/${string}/invite_added`]: TeamInvitation; [topic: `team/${string}/invite_added`]: TeamInvitation;
[topic: `team/${string}/invite_removed`]: string; [topic: `team/${string}/invite_removed`]: string;
[topic: `shortcode/${string}/${'created' | 'revoked'}`]: Shortcode; [
topic: `shortcode/${string}/${'created' | 'revoked' | 'updated'}`
]: Shortcode;
}; };

View File

@@ -1,9 +1,10 @@
import { Field, ID, ObjectType } from '@nestjs/graphql'; import { Field, ID, ObjectType } from '@nestjs/graphql';
import { User } from 'src/user/user.model';
@ObjectType() @ObjectType()
export class Shortcode { export class Shortcode {
@Field(() => ID, { @Field(() => ID, {
description: 'The shortcode. 12 digit alphanumeric.', description: 'The 12 digit alphanumeric code',
}) })
id: string; id: string;
@@ -12,8 +13,57 @@ export class Shortcode {
}) })
request: string; request: string;
@Field({
description: 'JSON string representing the properties for an embed',
nullable: true,
})
properties: string;
@Field({ @Field({
description: 'Timestamp of when the Shortcode was created', description: 'Timestamp of when the Shortcode was created',
}) })
createdOn: Date; createdOn: Date;
} }
@ObjectType()
export class ShortcodeCreator {
@Field({
description: 'Uid of user who created the shortcode',
})
uid: string;
@Field({
description: 'Email of user who created the shortcode',
})
email: string;
}
@ObjectType()
export class ShortcodeWithUserEmail {
@Field(() => ID, {
description: 'The 12 digit alphanumeric code',
})
id: string;
@Field({
description: 'JSON string representing the request data',
})
request: string;
@Field({
description: 'JSON string representing the properties for an embed',
nullable: true,
})
properties: string;
@Field({
description: 'Timestamp of when the Shortcode was created',
})
createdOn: Date;
@Field({
description: 'Details of user who created the shortcode',
nullable: true,
})
creator: ShortcodeCreator;
}

View File

@@ -1,5 +1,4 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PrismaModule } from 'src/prisma/prisma.module'; import { PrismaModule } from 'src/prisma/prisma.module';
import { PubSubModule } from 'src/pubsub/pubsub.module'; import { PubSubModule } from 'src/pubsub/pubsub.module';
import { UserModule } from 'src/user/user.module'; import { UserModule } from 'src/user/user.module';
@@ -7,14 +6,7 @@ import { ShortcodeResolver } from './shortcode.resolver';
import { ShortcodeService } from './shortcode.service'; import { ShortcodeService } from './shortcode.service';
@Module({ @Module({
imports: [ imports: [PrismaModule, UserModule, PubSubModule],
PrismaModule,
UserModule,
PubSubModule,
JwtModule.register({
secret: process.env.JWT_SECRET,
}),
],
providers: [ShortcodeService, ShortcodeResolver], providers: [ShortcodeService, ShortcodeResolver],
exports: [ShortcodeService], exports: [ShortcodeService],
}) })

View File

@@ -1,6 +1,5 @@
import { import {
Args, Args,
Context,
ID, ID,
Mutation, Mutation,
Query, Query,
@@ -9,28 +8,25 @@ import {
} from '@nestjs/graphql'; } from '@nestjs/graphql';
import * as E from 'fp-ts/Either'; import * as E from 'fp-ts/Either';
import { UseGuards } from '@nestjs/common'; import { UseGuards } from '@nestjs/common';
import { Shortcode } from './shortcode.model'; import { Shortcode, ShortcodeWithUserEmail } from './shortcode.model';
import { ShortcodeService } from './shortcode.service'; import { ShortcodeService } from './shortcode.service';
import { UserService } from 'src/user/user.service';
import { throwErr } from 'src/utils'; import { throwErr } from 'src/utils';
import { GqlUser } from 'src/decorators/gql-user.decorator'; import { GqlUser } from 'src/decorators/gql-user.decorator';
import { GqlAuthGuard } from 'src/guards/gql-auth.guard'; import { GqlAuthGuard } from 'src/guards/gql-auth.guard';
import { User } from 'src/user/user.model'; import { User } from 'src/user/user.model';
import { PubSubService } from 'src/pubsub/pubsub.service'; import { PubSubService } from 'src/pubsub/pubsub.service';
import { AuthUser } from '../types/AuthUser'; import { AuthUser } from '../types/AuthUser';
import { JwtService } from '@nestjs/jwt';
import { PaginationArgs } from 'src/types/input-types.args'; import { PaginationArgs } from 'src/types/input-types.args';
import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard'; import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard';
import { SkipThrottle } from '@nestjs/throttler'; import { SkipThrottle } from '@nestjs/throttler';
import { GqlAdminGuard } from 'src/admin/guards/gql-admin.guard';
@UseGuards(GqlThrottlerGuard) @UseGuards(GqlThrottlerGuard)
@Resolver(() => Shortcode) @Resolver(() => Shortcode)
export class ShortcodeResolver { export class ShortcodeResolver {
constructor( constructor(
private readonly shortcodeService: ShortcodeService, private readonly shortcodeService: ShortcodeService,
private readonly userService: UserService,
private readonly pubsub: PubSubService, private readonly pubsub: PubSubService,
private jwtService: JwtService,
) {} ) {}
/* Queries */ /* Queries */
@@ -64,20 +60,53 @@ export class ShortcodeResolver {
@Mutation(() => Shortcode, { @Mutation(() => Shortcode, {
description: 'Create a shortcode for the given request.', description: 'Create a shortcode for the given request.',
}) })
@UseGuards(GqlAuthGuard)
async createShortcode( async createShortcode(
@GqlUser() user: AuthUser,
@Args({ @Args({
name: 'request', name: 'request',
description: 'JSON string of the request object', description: 'JSON string of the request object',
}) })
request: string, request: string,
@Context() ctx: any, @Args({
name: 'properties',
description: 'JSON string of the properties of the embed',
nullable: true,
})
properties: string,
) { ) {
const decodedAccessToken = this.jwtService.verify(
ctx.req.cookies['access_token'],
);
const result = await this.shortcodeService.createShortcode( const result = await this.shortcodeService.createShortcode(
request, request,
decodedAccessToken?.sub, properties,
user,
);
if (E.isLeft(result)) throwErr(result.left);
return result.right;
}
@Mutation(() => Shortcode, {
description: 'Update a user generated Shortcode',
})
@UseGuards(GqlAuthGuard)
async updateEmbedProperties(
@GqlUser() user: AuthUser,
@Args({
name: 'code',
type: () => ID,
description: 'The Shortcode to update',
})
code: string,
@Args({
name: 'properties',
description: 'JSON string of the properties of the embed',
})
properties: string,
) {
const result = await this.shortcodeService.updateEmbedProperties(
code,
user.uid,
properties,
); );
if (E.isLeft(result)) throwErr(result.left); if (E.isLeft(result)) throwErr(result.left);
@@ -93,7 +122,7 @@ export class ShortcodeResolver {
@Args({ @Args({
name: 'code', name: 'code',
type: () => ID, type: () => ID,
description: 'The shortcode to resolve', description: 'The shortcode to remove',
}) })
code: string, code: string,
) { ) {
@@ -114,6 +143,16 @@ export class ShortcodeResolver {
return this.pubsub.asyncIterator(`shortcode/${user.uid}/created`); return this.pubsub.asyncIterator(`shortcode/${user.uid}/created`);
} }
@Subscription(() => Shortcode, {
description: 'Listen for Shortcode updates',
resolve: (value) => value,
})
@SkipThrottle()
@UseGuards(GqlAuthGuard)
myShortcodesUpdated(@GqlUser() user: AuthUser) {
return this.pubsub.asyncIterator(`shortcode/${user.uid}/updated`);
}
@Subscription(() => Shortcode, { @Subscription(() => Shortcode, {
description: 'Listen for shortcode deletion', description: 'Listen for shortcode deletion',
resolve: (value) => value, resolve: (value) => value,

View File

@@ -1,13 +1,16 @@
import { mockDeep, mockReset } from 'jest-mock-extended'; import { mockDeep, mockReset } from 'jest-mock-extended';
import { PrismaService } from '../prisma/prisma.service'; import { PrismaService } from '../prisma/prisma.service';
import { import {
SHORTCODE_ALREADY_EXISTS, INVALID_EMAIL,
SHORTCODE_INVALID_JSON, SHORTCODE_INVALID_PROPERTIES_JSON,
SHORTCODE_INVALID_REQUEST_JSON,
SHORTCODE_NOT_FOUND, SHORTCODE_NOT_FOUND,
SHORTCODE_PROPERTIES_NOT_FOUND,
} from 'src/errors'; } from 'src/errors';
import { Shortcode } from './shortcode.model'; import { Shortcode, ShortcodeWithUserEmail } from './shortcode.model';
import { ShortcodeService } from './shortcode.service'; import { ShortcodeService } from './shortcode.service';
import { UserService } from 'src/user/user.service'; import { UserService } from 'src/user/user.service';
import { AuthUser } from 'src/types/AuthUser';
const mockPrisma = mockDeep<PrismaService>(); const mockPrisma = mockDeep<PrismaService>();
@@ -22,7 +25,7 @@ const mockFB = {
doc: mockDocFunc, doc: mockDocFunc,
}, },
}; };
const mockUserService = new UserService(mockFB as any, mockPubSub as any); const mockUserService = new UserService(mockPrisma as any, mockPubSub as any);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
@@ -38,18 +41,34 @@ beforeEach(() => {
}); });
const createdOn = new Date(); const createdOn = new Date();
const shortCodeWithOutUser = { const user: AuthUser = {
id: '123', uid: '123344',
request: '{}', email: 'dwight@dundermifflin.com',
displayName: 'Dwight Schrute',
photoURL: 'https://en.wikipedia.org/wiki/Dwight_Schrute',
isAdmin: false,
refreshToken: 'hbfvdkhjbvkdvdfjvbnkhjb',
createdOn: createdOn, createdOn: createdOn,
creatorUid: null, currentGQLSession: {},
currentRESTSession: {},
}; };
const shortCodeWithUser = { const mockEmbed = {
id: '123', id: '123',
request: '{}', request: '{}',
embedProperties: '{}',
createdOn: createdOn, createdOn: createdOn,
creatorUid: 'user_uid_1', creatorUid: user.uid,
updatedOn: createdOn,
};
const mockShortcode = {
id: '123',
request: '{}',
embedProperties: null,
createdOn: createdOn,
creatorUid: user.uid,
updatedOn: createdOn,
}; };
const shortcodes = [ const shortcodes = [
@@ -58,33 +77,67 @@ const shortcodes = [
request: { request: {
hello: 'there', hello: 'there',
}, },
creatorUid: 'testuser', embedProperties: {
foo: 'bar',
},
creatorUid: user.uid,
createdOn: new Date(), createdOn: new Date(),
updatedOn: createdOn,
}, },
{ {
id: 'blablabla1', id: 'blablabla1',
request: { request: {
hello: 'there', hello: 'there',
}, },
creatorUid: 'testuser', embedProperties: {
foo: 'bar',
},
creatorUid: user.uid,
createdOn: new Date(), createdOn: new Date(),
updatedOn: createdOn,
},
];
const shortcodesWithUserEmail = [
{
id: 'blablabla',
request: {
hello: 'there',
},
embedProperties: {
foo: 'bar',
},
creatorUid: user.uid,
createdOn: new Date(),
updatedOn: createdOn,
User: user,
},
{
id: 'blablabla1',
request: {
hello: 'there',
},
embedProperties: {
foo: 'bar',
},
creatorUid: user.uid,
createdOn: new Date(),
updatedOn: createdOn,
User: user,
}, },
]; ];
describe('ShortcodeService', () => { describe('ShortcodeService', () => {
describe('getShortCode', () => { describe('getShortCode', () => {
test('should return a valid shortcode with valid shortcode ID', async () => { test('should return a valid Shortcode with valid Shortcode ID', async () => {
mockPrisma.shortcode.findFirstOrThrow.mockResolvedValueOnce( mockPrisma.shortcode.findFirstOrThrow.mockResolvedValueOnce(mockEmbed);
shortCodeWithOutUser,
);
const result = await shortcodeService.getShortCode( const result = await shortcodeService.getShortCode(mockEmbed.id);
shortCodeWithOutUser.id,
);
expect(result).toEqualRight(<Shortcode>{ expect(result).toEqualRight(<Shortcode>{
id: shortCodeWithOutUser.id, id: mockEmbed.id,
createdOn: shortCodeWithOutUser.createdOn, createdOn: mockEmbed.createdOn,
request: JSON.stringify(shortCodeWithOutUser.request), request: JSON.stringify(mockEmbed.request),
properties: JSON.stringify(mockEmbed.embedProperties),
}); });
}); });
@@ -99,10 +152,10 @@ describe('ShortcodeService', () => {
}); });
describe('fetchUserShortCodes', () => { describe('fetchUserShortCodes', () => {
test('should return list of shortcodes with valid inputs and no cursor', async () => { test('should return list of Shortcode with valid inputs and no cursor', async () => {
mockPrisma.shortcode.findMany.mockResolvedValueOnce(shortcodes); mockPrisma.shortcode.findMany.mockResolvedValueOnce(shortcodes);
const result = await shortcodeService.fetchUserShortCodes('testuser', { const result = await shortcodeService.fetchUserShortCodes(user.uid, {
cursor: null, cursor: null,
take: 10, take: 10,
}); });
@@ -110,20 +163,22 @@ describe('ShortcodeService', () => {
{ {
id: shortcodes[0].id, id: shortcodes[0].id,
request: JSON.stringify(shortcodes[0].request), request: JSON.stringify(shortcodes[0].request),
properties: JSON.stringify(shortcodes[0].embedProperties),
createdOn: shortcodes[0].createdOn, createdOn: shortcodes[0].createdOn,
}, },
{ {
id: shortcodes[1].id, id: shortcodes[1].id,
request: JSON.stringify(shortcodes[1].request), request: JSON.stringify(shortcodes[1].request),
properties: JSON.stringify(shortcodes[1].embedProperties),
createdOn: shortcodes[1].createdOn, createdOn: shortcodes[1].createdOn,
}, },
]); ]);
}); });
test('should return list of shortcodes with valid inputs and cursor', async () => { test('should return list of Shortcode with valid inputs and cursor', async () => {
mockPrisma.shortcode.findMany.mockResolvedValue([shortcodes[1]]); mockPrisma.shortcode.findMany.mockResolvedValue([shortcodes[1]]);
const result = await shortcodeService.fetchUserShortCodes('testuser', { const result = await shortcodeService.fetchUserShortCodes(user.uid, {
cursor: 'blablabla', cursor: 'blablabla',
take: 10, take: 10,
}); });
@@ -131,6 +186,7 @@ describe('ShortcodeService', () => {
{ {
id: shortcodes[1].id, id: shortcodes[1].id,
request: JSON.stringify(shortcodes[1].request), request: JSON.stringify(shortcodes[1].request),
properties: JSON.stringify(shortcodes[1].embedProperties),
createdOn: shortcodes[1].createdOn, createdOn: shortcodes[1].createdOn,
}, },
]); ]);
@@ -139,7 +195,7 @@ describe('ShortcodeService', () => {
test('should return an empty array for an invalid cursor', async () => { test('should return an empty array for an invalid cursor', async () => {
mockPrisma.shortcode.findMany.mockResolvedValue([]); mockPrisma.shortcode.findMany.mockResolvedValue([]);
const result = await shortcodeService.fetchUserShortCodes('testuser', { const result = await shortcodeService.fetchUserShortCodes(user.uid, {
cursor: 'invalidcursor', cursor: 'invalidcursor',
take: 10, take: 10,
}); });
@@ -171,77 +227,111 @@ describe('ShortcodeService', () => {
}); });
describe('createShortcode', () => { describe('createShortcode', () => {
test('should throw SHORTCODE_INVALID_JSON error if incoming request data is invalid', async () => { test('should throw SHORTCODE_INVALID_REQUEST_JSON error if incoming request data is invalid', async () => {
const result = await shortcodeService.createShortcode( const result = await shortcodeService.createShortcode(
'invalidRequest', 'invalidRequest',
'user_uid_1', null,
user,
); );
expect(result).toEqualLeft(SHORTCODE_INVALID_JSON); expect(result).toEqualLeft(SHORTCODE_INVALID_REQUEST_JSON);
}); });
test('should successfully create a new shortcode with valid user uid', async () => { test('should throw SHORTCODE_INVALID_PROPERTIES_JSON error if incoming properties data is invalid', async () => {
// generateUniqueShortCodeID --> getShortCode const result = await shortcodeService.createShortcode(
'{}',
'invalid_data',
user,
);
expect(result).toEqualLeft(SHORTCODE_INVALID_PROPERTIES_JSON);
});
test('should successfully create a new Embed with valid user uid', async () => {
// generateUniqueShortCodeID --> getShortcode
mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce( mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce(
'NotFoundError', 'NotFoundError',
); );
mockPrisma.shortcode.create.mockResolvedValueOnce(shortCodeWithUser); mockPrisma.shortcode.create.mockResolvedValueOnce(mockEmbed);
const result = await shortcodeService.createShortcode('{}', 'user_uid_1'); const result = await shortcodeService.createShortcode('{}', '{}', user);
expect(result).toEqualRight({ expect(result).toEqualRight(<Shortcode>{
id: shortCodeWithUser.id, id: mockEmbed.id,
createdOn: shortCodeWithUser.createdOn, createdOn: mockEmbed.createdOn,
request: JSON.stringify(shortCodeWithUser.request), request: JSON.stringify(mockEmbed.request),
properties: JSON.stringify(mockEmbed.embedProperties),
}); });
}); });
test('should successfully create a new shortcode with null user uid', async () => { test('should successfully create a new ShortCode with valid user uid', async () => {
// generateUniqueShortCodeID --> getShortCode // generateUniqueShortCodeID --> getShortcode
mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce( mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce(
'NotFoundError', 'NotFoundError',
); );
mockPrisma.shortcode.create.mockResolvedValueOnce(shortCodeWithUser); mockPrisma.shortcode.create.mockResolvedValueOnce(mockShortcode);
const result = await shortcodeService.createShortcode('{}', null); const result = await shortcodeService.createShortcode('{}', null, user);
expect(result).toEqualRight({ expect(result).toEqualRight(<Shortcode>{
id: shortCodeWithUser.id, id: mockShortcode.id,
createdOn: shortCodeWithUser.createdOn, createdOn: mockShortcode.createdOn,
request: JSON.stringify(shortCodeWithOutUser.request), request: JSON.stringify(mockShortcode.request),
properties: mockShortcode.embedProperties,
}); });
}); });
test('should send pubsub message to `shortcode/{uid}/created` on successful creation of shortcode', async () => { test('should send pubsub message to `shortcode/{uid}/created` on successful creation of a Shortcode', async () => {
// generateUniqueShortCodeID --> getShortCode // generateUniqueShortCodeID --> getShortcode
mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce( mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce(
'NotFoundError', 'NotFoundError',
); );
mockPrisma.shortcode.create.mockResolvedValueOnce(shortCodeWithUser); mockPrisma.shortcode.create.mockResolvedValueOnce(mockShortcode);
const result = await shortcodeService.createShortcode('{}', null, user);
const result = await shortcodeService.createShortcode('{}', 'user_uid_1');
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`shortcode/${shortCodeWithUser.creatorUid}/created`, `shortcode/${mockShortcode.creatorUid}/created`,
{ <Shortcode>{
id: shortCodeWithUser.id, id: mockShortcode.id,
createdOn: shortCodeWithUser.createdOn, createdOn: mockShortcode.createdOn,
request: JSON.stringify(shortCodeWithUser.request), request: JSON.stringify(mockShortcode.request),
properties: mockShortcode.embedProperties,
},
);
});
test('should send pubsub message to `shortcode/{uid}/created` on successful creation of an Embed', async () => {
// generateUniqueShortCodeID --> getShortcode
mockPrisma.shortcode.findFirstOrThrow.mockRejectedValueOnce(
'NotFoundError',
);
mockPrisma.shortcode.create.mockResolvedValueOnce(mockEmbed);
const result = await shortcodeService.createShortcode('{}', '{}', user);
expect(mockPubSub.publish).toHaveBeenCalledWith(
`shortcode/${mockEmbed.creatorUid}/created`,
<Shortcode>{
id: mockEmbed.id,
createdOn: mockEmbed.createdOn,
request: JSON.stringify(mockEmbed.request),
properties: JSON.stringify(mockEmbed.embedProperties),
}, },
); );
}); });
}); });
describe('revokeShortCode', () => { describe('revokeShortCode', () => {
test('should return true on successful deletion of shortcode with valid inputs', async () => { test('should return true on successful deletion of Shortcode with valid inputs', async () => {
mockPrisma.shortcode.delete.mockResolvedValueOnce(shortCodeWithUser); mockPrisma.shortcode.delete.mockResolvedValueOnce(mockEmbed);
const result = await shortcodeService.revokeShortCode( const result = await shortcodeService.revokeShortCode(
shortCodeWithUser.id, mockEmbed.id,
shortCodeWithUser.creatorUid, mockEmbed.creatorUid,
); );
expect(mockPrisma.shortcode.delete).toHaveBeenCalledWith({ expect(mockPrisma.shortcode.delete).toHaveBeenCalledWith({
where: { where: {
creator_uid_shortcode_unique: { creator_uid_shortcode_unique: {
creatorUid: shortCodeWithUser.creatorUid, creatorUid: mockEmbed.creatorUid,
id: shortCodeWithUser.id, id: mockEmbed.id,
}, },
}, },
}); });
@@ -249,52 +339,53 @@ describe('ShortcodeService', () => {
expect(result).toEqualRight(true); expect(result).toEqualRight(true);
}); });
test('should return SHORTCODE_NOT_FOUND error when shortcode is invalid and user uid is valid', async () => { test('should return SHORTCODE_NOT_FOUND error when Shortcode is invalid and user uid is valid', async () => {
mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound'); mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound');
expect( expect(
shortcodeService.revokeShortCode('invalid', 'testuser'), shortcodeService.revokeShortCode('invalid', 'testuser'),
).resolves.toEqualLeft(SHORTCODE_NOT_FOUND); ).resolves.toEqualLeft(SHORTCODE_NOT_FOUND);
}); });
test('should return SHORTCODE_NOT_FOUND error when shortcode is valid and user uid is invalid', async () => { test('should return SHORTCODE_NOT_FOUND error when Shortcode is valid and user uid is invalid', async () => {
mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound'); mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound');
expect( expect(
shortcodeService.revokeShortCode('blablablabla', 'invalidUser'), shortcodeService.revokeShortCode('blablablabla', 'invalidUser'),
).resolves.toEqualLeft(SHORTCODE_NOT_FOUND); ).resolves.toEqualLeft(SHORTCODE_NOT_FOUND);
}); });
test('should return SHORTCODE_NOT_FOUND error when both shortcode and user uid are invalid', async () => { test('should return SHORTCODE_NOT_FOUND error when both Shortcode and user uid are invalid', async () => {
mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound'); mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound');
expect( expect(
shortcodeService.revokeShortCode('invalid', 'invalid'), shortcodeService.revokeShortCode('invalid', 'invalid'),
).resolves.toEqualLeft(SHORTCODE_NOT_FOUND); ).resolves.toEqualLeft(SHORTCODE_NOT_FOUND);
}); });
test('should send pubsub message to `shortcode/{uid}/revoked` on successful deletion of shortcode', async () => { test('should send pubsub message to `shortcode/{uid}/revoked` on successful deletion of Shortcode', async () => {
mockPrisma.shortcode.delete.mockResolvedValueOnce(shortCodeWithUser); mockPrisma.shortcode.delete.mockResolvedValueOnce(mockEmbed);
const result = await shortcodeService.revokeShortCode( const result = await shortcodeService.revokeShortCode(
shortCodeWithUser.id, mockEmbed.id,
shortCodeWithUser.creatorUid, mockEmbed.creatorUid,
); );
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`shortcode/${shortCodeWithUser.creatorUid}/revoked`, `shortcode/${mockEmbed.creatorUid}/revoked`,
{ {
id: shortCodeWithUser.id, id: mockEmbed.id,
createdOn: shortCodeWithUser.createdOn, createdOn: mockEmbed.createdOn,
request: JSON.stringify(shortCodeWithUser.request), request: JSON.stringify(mockEmbed.request),
properties: JSON.stringify(mockEmbed.embedProperties),
}, },
); );
}); });
}); });
describe('deleteUserShortCodes', () => { describe('deleteUserShortCodes', () => {
test('should successfully delete all users shortcodes with valid user uid', async () => { test('should successfully delete all users Shortcodes with valid user uid', async () => {
mockPrisma.shortcode.deleteMany.mockResolvedValueOnce({ count: 1 }); mockPrisma.shortcode.deleteMany.mockResolvedValueOnce({ count: 1 });
const result = await shortcodeService.deleteUserShortCodes( const result = await shortcodeService.deleteUserShortCodes(
shortCodeWithUser.creatorUid, mockEmbed.creatorUid,
); );
expect(result).toEqual(1); expect(result).toEqual(1);
}); });
@@ -303,9 +394,176 @@ describe('ShortcodeService', () => {
mockPrisma.shortcode.deleteMany.mockResolvedValueOnce({ count: 0 }); mockPrisma.shortcode.deleteMany.mockResolvedValueOnce({ count: 0 });
const result = await shortcodeService.deleteUserShortCodes( const result = await shortcodeService.deleteUserShortCodes(
shortCodeWithUser.creatorUid, mockEmbed.creatorUid,
); );
expect(result).toEqual(0); expect(result).toEqual(0);
}); });
}); });
describe('updateShortcode', () => {
test('should return SHORTCODE_PROPERTIES_NOT_FOUND error when updatedProps in invalid', async () => {
const result = await shortcodeService.updateEmbedProperties(
mockEmbed.id,
user.uid,
'',
);
expect(result).toEqualLeft(SHORTCODE_PROPERTIES_NOT_FOUND);
});
test('should return SHORTCODE_PROPERTIES_NOT_FOUND error when updatedProps in invalid JSON format', async () => {
const result = await shortcodeService.updateEmbedProperties(
mockEmbed.id,
user.uid,
'{kk',
);
expect(result).toEqualLeft(SHORTCODE_INVALID_PROPERTIES_JSON);
});
test('should return SHORTCODE_NOT_FOUND error when Shortcode ID is invalid', async () => {
mockPrisma.shortcode.update.mockRejectedValue('RecordNotFound');
const result = await shortcodeService.updateEmbedProperties(
'invalidID',
user.uid,
'{}',
);
expect(result).toEqualLeft(SHORTCODE_NOT_FOUND);
});
test('should successfully update a Shortcodes with valid inputs', async () => {
mockPrisma.shortcode.update.mockResolvedValueOnce({
...mockEmbed,
embedProperties: '{"foo":"bar"}',
});
const result = await shortcodeService.updateEmbedProperties(
mockEmbed.id,
user.uid,
'{"foo":"bar"}',
);
expect(result).toEqualRight({
id: mockEmbed.id,
createdOn: mockEmbed.createdOn,
request: JSON.stringify(mockEmbed.request),
properties: JSON.stringify('{"foo":"bar"}'),
});
});
test('should send pubsub message to `shortcode/{uid}/updated` on successful Update of Shortcode', async () => {
mockPrisma.shortcode.update.mockResolvedValueOnce({
...mockEmbed,
embedProperties: '{"foo":"bar"}',
});
const result = await shortcodeService.updateEmbedProperties(
mockEmbed.id,
user.uid,
'{"foo":"bar"}',
);
expect(mockPubSub.publish).toHaveBeenCalledWith(
`shortcode/${mockEmbed.creatorUid}/updated`,
{
id: mockEmbed.id,
createdOn: mockEmbed.createdOn,
request: JSON.stringify(mockEmbed.request),
properties: JSON.stringify('{"foo":"bar"}'),
},
);
});
});
describe('deleteShortcode', () => {
test('should return true on successful deletion of Shortcode with valid inputs', async () => {
mockPrisma.shortcode.delete.mockResolvedValueOnce(mockEmbed);
const result = await shortcodeService.deleteShortcode(mockEmbed.id);
expect(result).toEqualRight(true);
});
test('should return SHORTCODE_NOT_FOUND error when Shortcode is invalid', async () => {
mockPrisma.shortcode.delete.mockRejectedValue('RecordNotFound');
expect(shortcodeService.deleteShortcode('invalid')).resolves.toEqualLeft(
SHORTCODE_NOT_FOUND,
);
});
});
describe('fetchAllShortcodes', () => {
test('should return list of Shortcodes with valid inputs and no cursor', async () => {
mockPrisma.shortcode.findMany.mockResolvedValueOnce(
shortcodesWithUserEmail,
);
const result = await shortcodeService.fetchAllShortcodes(
{
cursor: null,
take: 10,
},
user.email,
);
expect(result).toEqual(<ShortcodeWithUserEmail[]>[
{
id: shortcodes[0].id,
request: JSON.stringify(shortcodes[0].request),
properties: JSON.stringify(shortcodes[0].embedProperties),
createdOn: shortcodes[0].createdOn,
creator: {
uid: user.uid,
email: user.email,
},
},
{
id: shortcodes[1].id,
request: JSON.stringify(shortcodes[1].request),
properties: JSON.stringify(shortcodes[1].embedProperties),
createdOn: shortcodes[1].createdOn,
creator: {
uid: user.uid,
email: user.email,
},
},
]);
});
test('should return list of Shortcode with valid inputs and cursor', async () => {
mockPrisma.shortcode.findMany.mockResolvedValue([
shortcodesWithUserEmail[1],
]);
const result = await shortcodeService.fetchAllShortcodes(
{
cursor: 'blablabla',
take: 10,
},
user.email,
);
expect(result).toEqual(<ShortcodeWithUserEmail[]>[
{
id: shortcodes[1].id,
request: JSON.stringify(shortcodes[1].request),
properties: JSON.stringify(shortcodes[1].embedProperties),
createdOn: shortcodes[1].createdOn,
creator: {
uid: user.uid,
email: user.email,
},
},
]);
});
test('should return an empty array for an invalid cursor', async () => {
mockPrisma.shortcode.findMany.mockResolvedValue([]);
const result = await shortcodeService.fetchAllShortcodes(
{
cursor: 'invalidcursor',
take: 10,
},
user.email,
);
expect(result).toHaveLength(0);
});
});
}); });

View File

@@ -1,12 +1,16 @@
import { Injectable, OnModuleInit } from '@nestjs/common'; import { Injectable, OnModuleInit } from '@nestjs/common';
import * as T from 'fp-ts/Task'; import * as T from 'fp-ts/Task';
import * as O from 'fp-ts/Option';
import * as TO from 'fp-ts/TaskOption'; import * as TO from 'fp-ts/TaskOption';
import * as E from 'fp-ts/Either'; import * as E from 'fp-ts/Either';
import { PrismaService } from 'src/prisma/prisma.service'; import { PrismaService } from 'src/prisma/prisma.service';
import { SHORTCODE_INVALID_JSON, SHORTCODE_NOT_FOUND } from 'src/errors'; import {
SHORTCODE_INVALID_PROPERTIES_JSON,
SHORTCODE_INVALID_REQUEST_JSON,
SHORTCODE_NOT_FOUND,
SHORTCODE_PROPERTIES_NOT_FOUND,
} from 'src/errors';
import { UserDataHandler } from 'src/user/user.data.handler'; import { UserDataHandler } from 'src/user/user.data.handler';
import { Shortcode } from './shortcode.model'; import { Shortcode, ShortcodeWithUserEmail } from './shortcode.model';
import { Shortcode as DBShortCode } from '@prisma/client'; import { Shortcode as DBShortCode } from '@prisma/client';
import { PubSubService } from 'src/pubsub/pubsub.service'; import { PubSubService } from 'src/pubsub/pubsub.service';
import { UserService } from 'src/user/user.service'; import { UserService } from 'src/user/user.service';
@@ -46,10 +50,14 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
* @param shortcodeInfo Prisma Shortcode type * @param shortcodeInfo Prisma Shortcode type
* @returns GQL Shortcode * @returns GQL Shortcode
*/ */
private returnShortCode(shortcodeInfo: DBShortCode): Shortcode { private cast(shortcodeInfo: DBShortCode): Shortcode {
return <Shortcode>{ return <Shortcode>{
id: shortcodeInfo.id, id: shortcodeInfo.id,
request: JSON.stringify(shortcodeInfo.request), request: JSON.stringify(shortcodeInfo.request),
properties:
shortcodeInfo.embedProperties != null
? JSON.stringify(shortcodeInfo.embedProperties)
: null,
createdOn: shortcodeInfo.createdOn, createdOn: shortcodeInfo.createdOn,
}; };
} }
@@ -94,7 +102,7 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
const shortcodeInfo = await this.prisma.shortcode.findFirstOrThrow({ const shortcodeInfo = await this.prisma.shortcode.findFirstOrThrow({
where: { id: shortcode }, where: { id: shortcode },
}); });
return E.right(this.returnShortCode(shortcodeInfo)); return E.right(this.cast(shortcodeInfo));
} catch (error) { } catch (error) {
return E.left(SHORTCODE_NOT_FOUND); return E.left(SHORTCODE_NOT_FOUND);
} }
@@ -104,14 +112,22 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
* Create a new ShortCode * Create a new ShortCode
* *
* @param request JSON string of request details * @param request JSON string of request details
* @param userUID user UID, if present * @param userInfo user UI
* @param properties JSON string of embed properties, if present
* @returns Either of ShortCode or error * @returns Either of ShortCode or error
*/ */
async createShortcode(request: string, userUID: string | null) { async createShortcode(
const shortcodeData = stringToJson(request); request: string,
if (E.isLeft(shortcodeData)) return E.left(SHORTCODE_INVALID_JSON); properties: string | null = null,
userInfo: AuthUser,
) {
const requestData = stringToJson(request);
if (E.isLeft(requestData) || !requestData.right)
return E.left(SHORTCODE_INVALID_REQUEST_JSON);
const user = await this.userService.findUserById(userUID); const parsedProperties = stringToJson(properties);
if (E.isLeft(parsedProperties))
return E.left(SHORTCODE_INVALID_PROPERTIES_JSON);
const generatedShortCode = await this.generateUniqueShortCodeID(); const generatedShortCode = await this.generateUniqueShortCodeID();
if (E.isLeft(generatedShortCode)) return E.left(generatedShortCode.left); if (E.isLeft(generatedShortCode)) return E.left(generatedShortCode.left);
@@ -119,8 +135,9 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
const createdShortCode = await this.prisma.shortcode.create({ const createdShortCode = await this.prisma.shortcode.create({
data: { data: {
id: generatedShortCode.right, id: generatedShortCode.right,
request: shortcodeData.right, request: requestData.right,
creatorUid: O.isNone(user) ? null : user.value.uid, embedProperties: parsedProperties.right ?? undefined,
creatorUid: userInfo.uid,
}, },
}); });
@@ -128,11 +145,11 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
if (createdShortCode.creatorUid) { if (createdShortCode.creatorUid) {
this.pubsub.publish( this.pubsub.publish(
`shortcode/${createdShortCode.creatorUid}/created`, `shortcode/${createdShortCode.creatorUid}/created`,
this.returnShortCode(createdShortCode), this.cast(createdShortCode),
); );
} }
return E.right(this.returnShortCode(createdShortCode)); return E.right(this.cast(createdShortCode));
} }
/** /**
@@ -150,20 +167,20 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
orderBy: { orderBy: {
createdOn: 'desc', createdOn: 'desc',
}, },
skip: 1, skip: args.cursor ? 1 : 0,
take: args.take, take: args.take,
cursor: args.cursor ? { id: args.cursor } : undefined, cursor: args.cursor ? { id: args.cursor } : undefined,
}); });
const fetchedShortCodes: Shortcode[] = shortCodes.map((code) => const fetchedShortCodes: Shortcode[] = shortCodes.map((code) =>
this.returnShortCode(code), this.cast(code),
); );
return fetchedShortCodes; return fetchedShortCodes;
} }
/** /**
* Delete a ShortCode * Delete a ShortCode created by User of uid
* *
* @param shortcode ShortCode * @param shortcode ShortCode
* @param uid User Uid * @param uid User Uid
@@ -182,7 +199,7 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
this.pubsub.publish( this.pubsub.publish(
`shortcode/${deletedShortCodes.creatorUid}/revoked`, `shortcode/${deletedShortCodes.creatorUid}/revoked`,
this.returnShortCode(deletedShortCodes), this.cast(deletedShortCodes),
); );
return E.right(true); return E.right(true);
@@ -205,4 +222,118 @@ export class ShortcodeService implements UserDataHandler, OnModuleInit {
return deletedShortCodes.count; return deletedShortCodes.count;
} }
/**
* Delete a Shortcode
*
* @param shortcodeID ID of Shortcode being deleted
* @returns Boolean on successful deletion
*/
async deleteShortcode(shortcodeID: string) {
try {
await this.prisma.shortcode.delete({
where: {
id: shortcodeID,
},
});
return E.right(true);
} catch (error) {
return E.left(SHORTCODE_NOT_FOUND);
}
}
/**
* Update a created Shortcode
* @param shortcodeID Shortcode ID
* @param uid User Uid
* @returns Updated Shortcode
*/
async updateEmbedProperties(
shortcodeID: string,
uid: string,
updatedProps: string,
) {
if (!updatedProps) return E.left(SHORTCODE_PROPERTIES_NOT_FOUND);
const parsedProperties = stringToJson(updatedProps);
if (E.isLeft(parsedProperties) || !parsedProperties.right)
return E.left(SHORTCODE_INVALID_PROPERTIES_JSON);
try {
const updatedShortcode = await this.prisma.shortcode.update({
where: {
creator_uid_shortcode_unique: {
creatorUid: uid,
id: shortcodeID,
},
},
data: {
embedProperties: parsedProperties.right,
},
});
this.pubsub.publish(
`shortcode/${updatedShortcode.creatorUid}/updated`,
this.cast(updatedShortcode),
);
return E.right(this.cast(updatedShortcode));
} catch (error) {
return E.left(SHORTCODE_NOT_FOUND);
}
}
/**
* Fetch all created ShortCodes
*
* @param args Pagination arguments
* @param userEmail User email
* @returns ShortcodeWithUserEmail
*/
async fetchAllShortcodes(
args: PaginationArgs,
userEmail: string | null = null,
) {
const shortCodes = await this.prisma.shortcode.findMany({
where: userEmail
? {
User: {
email: userEmail,
},
}
: undefined,
orderBy: {
createdOn: 'desc',
},
skip: args.cursor ? 1 : 0,
take: args.take,
cursor: args.cursor ? { id: args.cursor } : undefined,
include: {
User: true,
},
});
const fetchedShortCodes: ShortcodeWithUserEmail[] = shortCodes.map(
(code) => {
return <ShortcodeWithUserEmail>{
id: code.id,
request: JSON.stringify(code.request),
properties:
code.embedProperties != null
? JSON.stringify(code.embedProperties)
: null,
createdOn: code.createdOn,
creator: code.User
? {
uid: code.User.uid,
email: code.User.email,
}
: null,
};
},
);
return fetchedShortCodes;
}
} }

View File

@@ -14,6 +14,13 @@ export class CreateRootTeamCollectionArgs {
@Field({ name: 'title', description: 'Title of the new collection' }) @Field({ name: 'title', description: 'Title of the new collection' })
title: string; title: string;
@Field({
name: 'data',
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
} }
@ArgsType() @ArgsType()
@@ -26,6 +33,13 @@ export class CreateChildTeamCollectionArgs {
@Field({ name: 'childTitle', description: 'Title of the new collection' }) @Field({ name: 'childTitle', description: 'Title of the new collection' })
childTitle: string; childTitle: string;
@Field({
name: 'data',
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
} }
@ArgsType() @ArgsType()
@@ -33,12 +47,14 @@ export class RenameTeamCollectionArgs {
@Field(() => ID, { @Field(() => ID, {
name: 'collectionID', name: 'collectionID',
description: 'ID of the collection', description: 'ID of the collection',
deprecationReason: 'Switch to updateTeamCollection mutation instead',
}) })
collectionID: string; collectionID: string;
@Field({ @Field({
name: 'newTitle', name: 'newTitle',
description: 'The updated title of the collection', description: 'The updated title of the collection',
deprecationReason: 'Switch to updateTeamCollection mutation instead',
}) })
newTitle: string; newTitle: string;
} }
@@ -98,3 +114,26 @@ export class ReplaceTeamCollectionArgs {
}) })
parentCollectionID?: string; parentCollectionID?: string;
} }
@ArgsType()
export class UpdateTeamCollectionArgs {
@Field(() => ID, {
name: 'collectionID',
description: 'ID of the collection',
})
collectionID: string;
@Field({
name: 'newTitle',
description: 'The updated title of the collection',
nullable: true,
})
newTitle: string;
@Field({
name: 'data',
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
}

View File

@@ -12,12 +12,17 @@ export class TeamCollection {
}) })
title: string; title: string;
@Field({
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
@Field(() => ID, { @Field(() => ID, {
description: 'ID of the collection', description: 'ID of the collection',
nullable: true, nullable: true,
}) })
parentID: string; parentID: string;
teamID: string;
} }
@ObjectType() @ObjectType()

View File

@@ -25,6 +25,7 @@ import {
MoveTeamCollectionArgs, MoveTeamCollectionArgs,
RenameTeamCollectionArgs, RenameTeamCollectionArgs,
ReplaceTeamCollectionArgs, ReplaceTeamCollectionArgs,
UpdateTeamCollectionArgs,
UpdateTeamCollectionOrderArgs, UpdateTeamCollectionOrderArgs,
} from './input-type.args'; } from './input-type.args';
import * as E from 'fp-ts/Either'; import * as E from 'fp-ts/Either';
@@ -141,7 +142,14 @@ export class TeamCollectionResolver {
); );
if (E.isLeft(teamCollections)) throwErr(teamCollections.left); if (E.isLeft(teamCollections)) throwErr(teamCollections.left);
return teamCollections.right; return <TeamCollection>{
id: teamCollections.right.id,
title: teamCollections.right.title,
parentID: teamCollections.right.parentID,
data: !teamCollections.right.data
? null
: JSON.stringify(teamCollections.right.data),
};
} }
// Mutations // Mutations
@@ -155,6 +163,7 @@ export class TeamCollectionResolver {
const teamCollection = await this.teamCollectionService.createCollection( const teamCollection = await this.teamCollectionService.createCollection(
args.teamID, args.teamID,
args.title, args.title,
args.data,
null, null,
); );
@@ -230,6 +239,7 @@ export class TeamCollectionResolver {
const teamCollection = await this.teamCollectionService.createCollection( const teamCollection = await this.teamCollectionService.createCollection(
team.right.id, team.right.id,
args.childTitle, args.childTitle,
args.data,
args.collectionID, args.collectionID,
); );
@@ -239,6 +249,7 @@ export class TeamCollectionResolver {
@Mutation(() => TeamCollection, { @Mutation(() => TeamCollection, {
description: 'Rename a collection', description: 'Rename a collection',
deprecationReason: 'Switch to updateTeamCollection mutation instead',
}) })
@UseGuards(GqlAuthGuard, GqlCollectionTeamMemberGuard) @UseGuards(GqlAuthGuard, GqlCollectionTeamMemberGuard)
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR) @RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
@@ -303,6 +314,23 @@ export class TeamCollectionResolver {
return request.right; return request.right;
} }
@Mutation(() => TeamCollection, {
description: 'Update Team Collection details',
})
@UseGuards(GqlAuthGuard, GqlCollectionTeamMemberGuard)
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
async updateTeamCollection(@Args() args: UpdateTeamCollectionArgs) {
const updatedTeamCollection =
await this.teamCollectionService.updateTeamCollection(
args.collectionID,
args.data,
args.newTitle,
);
if (E.isLeft(updatedTeamCollection)) throwErr(updatedTeamCollection.left);
return updatedTeamCollection.right;
}
// Subscriptions // Subscriptions
@Subscription(() => TeamCollection, { @Subscription(() => TeamCollection, {

View File

@@ -1,6 +1,7 @@
import { Team, TeamCollection as DBTeamCollection } from '@prisma/client'; import { Team, TeamCollection as DBTeamCollection } from '@prisma/client';
import { mock, mockDeep, mockReset } from 'jest-mock-extended'; import { mockDeep, mockReset } from 'jest-mock-extended';
import { import {
TEAM_COLL_DATA_INVALID,
TEAM_COLL_DEST_SAME, TEAM_COLL_DEST_SAME,
TEAM_COLL_INVALID_JSON, TEAM_COLL_INVALID_JSON,
TEAM_COLL_IS_PARENT_COLL, TEAM_COLL_IS_PARENT_COLL,
@@ -18,8 +19,6 @@ import { PubSubService } from 'src/pubsub/pubsub.service';
import { AuthUser } from 'src/types/AuthUser'; import { AuthUser } from 'src/types/AuthUser';
import { TeamCollectionService } from './team-collection.service'; import { TeamCollectionService } from './team-collection.service';
import { TeamCollection } from './team-collection.model'; import { TeamCollection } from './team-collection.model';
import { TeamCollectionModule } from './team-collection.module';
import * as E from 'fp-ts/Either';
const mockPrisma = mockDeep<PrismaService>(); const mockPrisma = mockDeep<PrismaService>();
const mockPubSub = mockDeep<PubSubService>(); const mockPubSub = mockDeep<PubSubService>();
@@ -54,35 +53,60 @@ const rootTeamCollection: DBTeamCollection = {
id: '123', id: '123',
orderIndex: 1, orderIndex: 1,
parentID: null, parentID: null,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
}; };
const rootTeamCollectionsCasted: TeamCollection = {
id: rootTeamCollection.id,
title: rootTeamCollection.title,
parentID: rootTeamCollection.parentID,
data: JSON.stringify(rootTeamCollection.data),
};
const rootTeamCollection_2: DBTeamCollection = { const rootTeamCollection_2: DBTeamCollection = {
id: 'erv', id: 'erv',
orderIndex: 2, orderIndex: 2,
parentID: null, parentID: null,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
}; };
const rootTeamCollection_2Casted: TeamCollection = {
id: 'erv',
parentID: null,
data: JSON.stringify(rootTeamCollection_2.data),
title: 'Root Collection 1',
};
const childTeamCollection: DBTeamCollection = { const childTeamCollection: DBTeamCollection = {
id: 'rfe', id: 'rfe',
orderIndex: 1, orderIndex: 1,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Child Collection 1', title: 'Child Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
}; };
const childTeamCollectionCasted: TeamCollection = {
id: 'rfe',
parentID: rootTeamCollection.id,
data: JSON.stringify(childTeamCollection.data),
title: 'Child Collection 1',
};
const childTeamCollection_2: DBTeamCollection = { const childTeamCollection_2: DBTeamCollection = {
id: 'bgdz', id: 'bgdz',
orderIndex: 1, orderIndex: 1,
data: {},
parentID: rootTeamCollection_2.id, parentID: rootTeamCollection_2.id,
title: 'Child Collection 1', title: 'Child Collection 1',
teamID: team.id, teamID: team.id,
@@ -90,11 +114,20 @@ const childTeamCollection_2: DBTeamCollection = {
updatedOn: currentTime, updatedOn: currentTime,
}; };
const childTeamCollection_2Casted: TeamCollection = {
id: 'bgdz',
data: JSON.stringify(childTeamCollection_2.data),
parentID: rootTeamCollection_2.id,
title: 'Child Collection 1',
};
const rootTeamCollectionList: DBTeamCollection[] = [ const rootTeamCollectionList: DBTeamCollection[] = [
{ {
id: 'fdv', id: 'fdv',
orderIndex: 1, orderIndex: 1,
parentID: null, parentID: null,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -105,6 +138,8 @@ const rootTeamCollectionList: DBTeamCollection[] = [
orderIndex: 2, orderIndex: 2,
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -114,6 +149,8 @@ const rootTeamCollectionList: DBTeamCollection[] = [
orderIndex: 3, orderIndex: 3,
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -122,6 +159,8 @@ const rootTeamCollectionList: DBTeamCollection[] = [
id: 'bre3', id: 'bre3',
orderIndex: 4, orderIndex: 4,
parentID: null, parentID: null,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -132,6 +171,8 @@ const rootTeamCollectionList: DBTeamCollection[] = [
orderIndex: 5, orderIndex: 5,
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -142,6 +183,8 @@ const rootTeamCollectionList: DBTeamCollection[] = [
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
data: {},
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
}, },
@@ -151,6 +194,8 @@ const rootTeamCollectionList: DBTeamCollection[] = [
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
data: {},
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
}, },
@@ -159,6 +204,7 @@ const rootTeamCollectionList: DBTeamCollection[] = [
orderIndex: 8, orderIndex: 8,
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -168,6 +214,7 @@ const rootTeamCollectionList: DBTeamCollection[] = [
orderIndex: 9, orderIndex: 9,
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -178,17 +225,83 @@ const rootTeamCollectionList: DBTeamCollection[] = [
parentID: null, parentID: null,
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
data: {},
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
}, },
]; ];
const rootTeamCollectionListCasted: TeamCollection[] = [
{
id: 'fdv',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: 'fbbg',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: 'fgbfg',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: 'bre3',
parentID: null,
data: JSON.stringify(rootTeamCollection.data),
title: 'Root Collection 1',
},
{
id: 'hghgf',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: '123',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: '54tyh',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: '234re',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: '34rtg',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
{
id: '45tgh',
parentID: null,
title: 'Root Collection 1',
data: JSON.stringify(rootTeamCollection.data),
},
];
const childTeamCollectionList: DBTeamCollection[] = [ const childTeamCollectionList: DBTeamCollection[] = [
{ {
id: '123', id: '123',
orderIndex: 1, orderIndex: 1,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -198,6 +311,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
orderIndex: 2, orderIndex: 2,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -207,6 +322,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
orderIndex: 3, orderIndex: 3,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
title: 'Root Collection 1', title: 'Root Collection 1',
data: {},
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
updatedOn: currentTime, updatedOn: currentTime,
@@ -215,6 +332,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '567', id: '567',
orderIndex: 4, orderIndex: 4,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -224,6 +343,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '123', id: '123',
orderIndex: 5, orderIndex: 5,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -233,6 +354,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '678', id: '678',
orderIndex: 6, orderIndex: 6,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -242,6 +365,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '789', id: '789',
orderIndex: 7, orderIndex: 7,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -251,6 +376,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '890', id: '890',
orderIndex: 8, orderIndex: 8,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -260,6 +387,7 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '012', id: '012',
orderIndex: 9, orderIndex: 9,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -269,6 +397,8 @@ const childTeamCollectionList: DBTeamCollection[] = [
id: '0bhu', id: '0bhu',
orderIndex: 10, orderIndex: 10,
parentID: rootTeamCollection.id, parentID: rootTeamCollection.id,
data: {},
title: 'Root Collection 1', title: 'Root Collection 1',
teamID: team.id, teamID: team.id,
createdOn: currentTime, createdOn: currentTime,
@@ -276,6 +406,75 @@ const childTeamCollectionList: DBTeamCollection[] = [
}, },
]; ];
const childTeamCollectionListCasted: TeamCollection[] = [
{
id: '123',
parentID: rootTeamCollection.id,
title: 'Root Collection 1',
data: JSON.stringify({}),
},
{
id: '345',
parentID: rootTeamCollection.id,
title: 'Root Collection 1',
data: JSON.stringify({}),
},
{
id: '456',
parentID: rootTeamCollection.id,
title: 'Root Collection 1',
data: JSON.stringify({}),
},
{
id: '567',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
{
id: '123',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
{
id: '678',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
{
id: '789',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
{
id: '890',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
{
id: '012',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
{
id: '0bhu',
parentID: rootTeamCollection.id,
data: JSON.stringify({}),
title: 'Root Collection 1',
},
];
beforeEach(() => { beforeEach(() => {
mockReset(mockPrisma); mockReset(mockPrisma);
mockPubSub.publish.mockClear(); mockPubSub.publish.mockClear();
@@ -314,7 +513,7 @@ describe('getParentOfCollection', () => {
const result = await teamCollectionService.getParentOfCollection( const result = await teamCollectionService.getParentOfCollection(
childTeamCollection.id, childTeamCollection.id,
); );
expect(result).toEqual(rootTeamCollection); expect(result).toEqual(rootTeamCollectionsCasted);
}); });
test('should return null successfully for a root collection with valid collectionID', async () => { test('should return null successfully for a root collection with valid collectionID', async () => {
@@ -350,7 +549,7 @@ describe('getChildrenOfCollection', () => {
null, null,
10, 10,
); );
expect(result).toEqual(childTeamCollectionList); expect(result).toEqual(childTeamCollectionListCasted);
}); });
test('should return a list of 3 child collections successfully with cursor being equal to the 7th item in the list', async () => { test('should return a list of 3 child collections successfully with cursor being equal to the 7th item in the list', async () => {
@@ -366,9 +565,9 @@ describe('getChildrenOfCollection', () => {
10, 10,
); );
expect(result).toEqual([ expect(result).toEqual([
{ ...childTeamCollectionList[7] }, { ...childTeamCollectionListCasted[7] },
{ ...childTeamCollectionList[8] }, { ...childTeamCollectionListCasted[8] },
{ ...childTeamCollectionList[9] }, { ...childTeamCollectionListCasted[9] },
]); ]);
}); });
@@ -395,7 +594,7 @@ describe('getTeamRootCollections', () => {
null, null,
10, 10,
); );
expect(result).toEqual(rootTeamCollectionList); expect(result).toEqual(rootTeamCollectionListCasted);
}); });
test('should return a list of 3 root collections successfully with cursor being equal to the 7th item in the list', async () => { test('should return a list of 3 root collections successfully with cursor being equal to the 7th item in the list', async () => {
@@ -411,9 +610,9 @@ describe('getTeamRootCollections', () => {
10, 10,
); );
expect(result).toEqual([ expect(result).toEqual([
{ ...rootTeamCollectionList[7] }, { ...rootTeamCollectionListCasted[7] },
{ ...rootTeamCollectionList[8] }, { ...rootTeamCollectionListCasted[8] },
{ ...rootTeamCollectionList[9] }, { ...rootTeamCollectionListCasted[9] },
]); ]);
}); });
@@ -467,6 +666,7 @@ describe('createCollection', () => {
const result = await teamCollectionService.createCollection( const result = await teamCollectionService.createCollection(
rootTeamCollection.teamID, rootTeamCollection.teamID,
'ab', 'ab',
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.id, rootTeamCollection.id,
); );
expect(result).toEqualLeft(TEAM_COLL_SHORT_TITLE); expect(result).toEqualLeft(TEAM_COLL_SHORT_TITLE);
@@ -481,11 +681,27 @@ describe('createCollection', () => {
const result = await teamCollectionService.createCollection( const result = await teamCollectionService.createCollection(
rootTeamCollection.teamID, rootTeamCollection.teamID,
'abcd', 'abcd',
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.id, rootTeamCollection.id,
); );
expect(result).toEqualLeft(TEAM_NOT_OWNER); expect(result).toEqualLeft(TEAM_NOT_OWNER);
}); });
test('should throw TEAM_COLL_DATA_INVALID when parent TeamCollection does not belong to the team', async () => {
// isOwnerCheck
mockPrisma.teamCollection.findFirstOrThrow.mockResolvedValueOnce(
rootTeamCollection,
);
const result = await teamCollectionService.createCollection(
rootTeamCollection.teamID,
'abcd',
'{',
rootTeamCollection.id,
);
expect(result).toEqualLeft(TEAM_COLL_DATA_INVALID);
});
test('should successfully create a new root TeamCollection with valid inputs', async () => { test('should successfully create a new root TeamCollection with valid inputs', async () => {
// isOwnerCheck // isOwnerCheck
mockPrisma.teamCollection.findFirstOrThrow.mockResolvedValueOnce( mockPrisma.teamCollection.findFirstOrThrow.mockResolvedValueOnce(
@@ -499,9 +715,10 @@ describe('createCollection', () => {
const result = await teamCollectionService.createCollection( const result = await teamCollectionService.createCollection(
rootTeamCollection.teamID, rootTeamCollection.teamID,
'abcdefg', 'abcdefg',
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.id, rootTeamCollection.id,
); );
expect(result).toEqualRight(rootTeamCollection); expect(result).toEqualRight(rootTeamCollectionsCasted);
}); });
test('should successfully create a new child TeamCollection with valid inputs', async () => { test('should successfully create a new child TeamCollection with valid inputs', async () => {
@@ -517,9 +734,10 @@ describe('createCollection', () => {
const result = await teamCollectionService.createCollection( const result = await teamCollectionService.createCollection(
childTeamCollection.teamID, childTeamCollection.teamID,
childTeamCollection.title, childTeamCollection.title,
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.id, rootTeamCollection.id,
); );
expect(result).toEqualRight(childTeamCollection); expect(result).toEqualRight(childTeamCollectionCasted);
}); });
test('should send pubsub message to "team_coll/<teamID>/coll_added" if child TeamCollection is created successfully', async () => { test('should send pubsub message to "team_coll/<teamID>/coll_added" if child TeamCollection is created successfully', async () => {
@@ -535,11 +753,13 @@ describe('createCollection', () => {
const result = await teamCollectionService.createCollection( const result = await teamCollectionService.createCollection(
childTeamCollection.teamID, childTeamCollection.teamID,
childTeamCollection.title, childTeamCollection.title,
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.id, rootTeamCollection.id,
); );
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${childTeamCollection.teamID}/coll_added`, `team_coll/${childTeamCollection.teamID}/coll_added`,
childTeamCollection, childTeamCollectionCasted,
); );
}); });
@@ -556,11 +776,13 @@ describe('createCollection', () => {
const result = await teamCollectionService.createCollection( const result = await teamCollectionService.createCollection(
rootTeamCollection.teamID, rootTeamCollection.teamID,
'abcdefg', 'abcdefg',
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.id, rootTeamCollection.id,
); );
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${rootTeamCollection.teamID}/coll_added`, `team_coll/${rootTeamCollection.teamID}/coll_added`,
rootTeamCollection, rootTeamCollectionsCasted,
); );
}); });
}); });
@@ -590,7 +812,7 @@ describe('renameCollection', () => {
'NewTitle', 'NewTitle',
); );
expect(result).toEqualRight({ expect(result).toEqualRight({
...rootTeamCollection, ...rootTeamCollectionsCasted,
title: 'NewTitle', title: 'NewTitle',
}); });
}); });
@@ -628,7 +850,7 @@ describe('renameCollection', () => {
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${rootTeamCollection.teamID}/coll_updated`, `team_coll/${rootTeamCollection.teamID}/coll_updated`,
{ {
...rootTeamCollection, ...rootTeamCollectionsCasted,
title: 'NewTitle', title: 'NewTitle',
}, },
); );
@@ -835,9 +1057,8 @@ describe('moveCollection', () => {
null, null,
); );
expect(result).toEqualRight({ expect(result).toEqualRight({
...childTeamCollection, ...childTeamCollectionCasted,
parentID: null, parentID: null,
orderIndex: 2,
}); });
}); });
@@ -893,9 +1114,8 @@ describe('moveCollection', () => {
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${childTeamCollection.teamID}/coll_moved`, `team_coll/${childTeamCollection.teamID}/coll_moved`,
{ {
...childTeamCollection, ...childTeamCollectionCasted,
parentID: null, parentID: null,
orderIndex: 2,
}, },
); );
}); });
@@ -934,9 +1154,8 @@ describe('moveCollection', () => {
childTeamCollection_2.id, childTeamCollection_2.id,
); );
expect(result).toEqualRight({ expect(result).toEqualRight({
...rootTeamCollection, ...rootTeamCollectionsCasted,
parentID: childTeamCollection_2.id, parentID: childTeamCollection_2Casted.id,
orderIndex: 1,
}); });
}); });
@@ -976,9 +1195,8 @@ describe('moveCollection', () => {
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${childTeamCollection_2.teamID}/coll_moved`, `team_coll/${childTeamCollection_2.teamID}/coll_moved`,
{ {
...rootTeamCollection, ...rootTeamCollectionsCasted,
parentID: childTeamCollection_2.id, parentID: childTeamCollection_2Casted.id,
orderIndex: 1,
}, },
); );
}); });
@@ -1017,9 +1235,8 @@ describe('moveCollection', () => {
childTeamCollection_2.id, childTeamCollection_2.id,
); );
expect(result).toEqualRight({ expect(result).toEqualRight({
...childTeamCollection, ...childTeamCollectionCasted,
parentID: childTeamCollection_2.id, parentID: childTeamCollection_2Casted.id,
orderIndex: 1,
}); });
}); });
@@ -1059,9 +1276,8 @@ describe('moveCollection', () => {
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${childTeamCollection.teamID}/coll_moved`, `team_coll/${childTeamCollection.teamID}/coll_moved`,
{ {
...childTeamCollection, ...childTeamCollectionCasted,
parentID: childTeamCollection_2.id, parentID: childTeamCollection_2Casted.id,
orderIndex: 1,
}, },
); );
}); });
@@ -1157,7 +1373,7 @@ describe('updateCollectionOrder', () => {
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${childTeamCollectionList[4].teamID}/coll_order_updated`, `team_coll/${childTeamCollectionList[4].teamID}/coll_order_updated`,
{ {
collection: rootTeamCollectionList[4], collection: rootTeamCollectionListCasted[4],
nextCollection: null, nextCollection: null,
}, },
); );
@@ -1238,8 +1454,8 @@ describe('updateCollectionOrder', () => {
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${childTeamCollectionList[2].teamID}/coll_order_updated`, `team_coll/${childTeamCollectionList[2].teamID}/coll_order_updated`,
{ {
collection: childTeamCollectionList[4], collection: childTeamCollectionListCasted[4],
nextCollection: childTeamCollectionList[2], nextCollection: childTeamCollectionListCasted[2],
}, },
); );
}); });
@@ -1305,7 +1521,7 @@ describe('importCollectionsFromJSON', () => {
); );
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${rootTeamCollection.teamID}/coll_added`, `team_coll/${rootTeamCollection.teamID}/coll_added`,
rootTeamCollection, rootTeamCollectionsCasted,
); );
}); });
}); });
@@ -1424,7 +1640,7 @@ describe('replaceCollectionsWithJSON', () => {
); );
expect(mockPubSub.publish).toHaveBeenCalledWith( expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${rootTeamCollection.teamID}/coll_added`, `team_coll/${rootTeamCollection.teamID}/coll_added`,
rootTeamCollection, rootTeamCollectionsCasted,
); );
}); });
}); });
@@ -1461,4 +1677,64 @@ describe('totalCollectionsInTeam', () => {
}); });
}); });
describe('updateTeamCollection', () => {
test('should throw TEAM_COLL_SHORT_TITLE if title is invalid', async () => {
const result = await teamCollectionService.updateTeamCollection(
rootTeamCollection.id,
JSON.stringify(rootTeamCollection.data),
'de',
);
expect(result).toEqualLeft(TEAM_COLL_SHORT_TITLE);
});
test('should throw TEAM_COLL_DATA_INVALID is collection data is invalid', async () => {
const result = await teamCollectionService.updateTeamCollection(
rootTeamCollection.id,
'{',
rootTeamCollection.title,
);
expect(result).toEqualLeft(TEAM_COLL_DATA_INVALID);
});
test('should throw TEAM_COLL_NOT_FOUND is collectionID is invalid', async () => {
mockPrisma.teamCollection.update.mockRejectedValueOnce('RecordNotFound');
const result = await teamCollectionService.updateTeamCollection(
'invalid_id',
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.title,
);
expect(result).toEqualLeft(TEAM_COLL_NOT_FOUND);
});
test('should successfully update a collection', async () => {
mockPrisma.teamCollection.update.mockResolvedValueOnce(rootTeamCollection);
const result = await teamCollectionService.updateTeamCollection(
rootTeamCollection.id,
JSON.stringify({ foo: 'bar' }),
'new_title',
);
expect(result).toEqualRight({
data: JSON.stringify({ foo: 'bar' }),
title: 'new_title',
...rootTeamCollectionsCasted,
});
});
test('should send pubsub message to "team_coll/<teamID>/coll_updated" if TeamCollection is updated successfully', async () => {
mockPrisma.teamCollection.update.mockResolvedValueOnce(rootTeamCollection);
const result = await teamCollectionService.updateTeamCollection(
rootTeamCollection.id,
JSON.stringify(rootTeamCollection.data),
rootTeamCollection.title,
);
expect(mockPubSub.publish).toHaveBeenCalledWith(
`team_coll/${rootTeamCollection.teamID}/coll_updated`,
rootTeamCollectionsCasted,
);
});
});
//ToDo: write test cases for exportCollectionsToJSON //ToDo: write test cases for exportCollectionsToJSON

View File

@@ -13,6 +13,7 @@ import {
TEAM_COLL_IS_PARENT_COLL, TEAM_COLL_IS_PARENT_COLL,
TEAM_COL_SAME_NEXT_COLL, TEAM_COL_SAME_NEXT_COLL,
TEAM_COL_REORDERING_FAILED, TEAM_COL_REORDERING_FAILED,
TEAM_COLL_DATA_INVALID,
} from '../errors'; } from '../errors';
import { PubSubService } from '../pubsub/pubsub.service'; import { PubSubService } from '../pubsub/pubsub.service';
import { isValidLength } from 'src/utils'; import { isValidLength } from 'src/utils';
@@ -69,6 +70,7 @@ export class TeamCollectionService {
this.generatePrismaQueryObjForFBCollFolder(f, teamID, index + 1), this.generatePrismaQueryObjForFBCollFolder(f, teamID, index + 1),
), ),
}, },
data: folder.data ?? undefined,
}; };
} }
@@ -118,6 +120,7 @@ export class TeamCollectionService {
name: collection.right.title, name: collection.right.title,
folders: childrenCollectionObjects, folders: childrenCollectionObjects,
requests: requests.map((x) => x.request), requests: requests.map((x) => x.request),
data: JSON.stringify(collection.right.data),
}; };
return E.right(result); return E.right(result);
@@ -198,8 +201,11 @@ export class TeamCollectionService {
), ),
); );
teamCollections.forEach((x) => teamCollections.forEach((collection) =>
this.pubsub.publish(`team_coll/${destTeamID}/coll_added`, x), this.pubsub.publish(
`team_coll/${destTeamID}/coll_added`,
this.cast(collection),
),
); );
return E.right(true); return E.right(true);
@@ -268,8 +274,11 @@ export class TeamCollectionService {
), ),
); );
teamCollections.forEach((x) => teamCollections.forEach((collections) =>
this.pubsub.publish(`team_coll/${destTeamID}/coll_added`, x), this.pubsub.publish(
`team_coll/${destTeamID}/coll_added`,
this.cast(collections),
),
); );
return E.right(true); return E.right(true);
@@ -277,11 +286,17 @@ export class TeamCollectionService {
/** /**
* Typecast a database TeamCollection to a TeamCollection model * Typecast a database TeamCollection to a TeamCollection model
*
* @param teamCollection database TeamCollection * @param teamCollection database TeamCollection
* @returns TeamCollection model * @returns TeamCollection model
*/ */
private cast(teamCollection: DBTeamCollection): TeamCollection { private cast(teamCollection: DBTeamCollection): TeamCollection {
return <TeamCollection>{ ...teamCollection }; return <TeamCollection>{
id: teamCollection.id,
title: teamCollection.title,
parentID: teamCollection.parentID,
data: !teamCollection.data ? null : JSON.stringify(teamCollection.data),
};
} }
/** /**
@@ -324,7 +339,7 @@ export class TeamCollectionService {
}); });
if (!teamCollection) return null; if (!teamCollection) return null;
return teamCollection.parent; return !teamCollection.parent ? null : this.cast(teamCollection.parent);
} }
/** /**
@@ -335,12 +350,12 @@ export class TeamCollectionService {
* @param take Number of items we want returned * @param take Number of items we want returned
* @returns A list of child collections * @returns A list of child collections
*/ */
getChildrenOfCollection( async getChildrenOfCollection(
collectionID: string, collectionID: string,
cursor: string | null, cursor: string | null,
take: number, take: number,
) { ) {
return this.prisma.teamCollection.findMany({ const res = await this.prisma.teamCollection.findMany({
where: { where: {
parentID: collectionID, parentID: collectionID,
}, },
@@ -351,6 +366,12 @@ export class TeamCollectionService {
skip: cursor ? 1 : 0, skip: cursor ? 1 : 0,
cursor: cursor ? { id: cursor } : undefined, cursor: cursor ? { id: cursor } : undefined,
}); });
const childCollections = res.map((teamCollection) =>
this.cast(teamCollection),
);
return childCollections;
} }
/** /**
@@ -366,7 +387,7 @@ export class TeamCollectionService {
cursor: string | null, cursor: string | null,
take: number, take: number,
) { ) {
return this.prisma.teamCollection.findMany({ const res = await this.prisma.teamCollection.findMany({
where: { where: {
teamID, teamID,
parentID: null, parentID: null,
@@ -378,6 +399,12 @@ export class TeamCollectionService {
skip: cursor ? 1 : 0, skip: cursor ? 1 : 0,
cursor: cursor ? { id: cursor } : undefined, cursor: cursor ? { id: cursor } : undefined,
}); });
const teamCollections = res.map((teamCollection) =>
this.cast(teamCollection),
);
return teamCollections;
} }
/** /**
@@ -470,6 +497,7 @@ export class TeamCollectionService {
async createCollection( async createCollection(
teamID: string, teamID: string,
title: string, title: string,
data: string | null = null,
parentTeamCollectionID: string | null, parentTeamCollectionID: string | null,
) { ) {
const isTitleValid = isValidLength(title, this.TITLE_LENGTH); const isTitleValid = isValidLength(title, this.TITLE_LENGTH);
@@ -481,6 +509,13 @@ export class TeamCollectionService {
if (O.isNone(isOwner)) return E.left(TEAM_NOT_OWNER); if (O.isNone(isOwner)) return E.left(TEAM_NOT_OWNER);
} }
if (data === '') return E.left(TEAM_COLL_DATA_INVALID);
if (data) {
const jsonReq = stringToJson(data);
if (E.isLeft(jsonReq)) return E.left(TEAM_COLL_DATA_INVALID);
data = jsonReq.right;
}
const isParent = parentTeamCollectionID const isParent = parentTeamCollectionID
? { ? {
connect: { connect: {
@@ -498,18 +533,23 @@ export class TeamCollectionService {
}, },
}, },
parent: isParent, parent: isParent,
data: data ?? undefined,
orderIndex: !parentTeamCollectionID orderIndex: !parentTeamCollectionID
? (await this.getRootCollectionsCount(teamID)) + 1 ? (await this.getRootCollectionsCount(teamID)) + 1
: (await this.getChildCollectionsCount(parentTeamCollectionID)) + 1, : (await this.getChildCollectionsCount(parentTeamCollectionID)) + 1,
}, },
}); });
this.pubsub.publish(`team_coll/${teamID}/coll_added`, teamCollection); this.pubsub.publish(
`team_coll/${teamID}/coll_added`,
this.cast(teamCollection),
);
return E.right(this.cast(teamCollection)); return E.right(this.cast(teamCollection));
} }
/** /**
* @deprecated Use updateTeamCollection method instead
* Update the title of a TeamCollection * Update the title of a TeamCollection
* *
* @param collectionID The Collection ID * @param collectionID The Collection ID
@@ -532,10 +572,10 @@ export class TeamCollectionService {
this.pubsub.publish( this.pubsub.publish(
`team_coll/${updatedTeamCollection.teamID}/coll_updated`, `team_coll/${updatedTeamCollection.teamID}/coll_updated`,
updatedTeamCollection, this.cast(updatedTeamCollection),
); );
return E.right(updatedTeamCollection); return E.right(this.cast(updatedTeamCollection));
} catch (error) { } catch (error) {
return E.left(TEAM_COLL_NOT_FOUND); return E.left(TEAM_COLL_NOT_FOUND);
} }
@@ -694,8 +734,8 @@ export class TeamCollectionService {
* @returns An Option of boolean, is parent or not * @returns An Option of boolean, is parent or not
*/ */
private async isParent( private async isParent(
collection: TeamCollection, collection: DBTeamCollection,
destCollection: TeamCollection, destCollection: DBTeamCollection,
): Promise<O.Option<boolean>> { ): Promise<O.Option<boolean>> {
//* Recursively check if collection is a parent by going up the tree of child-parent collections until we reach a root collection i.e parentID === null //* Recursively check if collection is a parent by going up the tree of child-parent collections until we reach a root collection i.e parentID === null
//* Valid condition, isParent returns false //* Valid condition, isParent returns false
@@ -971,4 +1011,49 @@ export class TeamCollectionService {
const teamCollectionsCount = this.prisma.teamCollection.count(); const teamCollectionsCount = this.prisma.teamCollection.count();
return teamCollectionsCount; return teamCollectionsCount;
} }
/**
* Update Team Collection details
*
* @param collectionID Collection ID
* @param collectionData new header data in a JSONified string form
* @param newTitle New title of the collection
* @returns Updated TeamCollection
*/
async updateTeamCollection(
collectionID: string,
collectionData: string = null,
newTitle: string = null,
) {
try {
if (newTitle != null) {
const isTitleValid = isValidLength(newTitle, this.TITLE_LENGTH);
if (!isTitleValid) return E.left(TEAM_COLL_SHORT_TITLE);
}
if (collectionData === '') return E.left(TEAM_COLL_DATA_INVALID);
if (collectionData) {
const jsonReq = stringToJson(collectionData);
if (E.isLeft(jsonReq)) return E.left(TEAM_COLL_DATA_INVALID);
collectionData = jsonReq.right;
}
const updatedTeamCollection = await this.prisma.teamCollection.update({
where: { id: collectionID },
data: {
data: collectionData ?? undefined,
title: newTitle ?? undefined,
},
});
this.pubsub.publish(
`team_coll/${updatedTeamCollection.teamID}/coll_updated`,
this.cast(updatedTeamCollection),
);
return E.right(this.cast(updatedTeamCollection));
} catch (e) {
return E.left(TEAM_COLL_NOT_FOUND);
}
}
} }

View File

@@ -301,7 +301,7 @@ describe('TeamEnvironmentsService', () => {
describe('createDuplicateEnvironment', () => { describe('createDuplicateEnvironment', () => {
test('should successfully duplicate an existing team environment', async () => { test('should successfully duplicate an existing team environment', async () => {
mockPrisma.teamEnvironment.findFirst.mockResolvedValueOnce( mockPrisma.teamEnvironment.findFirstOrThrow.mockResolvedValueOnce(
teamEnvironment, teamEnvironment,
); );
@@ -322,7 +322,9 @@ describe('TeamEnvironmentsService', () => {
}); });
test('should throw TEAM_ENVIRONMMENT_NOT_FOUND if provided id is invalid', async () => { test('should throw TEAM_ENVIRONMMENT_NOT_FOUND if provided id is invalid', async () => {
mockPrisma.teamEnvironment.findFirst.mockRejectedValue('NotFoundError'); mockPrisma.teamEnvironment.findFirstOrThrow.mockRejectedValue(
'NotFoundError',
);
const result = await teamEnvironmentsService.createDuplicateEnvironment( const result = await teamEnvironmentsService.createDuplicateEnvironment(
teamEnvironment.id, teamEnvironment.id,
@@ -332,7 +334,7 @@ describe('TeamEnvironmentsService', () => {
}); });
test('should send pubsub message to "team_environment/<teamID>/created" if team environment is updated successfully', async () => { test('should send pubsub message to "team_environment/<teamID>/created" if team environment is updated successfully', async () => {
mockPrisma.teamEnvironment.findFirst.mockResolvedValueOnce( mockPrisma.teamEnvironment.findFirstOrThrow.mockResolvedValueOnce(
teamEnvironment, teamEnvironment,
); );

View File

@@ -183,11 +183,10 @@ export class TeamEnvironmentsService {
*/ */
async createDuplicateEnvironment(id: string) { async createDuplicateEnvironment(id: string) {
try { try {
const environment = await this.prisma.teamEnvironment.findFirst({ const environment = await this.prisma.teamEnvironment.findFirstOrThrow({
where: { where: {
id: id, id: id,
}, },
rejectOnNotFound: true,
}); });
const result = await this.prisma.teamEnvironment.create({ const result = await this.prisma.teamEnvironment.create({

View File

@@ -42,6 +42,7 @@ const teamCollection: DbTeamCollection = {
id: 'team-coll-1', id: 'team-coll-1',
parentID: null, parentID: null,
teamID: team.id, teamID: team.id,
data: {},
title: 'Team Collection 1', title: 'Team Collection 1',
orderIndex: 1, orderIndex: 1,
createdOn: new Date(), createdOn: new Date(),

View File

@@ -1,6 +1,8 @@
// This interface defines how data will be received from the app when we are importing Hoppscotch collections
export interface CollectionFolder { export interface CollectionFolder {
id?: string; id?: string;
folders: CollectionFolder[]; folders: CollectionFolder[];
requests: any[]; requests: any[];
name: string; name: string;
data?: string;
} }

View File

@@ -6,6 +6,13 @@ import { PaginationArgs } from 'src/types/input-types.args';
export class CreateRootUserCollectionArgs { export class CreateRootUserCollectionArgs {
@Field({ name: 'title', description: 'Title of the new user collection' }) @Field({ name: 'title', description: 'Title of the new user collection' })
title: string; title: string;
@Field({
name: 'data',
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
} }
@ArgsType() @ArgsType()
export class CreateChildUserCollectionArgs { export class CreateChildUserCollectionArgs {
@@ -17,6 +24,13 @@ export class CreateChildUserCollectionArgs {
description: 'ID of the parent to the new user collection', description: 'ID of the parent to the new user collection',
}) })
parentUserCollectionID: string; parentUserCollectionID: string;
@Field({
name: 'data',
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
} }
@ArgsType() @ArgsType()
@@ -95,3 +109,26 @@ export class ImportUserCollectionsFromJSONArgs {
}) })
parentCollectionID?: string; parentCollectionID?: string;
} }
@ArgsType()
export class UpdateUserCollectionsArgs {
@Field(() => ID, {
name: 'userCollectionID',
description: 'ID of the user collection',
})
userCollectionID: string;
@Field({
name: 'newTitle',
description: 'The updated title of the user collection',
nullable: true,
})
newTitle: string;
@Field({
name: 'data',
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
}

View File

@@ -30,6 +30,7 @@ import {
MoveUserCollectionArgs, MoveUserCollectionArgs,
RenameUserCollectionsArgs, RenameUserCollectionsArgs,
UpdateUserCollectionArgs, UpdateUserCollectionArgs,
UpdateUserCollectionsArgs,
} from './input-type.args'; } from './input-type.args';
import { ReqType } from 'src/types/RequestTypes'; import { ReqType } from 'src/types/RequestTypes';
import * as E from 'fp-ts/Either'; import * as E from 'fp-ts/Either';
@@ -142,7 +143,13 @@ export class UserCollectionResolver {
); );
if (E.isLeft(userCollection)) throwErr(userCollection.left); if (E.isLeft(userCollection)) throwErr(userCollection.left);
return userCollection.right; return <UserCollection>{
...userCollection.right,
userID: userCollection.right.userUid,
data: !userCollection.right.data
? null
: JSON.stringify(userCollection.right.data),
};
} }
@Query(() => UserCollectionExportJSONData, { @Query(() => UserCollectionExportJSONData, {
@@ -191,6 +198,7 @@ export class UserCollectionResolver {
await this.userCollectionService.createUserCollection( await this.userCollectionService.createUserCollection(
user, user,
args.title, args.title,
args.data,
null, null,
ReqType.REST, ReqType.REST,
); );
@@ -212,6 +220,7 @@ export class UserCollectionResolver {
await this.userCollectionService.createUserCollection( await this.userCollectionService.createUserCollection(
user, user,
args.title, args.title,
args.data,
null, null,
ReqType.GQL, ReqType.GQL,
); );
@@ -232,6 +241,7 @@ export class UserCollectionResolver {
await this.userCollectionService.createUserCollection( await this.userCollectionService.createUserCollection(
user, user,
args.title, args.title,
args.data,
args.parentUserCollectionID, args.parentUserCollectionID,
ReqType.GQL, ReqType.GQL,
); );
@@ -252,6 +262,7 @@ export class UserCollectionResolver {
await this.userCollectionService.createUserCollection( await this.userCollectionService.createUserCollection(
user, user,
args.title, args.title,
args.data,
args.parentUserCollectionID, args.parentUserCollectionID,
ReqType.REST, ReqType.REST,
); );
@@ -359,6 +370,26 @@ export class UserCollectionResolver {
return importedCollection.right; return importedCollection.right;
} }
@Mutation(() => UserCollection, {
description: 'Update a UserCollection',
})
@UseGuards(GqlAuthGuard)
async updateUserCollection(
@GqlUser() user: AuthUser,
@Args() args: UpdateUserCollectionsArgs,
) {
const updatedUserCollection =
await this.userCollectionService.updateUserCollection(
args.newTitle,
args.data,
args.userCollectionID,
user.uid,
);
if (E.isLeft(updatedUserCollection)) throwErr(updatedUserCollection.left);
return updatedUserCollection.right;
}
// Subscriptions // Subscriptions
@Subscription(() => UserCollection, { @Subscription(() => UserCollection, {
description: 'Listen for User Collection Creation', description: 'Listen for User Collection Creation',

View File

@@ -12,6 +12,7 @@ import {
USER_NOT_FOUND, USER_NOT_FOUND,
USER_NOT_OWNER, USER_NOT_OWNER,
USER_COLL_INVALID_JSON, USER_COLL_INVALID_JSON,
USER_COLL_DATA_INVALID,
} from 'src/errors'; } from 'src/errors';
import { PrismaService } from 'src/prisma/prisma.service'; import { PrismaService } from 'src/prisma/prisma.service';
import { AuthUser } from 'src/types/AuthUser'; import { AuthUser } from 'src/types/AuthUser';
@@ -43,8 +44,12 @@ export class UserCollectionService {
*/ */
private cast(collection: UserCollection) { private cast(collection: UserCollection) {
return <UserCollectionModel>{ return <UserCollectionModel>{
...collection, id: collection.id,
title: collection.title,
type: collection.type,
parentID: collection.parentID,
userID: collection.userUid, userID: collection.userUid,
data: !collection.data ? null : JSON.stringify(collection.data),
}; };
} }
@@ -146,7 +151,7 @@ export class UserCollectionService {
}, },
}); });
return parent; return !parent ? null : this.cast(parent);
} }
/** /**
@@ -164,7 +169,7 @@ export class UserCollectionService {
take: number, take: number,
type: ReqType, type: ReqType,
) { ) {
return this.prisma.userCollection.findMany({ const res = await this.prisma.userCollection.findMany({
where: { where: {
parentID: collectionID, parentID: collectionID,
type: type, type: type,
@@ -176,6 +181,12 @@ export class UserCollectionService {
skip: cursor ? 1 : 0, skip: cursor ? 1 : 0,
cursor: cursor ? { id: cursor } : undefined, cursor: cursor ? { id: cursor } : undefined,
}); });
const childCollections = res.map((childCollection) =>
this.cast(childCollection),
);
return childCollections;
} }
/** /**
@@ -211,12 +222,20 @@ export class UserCollectionService {
async createUserCollection( async createUserCollection(
user: AuthUser, user: AuthUser,
title: string, title: string,
data: string | null = null,
parentUserCollectionID: string | null, parentUserCollectionID: string | null,
type: ReqType, type: ReqType,
) { ) {
const isTitleValid = isValidLength(title, this.TITLE_LENGTH); const isTitleValid = isValidLength(title, this.TITLE_LENGTH);
if (!isTitleValid) return E.left(USER_COLL_SHORT_TITLE); if (!isTitleValid) return E.left(USER_COLL_SHORT_TITLE);
if (data === '') return E.left(USER_COLL_DATA_INVALID);
if (data) {
const jsonReq = stringToJson(data);
if (E.isLeft(jsonReq)) return E.left(USER_COLL_DATA_INVALID);
data = jsonReq.right;
}
// If creating a child collection // If creating a child collection
if (parentUserCollectionID !== null) { if (parentUserCollectionID !== null) {
const parentCollection = await this.getUserCollection( const parentCollection = await this.getUserCollection(
@@ -251,15 +270,19 @@ export class UserCollectionService {
}, },
}, },
parent: isParent, parent: isParent,
data: data ?? undefined,
orderIndex: !parentUserCollectionID orderIndex: !parentUserCollectionID
? (await this.getRootCollectionsCount(user.uid)) + 1 ? (await this.getRootCollectionsCount(user.uid)) + 1
: (await this.getChildCollectionsCount(parentUserCollectionID)) + 1, : (await this.getChildCollectionsCount(parentUserCollectionID)) + 1,
}, },
}); });
await this.pubsub.publish(`user_coll/${user.uid}/created`, userCollection); await this.pubsub.publish(
`user_coll/${user.uid}/created`,
this.cast(userCollection),
);
return E.right(userCollection); return E.right(this.cast(userCollection));
} }
/** /**
@@ -276,7 +299,7 @@ export class UserCollectionService {
take: number, take: number,
type: ReqType, type: ReqType,
) { ) {
return this.prisma.userCollection.findMany({ const res = await this.prisma.userCollection.findMany({
where: { where: {
userUid: user.uid, userUid: user.uid,
parentID: null, parentID: null,
@@ -289,6 +312,12 @@ export class UserCollectionService {
skip: cursor ? 1 : 0, skip: cursor ? 1 : 0,
cursor: cursor ? { id: cursor } : undefined, cursor: cursor ? { id: cursor } : undefined,
}); });
const userCollections = res.map((childCollection) =>
this.cast(childCollection),
);
return userCollections;
} }
/** /**
@@ -307,7 +336,7 @@ export class UserCollectionService {
take: number, take: number,
type: ReqType, type: ReqType,
) { ) {
return this.prisma.userCollection.findMany({ const res = await this.prisma.userCollection.findMany({
where: { where: {
userUid: user.uid, userUid: user.uid,
parentID: userCollectionID, parentID: userCollectionID,
@@ -317,9 +346,16 @@ export class UserCollectionService {
skip: cursor ? 1 : 0, skip: cursor ? 1 : 0,
cursor: cursor ? { id: cursor } : undefined, cursor: cursor ? { id: cursor } : undefined,
}); });
const childCollections = res.map((childCollection) =>
this.cast(childCollection),
);
return childCollections;
} }
/** /**
* @deprecated Use updateUserCollection method instead
* Update the title of a UserCollection * Update the title of a UserCollection
* *
* @param newTitle The new title of collection * @param newTitle The new title of collection
@@ -351,10 +387,10 @@ export class UserCollectionService {
this.pubsub.publish( this.pubsub.publish(
`user_coll/${updatedUserCollection.userUid}/updated`, `user_coll/${updatedUserCollection.userUid}/updated`,
updatedUserCollection, this.cast(updatedUserCollection),
); );
return E.right(updatedUserCollection); return E.right(this.cast(updatedUserCollection));
} catch (error) { } catch (error) {
return E.left(USER_COLL_NOT_FOUND); return E.left(USER_COLL_NOT_FOUND);
} }
@@ -591,10 +627,10 @@ export class UserCollectionService {
this.pubsub.publish( this.pubsub.publish(
`user_coll/${collection.right.userUid}/moved`, `user_coll/${collection.right.userUid}/moved`,
updatedCollection.right, this.cast(updatedCollection.right),
); );
return E.right(updatedCollection.right); return E.right(this.cast(updatedCollection.right));
} }
// destCollectionID != null i.e move into another collection // destCollectionID != null i.e move into another collection
@@ -642,10 +678,10 @@ export class UserCollectionService {
this.pubsub.publish( this.pubsub.publish(
`user_coll/${collection.right.userUid}/moved`, `user_coll/${collection.right.userUid}/moved`,
updatedCollection.right, this.cast(updatedCollection.right),
); );
return E.right(updatedCollection.right); return E.right(this.cast(updatedCollection.right));
} }
/** /**
@@ -846,6 +882,7 @@ export class UserCollectionService {
...(x.request as Record<string, unknown>), // type casting x.request of type Prisma.JSONValue to an object to enable spread ...(x.request as Record<string, unknown>), // type casting x.request of type Prisma.JSONValue to an object to enable spread
}; };
}), }),
data: JSON.stringify(collection.right.data),
}; };
return E.right(result); return E.right(result);
@@ -918,6 +955,7 @@ export class UserCollectionService {
...(x.request as Record<string, unknown>), // type casting x.request of type Prisma.JSONValue to an object to enable spread ...(x.request as Record<string, unknown>), // type casting x.request of type Prisma.JSONValue to an object to enable spread
}; };
}), }),
data: JSON.stringify(parentCollection.right.data),
}), }),
collectionType: parentCollection.right.type, collectionType: parentCollection.right.type,
}); });
@@ -971,6 +1009,7 @@ export class UserCollectionService {
this.generatePrismaQueryObj(f, userID, index + 1, reqType), this.generatePrismaQueryObj(f, userID, index + 1, reqType),
), ),
}, },
data: folder.data ?? undefined,
}; };
} }
@@ -1040,10 +1079,63 @@ export class UserCollectionService {
), ),
); );
userCollections.forEach((x) => userCollections.forEach((collection) =>
this.pubsub.publish(`user_coll/${userID}/created`, x), this.pubsub.publish(`user_coll/${userID}/created`, this.cast(collection)),
); );
return E.right(true); return E.right(true);
} }
/**
* Update a UserCollection
*
* @param newTitle The new title of collection
* @param userCollectionID The Collection Id
* @param userID The User UID
* @returns An Either of the updated UserCollection
*/
async updateUserCollection(
newTitle: string = null,
collectionData: string | null = null,
userCollectionID: string,
userID: string,
) {
if (collectionData === '') return E.left(USER_COLL_DATA_INVALID);
if (collectionData) {
const jsonReq = stringToJson(collectionData);
if (E.isLeft(jsonReq)) return E.left(USER_COLL_DATA_INVALID);
collectionData = jsonReq.right;
}
if (newTitle != null) {
const isTitleValid = isValidLength(newTitle, this.TITLE_LENGTH);
if (!isTitleValid) return E.left(USER_COLL_SHORT_TITLE);
}
// Check to see is the collection belongs to the user
const isOwner = await this.isOwnerCheck(userCollectionID, userID);
if (O.isNone(isOwner)) return E.left(USER_NOT_OWNER);
try {
const updatedUserCollection = await this.prisma.userCollection.update({
where: {
id: userCollectionID,
},
data: {
data: collectionData ?? undefined,
title: newTitle ?? undefined,
},
});
this.pubsub.publish(
`user_coll/${updatedUserCollection.userUid}/updated`,
this.cast(updatedUserCollection),
);
return E.right(this.cast(updatedUserCollection));
} catch (error) {
return E.left(USER_COLL_NOT_FOUND);
}
}
} }

View File

@@ -13,6 +13,12 @@ export class UserCollection {
}) })
title: string; title: string;
@Field({
description: 'JSON string representing the collection data',
nullable: true,
})
data: string;
@Field(() => ReqType, { @Field(() => ReqType, {
description: 'Type of the user collection', description: 'Type of the user collection',
}) })

View File

@@ -142,13 +142,15 @@ describe('UserHistoryService', () => {
}); });
describe('createUserHistory', () => { describe('createUserHistory', () => {
test('Should resolve right and create a REST request to users history and return a `UserHistory` object', async () => { test('Should resolve right and create a REST request to users history and return a `UserHistory` object', async () => {
const executedOn = new Date();
mockPrisma.userHistory.create.mockResolvedValueOnce({ mockPrisma.userHistory.create.mockResolvedValueOnce({
userUid: 'abc', userUid: 'abc',
id: '1', id: '1',
request: [{}], request: [{}],
responseMetadata: [{}], responseMetadata: [{}],
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}); });
@@ -158,7 +160,7 @@ describe('UserHistoryService', () => {
request: JSON.stringify([{}]), request: JSON.stringify([{}]),
responseMetadata: JSON.stringify([{}]), responseMetadata: JSON.stringify([{}]),
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}; };
@@ -172,13 +174,15 @@ describe('UserHistoryService', () => {
).toEqualRight(userHistory); ).toEqualRight(userHistory);
}); });
test('Should resolve right and create a GQL request to users history and return a `UserHistory` object', async () => { test('Should resolve right and create a GQL request to users history and return a `UserHistory` object', async () => {
const executedOn = new Date();
mockPrisma.userHistory.create.mockResolvedValueOnce({ mockPrisma.userHistory.create.mockResolvedValueOnce({
userUid: 'abc', userUid: 'abc',
id: '1', id: '1',
request: [{}], request: [{}],
responseMetadata: [{}], responseMetadata: [{}],
reqType: ReqType.GQL, reqType: ReqType.GQL,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}); });
@@ -188,7 +192,7 @@ describe('UserHistoryService', () => {
request: JSON.stringify([{}]), request: JSON.stringify([{}]),
responseMetadata: JSON.stringify([{}]), responseMetadata: JSON.stringify([{}]),
reqType: ReqType.GQL, reqType: ReqType.GQL,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}; };
@@ -212,13 +216,15 @@ describe('UserHistoryService', () => {
).toEqualLeft(USER_HISTORY_INVALID_REQ_TYPE); ).toEqualLeft(USER_HISTORY_INVALID_REQ_TYPE);
}); });
test('Should create a GQL request to users history and publish a created subscription', async () => { test('Should create a GQL request to users history and publish a created subscription', async () => {
const executedOn = new Date();
mockPrisma.userHistory.create.mockResolvedValueOnce({ mockPrisma.userHistory.create.mockResolvedValueOnce({
userUid: 'abc', userUid: 'abc',
id: '1', id: '1',
request: [{}], request: [{}],
responseMetadata: [{}], responseMetadata: [{}],
reqType: ReqType.GQL, reqType: ReqType.GQL,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}); });
@@ -228,7 +234,7 @@ describe('UserHistoryService', () => {
request: JSON.stringify([{}]), request: JSON.stringify([{}]),
responseMetadata: JSON.stringify([{}]), responseMetadata: JSON.stringify([{}]),
reqType: ReqType.GQL, reqType: ReqType.GQL,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}; };
@@ -245,13 +251,15 @@ describe('UserHistoryService', () => {
); );
}); });
test('Should create a REST request to users history and publish a created subscription', async () => { test('Should create a REST request to users history and publish a created subscription', async () => {
const executedOn = new Date();
mockPrisma.userHistory.create.mockResolvedValueOnce({ mockPrisma.userHistory.create.mockResolvedValueOnce({
userUid: 'abc', userUid: 'abc',
id: '1', id: '1',
request: [{}], request: [{}],
responseMetadata: [{}], responseMetadata: [{}],
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}); });
@@ -261,7 +269,7 @@ describe('UserHistoryService', () => {
request: JSON.stringify([{}]), request: JSON.stringify([{}]),
responseMetadata: JSON.stringify([{}]), responseMetadata: JSON.stringify([{}]),
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}; };
@@ -323,13 +331,15 @@ describe('UserHistoryService', () => {
).toEqualLeft(USER_HISTORY_NOT_FOUND); ).toEqualLeft(USER_HISTORY_NOT_FOUND);
}); });
test('Should star/unstar a request in the history and publish a updated subscription', async () => { test('Should star/unstar a request in the history and publish a updated subscription', async () => {
const executedOn = new Date();
mockPrisma.userHistory.findFirst.mockResolvedValueOnce({ mockPrisma.userHistory.findFirst.mockResolvedValueOnce({
userUid: 'abc', userUid: 'abc',
id: '1', id: '1',
request: [{}], request: [{}],
responseMetadata: [{}], responseMetadata: [{}],
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: false, isStarred: false,
}); });
@@ -339,7 +349,7 @@ describe('UserHistoryService', () => {
request: [{}], request: [{}],
responseMetadata: [{}], responseMetadata: [{}],
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: true, isStarred: true,
}); });
@@ -349,7 +359,7 @@ describe('UserHistoryService', () => {
request: JSON.stringify([{}]), request: JSON.stringify([{}]),
responseMetadata: JSON.stringify([{}]), responseMetadata: JSON.stringify([{}]),
reqType: ReqType.REST, reqType: ReqType.REST,
executedOn: new Date(), executedOn,
isStarred: true, isStarred: true,
}; };

View File

@@ -1,128 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
- Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or
advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email
address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
support@hoppscotch.io.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2022
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,29 +1,19 @@
<div align="center">
<a href="https://hoppscotch.io">
<img
src="https://avatars.githubusercontent.com/u/56705483"
alt="Hoppscotch Logo"
height="64"
/>
</a>
</div>
<div align="center">
# Hoppscotch CLI <font size=2><sup>ALPHA</sup></font> # Hoppscotch CLI <font size=2><sup>ALPHA</sup></font>
</div> A CLI to run Hoppscotch Test Scripts in CI environments.
A CLI to run Hoppscotch test scripts in CI environments.
### **Commands:** ### **Commands:**
- `hopp test [options] [file]`: testing hoppscotch collection.json file - `hopp test [options] [file]`: testing hoppscotch collection.json file
### **Usage:** ### **Usage:**
```
```bash
hopp [options or commands] arguments hopp [options or commands] arguments
``` ```
### **Options:** ### **Options:**
- `-v`, `--ver`: see the current version of the CLI - `-v`, `--ver`: see the current version of the CLI
- `-h`, `--help`: display help for command - `-h`, `--help`: display help for command
@@ -45,17 +35,21 @@ hopp [options or commands] arguments
- Executes and outputs test-script response. - Executes and outputs test-script response.
#### Options: #### Options:
##### `-e <file_path>` / `--env <file_path>` ##### `-e <file_path>` / `--env <file_path>`
- Accepts path to env.json with contents in below format: - Accepts path to env.json with contents in below format:
```json ```json
{ {
"ENV1":"value1", "ENV1":"value1",
"ENV2":"value2" "ENV2":"value2"
} }
``` ```
- You can now access those variables using `pw.env.get('<var_name>')` - You can now access those variables using `pw.env.get('<var_name>')`
Taking the above example, `pw.env.get("ENV1")` will return `"value1"` Taking the above example, `pw.env.get("ENV1")` will return `"value1"`
## Install ## Install
@@ -75,4 +69,59 @@ npm i -g @hoppscotch/cli
## **Contributing:** ## **Contributing:**
To get started contributing to the repository, please read **[CONTRIBUTING.md](./CONTRIBUTING.md)** When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct, please follow it in all your interactions with the project.
## Pull Request Process
1. Ensure any install or build dependencies are removed before the end of the layer when doing a
build.
2. Update the README.md with details of changes to the interface, this includes new environment
variables, exposed ports, useful file locations and container parameters.
3. Increase the version numbers in any examples files and the README.md to the new version that this
Pull Request would represent. The versioning scheme we use is [SemVer](https://semver.org).
4. You may merge the Pull Request once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer merge it for you.
## Set Up The Development Environment
1. After cloning the repository, execute the following commands:
```bash
pnpm install
pnpm run build
```
2. In order to test locally, you can use two types of package linking:
1. The 'pnpm exec' way (preferred since it does not hamper your original installation of the CLI):
```bash
pnpm link @hoppscotch/cli
// Then to use or test the CLI:
pnpm exec hopp
// After testing, to remove the package linking:
pnpm rm @hoppscotch/cli
```
2. The 'global' way (warning: this might override the globally installed CLI, if exists):
```bash
sudo pnpm link --global
// Then to use or test the CLI:
hopp
// After testing, to remove the package linking:
sudo pnpm rm --global @hoppscotch/cli
```
3. To use the Typescript watch scripts:
```bash
pnpm run dev
```

View File

@@ -1,6 +1,6 @@
{ {
"name": "@hoppscotch/cli", "name": "@hoppscotch/cli",
"version": "0.3.1", "version": "0.4.0",
"description": "A CLI to run Hoppscotch test scripts in CI environments.", "description": "A CLI to run Hoppscotch test scripts in CI environments.",
"homepage": "https://hoppscotch.io", "homepage": "https://hoppscotch.io",
"main": "dist/index.js", "main": "dist/index.js",
@@ -10,6 +10,9 @@
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
"engines": {
"node": ">=18"
},
"scripts": { "scripts": {
"build": "pnpm exec tsup", "build": "pnpm exec tsup",
"dev": "pnpm exec tsup --watch", "dev": "pnpm exec tsup --watch",
@@ -38,26 +41,24 @@
"devDependencies": { "devDependencies": {
"@hoppscotch/data": "workspace:^", "@hoppscotch/data": "workspace:^",
"@hoppscotch/js-sandbox": "workspace:^", "@hoppscotch/js-sandbox": "workspace:^",
"@relmify/jest-fp-ts": "^2.0.2", "@relmify/jest-fp-ts": "^2.1.1",
"@swc/core": "^1.2.181", "@swc/core": "^1.3.92",
"@types/axios": "^0.14.0", "@types/jest": "^29.5.5",
"@types/chalk": "^2.2.0", "@types/lodash": "^4.14.199",
"@types/commander": "^2.12.2", "@types/qs": "^6.9.8",
"@types/jest": "^27.4.1",
"@types/lodash": "^4.14.181",
"@types/qs": "^6.9.7",
"axios": "^0.21.4", "axios": "^0.21.4",
"chalk": "^4.1.1", "chalk": "^4.1.2",
"commander": "^8.0.0", "commander": "^11.0.0",
"esm": "^3.2.25", "esm": "^3.2.25",
"fp-ts": "^2.12.1", "fp-ts": "^2.16.1",
"io-ts": "^2.2.16", "io-ts": "^2.2.20",
"jest": "^27.5.1", "jest": "^29.7.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"prettier": "^2.8.4", "prettier": "^3.0.3",
"qs": "^6.10.3", "qs": "^6.11.2",
"ts-jest": "^27.1.4", "ts-jest": "^29.1.1",
"tsup": "^5.12.7", "tsup": "^7.2.0",
"typescript": "^4.6.4" "typescript": "^5.2.2",
"zod": "^3.22.4"
} }
} }

View File

@@ -42,12 +42,17 @@ export const handleError = <T extends HoppErrorCode>(error: HoppError<T>) => {
switch (error.code) { switch (error.code) {
case "FILE_NOT_FOUND": case "FILE_NOT_FOUND":
ERROR_MSG = `File doesn't exists: ${error.path}`; ERROR_MSG = `File doesn't exist: ${error.path}`;
break; break;
case "UNKNOWN_COMMAND": case "UNKNOWN_COMMAND":
ERROR_MSG = `Unavailable command: ${error.command}`; ERROR_MSG = `Unavailable command: ${error.command}`;
break; break;
case "MALFORMED_ENV_FILE": case "MALFORMED_ENV_FILE":
ERROR_MSG = `The environment file is not of the correct format.`;
break;
case "BULK_ENV_FILE":
ERROR_MSG = `CLI doesn't support bulk environments export.`;
break;
case "MALFORMED_COLLECTION": case "MALFORMED_COLLECTION":
ERROR_MSG = `${error.path}\n${parseErrorData(error.data)}`; ERROR_MSG = `${error.path}\n${parseErrorData(error.data)}`;
break; break;

View File

@@ -1,27 +1,45 @@
import { error } from "../../types/errors"; import { error } from "../../types/errors";
import { HoppEnvs, HoppEnvPair } from "../../types/request"; import {
HoppEnvs,
HoppEnvPair,
HoppEnvKeyPairObject,
HoppEnvExportObject,
HoppBulkEnvExportObject,
} from "../../types/request";
import { readJsonFile } from "../../utils/mutators"; import { readJsonFile } from "../../utils/mutators";
/** /**
* Parses env json file for given path and validates the parsed env json object. * Parses env json file for given path and validates the parsed env json object.
* @param path Path of env.json file to be parsed. * @param path Path of env.json file to be parsed.
* @returns For successful parsing we get HoppEnvs object. * @returns For successful parsing we get HoppEnvs object.
*/ */
export async function parseEnvsData(path: string) { export async function parseEnvsData(path: string) {
const contents = await readJsonFile(path) const contents = await readJsonFile(path);
const envPairs: Array<HoppEnvPair> = [];
const HoppEnvKeyPairResult = HoppEnvKeyPairObject.safeParse(contents);
const HoppEnvExportObjectResult = HoppEnvExportObject.safeParse(contents);
const HoppBulkEnvExportObjectResult =
HoppBulkEnvExportObject.safeParse(contents);
if(!(contents && typeof contents === "object" && !Array.isArray(contents))) { // CLI doesnt support bulk environments export.
throw error({ code: "MALFORMED_ENV_FILE", path, data: null }) // Hence we check for this case and throw an error if it matches the format.
if (HoppBulkEnvExportObjectResult.success) {
throw error({ code: "BULK_ENV_FILE", path, data: error });
} }
const envPairs: Array<HoppEnvPair> = [] // Checks if the environment file is of the correct format.
// If it doesnt match either of them, we throw an error.
if (!(HoppEnvKeyPairResult.success || HoppEnvExportObjectResult.success)) {
throw error({ code: "MALFORMED_ENV_FILE", path, data: error });
}
for( const [key,value] of Object.entries(contents)) { if (HoppEnvKeyPairResult.success) {
if(typeof value !== "string") { for (const [key, value] of Object.entries(HoppEnvKeyPairResult.data)) {
throw error({ code: "MALFORMED_ENV_FILE", path, data: {value: value} }) envPairs.push({ key, value });
} }
} else if (HoppEnvExportObjectResult.success) {
envPairs.push({key, value}) const { key, value } = HoppEnvExportObjectResult.data.variables[0];
envPairs.push({ key, value });
} }
return <HoppEnvs>{ global: [], selected: envPairs }
return <HoppEnvs>{ global: [], selected: envPairs };
} }

View File

@@ -24,6 +24,7 @@ type HoppErrors = {
REQUEST_ERROR: HoppErrorData; REQUEST_ERROR: HoppErrorData;
INVALID_ARGUMENT: HoppErrorData; INVALID_ARGUMENT: HoppErrorData;
MALFORMED_ENV_FILE: HoppErrorPath & HoppErrorData; MALFORMED_ENV_FILE: HoppErrorPath & HoppErrorData;
BULK_ENV_FILE: HoppErrorPath & HoppErrorData;
INVALID_FILE_TYPE: HoppErrorData; INVALID_FILE_TYPE: HoppErrorData;
}; };

View File

@@ -1,6 +1,7 @@
import { HoppCollection, HoppRESTRequest } from "@hoppscotch/data"; import { HoppCollection, HoppRESTRequest } from "@hoppscotch/data";
import { TestReport } from "../interfaces/response"; import { TestReport } from "../interfaces/response";
import { HoppCLIError } from "./errors"; import { HoppCLIError } from "./errors";
import { z } from "zod";
export type FormDataEntry = { export type FormDataEntry = {
key: string; key: string;
@@ -9,6 +10,22 @@ export type FormDataEntry = {
export type HoppEnvPair = { key: string; value: string }; export type HoppEnvPair = { key: string; value: string };
export const HoppEnvKeyPairObject = z.record(z.string(), z.string());
// Shape of the single environment export object that is exported from the app.
export const HoppEnvExportObject = z.object({
name: z.string(),
variables: z.array(
z.object({
key: z.string(),
value: z.string(),
})
),
});
// Shape of the bulk environment export object that is exported from the app.
export const HoppBulkEnvExportObject = z.array(HoppEnvExportObject);
export type HoppEnvs = { export type HoppEnvs = {
global: HoppEnvPair[]; global: HoppEnvPair[];
selected: HoppEnvPair[]; selected: HoppEnvPair[];

View File

@@ -57,7 +57,7 @@ module.exports = {
{ {
name: "localStorage", name: "localStorage",
message: message:
"Do not use 'localStorage' directly. Please use localpersistence.ts functions or stores", "Do not use 'localStorage' directly. Please use the PersistenceService",
}, },
], ],
// window.localStorage block // window.localStorage block
@@ -66,8 +66,10 @@ module.exports = {
{ {
selector: "CallExpression[callee.object.property.name='localStorage']", selector: "CallExpression[callee.object.property.name='localStorage']",
message: message:
"Do not use 'localStorage' directly. Please use localpersistence.ts functions or stores", "Do not use 'localStorage' directly. Please use the PersistenceService",
}, },
], ],
eqeqeq: 1,
"no-else-return": 1,
}, },
} }

View File

@@ -4,5 +4,5 @@ module.exports = {
singleQuote: false, singleQuote: false,
printWidth: 80, printWidth: 80,
useTabs: false, useTabs: false,
tabWidth: 2 tabWidth: 2,
} }

View File

@@ -1,7 +1,25 @@
/*
* Write hoppscotch-common related custom styles in this file.
* If styles are sharable across all package then write into hoppscotch-ui/assets/scss/styles.scss file.
*/
* { * {
@apply backface-hidden; backface-visibility: hidden;
@apply before:backface-hidden; -moz-backface-visibility: hidden;
@apply after:backface-hidden; -webkit-backface-visibility: hidden;
&::before {
backface-visibility: hidden;
-moz-backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
&::after {
backface-visibility: hidden;
-moz-backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
@apply selection:bg-accentDark; @apply selection:bg-accentDark;
@apply selection:text-accentContrast; @apply selection:text-accentContrast;
@apply overscroll-none; @apply overscroll-none;
@@ -15,13 +33,13 @@
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
@apply bg-transparent; @apply bg-transparent;
@apply border-solid border-l border-dividerLight border-t-0 border-b-0 border-r-0; @apply border-b-0 border-l border-r-0 border-t-0 border-solid border-dividerLight;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
@apply bg-divider bg-clip-content; @apply bg-divider bg-clip-content;
@apply rounded-full; @apply rounded-full;
@apply border-solid border-transparent border-4; @apply border-4 border-solid border-transparent;
@apply hover:bg-dividerDark; @apply hover:bg-dividerDark;
@apply hover:bg-clip-content; @apply hover:bg-clip-content;
} }
@@ -31,11 +49,15 @@
@apply h-0; @apply h-0;
} }
.no-scrollbar {
scrollbar-width: none;
}
input::placeholder, input::placeholder,
textarea::placeholder, textarea::placeholder,
.cm-placeholder { .cm-placeholder {
@apply text-secondary; @apply text-secondary;
@apply opacity-50; @apply opacity-50 #{!important};
} }
input, input,
@@ -50,11 +72,11 @@ html {
body { body {
@apply bg-primary; @apply bg-primary;
@apply text-secondary text-body; @apply text-body text-secondary;
@apply font-medium; @apply font-medium;
@apply select-none; @apply select-none;
@apply overflow-x-hidden; @apply overflow-x-hidden;
@apply leading-body; @apply leading-body #{!important};
animation: fade 300ms forwards; animation: fade 300ms forwards;
-webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none; -webkit-touch-callout: none;
@@ -120,8 +142,8 @@ a {
&.link { &.link {
@apply items-center; @apply items-center;
@apply py-0.5 px-1; @apply px-1 py-0.5;
@apply -my-0.5 -mx-1; @apply -mx-1 -my-0.5;
@apply text-accent; @apply text-accent;
@apply rounded; @apply rounded;
@apply hover:text-accentDark; @apply hover:text-accentDark;
@@ -133,7 +155,7 @@ a {
.cm-tooltip { .cm-tooltip {
.tippy-box { .tippy-box {
@apply shadow-none; @apply shadow-none #{!important};
@apply fixed; @apply fixed;
@apply inline-flex; @apply inline-flex;
@apply -mt-8; @apply -mt-8;
@@ -150,15 +172,15 @@ a {
@apply flex; @apply flex;
@apply text-tiny text-primary; @apply text-tiny text-primary;
@apply font-semibold; @apply font-semibold;
@apply py-1 px-2; @apply px-2 py-1;
@apply truncate; @apply truncate;
@apply leading-normal; @apply leading-body;
@apply items-center; @apply items-center;
kbd { kbd {
@apply hidden; @apply hidden;
@apply font-sans; @apply font-sans;
@apply bg-gray-500/45; background-color: rgba(107, 114, 128, 0.45);
@apply text-primaryLight; @apply text-primaryLight;
@apply rounded-sm; @apply rounded-sm;
@apply px-1; @apply px-1;
@@ -166,6 +188,12 @@ a {
@apply truncate; @apply truncate;
@apply sm:inline-flex; @apply sm:inline-flex;
} }
.env-icon {
@apply transition;
@apply inline-flex;
@apply items-center;
}
} }
.tippy-svg-arrow { .tippy-svg-arrow {
@@ -191,9 +219,9 @@ a {
@apply max-h-[45vh]; @apply max-h-[45vh];
@apply items-stretch; @apply items-stretch;
@apply overflow-y-auto; @apply overflow-y-auto;
@apply text-secondary text-body; @apply text-body text-secondary;
@apply p-2; @apply p-2;
@apply leading-normal; @apply leading-body;
@apply focus:outline-none; @apply focus:outline-none;
scroll-behavior: smooth; scroll-behavior: smooth;
@@ -225,12 +253,12 @@ a {
hr { hr {
@apply border-b border-dividerLight; @apply border-b border-dividerLight;
@apply my-2; @apply my-2 #{!important};
} }
.heading { .heading {
@apply font-bold; @apply font-bold;
@apply text-secondaryDark text-lg; @apply text-lg text-secondaryDark;
@apply tracking-tight; @apply tracking-tight;
} }
@@ -239,7 +267,7 @@ hr {
.textarea { .textarea {
@apply flex; @apply flex;
@apply w-full; @apply w-full;
@apply py-2 px-4; @apply px-4 py-2;
@apply bg-transparent; @apply bg-transparent;
@apply rounded; @apply rounded;
@apply text-secondaryDark; @apply text-secondaryDark;
@@ -280,7 +308,7 @@ button {
@apply transform; @apply transform;
@apply origin-top-left; @apply origin-top-left;
@apply scale-75; @apply scale-75;
@apply translate-x-1 -translate-y-4; @apply -translate-y-4 translate-x-1;
} }
.floating-input:focus-within ~ label { .floating-input:focus-within ~ label {
@@ -289,7 +317,7 @@ button {
.floating-input ~ .end-actions { .floating-input ~ .end-actions {
@apply absolute; @apply absolute;
@apply right-0.2; @apply right-[.05rem];
@apply inset-y-0; @apply inset-y-0;
@apply flex; @apply flex;
@apply items-center; @apply items-center;
@@ -314,44 +342,28 @@ pre.ace_editor {
} }
} }
.select-wrapper {
@apply flex flex-1;
@apply relative;
@apply after:absolute;
@apply after:flex;
@apply after:inset-y-0;
@apply after:items-center;
@apply after:justify-center;
@apply after:pointer-events-none;
@apply after:font-icon;
@apply after:text-current;
@apply after:right-3;
@apply after:content-["\e5cf"];
@apply after:text-lg;
}
.info-response { .info-response {
@apply text-pink-500; color: var(--status-info-color);
} }
.success-response { .success-response {
@apply text-green-500; color: var(--status-success-color);
} }
.redir-response { .redirect-response {
@apply text-yellow-500; color: var(--status-redirect-color);
} }
.cl-error-response { .critical-error-response {
@apply text-red-500; color: var(--status-critical-error-color);
} }
.sv-error-response { .server-error-response {
@apply text-red-600; color: var(--status-server-error-color);
} }
.missing-data-response { .missing-data-response {
@apply text-secondaryLight; color: var(--status-missing-data-color);
} }
.toasted-container { .toasted-container {
@@ -362,7 +374,7 @@ pre.ace_editor {
@apply px-4 py-2; @apply px-4 py-2;
@apply bg-tooltip; @apply bg-tooltip;
@apply border-secondaryDark; @apply border-secondaryDark;
@apply text-primary text-body; @apply text-body text-primary;
@apply justify-between; @apply justify-between;
@apply shadow-lg; @apply shadow-lg;
@apply font-semibold; @apply font-semibold;
@@ -390,7 +402,7 @@ pre.ace_editor {
@apply before:opacity-10; @apply before:opacity-10;
@apply before:inset-0; @apply before:inset-0;
@apply before:transition; @apply before:transition;
@apply before:content-DEFAULT; @apply before:content-[''];
@apply hover:no-underline; @apply hover:no-underline;
@apply hover:before:opacity-20; @apply hover:before:opacity-20;
} }
@@ -424,7 +436,7 @@ pre.ace_editor {
@apply before:opacity-0; @apply before:opacity-0;
@apply before:z-20; @apply before:z-20;
@apply before:transition; @apply before:transition;
@apply before:content-DEFAULT; @apply before:content-[''];
@apply hover:before:opacity-100; @apply hover:before:opacity-100;
} }
@@ -501,12 +513,12 @@ pre.ace_editor {
@apply inline-flex; @apply inline-flex;
@apply font-sans; @apply font-sans;
@apply text-tiny; @apply text-tiny;
@apply bg-divider; @apply bg-dividerLight;
@apply rounded; @apply rounded;
@apply ml-2; @apply ml-2;
@apply px-1; @apply px-1;
@apply min-w-5; @apply min-w-[1.25rem];
@apply min-h-5; @apply min-h-[1.25rem];
@apply items-center; @apply items-center;
@apply justify-center; @apply justify-center;
@apply border border-dividerDark; @apply border border-dividerDark;

View File

@@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@@ -1,319 +0,0 @@
@mixin base-theme {
--font-sans: "Inter Variable", sans-serif;
--font-icon: "Material Symbols Rounded Variable";
--font-mono: "Roboto Mono Variable", monospace;
--font-size-tiny: calc(var(--font-size-body) - 0.062rem);
}
@mixin dark-theme {
--primary-color: theme("colors.dark.800");
--primary-light-color: theme("colors.dark.600");
--primary-dark-color: theme("colors.neutral.800");
--primary-contrast-color: theme("colors.neutral.900");
--secondary-color: theme("colors.neutral.400");
--secondary-light-color: theme("colors.neutral.500");
--secondary-dark-color: theme("colors.neutral.50");
--divider-color: theme("colors.neutral.800");
--divider-light-color: theme("colors.dark.500");
--divider-dark-color: theme("colors.dark.300");
--error-color: theme("colors.stone.800");
--tooltip-color: theme("colors.neutral.100");
--popover-color: theme("colors.dark.700");
--editor-theme: "merbivore_soft";
}
@mixin light-theme {
--primary-color: theme("colors.white");
--primary-light-color: theme("colors.gray.50");
--primary-dark-color: theme("colors.gray.100");
--primary-contrast-color: theme("colors.light.50");
--secondary-color: theme("colors.gray.500");
--secondary-light-color: theme("colors.gray.400");
--secondary-dark-color: theme("colors.gray.900");
--divider-color: theme("colors.gray.100");
--divider-light-color: theme("colors.gray.100");
--divider-dark-color: theme("colors.gray.300");
--error-color: theme("colors.yellow.100");
--tooltip-color: theme("colors.neutral.800");
--popover-color: theme("colors.white");
--editor-theme: "textmate";
}
@mixin black-theme {
--primary-color: theme("colors.dark.900");
--primary-light-color: theme("colors.neutral.900");
--primary-dark-color: theme("colors.dark.800");
--primary-contrast-color: theme("colors.dark.900");
--secondary-color: theme("colors.neutral.400");
--secondary-light-color: theme("colors.neutral.500");
--secondary-dark-color: theme("colors.neutral.100");
--divider-color: theme("colors.dark.600");
--divider-light-color: theme("colors.dark.800");
--divider-dark-color: theme("colors.dark.200");
--error-color: theme("colors.stone.900");
--tooltip-color: theme("colors.neutral.100");
--popover-color: theme("colors.dark.900");
--editor-theme: "twilight";
}
@mixin dark-editor-theme {
--editor-type-color: theme("colors.purple.400");
--editor-name-color: theme("colors.blue.400");
--editor-operator-color: theme("colors.indigo.400");
--editor-invalid-color: theme("colors.red.400");
--editor-separator-color: theme("colors.gray.400");
--editor-meta-color: theme("colors.gray.400");
--editor-variable-color: theme("colors.green.400");
--editor-link-color: theme("colors.cyan.400");
--editor-process-color: theme("colors.fuchsia.400");
--editor-constant-color: theme("colors.violet.400");
--editor-keyword-color: theme("colors.pink.400");
}
@mixin light-editor-theme {
--editor-type-color: theme("colors.purple.600");
--editor-name-color: theme("colors.red.600");
--editor-operator-color: theme("colors.indigo.600");
--editor-invalid-color: theme("colors.red.600");
--editor-separator-color: theme("colors.gray.600");
--editor-meta-color: theme("colors.gray.600");
--editor-variable-color: theme("colors.green.600");
--editor-link-color: theme("colors.cyan.600");
--editor-process-color: theme("colors.blue.600");
--editor-constant-color: theme("colors.fuchsia.600");
--editor-keyword-color: theme("colors.pink.600");
}
@mixin black-editor-theme {
--editor-type-color: theme("colors.purple.400");
--editor-name-color: theme("colors.fuchsia.400");
--editor-operator-color: theme("colors.indigo.400");
--editor-invalid-color: theme("colors.red.400");
--editor-separator-color: theme("colors.gray.400");
--editor-meta-color: theme("colors.gray.400");
--editor-variable-color: theme("colors.green.400");
--editor-link-color: theme("colors.cyan.400");
--editor-process-color: theme("colors.violet.400");
--editor-constant-color: theme("colors.blue.400");
--editor-keyword-color: theme("colors.pink.400");
}
@mixin green-theme {
--accent-color: theme("colors.green.500");
--accent-light-color: theme("colors.green.400");
--accent-dark-color: theme("colors.green.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.green.200");
--gradient-via-color: theme("colors.green.400");
--gradient-to-color: theme("colors.green.600");
}
@mixin teal-theme {
--accent-color: theme("colors.teal.500");
--accent-light-color: theme("colors.teal.400");
--accent-dark-color: theme("colors.teal.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.teal.200");
--gradient-via-color: theme("colors.teal.400");
--gradient-to-color: theme("colors.teal.600");
}
@mixin blue-theme {
--accent-color: theme("colors.blue.500");
--accent-light-color: theme("colors.blue.400");
--accent-dark-color: theme("colors.blue.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.blue.200");
--gradient-via-color: theme("colors.blue.400");
--gradient-to-color: theme("colors.blue.600");
}
@mixin indigo-theme {
--accent-color: theme("colors.indigo.500");
--accent-light-color: theme("colors.indigo.400");
--accent-dark-color: theme("colors.indigo.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.indigo.200");
--gradient-via-color: theme("colors.indigo.400");
--gradient-to-color: theme("colors.indigo.600");
}
@mixin purple-theme {
--accent-color: theme("colors.purple.500");
--accent-light-color: theme("colors.purple.400");
--accent-dark-color: theme("colors.purple.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.purple.200");
--gradient-via-color: theme("colors.purple.400");
--gradient-to-color: theme("colors.purple.600");
}
@mixin yellow-theme {
--accent-color: theme("colors.yellow.500");
--accent-light-color: theme("colors.yellow.400");
--accent-dark-color: theme("colors.yellow.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.yellow.200");
--gradient-via-color: theme("colors.yellow.400");
--gradient-to-color: theme("colors.yellow.600");
}
@mixin orange-theme {
--accent-color: theme("colors.orange.500");
--accent-light-color: theme("colors.orange.400");
--accent-dark-color: theme("colors.orange.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.orange.200");
--gradient-via-color: theme("colors.orange.400");
--gradient-to-color: theme("colors.orange.600");
}
@mixin red-theme {
--accent-color: theme("colors.red.500");
--accent-light-color: theme("colors.red.400");
--accent-dark-color: theme("colors.red.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.red.200");
--gradient-via-color: theme("colors.red.400");
--gradient-to-color: theme("colors.red.600");
}
@mixin pink-theme {
--accent-color: theme("colors.pink.500");
--accent-light-color: theme("colors.pink.400");
--accent-dark-color: theme("colors.pink.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.pink.200");
--gradient-via-color: theme("colors.pink.400");
--gradient-to-color: theme("colors.pink.600");
}
:root {
@include base-theme;
@include dark-theme;
@include green-theme;
@include dark-editor-theme;
}
:root.light {
@include light-theme;
@include light-editor-theme;
color-scheme: light;
}
:root.dark {
@include dark-theme;
@include dark-editor-theme;
color-scheme: dark;
}
:root.black {
@include black-theme;
@include black-editor-theme;
color-scheme: dark;
}
:root[data-accent="blue"] {
@include blue-theme;
}
:root[data-accent="green"] {
@include green-theme;
}
:root[data-accent="teal"] {
@include teal-theme;
}
:root[data-accent="indigo"] {
@include indigo-theme;
}
:root[data-accent="purple"] {
@include purple-theme;
}
:root[data-accent="orange"] {
@include orange-theme;
}
:root[data-accent="pink"] {
@include pink-theme;
}
:root[data-accent="red"] {
@include red-theme;
}
:root[data-accent="yellow"] {
@include yellow-theme;
}
@mixin font-small {
--font-size-body: 0.75rem;
--line-height-body: 1rem;
--upper-primary-sticky-fold: 4.125rem;
--upper-secondary-sticky-fold: 6.188rem;
--upper-tertiary-sticky-fold: 8.25rem;
--upper-mobile-primary-sticky-fold: 6.625rem;
--upper-mobile-secondary-sticky-fold: 8.688rem;
--upper-mobile-sticky-fold: 10.75rem;
--upper-mobile-tertiary-sticky-fold: 8.25rem;
--lower-primary-sticky-fold: 3rem;
--lower-secondary-sticky-fold: 5.063rem;
--lower-tertiary-sticky-fold: 7.125rem;
--sidebar-primary-sticky-fold: 2rem;
}
@mixin font-medium {
--font-size-body: 0.875rem;
--line-height-body: 1.25rem;
--upper-primary-sticky-fold: 4.375rem;
--upper-secondary-sticky-fold: 6.688rem;
--upper-tertiary-sticky-fold: 9rem;
--upper-mobile-primary-sticky-fold: 7.125rem;
--upper-mobile-secondary-sticky-fold: 9.438rem;
--upper-mobile-sticky-fold: 11.75rem;
--upper-mobile-tertiary-sticky-fold: 9rem;
--lower-primary-sticky-fold: 3.25rem;
--lower-secondary-sticky-fold: 5.563rem;
--lower-tertiary-sticky-fold: 7.875rem;
--sidebar-primary-sticky-fold: 2.25rem;
}
@mixin font-large {
--font-size-body: 1rem;
--line-height-body: 1.5rem;
--upper-primary-sticky-fold: 4.625rem;
--upper-secondary-sticky-fold: 7.188rem;
--upper-tertiary-sticky-fold: 9.75rem;
--upper-mobile-primary-sticky-fold: 7.625rem;
--upper-mobile-secondary-sticky-fold: 10.188rem;
--upper-mobile-sticky-fold: 12.75rem;
--upper-mobile-tertiary-sticky-fold: 9.75rem;
--lower-primary-sticky-fold: 3.5rem;
--lower-secondary-sticky-fold: 6.063rem;
--lower-tertiary-sticky-fold: 8.625rem;
--sidebar-primary-sticky-fold: 2.5rem;
}
:root[data-font-size="small"] {
@include font-small;
}
:root[data-font-size="medium"] {
@include font-medium;
}
:root[data-font-size="large"] {
@include font-large;
}

View File

@@ -0,0 +1,89 @@
@mixin green-theme {
--accent-color: theme("colors.emerald.500");
--accent-light-color: theme("colors.emerald.400");
--accent-dark-color: theme("colors.emerald.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.emerald.400");
--gradient-via-color: theme("colors.emerald.500");
--gradient-to-color: theme("colors.emerald.600");
}
@mixin teal-theme {
--accent-color: theme("colors.teal.500");
--accent-light-color: theme("colors.teal.400");
--accent-dark-color: theme("colors.teal.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.teal.400");
--gradient-via-color: theme("colors.teal.500");
--gradient-to-color: theme("colors.teal.600");
}
@mixin blue-theme {
--accent-color: theme("colors.blue.500");
--accent-light-color: theme("colors.blue.400");
--accent-dark-color: theme("colors.blue.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.blue.400");
--gradient-via-color: theme("colors.blue.500");
--gradient-to-color: theme("colors.blue.600");
}
@mixin indigo-theme {
--accent-color: theme("colors.indigo.500");
--accent-light-color: theme("colors.indigo.400");
--accent-dark-color: theme("colors.indigo.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.indigo.400");
--gradient-via-color: theme("colors.indigo.500");
--gradient-to-color: theme("colors.indigo.600");
}
@mixin purple-theme {
--accent-color: theme("colors.purple.500");
--accent-light-color: theme("colors.purple.400");
--accent-dark-color: theme("colors.purple.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.purple.400");
--gradient-via-color: theme("colors.purple.500");
--gradient-to-color: theme("colors.purple.600");
}
@mixin yellow-theme {
--accent-color: theme("colors.amber.500");
--accent-light-color: theme("colors.amber.400");
--accent-dark-color: theme("colors.amber.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.amber.400");
--gradient-via-color: theme("colors.amber.500");
--gradient-to-color: theme("colors.amber.600");
}
@mixin orange-theme {
--accent-color: theme("colors.orange.500");
--accent-light-color: theme("colors.orange.400");
--accent-dark-color: theme("colors.orange.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.orange.400");
--gradient-via-color: theme("colors.orange.500");
--gradient-to-color: theme("colors.orange.600");
}
@mixin red-theme {
--accent-color: theme("colors.red.500");
--accent-light-color: theme("colors.red.400");
--accent-dark-color: theme("colors.red.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.red.400");
--gradient-via-color: theme("colors.red.500");
--gradient-to-color: theme("colors.red.600");
}
@mixin pink-theme {
--accent-color: theme("colors.pink.500");
--accent-light-color: theme("colors.pink.400");
--accent-dark-color: theme("colors.pink.600");
--accent-contrast-color: theme("colors.white");
--gradient-from-color: theme("colors.pink.400");
--gradient-via-color: theme("colors.pink.500");
--gradient-to-color: theme("colors.pink.600");
}

View File

@@ -0,0 +1,140 @@
@mixin base-theme {
--font-sans: "Inter Variable", sans-serif;
--font-mono: "Roboto Mono Variable", monospace;
--font-size-body: 0.75rem;
--font-size-tiny: 0.625rem;
--line-height-body: 1rem;
--upper-primary-sticky-fold: 4.125rem;
--upper-secondary-sticky-fold: 6.188rem;
--upper-tertiary-sticky-fold: 8.25rem;
--upper-fourth-sticky-fold: 10.2rem;
--upper-mobile-primary-sticky-fold: 6.75rem;
--upper-mobile-secondary-sticky-fold: 8.813rem;
--upper-mobile-sticky-fold: 10.875rem;
--upper-mobile-tertiary-sticky-fold: 8.25rem;
--lower-primary-sticky-fold: 3rem;
--lower-secondary-sticky-fold: 5.063rem;
--lower-tertiary-sticky-fold: 7.125rem;
--lower-fourth-sticky-fold: 9.188rem;
--sidebar-primary-sticky-fold: 2rem;
}
@mixin light-theme {
--primary-color: theme("colors.white");
--primary-light-color: theme("colors.gray.50");
--primary-dark-color: theme("colors.gray.100");
--primary-contrast-color: #fdfdfd;
--secondary-color: theme("colors.gray.500");
--secondary-light-color: theme("colors.gray.400");
--secondary-dark-color: theme("colors.gray.900");
--divider-color: theme("colors.gray.100");
--divider-light-color: theme("colors.gray.100");
--divider-dark-color: theme("colors.gray.300");
--banner-info-color: theme("colors.stone.100");
--banner-warning-color: theme("colors.yellow.100");
--banner-error-color: theme("colors.red.100");
--tooltip-color: theme("colors.neutral.800");
--popover-color: theme("colors.white");
--method-get-color: theme("colors.green.500");
--method-post-color: theme("colors.amber.500");
--method-put-color: theme("colors.blue.500");
--method-patch-color: theme("colors.purple.500");
--method-delete-color: theme("colors.red.500");
--method-head-color: theme("colors.lime.500");
--method-options-color: theme("colors.pink.500");
--method-default-color: theme("colors.gray.500");
--status-info-color: theme("colors.blue.500");
--status-success-color: theme("colors.green.500");
--status-redirect-color: theme("colors.amber.500");
--status-critical-error-color: theme("colors.red.500");
--status-server-error-color: theme("colors.rose.500");
--status-missing-data-color: theme("colors.slate.500");
--editor-theme: "textmate";
}
@mixin dark-theme {
--primary-color: #181818;
--primary-light-color: #1c1c1e;
--primary-dark-color: theme("colors.neutral.800");
--primary-contrast-color: theme("colors.neutral.900");
--secondary-color: theme("colors.neutral.400");
--secondary-light-color: theme("colors.neutral.500");
--secondary-dark-color: theme("colors.zinc.50");
--divider-color: #1f1f1f;
--divider-light-color: #1f1f1f;
--divider-dark-color: theme("colors.zinc.800");
--banner-info-color: theme("colors.stone.800");
--banner-warning-color: theme("colors.yellow.800");
--banner-error-color: theme("colors.red.800");
--tooltip-color: theme("colors.neutral.100");
--popover-color: #1b1b1b;
--method-get-color: theme("colors.emerald.500");
--method-post-color: theme("colors.yellow.500");
--method-put-color: theme("colors.sky.500");
--method-patch-color: theme("colors.violet.500");
--method-delete-color: theme("colors.rose.500");
--method-head-color: theme("colors.teal.500");
--method-options-color: theme("colors.indigo.500");
--method-default-color: theme("colors.neutral.500");
--status-info-color: theme("colors.blue.500");
--status-success-color: theme("colors.green.500");
--status-redirect-color: theme("colors.amber.500");
--status-critical-error-color: theme("colors.red.500");
--status-server-error-color: theme("colors.rose.500");
--status-missing-data-color: theme("colors.slate.500");
--editor-theme: "merbivore_soft";
}
@mixin black-theme {
--primary-color: #0f0f0f;
--primary-light-color: theme("colors.neutral.900");
--primary-dark-color: #181818;
--primary-contrast-color: #0f0f0f;
--secondary-color: theme("colors.neutral.400");
--secondary-light-color: theme("colors.neutral.500");
--secondary-dark-color: theme("colors.neutral.50");
--divider-color: theme("colors.neutral.900");
--divider-light-color: theme("colors.neutral.900");
--divider-dark-color: theme("colors.zinc.800");
--banner-info-color: theme("colors.stone.900");
--banner-warning-color: theme("colors.yellow.900");
--banner-error-color: theme("colors.red.900");
--tooltip-color: theme("colors.neutral.100");
--popover-color: theme("colors.stone.950");
--method-get-color: theme("colors.emerald.500");
--method-post-color: theme("colors.yellow.500");
--method-put-color: theme("colors.sky.500");
--method-patch-color: theme("colors.violet.500");
--method-delete-color: theme("colors.rose.500");
--method-head-color: theme("colors.teal.500");
--method-options-color: theme("colors.indigo.500");
--method-default-color: theme("colors.zinc.500");
--status-info-color: theme("colors.blue.500");
--status-success-color: theme("colors.green.500");
--status-redirect-color: theme("colors.amber.500");
--status-critical-error-color: theme("colors.red.500");
--status-server-error-color: theme("colors.rose.500");
--status-missing-data-color: theme("colors.slate.500");
--editor-theme: "twilight";
}

View File

@@ -0,0 +1,41 @@
@mixin light-editor-theme {
--editor-type-color: theme("colors.violet.600");
--editor-name-color: theme("colors.red.600");
--editor-operator-color: theme("colors.indigo.600");
--editor-invalid-color: theme("colors.red.600");
--editor-separator-color: theme("colors.gray.600");
--editor-meta-color: theme("colors.gray.600");
--editor-variable-color: theme("colors.emerald.600");
--editor-link-color: theme("colors.cyan.600");
--editor-process-color: theme("colors.blue.600");
--editor-constant-color: theme("colors.fuchsia.600");
--editor-keyword-color: theme("colors.pink.600");
}
@mixin dark-editor-theme {
--editor-type-color: theme("colors.violet.400");
--editor-name-color: theme("colors.blue.400");
--editor-operator-color: theme("colors.indigo.400");
--editor-invalid-color: theme("colors.red.400");
--editor-separator-color: theme("colors.gray.400");
--editor-meta-color: theme("colors.gray.400");
--editor-variable-color: theme("colors.emerald.400");
--editor-link-color: theme("colors.cyan.400");
--editor-process-color: theme("colors.fuchsia.400");
--editor-constant-color: theme("colors.violet.400");
--editor-keyword-color: theme("colors.pink.400");
}
@mixin black-editor-theme {
--editor-type-color: theme("colors.violet.400");
--editor-name-color: theme("colors.fuchsia.400");
--editor-operator-color: theme("colors.indigo.400");
--editor-invalid-color: theme("colors.red.400");
--editor-separator-color: theme("colors.gray.400");
--editor-meta-color: theme("colors.gray.400");
--editor-variable-color: theme("colors.emerald.400");
--editor-link-color: theme("colors.cyan.400");
--editor-process-color: theme("colors.violet.400");
--editor-constant-color: theme("colors.blue.400");
--editor-keyword-color: theme("colors.pink.400");
}

View File

@@ -0,0 +1,64 @@
@import "./base-themes.scss";
@import "./editor-themes.scss";
@import "./accent-themes.scss";
:root {
@include base-theme;
@include dark-theme;
@include green-theme;
@include dark-editor-theme;
}
:root.light {
@include light-theme;
@include light-editor-theme;
color-scheme: light;
}
:root.dark {
@include dark-theme;
@include dark-editor-theme;
color-scheme: dark;
}
:root.black {
@include black-theme;
@include black-editor-theme;
color-scheme: dark;
}
:root[data-accent="blue"] {
@include blue-theme;
}
:root[data-accent="green"] {
@include green-theme;
}
:root[data-accent="teal"] {
@include teal-theme;
}
:root[data-accent="indigo"] {
@include indigo-theme;
}
:root[data-accent="purple"] {
@include purple-theme;
}
:root[data-accent="orange"] {
@include orange-theme;
}
:root[data-accent="pink"] {
@include pink-theme;
}
:root[data-accent="red"] {
@include red-theme;
}
:root[data-accent="yellow"] {
@include yellow-theme;
}

View File

@@ -5,6 +5,7 @@
"choose_file": "Kies 'n lêer", "choose_file": "Kies 'n lêer",
"clear": "Duidelik", "clear": "Duidelik",
"clear_all": "Maak alles skoon", "clear_all": "Maak alles skoon",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Koppel", "connect": "Koppel",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Prettify", "prettify": "Prettify",
"remove": "Verwyder", "remove": "Verwyder",
"rename": "Rename",
"restore": "Herstel", "restore": "Herstel",
"save": "Stoor", "save": "Stoor",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Soek", "search": "Soek",
"share": "Deel", "share": "Deel",
"shortcuts": "Kortpaaie", "shortcuts": "Kortpaaie",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Kollig", "spotlight": "Kollig",
"status": "Status", "status": "Status",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Versameling hernoem", "renamed": "Versameling hernoem",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Stoor as", "save_as": "Stoor as",
"save_to_collection": "Save to Collection",
"select": "Kies 'n versameling", "select": "Kies 'n versameling",
"select_location": "Kies ligging", "select_location": "Kies ligging",
"select_team": "Kies 'n span", "select_team": "Kies 'n span",
"team_collections": "Spanversamelings" "team_collections": "Spanversamelings"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Weet u seker dat u wil afmeld?", "logout": "Weet u seker dat u wil afmeld?",
"remove_collection": "Weet u seker dat u hierdie versameling permanent wil uitvee?", "remove_collection": "Weet u seker dat u hierdie versameling permanent wil uitvee?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Is u seker dat u hierdie werkruimte wil sinkroniseer?" "sync": "Is u seker dat u hierdie werkruimte wil sinkroniseer?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Koptekst {count}", "header": "Koptekst {count}",
"message": "Boodskap {count}", "message": "Boodskap {count}",
@@ -192,17 +204,31 @@
"create_new": "Skep nuwe omgewing", "create_new": "Skep nuwe omgewing",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Bewerk omgewing", "edit": "Bewerk omgewing",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Gee 'n geldige naam vir die omgewing", "invalid_name": "Gee 'n geldige naam vir die omgewing",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nuwe omgewing", "new": "Nuwe omgewing",
"no_active_environment": "No active environment",
"no_environment": "Geen omgewing nie", "no_environment": "Geen omgewing nie",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Kies omgewing", "select": "Kies omgewing",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Omgewings", "title": "Omgewings",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Veranderlike lys" "variable_list": "Veranderlike lys"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Geen duur nie", "no_duration": "Geen duur nie",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Kon nie voorafversoekskrip uitvoer nie", "script_fail": "Kon nie voorafversoekskrip uitvoer nie",
"something_went_wrong": "Iets het verkeerd geloop", "something_went_wrong": "Iets het verkeerd geloop",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Vouer hernoem" "renamed": "Vouer hernoem"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutasies", "mutations": "Mutasies",
"schema": "Skema", "schema": "Skema",
"subscriptions": "Inskrywings" "subscriptions": "Inskrywings",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Invoer" "title": "Invoer"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zen -modus"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Nuttingslading", "payload": "Nuttingslading",
"query": "Navraag", "query": "Navraag",
"raw_body": "Rou versoeksliggaam", "raw_body": "Rou versoeksliggaam",
"rename": "Rename Request",
"renamed": "Versoek hernoem", "renamed": "Versoek hernoem",
"run": "Hardloop", "run": "Hardloop",
"save": "Stoor", "save": "Stoor",
@@ -425,6 +480,7 @@
"saved": "Versoek gestoor", "saved": "Versoek gestoor",
"share": "Deel", "share": "Deel",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Versoek", "title": "Versoek",
"type": "Soort versoek", "type": "Soort versoek",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Dit is u vertoonnaam.", "account_name_description": "Dit is u vertoonnaam.",
"background": "Agtergrond", "background": "Agtergrond",
"black_mode": "Swart", "black_mode": "Swart",
"change_font_size": "Verander lettergrootte",
"choose_language": "Kies taal", "choose_language": "Kies taal",
"dark_mode": "Donker", "dark_mode": "Donker",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Uitbreidings", "extensions": "Uitbreidings",
"extensions_use_toggle": "Gebruik die blaaieruitbreiding om versoeke te stuur (indien teenwoordig)", "extensions_use_toggle": "Gebruik die blaaieruitbreiding om versoeke te stuur (indien teenwoordig)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Skrifgrootte",
"font_size_large": "Groot",
"font_size_medium": "Medium",
"font_size_small": "Klein",
"interceptor": "Onderskepper", "interceptor": "Onderskepper",
"interceptor_description": "Middelware tussen toepassing en API's.", "interceptor_description": "Middelware tussen toepassing en API's.",
"language": "Taal", "language": "Taal",
@@ -540,19 +591,27 @@
"settings": "Gaan na die instellingsbladsy", "settings": "Gaan na die instellingsbladsy",
"title": "Navigasie" "title": "Navigasie"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopieer versoekskakel", "copy_request_link": "Kopieer versoekskakel",
"delete_method": "Kies DELETE metode", "delete_method": "Kies DELETE metode",
"get_method": "Kies GET -metode", "get_method": "Kies GET -metode",
"head_method": "Kies HOOF metode", "head_method": "Kies HOOF metode",
"import_curl": "Import cURL",
"method": "Metode", "method": "Metode",
"next_method": "Kies Volgende metode", "next_method": "Kies Volgende metode",
"post_method": "Kies POST -metode", "post_method": "Kies POST -metode",
"previous_method": "Kies Vorige metode", "previous_method": "Kies Vorige metode",
"put_method": "Kies PUT -metode", "put_method": "Kies PUT -metode",
"rename": "Rename Request",
"reset_request": "Herstel versoek", "reset_request": "Herstel versoek",
"save_request": "Save Request",
"save_to_collections": "Stoor in versamelings", "save_to_collections": "Stoor in versamelings",
"send_request": "Stuur versoek", "send_request": "Stuur versoek",
"show_code": "Generate code snippet",
"title": "Versoek" "title": "Versoek"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Meld", "log": "Meld",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Soort gebeurtenis", "event_type": "Soort gebeurtenis",
"log": "Meld", "log": "Meld",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Magtiging", "authorization": "Magtiging",
"body": "Liggaam", "body": "Liggaam",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Versamelings", "collections": "Versamelings",
"documentation": "Dokumentasie", "documentation": "Dokumentasie",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Opskrifte", "headers": "Opskrifte",
"history": "Geskiedenis", "history": "Geskiedenis",

View File

@@ -5,6 +5,7 @@
"choose_file": "اختيار ملف", "choose_file": "اختيار ملف",
"clear": "امسح", "clear": "امسح",
"clear_all": "امسح الكل", "clear_all": "امسح الكل",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "الاتصال", "connect": "الاتصال",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "لصق", "paste": "لصق",
"prettify": "جمال", "prettify": "جمال",
"remove": "ازالة", "remove": "ازالة",
"rename": "Rename",
"restore": "اعادة", "restore": "اعادة",
"save": "حفظ", "save": "حفظ",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "بحث", "search": "بحث",
"share": "يشارك", "share": "يشارك",
"shortcuts": "الاختصارات", "shortcuts": "الاختصارات",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "أضواء كاشفة", "spotlight": "أضواء كاشفة",
"status": "حالة", "status": "حالة",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "تمت إعادة تسمية المجموعة", "renamed": "تمت إعادة تسمية المجموعة",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "حفظ باسم", "save_as": "حفظ باسم",
"save_to_collection": "Save to Collection",
"select": "حدد مجموعة", "select": "حدد مجموعة",
"select_location": "اختر موقعا", "select_location": "اختر موقعا",
"select_team": "اختر فريقًا", "select_team": "اختر فريقًا",
"team_collections": "مجموعات الفريق" "team_collections": "مجموعات الفريق"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "هل أنت متأكد أنك تريد مغادرة هذا الفريق؟", "exit_team": "هل أنت متأكد أنك تريد مغادرة هذا الفريق؟",
"logout": "هل أنت متأكد أنك تريد تسجيل الخروج؟", "logout": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"remove_collection": "هل أنت متأكد أنك تريد حذف هذه المجموعة نهائيًا؟", "remove_collection": "هل أنت متأكد أنك تريد حذف هذه المجموعة نهائيًا؟",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "هل أنت متأكد أنك تريد مزامنة مساحة العمل هذه؟" "sync": "هل أنت متأكد أنك تريد مزامنة مساحة العمل هذه؟"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "رأس {count}", "header": "رأس {count}",
"message": "الرسالة {count}", "message": "الرسالة {count}",
@@ -192,17 +204,31 @@
"create_new": "انشاء بيئة جديدة", "create_new": "انشاء بيئة جديدة",
"created": "Environment created", "created": "Environment created",
"deleted": "حذف بيئة العمل", "deleted": "حذف بيئة العمل",
"duplicated": "Environment duplicated",
"edit": "تحرير البيئة", "edit": "تحرير البيئة",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "الرجاء تقديم اسم صالح للبيئة", "invalid_name": "الرجاء تقديم اسم صالح للبيئة",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "بيئة جديدة", "new": "بيئة جديدة",
"no_active_environment": "No active environment",
"no_environment": "لا بيئة", "no_environment": "لا بيئة",
"no_environment_description": "لم يتم اختيار أي بيئة عمل. اختر ما تريد فعله بالمتغيرات التالية.", "no_environment_description": "لم يتم اختيار أي بيئة عمل. اختر ما تريد فعله بالمتغيرات التالية.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "حدد البيئة", "select": "حدد البيئة",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "البيئات", "title": "البيئات",
"updated": "تحديث بيئة العمل", "updated": "تحديث بيئة العمل",
"value": "Value",
"variable": "Variable",
"variable_list": "قائمة متغيرة" "variable_list": "قائمة متغيرة"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "لا مدة", "no_duration": "لا مدة",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "تعذر تنفيذ نص الطلب المسبق", "script_fail": "تعذر تنفيذ نص الطلب المسبق",
"something_went_wrong": "هناك خطأ ما", "something_went_wrong": "هناك خطأ ما",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "تمت إعادة تسمية المجلد" "renamed": "تمت إعادة تسمية المجلد"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "الطفرات", "mutations": "الطفرات",
"schema": "مخطط", "schema": "مخطط",
"subscriptions": "الاشتراكات" "subscriptions": "الاشتراكات",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "استيراد مجموعة من ملفHoppscotch Collections JSON file", "json_description": "استيراد مجموعة من ملفHoppscotch Collections JSON file",
"title": "يستورد" "title": "يستورد"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "تصيم عمودي", "column": "تصيم عمودي",
"name": "Layout", "name": "Layout",
"row": "تصميم افقي", "row": "تصميم افقي"
"zen_mode": "وضع Zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "الحمولة", "payload": "الحمولة",
"query": "استفسار", "query": "استفسار",
"raw_body": "نص طلب خام", "raw_body": "نص طلب خام",
"rename": "Rename Request",
"renamed": "تمت إعادة تسمية الطلب", "renamed": "تمت إعادة تسمية الطلب",
"run": "يركض", "run": "يركض",
"save": "يحفظ", "save": "يحفظ",
@@ -425,6 +480,7 @@
"saved": "تم حفظ الطلب", "saved": "تم حفظ الطلب",
"share": "يشارك", "share": "يشارك",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "طلب", "title": "طلب",
"type": "نوع الطلب", "type": "نوع الطلب",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "هذا هو اسم العرض الخاص بك.", "account_name_description": "هذا هو اسم العرض الخاص بك.",
"background": "خلفية", "background": "خلفية",
"black_mode": "أسود", "black_mode": "أسود",
"change_font_size": "تغيير حجم الخط",
"choose_language": "اختر اللغة", "choose_language": "اختر اللغة",
"dark_mode": "داكن", "dark_mode": "داكن",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "ملحقات", "extensions": "ملحقات",
"extensions_use_toggle": "استخدم امتداد المتصفح لإرسال الطلبات (إن وجدت)", "extensions_use_toggle": "استخدم امتداد المتصفح لإرسال الطلبات (إن وجدت)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "حجم الخط",
"font_size_large": "كبير",
"font_size_medium": "متوسط",
"font_size_small": "صغير",
"interceptor": "المعترض", "interceptor": "المعترض",
"interceptor_description": "البرامج الوسيطة بين التطبيق وواجهات برمجة التطبيقات.", "interceptor_description": "البرامج الوسيطة بين التطبيق وواجهات برمجة التطبيقات.",
"language": "لغة", "language": "لغة",
@@ -540,19 +591,27 @@
"settings": "انتقل إلى صفحة الإعدادات", "settings": "انتقل إلى صفحة الإعدادات",
"title": "التنقل" "title": "التنقل"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "نسخ ارتباط الطلب", "copy_request_link": "نسخ ارتباط الطلب",
"delete_method": "حدد طريقة الحذف", "delete_method": "حدد طريقة الحذف",
"get_method": "حدد طريقة GET", "get_method": "حدد طريقة GET",
"head_method": "حدد طريقة HEAD", "head_method": "حدد طريقة HEAD",
"import_curl": "Import cURL",
"method": "طريقة", "method": "طريقة",
"next_method": "حدد الطريقة التالية", "next_method": "حدد الطريقة التالية",
"post_method": "حدد طريقة POST", "post_method": "حدد طريقة POST",
"previous_method": "حدد الطريقة السابقة", "previous_method": "حدد الطريقة السابقة",
"put_method": "حدد طريقة PUT", "put_method": "حدد طريقة PUT",
"rename": "Rename Request",
"reset_request": "طلب إعادة التعيين", "reset_request": "طلب إعادة التعيين",
"save_request": "Save Request",
"save_to_collections": "حفظ في المجموعات", "save_to_collections": "حفظ في المجموعات",
"send_request": "ارسل طلب", "send_request": "ارسل طلب",
"show_code": "Generate code snippet",
"title": "طلب" "title": "طلب"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "سجل", "log": "سجل",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "نوع الحدث", "event_type": "نوع الحدث",
"log": "سجل", "log": "سجل",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "تفويض", "authorization": "تفويض",
"body": "الجسم", "body": "الجسم",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "المجموعات", "collections": "المجموعات",
"documentation": "توثيق", "documentation": "توثيق",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "الرؤوس", "headers": "الرؤوس",
"history": "تاريخ", "history": "تاريخ",

View File

@@ -5,6 +5,7 @@
"choose_file": "Triar un fitxer", "choose_file": "Triar un fitxer",
"clear": "Netejar", "clear": "Netejar",
"clear_all": "Neteja-ho tot", "clear_all": "Neteja-ho tot",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Connectar", "connect": "Connectar",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Enganxar", "paste": "Enganxar",
"prettify": "Fes-ho bonic", "prettify": "Fes-ho bonic",
"remove": "Eliminar", "remove": "Eliminar",
"rename": "Rename",
"restore": "Restaurar", "restore": "Restaurar",
"save": "Guardar", "save": "Guardar",
"scroll_to_bottom": "Desplaceu-vos cap avall", "scroll_to_bottom": "Desplaceu-vos cap avall",
@@ -77,6 +79,8 @@
"search": "Cercar", "search": "Cercar",
"share": "Compartir", "share": "Compartir",
"shortcuts": "Dreceres", "shortcuts": "Dreceres",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Destacar", "spotlight": "Destacar",
"status": "Estat", "status": "Estat",
"status_description": "Comproveu l'estat de la web", "status_description": "Comproveu l'estat de la web",
@@ -131,12 +135,15 @@
"renamed": "S'ha canviat el nom de la col·lecció", "renamed": "S'ha canviat el nom de la col·lecció",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Guardar com", "save_as": "Guardar com",
"save_to_collection": "Save to Collection",
"select": "Seleccionar una col·lecció", "select": "Seleccionar una col·lecció",
"select_location": "Seleccionar la ubicació", "select_location": "Seleccionar la ubicació",
"select_team": "Seleccionar un equip", "select_team": "Seleccionar un equip",
"team_collections": "Col·leccions per equips" "team_collections": "Col·leccions per equips"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Està segur que vol deixar aquest equip?", "exit_team": "Està segur que vol deixar aquest equip?",
"logout": "Està segur que vol tancar la sessió?", "logout": "Està segur que vol tancar la sessió?",
"remove_collection": "Està segur que vol suprimir permanentment aquesta col·lecció?", "remove_collection": "Està segur que vol suprimir permanentment aquesta col·lecció?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Està segur que vol sincronitzar aquest espai de treball?" "sync": "Està segur que vol sincronitzar aquest espai de treball?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Capçalera {count}", "header": "Capçalera {count}",
"message": "Missatges {count}", "message": "Missatges {count}",
@@ -192,17 +204,31 @@
"create_new": "Crea un entorn nou", "create_new": "Crea un entorn nou",
"created": "Etorn creat", "created": "Etorn creat",
"deleted": "Entorn eliminat", "deleted": "Entorn eliminat",
"duplicated": "Environment duplicated",
"edit": "Editar l'entorn", "edit": "Editar l'entorn",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Proporcioneu un nom vàlid per a l'entorn", "invalid_name": "Proporcioneu un nom vàlid per a l'entorn",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "Les variables d'entorn niuades estan limitades a 10 nivells", "nested_overflow": "Les variables d'entorn niuades estan limitades a 10 nivells",
"new": "Nou entorn", "new": "Nou entorn",
"no_active_environment": "No active environment",
"no_environment": "Sense entorn", "no_environment": "Sense entorn",
"no_environment_description": "No s'ha seleccionat cap entorn. Trieu què voleu fer amb les variables següents.", "no_environment_description": "No s'ha seleccionat cap entorn. Trieu què voleu fer amb les variables següents.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Seleccioneu un entorn", "select": "Seleccioneu un entorn",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Entorns", "title": "Entorns",
"updated": "Entorn actualitzat", "updated": "Entorn actualitzat",
"value": "Value",
"variable": "Variable",
"variable_list": "Llista de variables" "variable_list": "Llista de variables"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Sense durada", "no_duration": "Sense durada",
"no_results_found": "No s'ha trobat cap coincidència", "no_results_found": "No s'ha trobat cap coincidència",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "No s'ha pogut executar l'script de sol·licitud prèvia", "script_fail": "No s'ha pogut executar l'script de sol·licitud prèvia",
"something_went_wrong": "Alguna cosa ha anat malament", "something_went_wrong": "Alguna cosa ha anat malament",
"test_script_fail": "No s'ha pogut executar l'script posterior a la sol·licitud" "test_script_fail": "No s'ha pogut executar l'script posterior a la sol·licitud"
@@ -251,9 +278,13 @@
"renamed": "S'ha canviat el nom de la carpeta" "renamed": "S'ha canviat el nom de la carpeta"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutacions", "mutations": "Mutacions",
"schema": "Esquema", "schema": "Esquema",
"subscriptions": "Subscripcions" "subscriptions": "Subscripcions",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Importar col·leccions des d'un fitxer JSON de col·leccions Hoppscotch", "json_description": "Importar col·leccions des d'un fitxer JSON de col·leccions Hoppscotch",
"title": "Importació" "title": "Importació"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Amagar o Ampliar Col·leccions", "collapse_collection": "Amagar o Ampliar Col·leccions",
"collapse_sidebar": "Amagar o Ampliar la barra lateral", "collapse_sidebar": "Amagar o Ampliar la barra lateral",
"column": "Distribució vertical", "column": "Distribució vertical",
"name": "Distribució", "name": "Distribució",
"row": "Distribució horitzontal", "row": "Distribució horitzontal"
"zen_mode": "Mode Zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Payload", "payload": "Payload",
"query": "Consulta", "query": "Consulta",
"raw_body": "Cos de sol·licitud sense processar", "raw_body": "Cos de sol·licitud sense processar",
"rename": "Rename Request",
"renamed": "S'ha canviat el nom de la sol·licitud", "renamed": "S'ha canviat el nom de la sol·licitud",
"run": "Executar", "run": "Executar",
"save": "Guardar", "save": "Guardar",
@@ -425,6 +480,7 @@
"saved": "S'ha desat la sol·licitud", "saved": "S'ha desat la sol·licitud",
"share": "Compartir", "share": "Compartir",
"share_description": "Comparteix Hoppscotch amb els teus amics", "share_description": "Comparteix Hoppscotch amb els teus amics",
"stop": "Stop",
"title": "Sol·licitud", "title": "Sol·licitud",
"type": "Tipus de sol·licitud", "type": "Tipus de sol·licitud",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Aquest és el vostre nom d'exposició", "account_name_description": "Aquest és el vostre nom d'exposició",
"background": "Fons", "background": "Fons",
"black_mode": "Negre", "black_mode": "Negre",
"change_font_size": "Canvia la mida de la lletra",
"choose_language": "Tria l'idioma", "choose_language": "Tria l'idioma",
"dark_mode": "Fosc", "dark_mode": "Fosc",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Extensions", "extensions": "Extensions",
"extensions_use_toggle": "Utilitzeu l'extensió del navegador per enviar sol·licituds (si n'hi ha)", "extensions_use_toggle": "Utilitzeu l'extensió del navegador per enviar sol·licituds (si n'hi ha)",
"follow": "Segueix-nos", "follow": "Segueix-nos",
"font_size": "Mida de la font",
"font_size_large": "Gran",
"font_size_medium": "Mitjà",
"font_size_small": "Petit",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware entre aplicació i APIs.", "interceptor_description": "Middleware entre aplicació i APIs.",
"language": "Llenguatge", "language": "Llenguatge",
@@ -540,19 +591,27 @@
"settings": "Anar a la pàgina de Configuració", "settings": "Anar a la pàgina de Configuració",
"title": "Navegació" "title": "Navegació"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copiar l'enllaç de la sol·licitud", "copy_request_link": "Copiar l'enllaç de la sol·licitud",
"delete_method": "Seleccionar el mètode DELETE", "delete_method": "Seleccionar el mètode DELETE",
"get_method": "Seleccionar el mètode GET", "get_method": "Seleccionar el mètode GET",
"head_method": "Seleccionar el mètode HEAD", "head_method": "Seleccionar el mètode HEAD",
"import_curl": "Import cURL",
"method": "Mètode", "method": "Mètode",
"next_method": "Seleccionar mètode Següent", "next_method": "Seleccionar mètode Següent",
"post_method": "Seleccionar mètode POST", "post_method": "Seleccionar mètode POST",
"previous_method": "Seleccionar mètode Anterior", "previous_method": "Seleccionar mètode Anterior",
"put_method": "Seleccionar mètode PUT", "put_method": "Seleccionar mètode PUT",
"rename": "Rename Request",
"reset_request": "Sol·licitud de restabliment", "reset_request": "Sol·licitud de restabliment",
"save_request": "Save Request",
"save_to_collections": "Guardar a les col·leccions", "save_to_collections": "Guardar a les col·leccions",
"send_request": "Enviar sol.licitud", "send_request": "Enviar sol.licitud",
"show_code": "Generate code snippet",
"title": "Sol·licitud" "title": "Sol·licitud"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Registre", "log": "Registre",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tipus d'esdeveniment", "event_type": "Tipus d'esdeveniment",
"log": "Registre", "log": "Registre",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorització", "authorization": "Autorització",
"body": "Cos", "body": "Cos",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Col·leccions", "collections": "Col·leccions",
"documentation": "Documentació", "documentation": "Documentació",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Capçaleres", "headers": "Capçaleres",
"history": "Historial", "history": "Historial",

View File

@@ -5,6 +5,7 @@
"choose_file": "选择文件", "choose_file": "选择文件",
"clear": "清除", "clear": "清除",
"clear_all": "全部清除", "clear_all": "全部清除",
"clear_history": "Clear all History",
"close": "关闭", "close": "关闭",
"connect": "连接", "connect": "连接",
"connecting": "连接中", "connecting": "连接中",
@@ -31,6 +32,7 @@
"paste": "粘贴", "paste": "粘贴",
"prettify": "美化", "prettify": "美化",
"remove": "移除", "remove": "移除",
"rename": "Rename",
"restore": "恢复", "restore": "恢复",
"save": "保存", "save": "保存",
"scroll_to_bottom": "滚动至底部", "scroll_to_bottom": "滚动至底部",
@@ -77,6 +79,8 @@
"search": "搜索", "search": "搜索",
"share": "分享", "share": "分享",
"shortcuts": "快捷方式", "shortcuts": "快捷方式",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "聚光灯", "spotlight": "聚光灯",
"status": "状态", "status": "状态",
"status_description": "检查网站状态", "status_description": "检查网站状态",
@@ -131,12 +135,15 @@
"renamed": "集合已更名", "renamed": "集合已更名",
"request_in_use": "请求正在使用中", "request_in_use": "请求正在使用中",
"save_as": "另存为", "save_as": "另存为",
"save_to_collection": "Save to Collection",
"select": "选择一个集合", "select": "选择一个集合",
"select_location": "选择位置", "select_location": "选择位置",
"select_team": "选择一个团队", "select_team": "选择一个团队",
"team_collections": "团队集合" "team_collections": "团队集合"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "你确定要离开此团队吗?", "exit_team": "你确定要离开此团队吗?",
"logout": "你确定要登出吗?", "logout": "你确定要登出吗?",
"remove_collection": "你确定要永久删除该集合吗?", "remove_collection": "你确定要永久删除该集合吗?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "你想保存在此标签页中所作的修改吗?", "save_unsaved_tab": "你想保存在此标签页中所作的修改吗?",
"sync": "您确定要同步该工作区吗?" "sync": "您确定要同步该工作区吗?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "请求头 {count}", "header": "请求头 {count}",
"message": "消息 {count}", "message": "消息 {count}",
@@ -192,17 +204,31 @@
"create_new": "创建新环境", "create_new": "创建新环境",
"created": "环境已创建", "created": "环境已创建",
"deleted": "环境已删除", "deleted": "环境已删除",
"duplicated": "Environment duplicated",
"edit": "编辑环境", "edit": "编辑环境",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "请提供有效的环境名称", "invalid_name": "请提供有效的环境名称",
"list": "Environment variables",
"my_environments": "我的环境", "my_environments": "我的环境",
"name": "Name",
"nested_overflow": "环境嵌套深度超过限制10层", "nested_overflow": "环境嵌套深度超过限制10层",
"new": "新建环境", "new": "新建环境",
"no_active_environment": "No active environment",
"no_environment": "无环境", "no_environment": "无环境",
"no_environment_description": "没有选择环境。选择如何处理以下变量。", "no_environment_description": "没有选择环境。选择如何处理以下变量。",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "选择环境", "select": "选择环境",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "团队环境", "team_environments": "团队环境",
"title": "环境", "title": "环境",
"updated": "环境已更新", "updated": "环境已更新",
"value": "Value",
"variable": "Variable",
"variable_list": "变量列表" "variable_list": "变量列表"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "无持续时间", "no_duration": "无持续时间",
"no_results_found": "找不到结果", "no_results_found": "找不到结果",
"page_not_found": "找不到此頁面", "page_not_found": "找不到此頁面",
"proxy_error": "Proxy error",
"script_fail": "无法执行预请求脚本", "script_fail": "无法执行预请求脚本",
"something_went_wrong": "发生了一些错误", "something_went_wrong": "发生了一些错误",
"test_script_fail": "无法执行请求脚本" "test_script_fail": "无法执行请求脚本"
@@ -251,9 +278,13 @@
"renamed": "文件夹已更名" "renamed": "文件夹已更名"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "变更", "mutations": "变更",
"schema": "模式", "schema": "模式",
"subscriptions": "订阅" "subscriptions": "订阅",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "时间", "time": "时间",
@@ -307,13 +338,36 @@
"json_description": "从 Hoppscotch 的集合文件导入JSON", "json_description": "从 Hoppscotch 的集合文件导入JSON",
"title": "导入" "title": "导入"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "折叠/展开集合", "collapse_collection": "折叠/展开集合",
"collapse_sidebar": "折叠/展开边栏", "collapse_sidebar": "折叠/展开边栏",
"column": "垂直布局", "column": "垂直布局",
"name": "布局", "name": "布局",
"row": "水平布局", "row": "水平布局"
"zen_mode": "ZEN 模式"
}, },
"modal": { "modal": {
"close_unsaved_tab": "有未保存的变更", "close_unsaved_tab": "有未保存的变更",
@@ -418,6 +472,7 @@
"payload": "负载", "payload": "负载",
"query": "查询", "query": "查询",
"raw_body": "原始请求体", "raw_body": "原始请求体",
"rename": "Rename Request",
"renamed": "请求重命名", "renamed": "请求重命名",
"run": "运行", "run": "运行",
"save": "保存", "save": "保存",
@@ -425,6 +480,7 @@
"saved": "请求已保存", "saved": "请求已保存",
"share": "分享", "share": "分享",
"share_description": "分享 Hoppscotch 给你的朋友", "share_description": "分享 Hoppscotch 给你的朋友",
"stop": "Stop",
"title": "请求", "title": "请求",
"type": "请求类型", "type": "请求类型",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "这是您的显示名称。", "account_name_description": "这是您的显示名称。",
"background": "背景", "background": "背景",
"black_mode": "黑色", "black_mode": "黑色",
"change_font_size": "更改字体大小",
"choose_language": "选择语言", "choose_language": "选择语言",
"dark_mode": "暗色", "dark_mode": "暗色",
"delete_account": "刪除账号", "delete_account": "刪除账号",
@@ -472,10 +527,6 @@
"extensions": "扩展", "extensions": "扩展",
"extensions_use_toggle": "使用浏览器扩展发送请求(如果存在)", "extensions_use_toggle": "使用浏览器扩展发送请求(如果存在)",
"follow": "关注我们", "follow": "关注我们",
"font_size": "字体大小",
"font_size_large": "大",
"font_size_medium": "中",
"font_size_small": "小",
"interceptor": "拦截器", "interceptor": "拦截器",
"interceptor_description": "应用程序和 API 之间的中间件。", "interceptor_description": "应用程序和 API 之间的中间件。",
"language": "语言", "language": "语言",
@@ -540,19 +591,27 @@
"settings": "前往设置页面", "settings": "前往设置页面",
"title": "导航" "title": "导航"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "复制请求链接", "copy_request_link": "复制请求链接",
"delete_method": "选择 DELETE 方法", "delete_method": "选择 DELETE 方法",
"get_method": "选择 GET 方法", "get_method": "选择 GET 方法",
"head_method": "选择 HEAD 方法", "head_method": "选择 HEAD 方法",
"import_curl": "Import cURL",
"method": "方法", "method": "方法",
"next_method": "选择下一个方法", "next_method": "选择下一个方法",
"post_method": "选择 POST 方法", "post_method": "选择 POST 方法",
"previous_method": "选择上一个方法", "previous_method": "选择上一个方法",
"put_method": "选择 PUT 方法", "put_method": "选择 PUT 方法",
"rename": "Rename Request",
"reset_request": "重置请求", "reset_request": "重置请求",
"save_request": "Save Request",
"save_to_collections": "保存到集合", "save_to_collections": "保存到集合",
"send_request": "发送请求", "send_request": "发送请求",
"show_code": "Generate code snippet",
"title": "请求" "title": "请求"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "日志", "log": "日志",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "事件类型", "event_type": "事件类型",
"log": "日志", "log": "日志",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "授权", "authorization": "授权",
"body": "请求体", "body": "请求体",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "集合", "collections": "集合",
"documentation": "帮助文档", "documentation": "帮助文档",
"duplicate": "Duplicate Tab",
"environments": "环境", "environments": "环境",
"headers": "请求头", "headers": "请求头",
"history": "历史记录", "history": "历史记录",

View File

@@ -5,6 +5,7 @@
"choose_file": "Vyberte soubor", "choose_file": "Vyberte soubor",
"clear": "Průhledná", "clear": "Průhledná",
"clear_all": "Vymazat vše", "clear_all": "Vymazat vše",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Připojit", "connect": "Připojit",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Prettify", "prettify": "Prettify",
"remove": "Odstranit", "remove": "Odstranit",
"rename": "Rename",
"restore": "Obnovit", "restore": "Obnovit",
"save": "Uložit", "save": "Uložit",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Vyhledávání", "search": "Vyhledávání",
"share": "Podíl", "share": "Podíl",
"shortcuts": "Klávesové zkratky", "shortcuts": "Klávesové zkratky",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Reflektor", "spotlight": "Reflektor",
"status": "Postavení", "status": "Postavení",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Sbírka přejmenována", "renamed": "Sbírka přejmenována",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Uložit jako", "save_as": "Uložit jako",
"save_to_collection": "Save to Collection",
"select": "Vyberte sbírku", "select": "Vyberte sbírku",
"select_location": "Vyberte umístění", "select_location": "Vyberte umístění",
"select_team": "Vyberte tým", "select_team": "Vyberte tým",
"team_collections": "Týmové sbírky" "team_collections": "Týmové sbírky"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Opravdu se chcete odhlásit?", "logout": "Opravdu se chcete odhlásit?",
"remove_collection": "Opravdu chcete tuto sbírku trvale smazat?", "remove_collection": "Opravdu chcete tuto sbírku trvale smazat?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Opravdu chcete synchronizovat tento pracovní prostor?" "sync": "Opravdu chcete synchronizovat tento pracovní prostor?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Záhlaví {count}", "header": "Záhlaví {count}",
"message": "Zpráva {count}", "message": "Zpráva {count}",
@@ -192,17 +204,31 @@
"create_new": "Vytvořit nové prostředí", "create_new": "Vytvořit nové prostředí",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Upravit prostředí", "edit": "Upravit prostředí",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Zadejte platný název prostředí", "invalid_name": "Zadejte platný název prostředí",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nové prostředí", "new": "Nové prostředí",
"no_active_environment": "No active environment",
"no_environment": "Žádné prostředí", "no_environment": "Žádné prostředí",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Vyberte prostředí", "select": "Vyberte prostředí",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Prostředí", "title": "Prostředí",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Seznam proměnných" "variable_list": "Seznam proměnných"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Žádné trvání", "no_duration": "Žádné trvání",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Skript předběžného požadavku nelze spustit", "script_fail": "Skript předběžného požadavku nelze spustit",
"something_went_wrong": "Něco se pokazilo", "something_went_wrong": "Něco se pokazilo",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Složka přejmenována" "renamed": "Složka přejmenována"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutace", "mutations": "Mutace",
"schema": "Schéma", "schema": "Schéma",
"subscriptions": "Předplatné" "subscriptions": "Předplatné",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Import" "title": "Import"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zenový režim"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Užitečné zatížení", "payload": "Užitečné zatížení",
"query": "Dotaz", "query": "Dotaz",
"raw_body": "Raw Request Body", "raw_body": "Raw Request Body",
"rename": "Rename Request",
"renamed": "Žádost přejmenována", "renamed": "Žádost přejmenována",
"run": "Běh", "run": "Běh",
"save": "Uložit", "save": "Uložit",
@@ -425,6 +480,7 @@
"saved": "Žádost uložena", "saved": "Žádost uložena",
"share": "Podíl", "share": "Podíl",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Žádost", "title": "Žádost",
"type": "Typ požadavku", "type": "Typ požadavku",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Toto je vaše zobrazované jméno.", "account_name_description": "Toto je vaše zobrazované jméno.",
"background": "Pozadí", "background": "Pozadí",
"black_mode": "Černá", "black_mode": "Černá",
"change_font_size": "Změnit velikost písma",
"choose_language": "Vyber jazyk", "choose_language": "Vyber jazyk",
"dark_mode": "Temný", "dark_mode": "Temný",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Rozšíření", "extensions": "Rozšíření",
"extensions_use_toggle": "K odeslání požadavků použijte rozšíření prohlížeče (je -li k dispozici)", "extensions_use_toggle": "K odeslání požadavků použijte rozšíření prohlížeče (je -li k dispozici)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Velikost písma",
"font_size_large": "Velký",
"font_size_medium": "Střední",
"font_size_small": "Malý",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware mezi aplikací a API.", "interceptor_description": "Middleware mezi aplikací a API.",
"language": "Jazyk", "language": "Jazyk",
@@ -540,19 +591,27 @@
"settings": "Přejděte na stránku Nastavení", "settings": "Přejděte na stránku Nastavení",
"title": "Navigace" "title": "Navigace"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopírovat požadavek na odkaz", "copy_request_link": "Kopírovat požadavek na odkaz",
"delete_method": "Vyberte metodu ODSTRANIT", "delete_method": "Vyberte metodu ODSTRANIT",
"get_method": "Vyberte metodu ZÍSKAT", "get_method": "Vyberte metodu ZÍSKAT",
"head_method": "Vyberte metodu HEAD", "head_method": "Vyberte metodu HEAD",
"import_curl": "Import cURL",
"method": "Metoda", "method": "Metoda",
"next_method": "Vyberte Další metoda", "next_method": "Vyberte Další metoda",
"post_method": "Vyberte metodu POST", "post_method": "Vyberte metodu POST",
"previous_method": "Vyberte předchozí metodu", "previous_method": "Vyberte předchozí metodu",
"put_method": "Vyberte metodu PUT", "put_method": "Vyberte metodu PUT",
"rename": "Rename Request",
"reset_request": "Resetovat požadavek", "reset_request": "Resetovat požadavek",
"save_request": "Save Request",
"save_to_collections": "Uložit do sbírek", "save_to_collections": "Uložit do sbírek",
"send_request": "Poslat žádost", "send_request": "Poslat žádost",
"show_code": "Generate code snippet",
"title": "Žádost" "title": "Žádost"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Záznam", "log": "Záznam",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Typ události", "event_type": "Typ události",
"log": "Záznam", "log": "Záznam",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Povolení", "authorization": "Povolení",
"body": "Tělo", "body": "Tělo",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Sbírky", "collections": "Sbírky",
"documentation": "Dokumentace", "documentation": "Dokumentace",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Záhlaví", "headers": "Záhlaví",
"history": "Dějiny", "history": "Dějiny",

View File

@@ -5,6 +5,7 @@
"choose_file": "Vælg en fil", "choose_file": "Vælg en fil",
"clear": "Klar", "clear": "Klar",
"clear_all": "Slet alt", "clear_all": "Slet alt",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Opret forbindelse", "connect": "Opret forbindelse",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Prettify", "prettify": "Prettify",
"remove": "Fjerne", "remove": "Fjerne",
"rename": "Rename",
"restore": "Gendan", "restore": "Gendan",
"save": "Gemme", "save": "Gemme",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Søg", "search": "Søg",
"share": "Del", "share": "Del",
"shortcuts": "Genveje", "shortcuts": "Genveje",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Spotlight", "spotlight": "Spotlight",
"status": "Status", "status": "Status",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Samling omdøbt", "renamed": "Samling omdøbt",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Gem som", "save_as": "Gem som",
"save_to_collection": "Save to Collection",
"select": "Vælg en samling", "select": "Vælg en samling",
"select_location": "Vælg placering", "select_location": "Vælg placering",
"select_team": "Vælg et hold", "select_team": "Vælg et hold",
"team_collections": "Teamsamlinger" "team_collections": "Teamsamlinger"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Er du sikker på, at du vil logge af?", "logout": "Er du sikker på, at du vil logge af?",
"remove_collection": "Er du sikker på, at du vil slette denne samling permanent?", "remove_collection": "Er du sikker på, at du vil slette denne samling permanent?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Er du sikker på, at du vil synkronisere dette arbejdsområde?" "sync": "Er du sikker på, at du vil synkronisere dette arbejdsområde?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Overskrift {count}", "header": "Overskrift {count}",
"message": "Besked {count}", "message": "Besked {count}",
@@ -192,17 +204,31 @@
"create_new": "Skab nyt miljø", "create_new": "Skab nyt miljø",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Rediger miljø", "edit": "Rediger miljø",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Angiv et gyldigt navn på miljøet", "invalid_name": "Angiv et gyldigt navn på miljøet",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nyt miljø", "new": "Nyt miljø",
"no_active_environment": "No active environment",
"no_environment": "Intet miljø", "no_environment": "Intet miljø",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Vælg miljø", "select": "Vælg miljø",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Miljøer", "title": "Miljøer",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Variabel liste" "variable_list": "Variabel liste"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Ingen varighed", "no_duration": "Ingen varighed",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Kunne ikke udføre pre-request script", "script_fail": "Kunne ikke udføre pre-request script",
"something_went_wrong": "Noget gik galt", "something_went_wrong": "Noget gik galt",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Mappen omdøbt" "renamed": "Mappen omdøbt"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutationer", "mutations": "Mutationer",
"schema": "Skema", "schema": "Skema",
"subscriptions": "Abonnementer" "subscriptions": "Abonnementer",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Importere" "title": "Importere"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zen -tilstand"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Nyttelast", "payload": "Nyttelast",
"query": "Forespørgsel", "query": "Forespørgsel",
"raw_body": "Raw Request Body", "raw_body": "Raw Request Body",
"rename": "Rename Request",
"renamed": "Anmodning omdøbt", "renamed": "Anmodning omdøbt",
"run": "Løb", "run": "Løb",
"save": "Gemme", "save": "Gemme",
@@ -425,6 +480,7 @@
"saved": "Anmodning gemt", "saved": "Anmodning gemt",
"share": "Del", "share": "Del",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Anmodning", "title": "Anmodning",
"type": "Anmodningstype", "type": "Anmodningstype",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Dette er dit visningsnavn.", "account_name_description": "Dette er dit visningsnavn.",
"background": "Baggrund", "background": "Baggrund",
"black_mode": "Sort", "black_mode": "Sort",
"change_font_size": "Skift skriftstørrelse",
"choose_language": "Vælg sprog", "choose_language": "Vælg sprog",
"dark_mode": "Mørk", "dark_mode": "Mørk",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Udvidelser", "extensions": "Udvidelser",
"extensions_use_toggle": "Brug browserudvidelsen til at sende anmodninger (hvis de findes)", "extensions_use_toggle": "Brug browserudvidelsen til at sende anmodninger (hvis de findes)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Skriftstørrelse",
"font_size_large": "Stor",
"font_size_medium": "Medium",
"font_size_small": "Lille",
"interceptor": "Aflytter", "interceptor": "Aflytter",
"interceptor_description": "Middleware mellem applikation og API'er.", "interceptor_description": "Middleware mellem applikation og API'er.",
"language": "Sprog", "language": "Sprog",
@@ -540,19 +591,27 @@
"settings": "Gå til siden Indstillinger", "settings": "Gå til siden Indstillinger",
"title": "Navigation" "title": "Navigation"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopiér anmodningslink", "copy_request_link": "Kopiér anmodningslink",
"delete_method": "Vælg SLET metode", "delete_method": "Vælg SLET metode",
"get_method": "Vælg GET -metode", "get_method": "Vælg GET -metode",
"head_method": "Vælg HEAD -metode", "head_method": "Vælg HEAD -metode",
"import_curl": "Import cURL",
"method": "Metode", "method": "Metode",
"next_method": "Vælg Næste metode", "next_method": "Vælg Næste metode",
"post_method": "Vælg POST -metode", "post_method": "Vælg POST -metode",
"previous_method": "Vælg Forrige metode", "previous_method": "Vælg Forrige metode",
"put_method": "Vælg PUT -metode", "put_method": "Vælg PUT -metode",
"rename": "Rename Request",
"reset_request": "Nulstil anmodning", "reset_request": "Nulstil anmodning",
"save_request": "Save Request",
"save_to_collections": "Gem i samlinger", "save_to_collections": "Gem i samlinger",
"send_request": "Send anmodning", "send_request": "Send anmodning",
"show_code": "Generate code snippet",
"title": "Anmodning" "title": "Anmodning"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Log", "log": "Log",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Begivenhedstype", "event_type": "Begivenhedstype",
"log": "Log", "log": "Log",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Bemyndigelse", "authorization": "Bemyndigelse",
"body": "Legeme", "body": "Legeme",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Samlinger", "collections": "Samlinger",
"documentation": "Dokumentation", "documentation": "Dokumentation",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Overskrifter", "headers": "Overskrifter",
"history": "Historie", "history": "Historie",

View File

@@ -5,6 +5,7 @@
"choose_file": "Datei auswählen", "choose_file": "Datei auswählen",
"clear": "Zurücksetzen", "clear": "Zurücksetzen",
"clear_all": "Alles zurücksetzen", "clear_all": "Alles zurücksetzen",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Verbinden", "connect": "Verbinden",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Einfügen", "paste": "Einfügen",
"prettify": "Verschönern", "prettify": "Verschönern",
"remove": "Entfernen", "remove": "Entfernen",
"rename": "Rename",
"restore": "Wiederherstellen", "restore": "Wiederherstellen",
"save": "Speichern", "save": "Speichern",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Suche", "search": "Suche",
"share": "Teilen", "share": "Teilen",
"shortcuts": "Verknüpfungen", "shortcuts": "Verknüpfungen",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Scheinwerfer", "spotlight": "Scheinwerfer",
"status": "Status", "status": "Status",
"status_description": "Überprüfe den Status der Webseite", "status_description": "Überprüfe den Status der Webseite",
@@ -131,12 +135,15 @@
"renamed": "Sammlung umbenannt", "renamed": "Sammlung umbenannt",
"request_in_use": "Anfrage wird ausgeführt", "request_in_use": "Anfrage wird ausgeführt",
"save_as": "Speichern als", "save_as": "Speichern als",
"save_to_collection": "Save to Collection",
"select": "Wähle eine Sammlung", "select": "Wähle eine Sammlung",
"select_location": "Ort auswählen", "select_location": "Ort auswählen",
"select_team": "Wähle ein Team", "select_team": "Wähle ein Team",
"team_collections": "Teamsammlungen" "team_collections": "Teamsammlungen"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Möchtest Du dieses Team wirklich verlassen?", "exit_team": "Möchtest Du dieses Team wirklich verlassen?",
"logout": "Möchtest Du Dich wirklich abmelden?", "logout": "Möchtest Du Dich wirklich abmelden?",
"remove_collection": "Möchtest Du diese Sammlung wirklich endgültig löschen?", "remove_collection": "Möchtest Du diese Sammlung wirklich endgültig löschen?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Möchtest Du diesen Arbeitsbereich wirklich synchronisieren?" "sync": "Möchtest Du diesen Arbeitsbereich wirklich synchronisieren?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Header {count}", "header": "Header {count}",
"message": "Nachricht {count}", "message": "Nachricht {count}",
@@ -192,17 +204,31 @@
"create_new": "Neue Umgebung erstellen", "create_new": "Neue Umgebung erstellen",
"created": "Umgebung erzeugt", "created": "Umgebung erzeugt",
"deleted": "Umgebung löschen", "deleted": "Umgebung löschen",
"duplicated": "Environment duplicated",
"edit": "Umgebung bearbeiten", "edit": "Umgebung bearbeiten",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Bitte gib einen gültigen Namen für die Umgebung an", "invalid_name": "Bitte gib einen gültigen Namen für die Umgebung an",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "Verschachtelte Umgebungsvariablen sind limitert auf 10 Unterebenen", "nested_overflow": "Verschachtelte Umgebungsvariablen sind limitert auf 10 Unterebenen",
"new": "Neue Umgebung", "new": "Neue Umgebung",
"no_active_environment": "No active environment",
"no_environment": "Keine Umgebung", "no_environment": "Keine Umgebung",
"no_environment_description": "Es wurden keine Umgebungen ausgewählt. Wähle aus, was mit den untenstehenden Variablen geschehen soll.", "no_environment_description": "Es wurden keine Umgebungen ausgewählt. Wähle aus, was mit den untenstehenden Variablen geschehen soll.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Umgebung auswählen", "select": "Umgebung auswählen",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Umgebungen", "title": "Umgebungen",
"updated": "Umgebung aktualisiert", "updated": "Umgebung aktualisiert",
"value": "Value",
"variable": "Variable",
"variable_list": "Variablenliste" "variable_list": "Variablenliste"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Keine Dauer", "no_duration": "Keine Dauer",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Pre-Request-Skripte konnte nicht ausgeführt werden", "script_fail": "Pre-Request-Skripte konnte nicht ausgeführt werden",
"something_went_wrong": "Etwas ist schief gelaufen", "something_went_wrong": "Etwas ist schief gelaufen",
"test_script_fail": "Testskripts konnten nicht ausgeführt werden" "test_script_fail": "Testskripts konnten nicht ausgeführt werden"
@@ -251,9 +278,13 @@
"renamed": "Ordner umbenannt" "renamed": "Ordner umbenannt"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutationen", "mutations": "Mutationen",
"schema": "Schema", "schema": "Schema",
"subscriptions": "Abonnements" "subscriptions": "Abonnements",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Hoppscotch Sammlungsdatei (JSON) importieren", "json_description": "Hoppscotch Sammlungsdatei (JSON) importieren",
"title": "Importieren" "title": "Importieren"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Sammlungen ein- oder ausklappen", "collapse_collection": "Sammlungen ein- oder ausklappen",
"collapse_sidebar": "Seitenleiste ein- oder ausklappen", "collapse_sidebar": "Seitenleiste ein- oder ausklappen",
"column": "Vertikales Layout", "column": "Vertikales Layout",
"name": "Layout", "name": "Layout",
"row": "Horizontales Layout", "row": "Horizontales Layout"
"zen_mode": "Zen-Modus"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Nutzlast", "payload": "Nutzlast",
"query": "Anfrage", "query": "Anfrage",
"raw_body": "Roher Anfragetext", "raw_body": "Roher Anfragetext",
"rename": "Rename Request",
"renamed": "Anfrage umbenannt", "renamed": "Anfrage umbenannt",
"run": "Ausführen", "run": "Ausführen",
"save": "Speichern", "save": "Speichern",
@@ -425,6 +480,7 @@
"saved": "Anfrage gespeichert", "saved": "Anfrage gespeichert",
"share": "Teilen", "share": "Teilen",
"share_description": "Teile Hoppscotch mit Deinen Freunden", "share_description": "Teile Hoppscotch mit Deinen Freunden",
"stop": "Stop",
"title": "Anfrage", "title": "Anfrage",
"type": "Anfragetyp", "type": "Anfragetyp",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Dies ist Dein Anzeigename.", "account_name_description": "Dies ist Dein Anzeigename.",
"background": "Hintergrund", "background": "Hintergrund",
"black_mode": "Schwarz", "black_mode": "Schwarz",
"change_font_size": "Schriftgröße ändern",
"choose_language": "Sprache wählen", "choose_language": "Sprache wählen",
"dark_mode": "Dunkel", "dark_mode": "Dunkel",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Erweiterungen", "extensions": "Erweiterungen",
"extensions_use_toggle": "Verwende die Browsererweiterung, um Anfragen zu senden (falls vorhanden)", "extensions_use_toggle": "Verwende die Browsererweiterung, um Anfragen zu senden (falls vorhanden)",
"follow": "Folge uns", "follow": "Folge uns",
"font_size": "Schriftgröße",
"font_size_large": "Groß",
"font_size_medium": "Mittel",
"font_size_small": "Klein",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware zwischen Anwendung und APIs.", "interceptor_description": "Middleware zwischen Anwendung und APIs.",
"language": "Sprache", "language": "Sprache",
@@ -540,19 +591,27 @@
"settings": "Einstellungen öffnen", "settings": "Einstellungen öffnen",
"title": "Navigation" "title": "Navigation"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Anfragelink kopieren", "copy_request_link": "Anfragelink kopieren",
"delete_method": "DELETE-Methode auswählen", "delete_method": "DELETE-Methode auswählen",
"get_method": "GET-Methode auswählen", "get_method": "GET-Methode auswählen",
"head_method": "HEAD-Methode auswählen", "head_method": "HEAD-Methode auswählen",
"import_curl": "Import cURL",
"method": "Methode", "method": "Methode",
"next_method": "Nächste Methode auswählen", "next_method": "Nächste Methode auswählen",
"post_method": "POST-Methode auswählen", "post_method": "POST-Methode auswählen",
"previous_method": "Vorherige Methode auswählen", "previous_method": "Vorherige Methode auswählen",
"put_method": "PUT-Methode auswählen", "put_method": "PUT-Methode auswählen",
"rename": "Rename Request",
"reset_request": "Anfrage zurücksetzen", "reset_request": "Anfrage zurücksetzen",
"save_request": "Save Request",
"save_to_collections": "In Sammlungen speichern", "save_to_collections": "In Sammlungen speichern",
"send_request": "Anfrage senden", "send_request": "Anfrage senden",
"show_code": "Generate code snippet",
"title": "Anfrage" "title": "Anfrage"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Protokoll", "log": "Protokoll",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Ereignistyp", "event_type": "Ereignistyp",
"log": "Protokoll", "log": "Protokoll",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorisierung", "authorization": "Autorisierung",
"body": "Anfragekörper", "body": "Anfragekörper",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Sammlungen", "collections": "Sammlungen",
"documentation": "Dokumentation", "documentation": "Dokumentation",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Header", "headers": "Header",
"history": "Verlauf", "history": "Verlauf",

View File

@@ -5,6 +5,7 @@
"choose_file": "Επιλέξτε ένα αρχείο", "choose_file": "Επιλέξτε ένα αρχείο",
"clear": "Σαφή", "clear": "Σαφή",
"clear_all": "Τα καθαρίζω όλα", "clear_all": "Τα καθαρίζω όλα",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Συνδέω-συωδεομαι", "connect": "Συνδέω-συωδεομαι",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Ωραιοποιώ", "prettify": "Ωραιοποιώ",
"remove": "Αφαιρώ", "remove": "Αφαιρώ",
"rename": "Rename",
"restore": "Επαναφέρω", "restore": "Επαναφέρω",
"save": "Αποθηκεύσετε", "save": "Αποθηκεύσετε",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Αναζήτηση", "search": "Αναζήτηση",
"share": "Μερίδιο", "share": "Μερίδιο",
"shortcuts": "Συντομεύσεις", "shortcuts": "Συντομεύσεις",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Προβολέας θέατρου", "spotlight": "Προβολέας θέατρου",
"status": "Κατάσταση", "status": "Κατάσταση",
"status_description": "Ελέγξτε το status της Ιστοσελίδας", "status_description": "Ελέγξτε το status της Ιστοσελίδας",
@@ -131,12 +135,15 @@
"renamed": "Η συλλογή μετονομάστηκε", "renamed": "Η συλλογή μετονομάστηκε",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Αποθήκευση ως", "save_as": "Αποθήκευση ως",
"save_to_collection": "Save to Collection",
"select": "Επιλέξτε μια Συλλογή", "select": "Επιλέξτε μια Συλλογή",
"select_location": "Επιλέξτε τοποθεσία", "select_location": "Επιλέξτε τοποθεσία",
"select_team": "Επιλέξτε μια ομάδα", "select_team": "Επιλέξτε μια ομάδα",
"team_collections": "Συλλογές ομάδων" "team_collections": "Συλλογές ομάδων"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε?", "logout": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε?",
"remove_collection": "Είστε βέβαιοι ότι θέλετε να διαγράψετε οριστικά αυτήν τη συλλογή;", "remove_collection": "Είστε βέβαιοι ότι θέλετε να διαγράψετε οριστικά αυτήν τη συλλογή;",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Είστε βέβαιοι ότι θέλετε να συγχρονίσετε αυτόν τον χώρο εργασίας;" "sync": "Είστε βέβαιοι ότι θέλετε να συγχρονίσετε αυτόν τον χώρο εργασίας;"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Κεφαλίδα {count}", "header": "Κεφαλίδα {count}",
"message": "Μήνυμα {count}", "message": "Μήνυμα {count}",
@@ -192,17 +204,31 @@
"create_new": "Δημιουργήστε νέο περιβάλλον", "create_new": "Δημιουργήστε νέο περιβάλλον",
"created": "Το Περιβάλλον δημιουργήθηκε", "created": "Το Περιβάλλον δημιουργήθηκε",
"deleted": "Διαγραφή Περιβάλλοντος", "deleted": "Διαγραφή Περιβάλλοντος",
"duplicated": "Environment duplicated",
"edit": "Επεξεργασία Περιβάλλοντος", "edit": "Επεξεργασία Περιβάλλοντος",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Καταχωρίστε ένα έγκυρο όνομα για το περιβάλλον", "invalid_name": "Καταχωρίστε ένα έγκυρο όνομα για το περιβάλλον",
"list": "Environment variables",
"my_environments": "Τα Περιβάλλοντα μου", "my_environments": "Τα Περιβάλλοντα μου",
"name": "Name",
"nested_overflow": "Οι 'φωλιασμένες' μεταβλητές περιβάλλοντος είναι περιορισμένες σε 10 επίπεδα", "nested_overflow": "Οι 'φωλιασμένες' μεταβλητές περιβάλλοντος είναι περιορισμένες σε 10 επίπεδα",
"new": "Νέο Περιβάλλον", "new": "Νέο Περιβάλλον",
"no_active_environment": "No active environment",
"no_environment": "Χωρίς περιβάλλον", "no_environment": "Χωρίς περιβάλλον",
"no_environment_description": "Δέν επιλέχθηκε κάποιο περιβάλλον. Διαλέξτε τι θέλετε να κάνετε με τις παρακάτω μεταβλητές.", "no_environment_description": "Δέν επιλέχθηκε κάποιο περιβάλλον. Διαλέξτε τι θέλετε να κάνετε με τις παρακάτω μεταβλητές.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Επιλέξτε περιβάλλον", "select": "Επιλέξτε περιβάλλον",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Περιβάλλοντα Ομάδας", "team_environments": "Περιβάλλοντα Ομάδας",
"title": "Περιβάλλοντα", "title": "Περιβάλλοντα",
"updated": "Αναβάθμιση Περιβάλλοντος", "updated": "Αναβάθμιση Περιβάλλοντος",
"value": "Value",
"variable": "Variable",
"variable_list": "Λίστα μεταβλητών" "variable_list": "Λίστα μεταβλητών"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Χωρίς διάρκεια", "no_duration": "Χωρίς διάρκεια",
"no_results_found": "Δεν βρέθηκαν αντιστοιχίες", "no_results_found": "Δεν βρέθηκαν αντιστοιχίες",
"page_not_found": "Αυτή η σελίδα δεν βρέθηκε", "page_not_found": "Αυτή η σελίδα δεν βρέθηκε",
"proxy_error": "Proxy error",
"script_fail": "Δεν ήταν δυνατή η εκτέλεση του σεναρίου πριν από το αίτημα", "script_fail": "Δεν ήταν δυνατή η εκτέλεση του σεναρίου πριν από το αίτημα",
"something_went_wrong": "Κάτι πήγε στραβά", "something_went_wrong": "Κάτι πήγε στραβά",
"test_script_fail": "Δεν μπορεσε να εκτελεστεί το post-request script" "test_script_fail": "Δεν μπορεσε να εκτελεστεί το post-request script"
@@ -251,9 +278,13 @@
"renamed": "Ο φάκελος μετονομάστηκε" "renamed": "Ο φάκελος μετονομάστηκε"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Μεταλλάξεις", "mutations": "Μεταλλάξεις",
"schema": "Σχήμα", "schema": "Σχήμα",
"subscriptions": "Συνδρομές" "subscriptions": "Συνδρομές",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Εισαγωγή συλλογών αρχείο JSON Hoppscotch Collections", "json_description": "Εισαγωγή συλλογών αρχείο JSON Hoppscotch Collections",
"title": "Εισαγωγή" "title": "Εισαγωγή"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Σύμπτυξη ή επέκταση Συλλογών", "collapse_collection": "Σύμπτυξη ή επέκταση Συλλογών",
"collapse_sidebar": "Σύμπτυξη ή επέκταση του sidebar", "collapse_sidebar": "Σύμπτυξη ή επέκταση του sidebar",
"column": "Κατακόρυφη Διάταξη", "column": "Κατακόρυφη Διάταξη",
"name": "Διάταξη", "name": "Διάταξη",
"row": "Οριζόντια Διάταξη", "row": "Οριζόντια Διάταξη"
"zen_mode": "Λειτουργία Zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Φορτίο επί πληρωμή", "payload": "Φορτίο επί πληρωμή",
"query": "Ερώτηση", "query": "Ερώτηση",
"raw_body": "Σώμα Ακατέργαστου Αιτήματος", "raw_body": "Σώμα Ακατέργαστου Αιτήματος",
"rename": "Rename Request",
"renamed": "Το αίτημα μετονομάστηκε", "renamed": "Το αίτημα μετονομάστηκε",
"run": "Τρέξιμο", "run": "Τρέξιμο",
"save": "Σώσει", "save": "Σώσει",
@@ -425,6 +480,7 @@
"saved": "Το αίτημα αποθηκεύτηκε", "saved": "Το αίτημα αποθηκεύτηκε",
"share": "Μερίδιο", "share": "Μερίδιο",
"share_description": "Κοινοποίηση Hoppscotch στους φίλους σου", "share_description": "Κοινοποίηση Hoppscotch στους φίλους σου",
"stop": "Stop",
"title": "Αίτηση", "title": "Αίτηση",
"type": "Τύπος αιτήματος", "type": "Τύπος αιτήματος",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Αυτό είναι το εμφανιζόμενο όνομά σας.", "account_name_description": "Αυτό είναι το εμφανιζόμενο όνομά σας.",
"background": "Ιστορικό", "background": "Ιστορικό",
"black_mode": "Μαύρος", "black_mode": "Μαύρος",
"change_font_size": "Αλλαγή μεγέθους γραμματοσειράς",
"choose_language": "Διάλεξε γλώσσα", "choose_language": "Διάλεξε γλώσσα",
"dark_mode": "Σκοτάδι", "dark_mode": "Σκοτάδι",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Επεκτάσεις", "extensions": "Επεκτάσεις",
"extensions_use_toggle": "Χρησιμοποιήστε την επέκταση του προγράμματος περιήγησης για να στείλετε αιτήματα (εάν υπάρχουν)", "extensions_use_toggle": "Χρησιμοποιήστε την επέκταση του προγράμματος περιήγησης για να στείλετε αιτήματα (εάν υπάρχουν)",
"follow": "Ακολούθησε Μας", "follow": "Ακολούθησε Μας",
"font_size": "Μέγεθος γραμματοσειράς",
"font_size_large": "Μεγάλο",
"font_size_medium": "Μεσαίο",
"font_size_small": "Μικρό",
"interceptor": "Αναχαιτιστής", "interceptor": "Αναχαιτιστής",
"interceptor_description": "Middleware μεταξύ εφαρμογής και API.", "interceptor_description": "Middleware μεταξύ εφαρμογής και API.",
"language": "Γλώσσα", "language": "Γλώσσα",
@@ -540,19 +591,27 @@
"settings": "Μεταβείτε στη σελίδα Ρυθμίσεις", "settings": "Μεταβείτε στη σελίδα Ρυθμίσεις",
"title": "Πλοήγηση" "title": "Πλοήγηση"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Αντιγραφή συνδέσμου αιτήματος", "copy_request_link": "Αντιγραφή συνδέσμου αιτήματος",
"delete_method": "Επιλέξτε ΔΙΑΓΡΑΦΗ μεθόδου", "delete_method": "Επιλέξτε ΔΙΑΓΡΑΦΗ μεθόδου",
"get_method": "Επιλέξτε μέθοδο GET", "get_method": "Επιλέξτε μέθοδο GET",
"head_method": "Επιλέξτε μέθοδο HEAD", "head_method": "Επιλέξτε μέθοδο HEAD",
"import_curl": "Import cURL",
"method": "Μέθοδος", "method": "Μέθοδος",
"next_method": "Επιλέξτε Επόμενη μέθοδος", "next_method": "Επιλέξτε Επόμενη μέθοδος",
"post_method": "Επιλέξτε μέθοδο POST", "post_method": "Επιλέξτε μέθοδο POST",
"previous_method": "Επιλέξτε Προηγούμενη μέθοδος", "previous_method": "Επιλέξτε Προηγούμενη μέθοδος",
"put_method": "Επιλέξτε μέθοδο PUT", "put_method": "Επιλέξτε μέθοδο PUT",
"rename": "Rename Request",
"reset_request": "Επαναφορά αιτήματος", "reset_request": "Επαναφορά αιτήματος",
"save_request": "Save Request",
"save_to_collections": "Αποθήκευση στις Συλλογές", "save_to_collections": "Αποθήκευση στις Συλλογές",
"send_request": "Στείλε αίτημα", "send_request": "Στείλε αίτημα",
"show_code": "Generate code snippet",
"title": "Αίτηση" "title": "Αίτηση"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Logs", "log": "Logs",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Τύπος συμβάντος", "event_type": "Τύπος συμβάντος",
"log": "Logs", "log": "Logs",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Εξουσιοδότηση", "authorization": "Εξουσιοδότηση",
"body": "Σώμα", "body": "Σώμα",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Συλλογές", "collections": "Συλλογές",
"documentation": "Τεκμηρίωση", "documentation": "Τεκμηρίωση",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Κεφαλίδες", "headers": "Κεφαλίδες",
"history": "Ιστορία", "history": "Ιστορία",

View File

@@ -1,15 +1,17 @@
{ {
"action": { "action": {
"add": "Add",
"autoscroll": "Autoscroll", "autoscroll": "Autoscroll",
"cancel": "Cancel", "cancel": "Cancel",
"choose_file": "Choose a file", "choose_file": "Choose a file",
"clear": "Clear", "clear": "Clear",
"clear_history": "Clear All History",
"clear_all": "Clear all", "clear_all": "Clear all",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Connect", "connect": "Connect",
"connecting": "Connecting", "connecting": "Connecting",
"copy": "Copy", "copy": "Copy",
"create": "Create",
"delete": "Delete", "delete": "Delete",
"disconnect": "Disconnect", "disconnect": "Disconnect",
"dismiss": "Dismiss", "dismiss": "Dismiss",
@@ -31,14 +33,15 @@
"open_workspace": "Open workspace", "open_workspace": "Open workspace",
"paste": "Paste", "paste": "Paste",
"prettify": "Prettify", "prettify": "Prettify",
"rename": "Rename",
"remove": "Remove", "remove": "Remove",
"rename": "Rename",
"restore": "Restore", "restore": "Restore",
"save": "Save", "save": "Save",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
"scroll_to_top": "Scroll to top", "scroll_to_top": "Scroll to top",
"search": "Search", "search": "Search",
"send": "Send", "send": "Send",
"share": "Share",
"start": "Start", "start": "Start",
"starting": "Starting", "starting": "Starting",
"stop": "Stop", "stop": "Stop",
@@ -54,10 +57,30 @@
"new": "Add new", "new": "Add new",
"star": "Add star" "star": "Add star"
}, },
"cookies": {
"modal": {
"new_domain_name": "New domain name",
"set": "Set a cookie",
"cookie_string": "Cookie string",
"enter_cookie_string": "Enter cookie string",
"cookie_name": "Name",
"cookie_value": "Value",
"cookie_path": "Path",
"cookie_expires": "Expires",
"managed_tab": "Managed",
"raw_tab": "Raw",
"interceptor_no_support": "Your currently selected interceptor does not support cookies. Select a different Interceptor and try again.",
"empty_domains": "Domain list is empty",
"empty_domain": "Domain is empty",
"no_cookies_in_domain": "No cookies set for this domain"
}
},
"app": { "app": {
"chat_with_us": "Chat with us", "chat_with_us": "Chat with us",
"contact_us": "Contact us", "contact_us": "Contact us",
"cookies": "Cookies",
"copy": "Copy", "copy": "Copy",
"copy_interface_type": "Copy interface type",
"copy_user_id": "Copy User Auth Token", "copy_user_id": "Copy User Auth Token",
"developer_option": "Developer options", "developer_option": "Developer options",
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.", "developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
@@ -69,18 +92,19 @@
"invite": "Invite", "invite": "Invite",
"invite_description": "Hoppscotch is an open source API development ecosystem. We designed a simple and intuitive interface for creating and managing your APIs. Hoppscotch is a tool that helps you build, test, document and share your APIs.", "invite_description": "Hoppscotch is an open source API development ecosystem. We designed a simple and intuitive interface for creating and managing your APIs. Hoppscotch is a tool that helps you build, test, document and share your APIs.",
"invite_your_friends": "Invite your friends", "invite_your_friends": "Invite your friends",
"social_links": "Social links",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"join_discord_community": "Join our Discord community", "join_discord_community": "Join our Discord community",
"keyboard_shortcuts": "Keyboard shortcuts", "keyboard_shortcuts": "Keyboard shortcuts",
"name": "Hoppscotch", "name": "Hoppscotch",
"new_version_found": "New version found. Refresh to update.", "new_version_found": "New version found. Refresh to update.",
"open_in_hoppscotch": "Open in Hoppscotch",
"options": "Options", "options": "Options",
"proxy_privacy_policy": "Proxy privacy policy", "proxy_privacy_policy": "Proxy privacy policy",
"reload": "Reload", "reload": "Reload",
"search": "Search", "search": "Search",
"share": "Share", "share": "Share",
"shortcuts": "Shortcuts", "shortcuts": "Shortcuts",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Spotlight", "spotlight": "Spotlight",
"status": "Status", "status": "Status",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -112,18 +136,34 @@
}, },
"authorization": { "authorization": {
"generate_token": "Generate Token", "generate_token": "Generate Token",
"graphql_headers": "Authorization Headers are sent as part of the payload to connection_init",
"include_in_url": "Include in URL", "include_in_url": "Include in URL",
"learn": "Learn how", "learn": "Learn how",
"pass_key_by": "Pass by", "pass_key_by": "Pass by",
"password": "Password", "password": "Password",
"token": "Token", "token": "Token",
"type": "Authorization Type", "type": "Authorization Type",
"username": "Username" "username": "Username",
"oauth": {
"token_generation_oidc_discovery_failed": "Failure on token generation: OpenID Connect Discovery Failed",
"something_went_wrong_on_token_generation": "Something went wrong on token generation",
"redirect_auth_server_returned_error": "Auth Server returned an error state",
"redirect_no_auth_code": "No Authorization Code present in the redirect",
"redirect_invalid_state": "Invalid State value present in the redirect",
"redirect_no_token_endpoint": "No Token Endpoint Defined",
"redirect_no_client_id": "No Client ID defined",
"redirect_no_client_secret": "No Client Secret Defined",
"redirect_no_code_verifier": "No Code Verifier Defined",
"redirect_auth_token_request_failed": "Request to get the auth token failed",
"redirect_auth_token_request_invalid_response": "Invalid Response from the Token Endpoint when requesting for an auth token",
"something_went_wrong_on_oauth_redirect": "Something went wrong during OAuth Redirect"
}
}, },
"collection": { "collection": {
"created": "Collection created", "created": "Collection created",
"different_parent": "Cannot reorder collection with different parent", "different_parent": "Cannot reorder collection with different parent",
"edit": "Edit Collection", "edit": "Edit Collection",
"import_or_create": "Import or create a collection",
"invalid_name": "Please provide a name for the collection", "invalid_name": "Please provide a name for the collection",
"invalid_root_move": "Collection already in the root", "invalid_root_move": "Collection already in the root",
"moved": "Moved Successfully", "moved": "Moved Successfully",
@@ -142,6 +182,8 @@
"team_collections": "Team Collections" "team_collections": "Team Collections"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Are you sure you want to logout?", "logout": "Are you sure you want to logout?",
"remove_collection": "Are you sure you want to permanently delete this collection?", "remove_collection": "Are you sure you want to permanently delete this collection?",
@@ -149,18 +191,17 @@
"remove_folder": "Are you sure you want to permanently delete this folder?", "remove_folder": "Are you sure you want to permanently delete this folder?",
"remove_history": "Are you sure you want to permanently delete all history?", "remove_history": "Are you sure you want to permanently delete all history?",
"remove_request": "Are you sure you want to permanently delete this request?", "remove_request": "Are you sure you want to permanently delete this request?",
"remove_shared_request": "Are you sure you want to permanently delete this shared request?",
"remove_team": "Are you sure you want to delete this team?", "remove_team": "Are you sure you want to delete this team?",
"remove_telemetry": "Are you sure you want to opt-out of Telemetry?", "remove_telemetry": "Are you sure you want to opt-out of Telemetry?",
"request_change": "Are you sure you want to discard current request, unsaved changes will be lost.", "request_change": "Are you sure you want to discard current request, unsaved changes will be lost.",
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"sync": "Would you like to restore your workspace from cloud? This will discard your local progress." "sync": "Would you like to restore your workspace from cloud? This will discard your local progress."
}, },
"context_menu": { "context_menu": {
"set_environment_variable": "Set as variable", "add_parameters": "Add to parameters",
"add_parameter": "Add to parameter", "open_request_in_new_tab": "Open request in new tab",
"open_link_in_new_tab": "Open link in new tab" "set_environment_variable": "Set as variable"
}, },
"count": { "count": {
"header": "Header {count}", "header": "Header {count}",
@@ -192,7 +233,8 @@
"profile": "Login to view your profile", "profile": "Login to view your profile",
"protocols": "Protocols are empty", "protocols": "Protocols are empty",
"schema": "Connect to a GraphQL endpoint to view schema", "schema": "Connect to a GraphQL endpoint to view schema",
"shortcodes": "Shortcodes are empty", "shared_requests_logout": "Login to view your shared requests or create a new one",
"shared_requests": "Shared requests are empty",
"subscription": "Subscriptions are empty", "subscription": "Subscriptions are empty",
"team_name": "Team name empty", "team_name": "Team name empty",
"teams": "You don't belong to any teams", "teams": "You don't belong to any teams",
@@ -206,9 +248,10 @@
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated", "duplicated": "Environment duplicated",
"edit": "Edit Environment", "edit": "Edit Environment",
"global": "Global",
"empty_variables": "No variables", "empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables", "global_variables": "Global variables",
"import_or_create": "Import or create a environment",
"invalid_name": "Please provide a name for the environment", "invalid_name": "Please provide a name for the environment",
"list": "Environment variables", "list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
@@ -231,9 +274,13 @@
"variable": "Variable", "variable": "Variable",
"variable_list": "Variable List" "variable_list": "Variable List"
}, },
"graphql_collections": {
"title": "GraphQL Collections"
},
"error": { "error": {
"browser_support_sse": "This browser doesn't seems to have Server Sent Events support.", "browser_support_sse": "This browser doesn't seems to have Server Sent Events support.",
"check_console_details": "Check console log for details.", "check_console_details": "Check console log for details.",
"check_how_to_add_origin": "Check how you can add an origin",
"curl_invalid_format": "cURL is not formatted properly", "curl_invalid_format": "cURL is not formatted properly",
"danger_zone": "Danger zone", "danger_zone": "Danger zone",
"delete_account": "Your account is currently an owner in these teams:", "delete_account": "Your account is currently an owner in these teams:",
@@ -249,9 +296,12 @@
"json_prettify_invalid_body": "Couldn't prettify an invalid body, solve json syntax errors and try again", "json_prettify_invalid_body": "Couldn't prettify an invalid body, solve json syntax errors and try again",
"network_error": "There seems to be a network error. Please try again.", "network_error": "There seems to be a network error. Please try again.",
"network_fail": "Could not send request", "network_fail": "Could not send request",
"no_collections_to_export": "No collections to export. Please create a collection to get started.",
"no_duration": "No duration", "no_duration": "No duration",
"no_environments_to_export": "No environments to export. Please create an environment to get started.",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"please_install_extension": "Please install the extension and add origin to the extension.",
"proxy_error": "Proxy error", "proxy_error": "Proxy error",
"script_fail": "Could not execute pre-request script", "script_fail": "Could not execute pre-request script",
"something_went_wrong": "Something went wrong", "something_went_wrong": "Something went wrong",
@@ -262,7 +312,8 @@
"create_secret_gist": "Create secret Gist", "create_secret_gist": "Create secret Gist",
"gist_created": "Gist created", "gist_created": "Gist created",
"require_github": "Login with GitHub to create secret gist", "require_github": "Login with GitHub to create secret gist",
"title": "Export" "title": "Export",
"failed": "Something went wrong while exporting"
}, },
"filter": { "filter": {
"all": "All", "all": "All",
@@ -278,13 +329,13 @@
"renamed": "Folder renamed" "renamed": "Folder renamed"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutations", "mutations": "Mutations",
"schema": "Schema", "schema": "Schema",
"switch_connection": "Switch connection", "subscriptions": "Subscriptions",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is", "switch_connection": "Switch connection"
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"subscriptions": "Subscriptions"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -299,8 +350,8 @@
"authorization": "The authorization header will be automatically generated when you send the request.", "authorization": "The authorization header will be automatically generated when you send the request.",
"generate_documentation_first": "Generate documentation first", "generate_documentation_first": "Generate documentation first",
"network_fail": "Unable to reach the API endpoint. Check your network connection or select a different Interceptor and try again.", "network_fail": "Unable to reach the API endpoint. Check your network connection or select a different Interceptor and try again.",
"offline": "You seem to be offline. Data in this workspace might not be up to date.", "offline": "You're using Hoppscotch offline. Updates will sync when you're online, based on workspace settings.",
"offline_short": "You seem to be offline.", "offline_short": "You're using Hoppscotch offline.",
"post_request_tests": "Test scripts are written in JavaScript, and are run after the response is received.", "post_request_tests": "Test scripts are written in JavaScript, and are run after the response is received.",
"pre_request_script": "Pre-request scripts are written in JavaScript, and are run before the request is sent.", "pre_request_script": "Pre-request scripts are written in JavaScript, and are run before the request is sent.",
"script_fail": "It seems there is a glitch in the pre-request script. Check the error below and fix the script accordingly.", "script_fail": "It seems there is a glitch in the pre-request script. Check the error below and fix the script accordingly.",
@@ -313,30 +364,6 @@
"preview": "Hide Preview", "preview": "Hide Preview",
"sidebar": "Collapse sidebar" "sidebar": "Collapse sidebar"
}, },
"inspections": {
"title": "Inspector",
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"network_error": "Please check your network connection.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request."
},
"url": {
"extension_not_installed": "Extension not installed.",
"extention_not_enabled": "Extension not enabled.",
"extention_enable_action": "Enable Browser Extension",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list."
}
},
"import": { "import": {
"collections": "Import collections", "collections": "Import collections",
"curl": "Import cURL", "curl": "Import cURL",
@@ -353,6 +380,7 @@
"from_openapi_description": "Import from OpenAPI specification file (YML/JSON)", "from_openapi_description": "Import from OpenAPI specification file (YML/JSON)",
"from_postman": "Import from Postman", "from_postman": "Import from Postman",
"from_postman_description": "Import from Postman collection", "from_postman_description": "Import from Postman collection",
"from_file": "Import from File",
"from_url": "Import from URL", "from_url": "Import from URL",
"gist_url": "Enter Gist URL", "gist_url": "Enter Gist URL",
"import_from_url_invalid_fetch": "Couldn't get data from the url", "import_from_url_invalid_fetch": "Couldn't get data from the url",
@@ -360,21 +388,53 @@
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'", "import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
"import_from_url_success": "Collections Imported", "import_from_url_success": "Collections Imported",
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Import" "title": "Import",
"hoppscotch_environment": "Hoppscotch Environment",
"hoppscotch_environment_description": "Import Hoppscotch Environment JSON file",
"postman_environment": "Postman Environment",
"postman_environment_description": "Import Postman Environment JSON file",
"environments_from_gist": "Import From Gist",
"environments_from_gist_description": "Import Hoppscotch Environments From Gist",
"gql_collections_from_gist_description": "Import GraphQL Collections From Gist"
},
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
}, },
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zen mode"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
"collections": "Collections", "collections": "Collections",
"confirm": "Confirm", "confirm": "Confirm",
"customize_request": "Customize Request",
"edit_request": "Edit Request", "edit_request": "Edit Request",
"share_request": "Share Request",
"import_export": "Import / Export" "import_export": "Import / Export"
}, },
"mqtt": { "mqtt": {
@@ -450,13 +510,14 @@
"structured": "Structured", "structured": "Structured",
"text": "Text" "text": "Text"
}, },
"copy_link": "Copy link",
"different_collection": "Cannot reorder requests from different collections", "different_collection": "Cannot reorder requests from different collections",
"duplicated": "Request duplicated", "duplicated": "Request duplicated",
"duration": "Duration", "duration": "Duration",
"enter_curl": "Enter cURL command", "enter_curl": "Enter cURL command",
"generate_code": "Generate code", "generate_code": "Generate code",
"generated_code": "Generated code", "generated_code": "Generated code",
"go_to_authorization_tab": "Go to Authorization tab",
"go_to_body_tab": "Go to Body tab",
"header_list": "Header List", "header_list": "Header List",
"invalid_name": "Please provide a name for the request", "invalid_name": "Please provide a name for the request",
"method": "Method", "method": "Method",
@@ -476,12 +537,13 @@
"rename": "Rename Request", "rename": "Rename Request",
"renamed": "Request renamed", "renamed": "Request renamed",
"run": "Run", "run": "Run",
"stop": "Stop",
"save": "Save", "save": "Save",
"save_as": "Save as", "save_as": "Save as",
"saved": "Request saved", "saved": "Request saved",
"share": "Share", "share": "Share",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"share_request": "Share Request",
"stop": "Stop",
"title": "Request", "title": "Request",
"type": "Request type", "type": "Request type",
"url": "URL", "url": "URL",
@@ -516,9 +578,8 @@
"account_name_description": "This is your display name.", "account_name_description": "This is your display name.",
"background": "Background", "background": "Background",
"black_mode": "Black", "black_mode": "Black",
"dark_mode": "Dark",
"change_font_size": "Change font size",
"choose_language": "Choose language", "choose_language": "Choose language",
"dark_mode": "Dark",
"delete_account": "Delete account", "delete_account": "Delete account",
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.", "delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
"expand_navigation": "Expand navigation", "expand_navigation": "Expand navigation",
@@ -529,10 +590,6 @@
"extensions": "Browser extension", "extensions": "Browser extension",
"extensions_use_toggle": "Use the browser extension to send requests (if present)", "extensions_use_toggle": "Use the browser extension to send requests (if present)",
"follow": "Follow us", "follow": "Follow us",
"font_size": "Font size",
"font_size_large": "Large",
"font_size_medium": "Medium",
"font_size_small": "Small",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware between application and APIs.", "interceptor_description": "Middleware between application and APIs.",
"language": "Language", "language": "Language",
@@ -563,16 +620,34 @@
"use_experimental_url_bar": "Use experimental URL bar with environment highlighting", "use_experimental_url_bar": "Use experimental URL bar with environment highlighting",
"user": "User", "user": "User",
"verified_email": "Verified email", "verified_email": "Verified email",
"additional": "Additional Settings",
"verify_email": "Verify email" "verify_email": "Verify email"
}, },
"shortcodes": { "shared_requests": {
"actions": "Actions", "button": "Button",
"created_on": "Created on", "button_info": "Create a 'Run in Hoppscotch' button for your website, blog or a README.",
"deleted": "Shortcode deleted", "customize": "Customize",
"method": "Method", "creating_widget": "Creating widget",
"not_found": "Shortcode not found", "copy_html": "Copy HTML",
"short_code": "Short code", "copy_link": "Copy Link",
"url": "URL" "copy_markdown": "Copy Markdown",
"deleted": "Shared request deleted",
"description": "Select a widget, you can change and customize this later",
"embed": "Embed",
"embed_info": "Add a mini 'Hoppscotch API Playground' to your website, blog or documentation.",
"link": "Link",
"link_info": "Create a shareable link to share with anyone on the internet with view access.",
"modified": "Shared request modified",
"not_found": "Shared request not found",
"open_new_tab": "Open in new tab",
"preview": "Preview",
"run_in_hoppscotch": "Run in Hoppscotch",
"theme": {
"dark": "Dark",
"light": "Light",
"system": "System",
"title": "Theme"
}
}, },
"shortcut": { "shortcut": {
"general": { "general": {
@@ -582,10 +657,6 @@
"show_all": "Keyboard shortcuts", "show_all": "Keyboard shortcuts",
"title": "General" "title": "General"
}, },
"others": {
"title": "Others",
"prettify": "Prettify Editor's Content"
},
"miscellaneous": { "miscellaneous": {
"invite": "Invite people to Hoppscotch", "invite": "Invite people to Hoppscotch",
"title": "Miscellaneous" "title": "Miscellaneous"
@@ -601,23 +672,27 @@
"settings": "Go to Settings page", "settings": "Go to Settings page",
"title": "Navigation" "title": "Navigation"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copy Request Link",
"delete_method": "Select DELETE method", "delete_method": "Select DELETE method",
"get_method": "Select GET method", "get_method": "Select GET method",
"head_method": "Select HEAD method", "head_method": "Select HEAD method",
"rename": "Rename Current Request",
"import_curl": "Import cURL", "import_curl": "Import cURL",
"show_code": "Generate code snippet",
"method": "Method", "method": "Method",
"next_method": "Select Next method", "next_method": "Select Next method",
"post_method": "Select POST method", "post_method": "Select POST method",
"previous_method": "Select Previous method", "previous_method": "Select Previous method",
"put_method": "Select PUT method", "put_method": "Select PUT method",
"rename": "Rename Request",
"reset_request": "Reset Request", "reset_request": "Reset Request",
"save_request": "Save Request",
"save_to_collections": "Save to Collections", "save_to_collections": "Save to Collections",
"send_request": "Send Request", "send_request": "Send Request",
"save_request": "Save Request", "show_code": "Generate code snippet",
"share_request": "Share Request",
"title": "Request" "title": "Request"
}, },
"response": { "response": {
@@ -648,79 +723,82 @@
"url": "URL" "url": "URL"
}, },
"spotlight": { "spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": { "general": {
"help_menu": "Open help and support menu",
"chat": "Chat with support", "chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation", "open_docs": "Read Documentation",
"open_keybindings": "Open keyboard shortcuts", "open_github": "Open GitHub repository",
"social": "Social links and GitHub", "open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General" "title": "General"
}, },
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": { "miscellaneous": {
"invite": "Invite people to Hoppscotch", "invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous" "title": "Miscellaneous"
}, },
"request": { "request": {
"tab_parameters": "Open parameters tab", "save_as_new": "Save as new request",
"tab_body": "Open body tab", "select_method": "Select method",
"tab_headers": "Open headers tab", "switch_to": "Switch to",
"tab_authorization": "Open authorization tab", "tab_authorization": "Authorization tab",
"tab_pre_request_script": "Open pre-request script tab", "tab_body": "Body tab",
"tab_tests": "Open tests tab" "tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
}, },
"response": { "response": {
"copy": "Copy response as JSON", "copy": "Copy response",
"download": "Download response as file", "download": "Download response as file",
"title": "Response" "title": "Response"
}, },
"environments": { "section": {
"new": "Create new environment", "interceptor": "Interceptor",
"new_variable": "Create a new environment variable", "interface": "Interface",
"edit": "Edit selected environment", "theme": "Theme",
"delete": "Delete selected environment", "user": "User"
"duplicate": "Duplicate selected environment",
"edit_global": "Edit global environment",
"duplicate_global": "Duplicate global environment",
"title": "Environments"
}, },
"workspace": { "settings": {
"new": "Create new team", "change_interceptor": "Change Interceptor",
"edit": "Edit selected team", "change_language": "Change Language",
"delete": "Delete selected team", "theme": {
"invite": "Invite people to team", "black": "Black",
"switch_to_personal": "Switch to personal workspace", "dark": "Dark",
"title": "Teams" "light": "Light",
"system": "System preference"
}
}, },
"tab": { "tab": {
"close_current": "Close current tab", "close_current": "Close current tab",
"close_others": "Close other tabs", "close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab", "new_tab": "Open a new tab",
"title": "Tabs" "title": "Tabs"
}, },
"section": { "workspace": {
"user": "User", "delete": "Delete current team",
"theme": "Theme", "edit": "Edit current team",
"interface": "Interface", "invite": "Invite people to team",
"interceptor": "Interceptor" "new": "Create new team",
}, "switch_to_personal": "Switch to your personal workspace",
"change_interceptor": "Change Interceptor", "title": "Teams"
"change_language": "Change Language",
"install_extension": "Install Browser Extension",
"settings": {
"theme": {
"black": "Black Mode",
"dark": "Dark Mode",
"light": "Light Mode",
"system": "System Mode"
},
"font": {
"size_sm": "Change to Small",
"size_md": "Change to Medium",
"size_lg": "Change to Large"
},
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"install_extension": "Install Browser Extension"
} }
}, },
"sse": { "sse": {
@@ -739,6 +817,7 @@
"connection_failed": "Connection failed", "connection_failed": "Connection failed",
"connection_lost": "Connection lost", "connection_lost": "Connection lost",
"copied_to_clipboard": "Copied to clipboard", "copied_to_clipboard": "Copied to clipboard",
"copied_interface_to_clipboard": "Copied {language} interface type to clipboard",
"deleted": "Deleted", "deleted": "Deleted",
"deprecated": "DEPRECATED", "deprecated": "DEPRECATED",
"disabled": "Disabled", "disabled": "Disabled",
@@ -746,9 +825,11 @@
"disconnected_from": "Disconnected from {name}", "disconnected_from": "Disconnected from {name}",
"docs_generated": "Documentation generated", "docs_generated": "Documentation generated",
"download_started": "Download started", "download_started": "Download started",
"download_failed": "Download failed",
"enabled": "Enabled", "enabled": "Enabled",
"file_imported": "File imported", "file_imported": "File imported",
"finished_in": "Finished in {duration} ms", "finished_in": "Finished in {duration} ms",
"hide": "Hide",
"history_deleted": "History deleted", "history_deleted": "History deleted",
"linewrap": "Wrap lines", "linewrap": "Wrap lines",
"loading": "Loading...", "loading": "Loading...",
@@ -759,6 +840,7 @@
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}", "published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
"published_message": "Published message: {message} to topic: {topic}", "published_message": "Published message: {message} to topic: {topic}",
"reconnection_error": "Failed to reconnect", "reconnection_error": "Failed to reconnect",
"show": "Show",
"subscribed_failed": "Failed to subscribe to topic: {topic}", "subscribed_failed": "Failed to subscribe to topic: {topic}",
"subscribed_success": "Successfully subscribed to topic: {topic}", "subscribed_success": "Successfully subscribed to topic: {topic}",
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}", "unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
@@ -768,7 +850,7 @@
"support": { "support": {
"changelog": "Read more about latest releases", "changelog": "Read more about latest releases",
"chat": "Questions? Chat with us!", "chat": "Questions? Chat with us!",
"community": "Ask questions and help others", "community": "Ask questions and help others",
"documentation": "Read more about Hoppscotch", "documentation": "Read more about Hoppscotch",
"forum": "Ask questions and get answers", "forum": "Ask questions and get answers",
"github": "Follow us on Github", "github": "Follow us on Github",
@@ -794,6 +876,7 @@
"queries": "Queries", "queries": "Queries",
"query": "Query", "query": "Query",
"schema": "Schema", "schema": "Schema",
"shared_requests": "Shared Requests",
"socketio": "Socket.IO", "socketio": "Socket.IO",
"sse": "SSE", "sse": "SSE",
"tests": "Tests", "tests": "Tests",
@@ -840,12 +923,14 @@
"new": "New Team", "new": "New Team",
"new_created": "New team created", "new_created": "New team created",
"new_name": "My New Team", "new_name": "My New Team",
"no_access": "You do not have edit access to these collections", "no_access": "You do not have edit access to this team",
"no_invite_found": "Invitation not found. Contact your team owner.", "no_invite_found": "Invitation not found. Contact your team owner.",
"no_request_found": "Request not found.", "no_request_found": "Request not found.",
"not_found": "Team not found. Contact your team owner.", "not_found": "Team not found. Contact your team owner.",
"not_valid_viewer": "You are not a valid viewer. Contact your team owner.", "not_valid_viewer": "You are not a valid viewer. Contact your team owner.",
"parent_coll_move": "Cannot move collection to a child collection", "parent_coll_move": "Cannot move collection to a child collection",
"success_invites": "Success invites",
"failed_invites": "Failed invites",
"pending_invites": "Pending invites", "pending_invites": "Pending invites",
"permissions": "Permissions", "permissions": "Permissions",
"same_target_destination": "Same target and destination", "same_target_destination": "Same target and destination",

View File

@@ -5,6 +5,7 @@
"choose_file": "Seleccionar archivo", "choose_file": "Seleccionar archivo",
"clear": "Limpiar", "clear": "Limpiar",
"clear_all": "Limpiar todo", "clear_all": "Limpiar todo",
"clear_history": "Clear all History",
"close": "Cerrar", "close": "Cerrar",
"connect": "Conectar", "connect": "Conectar",
"connecting": "Conectando", "connecting": "Conectando",
@@ -31,6 +32,7 @@
"paste": "Pegar", "paste": "Pegar",
"prettify": "Embellecer", "prettify": "Embellecer",
"remove": "Eliminar", "remove": "Eliminar",
"rename": "Rename",
"restore": "Restaurar", "restore": "Restaurar",
"save": "Guardar", "save": "Guardar",
"scroll_to_bottom": "Desplazar hacia abajo", "scroll_to_bottom": "Desplazar hacia abajo",
@@ -77,6 +79,8 @@
"search": "Buscar", "search": "Buscar",
"share": "Compartir", "share": "Compartir",
"shortcuts": "Atajos", "shortcuts": "Atajos",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Destacar", "spotlight": "Destacar",
"status": "Estado", "status": "Estado",
"status_description": "Comprobar el estado del sitio web", "status_description": "Comprobar el estado del sitio web",
@@ -131,12 +135,15 @@
"renamed": "Colección renombrada", "renamed": "Colección renombrada",
"request_in_use": "Solicitud en uso", "request_in_use": "Solicitud en uso",
"save_as": "Guardar como", "save_as": "Guardar como",
"save_to_collection": "Save to Collection",
"select": "Seleccionar colección", "select": "Seleccionar colección",
"select_location": "Seleccionar ubicación", "select_location": "Seleccionar ubicación",
"select_team": "Seleccionar equipo", "select_team": "Seleccionar equipo",
"team_collections": "Colecciones de equipos" "team_collections": "Colecciones de equipos"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "¿Estás seguro de que quieres dejar este equipo?", "exit_team": "¿Estás seguro de que quieres dejar este equipo?",
"logout": "¿Estás seguro de que deseas cerrar la sesión?", "logout": "¿Estás seguro de que deseas cerrar la sesión?",
"remove_collection": "¿Estás seguro de que deseas eliminar esta colección de forma permanente?", "remove_collection": "¿Estás seguro de que deseas eliminar esta colección de forma permanente?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "¿Deseas guardar los cambios realizados en esta pestaña?", "save_unsaved_tab": "¿Deseas guardar los cambios realizados en esta pestaña?",
"sync": "¿Estás seguro de que deseas sincronizar este espacio de trabajo?" "sync": "¿Estás seguro de que deseas sincronizar este espacio de trabajo?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Encabezado {count}", "header": "Encabezado {count}",
"message": "Mensaje {count}", "message": "Mensaje {count}",
@@ -192,17 +204,31 @@
"create_new": "Crear un nuevo entorno", "create_new": "Crear un nuevo entorno",
"created": "Environment created", "created": "Environment created",
"deleted": "Eliminar el entorno", "deleted": "Eliminar el entorno",
"duplicated": "Environment duplicated",
"edit": "Editar entorno", "edit": "Editar entorno",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Proporciona un nombre válido para el entorno.", "invalid_name": "Proporciona un nombre válido para el entorno.",
"list": "Environment variables",
"my_environments": "Mis entornos", "my_environments": "Mis entornos",
"name": "Name",
"nested_overflow": "las variables de entorno anidadas están limitadas a 10 niveles", "nested_overflow": "las variables de entorno anidadas están limitadas a 10 niveles",
"new": "Nuevo entorno", "new": "Nuevo entorno",
"no_active_environment": "No active environment",
"no_environment": "Sin entorno", "no_environment": "Sin entorno",
"no_environment_description": "No se ha seleccionado ningún entorno. Elije qué hacer con las siguientes variables.", "no_environment_description": "No se ha seleccionado ningún entorno. Elije qué hacer con las siguientes variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Seleccionar entorno", "select": "Seleccionar entorno",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Entornos de trabajo en equipo", "team_environments": "Entornos de trabajo en equipo",
"title": "Entornos", "title": "Entornos",
"updated": "Entorno actualizado", "updated": "Entorno actualizado",
"value": "Value",
"variable": "Variable",
"variable_list": "Lista de variables" "variable_list": "Lista de variables"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Sin duración", "no_duration": "Sin duración",
"no_results_found": "No se han encontrado coincidencias", "no_results_found": "No se han encontrado coincidencias",
"page_not_found": "No se ha podido encontrar esta página", "page_not_found": "No se ha podido encontrar esta página",
"proxy_error": "Proxy error",
"script_fail": "No se pudo ejecutar el script de solicitud previa", "script_fail": "No se pudo ejecutar el script de solicitud previa",
"something_went_wrong": "Algo salió mal", "something_went_wrong": "Algo salió mal",
"test_script_fail": "No se ha podido ejecutar la secuencia de comandos posterior a la solicitud" "test_script_fail": "No se ha podido ejecutar la secuencia de comandos posterior a la solicitud"
@@ -251,9 +278,13 @@
"renamed": "Carpeta renombrada" "renamed": "Carpeta renombrada"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutaciones", "mutations": "Mutaciones",
"schema": "Esquema", "schema": "Esquema",
"subscriptions": "Suscripciones" "subscriptions": "Suscripciones",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Tiempo", "time": "Tiempo",
@@ -307,13 +338,36 @@
"json_description": "Importar colecciones desde un archivo JSON de colecciones de Hoppscotch", "json_description": "Importar colecciones desde un archivo JSON de colecciones de Hoppscotch",
"title": "Importar" "title": "Importar"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Contraer o expandir colecciones", "collapse_collection": "Contraer o expandir colecciones",
"collapse_sidebar": "Contraer o expandir la barra lateral", "collapse_sidebar": "Contraer o expandir la barra lateral",
"column": "Disposición vertical", "column": "Disposición vertical",
"name": "Diseño", "name": "Diseño",
"row": "Disposición horizontal", "row": "Disposición horizontal"
"zen_mode": "Modo zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "Tienes cambios sin guardar", "close_unsaved_tab": "Tienes cambios sin guardar",
@@ -418,6 +472,7 @@
"payload": "Carga útil", "payload": "Carga útil",
"query": "Consulta", "query": "Consulta",
"raw_body": "Cuerpo de solicitud sin procesar", "raw_body": "Cuerpo de solicitud sin procesar",
"rename": "Rename Request",
"renamed": "Solicitud renombrada", "renamed": "Solicitud renombrada",
"run": "Ejecutar", "run": "Ejecutar",
"save": "Guardar", "save": "Guardar",
@@ -425,6 +480,7 @@
"saved": "Solicitud guardada", "saved": "Solicitud guardada",
"share": "Compartir", "share": "Compartir",
"share_description": "Comparte Hoppscotch con tus amigos", "share_description": "Comparte Hoppscotch con tus amigos",
"stop": "Stop",
"title": "Solicitud", "title": "Solicitud",
"type": "Tipo de solicitud", "type": "Tipo de solicitud",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Este es tu nombre para mostrar.", "account_name_description": "Este es tu nombre para mostrar.",
"background": "Fondo", "background": "Fondo",
"black_mode": "Negro", "black_mode": "Negro",
"change_font_size": "Cambiar tamaño de fuente",
"choose_language": "Elegir idioma", "choose_language": "Elegir idioma",
"dark_mode": "Oscuro", "dark_mode": "Oscuro",
"delete_account": "Eliminar cuenta", "delete_account": "Eliminar cuenta",
@@ -472,10 +527,6 @@
"extensions": "Extensiones", "extensions": "Extensiones",
"extensions_use_toggle": "Utilizar la extensión del navegador para enviar peticiones (si está presente)", "extensions_use_toggle": "Utilizar la extensión del navegador para enviar peticiones (si está presente)",
"follow": "Síguenos", "follow": "Síguenos",
"font_size": "Tamaño de fuente",
"font_size_large": "Grande",
"font_size_medium": "Mediano",
"font_size_small": "Pequeño",
"interceptor": "Interceptador", "interceptor": "Interceptador",
"interceptor_description": "Middleware entre la aplicación y las APIs.", "interceptor_description": "Middleware entre la aplicación y las APIs.",
"language": "Idioma", "language": "Idioma",
@@ -540,19 +591,27 @@
"settings": "Ir a la página de configuración", "settings": "Ir a la página de configuración",
"title": "Navegación" "title": "Navegación"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copiar enlace de solicitud", "copy_request_link": "Copiar enlace de solicitud",
"delete_method": "Seleccionar método DELETE", "delete_method": "Seleccionar método DELETE",
"get_method": "Seleccionar método GET", "get_method": "Seleccionar método GET",
"head_method": "Seleccionar método HEAD", "head_method": "Seleccionar método HEAD",
"import_curl": "Import cURL",
"method": "Método", "method": "Método",
"next_method": "Seleccionar método siguiente", "next_method": "Seleccionar método siguiente",
"post_method": "Seleccionar método POST", "post_method": "Seleccionar método POST",
"previous_method": "Seleccionar método anterior", "previous_method": "Seleccionar método anterior",
"put_method": "Seleccionar método PUT", "put_method": "Seleccionar método PUT",
"rename": "Rename Request",
"reset_request": "Solicitud de reinicio", "reset_request": "Solicitud de reinicio",
"save_request": "Save Request",
"save_to_collections": "Guardar en colecciones", "save_to_collections": "Guardar en colecciones",
"send_request": "Enviar solicitud", "send_request": "Enviar solicitud",
"show_code": "Generate code snippet",
"title": "Solicitud" "title": "Solicitud"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Registro", "log": "Registro",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tipo de evento", "event_type": "Tipo de evento",
"log": "Registro", "log": "Registro",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorización", "authorization": "Autorización",
"body": "Cuerpo", "body": "Cuerpo",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Colecciones", "collections": "Colecciones",
"documentation": "Documentación", "documentation": "Documentación",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Encabezados", "headers": "Encabezados",
"history": "Historial", "history": "Historial",

View File

@@ -5,6 +5,7 @@
"choose_file": "Valitse tiedosto", "choose_file": "Valitse tiedosto",
"clear": "Asia selvä", "clear": "Asia selvä",
"clear_all": "Tyhjennä", "clear_all": "Tyhjennä",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Kytkeä", "connect": "Kytkeä",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Koristella", "prettify": "Koristella",
"remove": "Poista", "remove": "Poista",
"rename": "Rename",
"restore": "Palauttaa", "restore": "Palauttaa",
"save": "Tallentaa", "save": "Tallentaa",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Hae", "search": "Hae",
"share": "Jaa", "share": "Jaa",
"shortcuts": "Pikanäppäimet", "shortcuts": "Pikanäppäimet",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Valokeila", "spotlight": "Valokeila",
"status": "Tila", "status": "Tila",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Kokoelma nimetty uudelleen", "renamed": "Kokoelma nimetty uudelleen",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Tallenna nimellä", "save_as": "Tallenna nimellä",
"save_to_collection": "Save to Collection",
"select": "Valitse kokoelma", "select": "Valitse kokoelma",
"select_location": "Valitse sijainti", "select_location": "Valitse sijainti",
"select_team": "Valitse joukkue", "select_team": "Valitse joukkue",
"team_collections": "Joukkuekokoelmat" "team_collections": "Joukkuekokoelmat"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Haluatko varmasti kirjautua ulos?", "logout": "Haluatko varmasti kirjautua ulos?",
"remove_collection": "Haluatko varmasti poistaa tämän kokoelman pysyvästi?", "remove_collection": "Haluatko varmasti poistaa tämän kokoelman pysyvästi?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Haluatko varmasti synkronoida tämän työtilan?" "sync": "Haluatko varmasti synkronoida tämän työtilan?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Otsikko {count}", "header": "Otsikko {count}",
"message": "Viesti {count}", "message": "Viesti {count}",
@@ -192,17 +204,31 @@
"create_new": "Luo uusi ympäristö", "create_new": "Luo uusi ympäristö",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Muokkaa ympäristöä", "edit": "Muokkaa ympäristöä",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Anna ympäristölle kelvollinen nimi", "invalid_name": "Anna ympäristölle kelvollinen nimi",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Uusi ympäristö", "new": "Uusi ympäristö",
"no_active_environment": "No active environment",
"no_environment": "Ei ympäristöä", "no_environment": "Ei ympäristöä",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Valitse ympäristö", "select": "Valitse ympäristö",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Ympäristöt", "title": "Ympäristöt",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Muuttujien luettelo" "variable_list": "Muuttujien luettelo"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Ei kestoa", "no_duration": "Ei kestoa",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Ennakkopyyntöskriptiä ei voitu suorittaa", "script_fail": "Ennakkopyyntöskriptiä ei voitu suorittaa",
"something_went_wrong": "Jotain meni pieleen", "something_went_wrong": "Jotain meni pieleen",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Kansio nimettiin uudelleen" "renamed": "Kansio nimettiin uudelleen"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutaatiot", "mutations": "Mutaatiot",
"schema": "Kaavio", "schema": "Kaavio",
"subscriptions": "Tilaukset" "subscriptions": "Tilaukset",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Tuonti" "title": "Tuonti"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zen -tila"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Hyötykuorma", "payload": "Hyötykuorma",
"query": "Kysely", "query": "Kysely",
"raw_body": "Raaka pyynnön runko", "raw_body": "Raaka pyynnön runko",
"rename": "Rename Request",
"renamed": "Pyyntö nimettiin uudelleen", "renamed": "Pyyntö nimettiin uudelleen",
"run": "Juosta", "run": "Juosta",
"save": "Tallentaa", "save": "Tallentaa",
@@ -425,6 +480,7 @@
"saved": "Pyyntö tallennettu", "saved": "Pyyntö tallennettu",
"share": "Jaa", "share": "Jaa",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Pyyntö", "title": "Pyyntö",
"type": "Pyynnön tyyppi", "type": "Pyynnön tyyppi",
"url": "URL -osoite", "url": "URL -osoite",
@@ -459,7 +515,6 @@
"account_name_description": "Tämä on näyttönimesi.", "account_name_description": "Tämä on näyttönimesi.",
"background": "Tausta", "background": "Tausta",
"black_mode": "Musta", "black_mode": "Musta",
"change_font_size": "Vaihda fontin kokoa",
"choose_language": "Valitse kieli", "choose_language": "Valitse kieli",
"dark_mode": "Tumma", "dark_mode": "Tumma",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Laajennukset", "extensions": "Laajennukset",
"extensions_use_toggle": "Käytä pyyntöjen lähettämiseen selainlaajennusta (jos sellainen on)", "extensions_use_toggle": "Käytä pyyntöjen lähettämiseen selainlaajennusta (jos sellainen on)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Fonttikoko",
"font_size_large": "Suuri",
"font_size_medium": "Keskikokoinen",
"font_size_small": "Pieni",
"interceptor": "Torjuntahävittäjä", "interceptor": "Torjuntahävittäjä",
"interceptor_description": "Sovellusliittymien ja sovellusliittymien välinen väliohjelmisto.", "interceptor_description": "Sovellusliittymien ja sovellusliittymien välinen väliohjelmisto.",
"language": "Kieli", "language": "Kieli",
@@ -540,19 +591,27 @@
"settings": "Siirry Asetukset -sivulle", "settings": "Siirry Asetukset -sivulle",
"title": "Navigointi" "title": "Navigointi"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopioi pyyntölinkki", "copy_request_link": "Kopioi pyyntölinkki",
"delete_method": "Valitse POISTA menetelmä", "delete_method": "Valitse POISTA menetelmä",
"get_method": "Valitse GET -menetelmä", "get_method": "Valitse GET -menetelmä",
"head_method": "Valitse HEAD -menetelmä", "head_method": "Valitse HEAD -menetelmä",
"import_curl": "Import cURL",
"method": "Menetelmä", "method": "Menetelmä",
"next_method": "Valitse Seuraava menetelmä", "next_method": "Valitse Seuraava menetelmä",
"post_method": "Valitse POST -menetelmä", "post_method": "Valitse POST -menetelmä",
"previous_method": "Valitse Edellinen menetelmä", "previous_method": "Valitse Edellinen menetelmä",
"put_method": "Valitse PUT -menetelmä", "put_method": "Valitse PUT -menetelmä",
"rename": "Rename Request",
"reset_request": "Nollaa pyyntö", "reset_request": "Nollaa pyyntö",
"save_request": "Save Request",
"save_to_collections": "Tallenna kokoelmiin", "save_to_collections": "Tallenna kokoelmiin",
"send_request": "Lähetä pyyntö", "send_request": "Lähetä pyyntö",
"show_code": "Generate code snippet",
"title": "Pyyntö" "title": "Pyyntö"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Hirsi", "log": "Hirsi",
"url": "URL -osoite" "url": "URL -osoite"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tapahtumatyyppi", "event_type": "Tapahtumatyyppi",
"log": "Hirsi", "log": "Hirsi",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Valtuutus", "authorization": "Valtuutus",
"body": "Runko", "body": "Runko",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Kokoelmat", "collections": "Kokoelmat",
"documentation": "Dokumentointi", "documentation": "Dokumentointi",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Otsikot", "headers": "Otsikot",
"history": "Historia", "history": "Historia",

View File

@@ -5,6 +5,7 @@
"choose_file": "Choisir un fichier", "choose_file": "Choisir un fichier",
"clear": "Effacer", "clear": "Effacer",
"clear_all": "Tout effacer", "clear_all": "Tout effacer",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Connecter", "connect": "Connecter",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Coller", "paste": "Coller",
"prettify": "Formater", "prettify": "Formater",
"remove": "Supprimer", "remove": "Supprimer",
"rename": "Rename",
"restore": "Restaurer", "restore": "Restaurer",
"save": "Sauvegarder", "save": "Sauvegarder",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Chercher", "search": "Chercher",
"share": "Partager", "share": "Partager",
"shortcuts": "Raccourcis", "shortcuts": "Raccourcis",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Projecteur", "spotlight": "Projecteur",
"status": "Statut", "status": "Statut",
"status_description": "Vérifier l'état du site web", "status_description": "Vérifier l'état du site web",
@@ -131,12 +135,15 @@
"renamed": "Collection renommée", "renamed": "Collection renommée",
"request_in_use": "Demande en cours d'utilisation", "request_in_use": "Demande en cours d'utilisation",
"save_as": "Enregistrer sous", "save_as": "Enregistrer sous",
"save_to_collection": "Save to Collection",
"select": "Sélectionnez une collection", "select": "Sélectionnez une collection",
"select_location": "Sélectionnez l'emplacement", "select_location": "Sélectionnez l'emplacement",
"select_team": "Sélectionnez une équipe", "select_team": "Sélectionnez une équipe",
"team_collections": "Collections de l'équipe" "team_collections": "Collections de l'équipe"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Êtes-vous sûr de vouloir vous déconnecter?", "logout": "Êtes-vous sûr de vouloir vous déconnecter?",
"remove_collection": "Voulez-vous vraiment supprimer définitivement cette collection ?", "remove_collection": "Voulez-vous vraiment supprimer définitivement cette collection ?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Voulez-vous vraiment synchroniser cet espace de travail ?" "sync": "Voulez-vous vraiment synchroniser cet espace de travail ?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "En-tête {count}", "header": "En-tête {count}",
"message": "Message {compte}", "message": "Message {compte}",
@@ -192,17 +204,31 @@
"create_new": "Créer un nouvel environnement", "create_new": "Créer un nouvel environnement",
"created": "Environnement créé", "created": "Environnement créé",
"deleted": "Environnement supprimé", "deleted": "Environnement supprimé",
"duplicated": "Environment duplicated",
"edit": "Modifier l'environnement", "edit": "Modifier l'environnement",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Veuillez fournir un nom valide pour l'environnement", "invalid_name": "Veuillez fournir un nom valide pour l'environnement",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "les variables d'environnement imbriquées sont limitées à 10 niveaux", "nested_overflow": "les variables d'environnement imbriquées sont limitées à 10 niveaux",
"new": "Nouvel environnement", "new": "Nouvel environnement",
"no_active_environment": "No active environment",
"no_environment": "Pas d'environnement", "no_environment": "Pas d'environnement",
"no_environment_description": "Aucun environnement n'a été sélectionné. Choisissez ce qu'il faut faire avec les variables suivantes.", "no_environment_description": "Aucun environnement n'a été sélectionné. Choisissez ce qu'il faut faire avec les variables suivantes.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Sélectionnez l'environnement", "select": "Sélectionnez l'environnement",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Environnements", "title": "Environnements",
"updated": "Mise à jour de l'environnement", "updated": "Mise à jour de l'environnement",
"value": "Value",
"variable": "Variable",
"variable_list": "Liste des variables" "variable_list": "Liste des variables"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Pas de durée", "no_duration": "Pas de durée",
"no_results_found": "Aucune correspondance trouvée", "no_results_found": "Aucune correspondance trouvée",
"page_not_found": "Cette page n'a pas pu être trouvée", "page_not_found": "Cette page n'a pas pu être trouvée",
"proxy_error": "Proxy error",
"script_fail": "Impossible d'exécuter le script de pré-requête", "script_fail": "Impossible d'exécuter le script de pré-requête",
"something_went_wrong": "Quelque chose s'est mal passé", "something_went_wrong": "Quelque chose s'est mal passé",
"test_script_fail": "Impossible d'exécuter le script post-requête" "test_script_fail": "Impossible d'exécuter le script post-requête"
@@ -251,9 +278,13 @@
"renamed": "Dossier renommé" "renamed": "Dossier renommé"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutations", "mutations": "Mutations",
"schema": "Schéma", "schema": "Schéma",
"subscriptions": "Abonnements" "subscriptions": "Abonnements",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Importer des collections depuis un fichier JSON Hoppscotch", "json_description": "Importer des collections depuis un fichier JSON Hoppscotch",
"title": "Importer" "title": "Importer"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Réduire ou développer les collections", "collapse_collection": "Réduire ou développer les collections",
"collapse_sidebar": "Réduire ou développer la barre latérale", "collapse_sidebar": "Réduire ou développer la barre latérale",
"column": "Disposition verticale", "column": "Disposition verticale",
"name": "Disposition", "name": "Disposition",
"row": "Disposition horizontale", "row": "Disposition horizontale"
"zen_mode": "Mode Zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Charge utile", "payload": "Charge utile",
"query": "Requête", "query": "Requête",
"raw_body": "Corps de requête brut", "raw_body": "Corps de requête brut",
"rename": "Rename Request",
"renamed": "Requête renommée", "renamed": "Requête renommée",
"run": "Lancer", "run": "Lancer",
"save": "Sauvegarder", "save": "Sauvegarder",
@@ -425,6 +480,7 @@
"saved": "Requête enregistrée", "saved": "Requête enregistrée",
"share": "Partager", "share": "Partager",
"share_description": "Partagez Hoppscotch avec vos amis", "share_description": "Partagez Hoppscotch avec vos amis",
"stop": "Stop",
"title": "Requête", "title": "Requête",
"type": "Type de requête", "type": "Type de requête",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Ceci est votre nom d'affichage.", "account_name_description": "Ceci est votre nom d'affichage.",
"background": "Fond", "background": "Fond",
"black_mode": "Noir", "black_mode": "Noir",
"change_font_size": "Changer la taille de la police",
"choose_language": "Choisissez la langue", "choose_language": "Choisissez la langue",
"dark_mode": "Sombre", "dark_mode": "Sombre",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Extensions", "extensions": "Extensions",
"extensions_use_toggle": "Utilisez l'extension de navigateur pour envoyer des requêtes (le cas échéant)", "extensions_use_toggle": "Utilisez l'extension de navigateur pour envoyer des requêtes (le cas échéant)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Taille de police",
"font_size_large": "Grande",
"font_size_medium": "Moyenne",
"font_size_small": "Petite",
"interceptor": "Intercepteur", "interceptor": "Intercepteur",
"interceptor_description": "Middleware entre l'application et les API.", "interceptor_description": "Middleware entre l'application et les API.",
"language": "Langue", "language": "Langue",
@@ -540,19 +591,27 @@
"settings": "Aller à la page Paramètres", "settings": "Aller à la page Paramètres",
"title": "Navigation" "title": "Navigation"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copier le lien de requête", "copy_request_link": "Copier le lien de requête",
"delete_method": "Sélectionnez la méthode DELETE", "delete_method": "Sélectionnez la méthode DELETE",
"get_method": "Sélectionnez la méthode GET", "get_method": "Sélectionnez la méthode GET",
"head_method": "Sélectionnez la méthode HEAD", "head_method": "Sélectionnez la méthode HEAD",
"import_curl": "Import cURL",
"method": "Méthode", "method": "Méthode",
"next_method": "Sélectionnez la méthode suivante", "next_method": "Sélectionnez la méthode suivante",
"post_method": "Sélectionnez la méthode POST", "post_method": "Sélectionnez la méthode POST",
"previous_method": "Sélectionnez la méthode précédente", "previous_method": "Sélectionnez la méthode précédente",
"put_method": "Sélectionnez la méthode PUT", "put_method": "Sélectionnez la méthode PUT",
"rename": "Rename Request",
"reset_request": "Réinitialiser la requête", "reset_request": "Réinitialiser la requête",
"save_request": "Save Request",
"save_to_collections": "Enregistrer dans les collections", "save_to_collections": "Enregistrer dans les collections",
"send_request": "Envoyer la requête", "send_request": "Envoyer la requête",
"show_code": "Generate code snippet",
"title": "Requête" "title": "Requête"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Infos", "log": "Infos",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Type d'événement", "event_type": "Type d'événement",
"log": "Infos", "log": "Infos",
@@ -589,7 +727,7 @@
}, },
"state": { "state": {
"bulk_mode": "Modification groupée", "bulk_mode": "Modification groupée",
"bulk_mode_placeholder": "Les entrées sont séparées par une nouvelle ligne\nLes clés et les valeurs sont séparées par :\nAjoutez # à n'importe quelle ligne que vous souhaitez ajouter mais garder désactivée", "bulk_mode_placeholder": "Les entrées sont séparées par une nouvelle ligne\nLes clés et les valeurs sont séparées par :\nAjoutez # à n'importe quelle ligne que vous souhaitez ajouter mais garder désactivée",
"cleared": "Effacé", "cleared": "Effacé",
"connected": "Connecté", "connected": "Connecté",
"connected_to": "Connecté à {nom}", "connected_to": "Connecté à {nom}",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorisation", "authorization": "Autorisation",
"body": "Corps", "body": "Corps",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Collections", "collections": "Collections",
"documentation": "Documentation", "documentation": "Documentation",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "En-têtes", "headers": "En-têtes",
"history": "Histoire", "history": "Histoire",
@@ -691,7 +832,7 @@
"member_role_updated": "Rôles des utilisateurs mis à jour", "member_role_updated": "Rôles des utilisateurs mis à jour",
"members": "Membres", "members": "Membres",
"more_members": "+{count} more", "more_members": "+{count} more",
"name_length_insufficient": "Le nom de l'équipe doit comporter au moins 6 caractères", "name_length_insufficient": "Le nom de l'équipe doit comporter au moins 6 caractères",
"name_updated": "Nom de l'équipe mis à jour", "name_updated": "Nom de l'équipe mis à jour",
"new": "Nouvelle équipe", "new": "Nouvelle équipe",
"new_created": "Nouvelle équipe créée", "new_created": "Nouvelle équipe créée",

View File

@@ -5,6 +5,7 @@
"choose_file": "בחר קובץ", "choose_file": "בחר קובץ",
"clear": "ברור", "clear": "ברור",
"clear_all": "נקה הכל", "clear_all": "נקה הכל",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "לְחַבֵּר", "connect": "לְחַבֵּר",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "לְיַפּוֹת", "prettify": "לְיַפּוֹת",
"remove": "לְהַסִיר", "remove": "לְהַסִיר",
"rename": "Rename",
"restore": "לשחזר", "restore": "לשחזר",
"save": "להציל", "save": "להציל",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "לחפש", "search": "לחפש",
"share": "לַחֲלוֹק", "share": "לַחֲלוֹק",
"shortcuts": "קיצורי דרך", "shortcuts": "קיצורי דרך",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "זַרקוֹר", "spotlight": "זַרקוֹר",
"status": "סטָטוּס", "status": "סטָטוּס",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "שם האוסף שונה", "renamed": "שם האוסף שונה",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "שמור כ", "save_as": "שמור כ",
"save_to_collection": "Save to Collection",
"select": "בחר אוסף", "select": "בחר אוסף",
"select_location": "תבחר מיקום", "select_location": "תבחר מיקום",
"select_team": "בחר צוות", "select_team": "בחר צוות",
"team_collections": "אוספי צוות" "team_collections": "אוספי צוות"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "האם אתה בטוח שאתה רוצה להתנתק?", "logout": "האם אתה בטוח שאתה רוצה להתנתק?",
"remove_collection": "האם אתה בטוח שברצונך למחוק את האוסף הזה לצמיתות?", "remove_collection": "האם אתה בטוח שברצונך למחוק את האוסף הזה לצמיתות?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "האם אתה בטוח שברצונך לסנכרן את סביבת העבודה הזו?" "sync": "האם אתה בטוח שברצונך לסנכרן את סביבת העבודה הזו?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "כותרת {count}", "header": "כותרת {count}",
"message": "הודעה {count}", "message": "הודעה {count}",
@@ -192,17 +204,31 @@
"create_new": "צור סביבה חדשה", "create_new": "צור סביבה חדשה",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "ערוך את הסביבה", "edit": "ערוך את הסביבה",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "אנא ספק שם חוקי לסביבה", "invalid_name": "אנא ספק שם חוקי לסביבה",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "סביבה חדשה", "new": "סביבה חדשה",
"no_active_environment": "No active environment",
"no_environment": "אין סביבה", "no_environment": "אין סביבה",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "בחר סביבה", "select": "בחר סביבה",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "סביבות", "title": "סביבות",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "רשימת משתנים" "variable_list": "רשימת משתנים"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "אין משך זמן", "no_duration": "אין משך זמן",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "לא ניתן להפעיל סקריפט של בקשה מראש", "script_fail": "לא ניתן להפעיל סקריפט של בקשה מראש",
"something_went_wrong": "משהו השתבש", "something_went_wrong": "משהו השתבש",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "שם התיקייה שונה" "renamed": "שם התיקייה שונה"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "מוטציות", "mutations": "מוטציות",
"schema": "סכֵימָה", "schema": "סכֵימָה",
"subscriptions": "מנויים" "subscriptions": "מנויים",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "יְבוּא" "title": "יְבוּא"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "מצב זן"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "מטען", "payload": "מטען",
"query": "שאילתא", "query": "שאילתא",
"raw_body": "גוף בקשה גולמית", "raw_body": "גוף בקשה גולמית",
"rename": "Rename Request",
"renamed": "שם הבקשה שונה", "renamed": "שם הבקשה שונה",
"run": "לָרוּץ", "run": "לָרוּץ",
"save": "להציל", "save": "להציל",
@@ -425,6 +480,7 @@
"saved": "הבקשה נשמרה", "saved": "הבקשה נשמרה",
"share": "לַחֲלוֹק", "share": "לַחֲלוֹק",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "בַּקָשָׁה", "title": "בַּקָשָׁה",
"type": "סוג בקשה", "type": "סוג בקשה",
"url": "כתובת URL", "url": "כתובת URL",
@@ -459,7 +515,6 @@
"account_name_description": "זהו שם התצוגה שלך.", "account_name_description": "זהו שם התצוגה שלך.",
"background": "רקע כללי", "background": "רקע כללי",
"black_mode": "שָׁחוֹר", "black_mode": "שָׁחוֹר",
"change_font_size": "שנה גודל פונט",
"choose_language": "בחר שפה", "choose_language": "בחר שפה",
"dark_mode": "אפל", "dark_mode": "אפל",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "הרחבות", "extensions": "הרחבות",
"extensions_use_toggle": "השתמש בתוסף הדפדפן כדי לשלוח בקשות (אם קיימות)", "extensions_use_toggle": "השתמש בתוסף הדפדפן כדי לשלוח בקשות (אם קיימות)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "גודל גופן",
"font_size_large": "גָדוֹל",
"font_size_medium": "בינוני",
"font_size_small": "קָטָן",
"interceptor": "מיירט", "interceptor": "מיירט",
"interceptor_description": "תוכנת ביניים בין יישום לממשקי API.", "interceptor_description": "תוכנת ביניים בין יישום לממשקי API.",
"language": "שפה", "language": "שפה",
@@ -540,19 +591,27 @@
"settings": "עבור אל דף ההגדרות", "settings": "עבור אל דף ההגדרות",
"title": "ניווט" "title": "ניווט"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "העתק קישור לבקשה", "copy_request_link": "העתק קישור לבקשה",
"delete_method": "בחר שיטת DELETE", "delete_method": "בחר שיטת DELETE",
"get_method": "בחר שיטת GET", "get_method": "בחר שיטת GET",
"head_method": "בחר שיטת HEAD", "head_method": "בחר שיטת HEAD",
"import_curl": "Import cURL",
"method": "שיטה", "method": "שיטה",
"next_method": "בחר בשיטה הבאה", "next_method": "בחר בשיטה הבאה",
"post_method": "בחר שיטת POST", "post_method": "בחר שיטת POST",
"previous_method": "בחר שיטה קודמת", "previous_method": "בחר שיטה קודמת",
"put_method": "בחר שיטת PUT", "put_method": "בחר שיטת PUT",
"rename": "Rename Request",
"reset_request": "איפוס הבקשה", "reset_request": "איפוס הבקשה",
"save_request": "Save Request",
"save_to_collections": "שמור באוספים", "save_to_collections": "שמור באוספים",
"send_request": "שלח בקשה", "send_request": "שלח בקשה",
"show_code": "Generate code snippet",
"title": "בַּקָשָׁה" "title": "בַּקָשָׁה"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "עֵץ", "log": "עֵץ",
"url": "כתובת URL" "url": "כתובת URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "סוג אירוע", "event_type": "סוג אירוע",
"log": "עֵץ", "log": "עֵץ",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "הרשאה", "authorization": "הרשאה",
"body": "גוּף", "body": "גוּף",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "אוספים", "collections": "אוספים",
"documentation": "תיעוד", "documentation": "תיעוד",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "כותרות", "headers": "כותרות",
"history": "הִיסטוֹרִיָה", "history": "הִיסטוֹרִיָה",

View File

@@ -5,6 +5,7 @@
"choose_file": "फ़ाइल चुनें", "choose_file": "फ़ाइल चुनें",
"clear": "साफ़", "clear": "साफ़",
"clear_all": "सभी साफ करें", "clear_all": "सभी साफ करें",
"clear_history": "Clear all History",
"close": "बंद करे", "close": "बंद करे",
"connect": "कनेक्ट करें", "connect": "कनेक्ट करें",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "पेस्ट", "paste": "पेस्ट",
"prettify": "सुंदर करे", "prettify": "सुंदर करे",
"remove": "हटाओ", "remove": "हटाओ",
"rename": "Rename",
"restore": "पुनर्स्थापित करें", "restore": "पुनर्स्थापित करें",
"save": "बचाएं", "save": "बचाएं",
"scroll_to_bottom": "नीचे स्क्रॉल करें", "scroll_to_bottom": "नीचे स्क्रॉल करें",
@@ -77,6 +79,8 @@
"search": "खोज", "search": "खोज",
"share": "बाँट", "share": "बाँट",
"shortcuts": "शॉर्टकट", "shortcuts": "शॉर्टकट",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "स्पॉटलाइट", "spotlight": "स्पॉटलाइट",
"status": "स्थिति", "status": "स्थिति",
"status_description": "वेबसाइट की स्थिति जांचें", "status_description": "वेबसाइट की स्थिति जांचें",
@@ -131,12 +135,15 @@
"renamed": "संग्रह का नाम बदला गया", "renamed": "संग्रह का नाम बदला गया",
"request_in_use": "रिक्वेस्ट इन यूज़", "request_in_use": "रिक्वेस्ट इन यूज़",
"save_as": "इस रूप में सेव करें", "save_as": "इस रूप में सेव करें",
"save_to_collection": "Save to Collection",
"select": "एक संग्रह का चयन करें", "select": "एक संग्रह का चयन करें",
"select_location": "स्थान चुनें", "select_location": "स्थान चुनें",
"select_team": "एक टीम चुनें", "select_team": "एक टीम चुनें",
"team_collections": "टीम संग्रह" "team_collections": "टीम संग्रह"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "क्या आप वाकई इस टीम को छोड़ना चाहते हैं?", "exit_team": "क्या आप वाकई इस टीम को छोड़ना चाहते हैं?",
"logout": "क्या आप वाकई लॉगआउट करना चाहते हैं?", "logout": "क्या आप वाकई लॉगआउट करना चाहते हैं?",
"remove_collection": "क्या आप वाकई इस संग्रह को स्थायी रूप से हटाना चाहते हैं?", "remove_collection": "क्या आप वाकई इस संग्रह को स्थायी रूप से हटाना चाहते हैं?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "क्या आप अपने कार्यक्षेत्र को क्लाउड से पुनर्स्थापित करना चाहेंगे? यह आपकी स्थानीय प्रगति को त्याग देगा।" "sync": "क्या आप अपने कार्यक्षेत्र को क्लाउड से पुनर्स्थापित करना चाहेंगे? यह आपकी स्थानीय प्रगति को त्याग देगा।"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "हेडर {count}", "header": "हेडर {count}",
"message": "मैसेज {count}", "message": "मैसेज {count}",
@@ -192,17 +204,31 @@
"create_new": " नया वातावरण बनाएं", "create_new": " नया वातावरण बनाएं",
"created": " पर्यावरण बनाया", "created": " पर्यावरण बनाया",
"deleted": " पर्यावरण विलोपन", "deleted": " पर्यावरण विलोपन",
"duplicated": "Environment duplicated",
"edit": " पर्यावरण संपादित करें", "edit": " पर्यावरण संपादित करें",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": " कृपया पर्यावरण के लिए एक नाम प्रदान करें", "invalid_name": " कृपया पर्यावरण के लिए एक नाम प्रदान करें",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": " नेस्टेड पर्यावरण चर 10 स्तरों तक सीमित हैं", "nested_overflow": " नेस्टेड पर्यावरण चर 10 स्तरों तक सीमित हैं",
"new": " नया वातावरण", "new": " नया वातावरण",
"no_active_environment": "No active environment",
"no_environment": " कोई वातावरण नहीं", "no_environment": " कोई वातावरण नहीं",
"no_environment_description": " कोई परिवेश नहीं चुना गया था. चुनें कि निम्नलिखित चर के साथ क्या करना है।", "no_environment_description": " कोई परिवेश नहीं चुना गया था. चुनें कि निम्नलिखित चर के साथ क्या करना है।",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": " पर्यावरण का चयन करें", "select": " पर्यावरण का चयन करें",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": " वातावरण", "title": " वातावरण",
"updated": " पर्यावरण अद्यतन", "updated": " पर्यावरण अद्यतन",
"value": "Value",
"variable": "Variable",
"variable_list": " परिवर्तनीय सूची" "variable_list": " परिवर्तनीय सूची"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": " कोई अवधि नहीं", "no_duration": " कोई अवधि नहीं",
"no_results_found": " कोई मेल नहीं मिले", "no_results_found": " कोई मेल नहीं मिले",
"page_not_found": " यह पृष्ठ नहीं मिल सका", "page_not_found": " यह पृष्ठ नहीं मिल सका",
"proxy_error": "Proxy error",
"script_fail": " पूर्व-अनुरोध स्क्रिप्ट निष्पादित नहीं कर सका", "script_fail": " पूर्व-अनुरोध स्क्रिप्ट निष्पादित नहीं कर सका",
"something_went_wrong": " कुछ गलत हो गया", "something_went_wrong": " कुछ गलत हो गया",
"test_script_fail": " अनुरोध के बाद स्क्रिप्ट निष्पादित नहीं कर सका" "test_script_fail": " अनुरोध के बाद स्क्रिप्ट निष्पादित नहीं कर सका"
@@ -251,9 +278,13 @@
"renamed": " फ़ोल्डर का नाम बदला" "renamed": " फ़ोल्डर का नाम बदला"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": " उत्परिवर्तन", "mutations": " उत्परिवर्तन",
"schema": " योजना", "schema": " योजना",
"subscriptions": " सदस्यता" "subscriptions": " सदस्यता",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -274,8 +305,7 @@
"pre_request_script": " पूर्व-अनुरोध स्क्रिप्ट जावास्क्रिप्ट में लिखी जाती हैं, और अनुरोध भेजे जाने से पहले चलाई जाती हैं।", "pre_request_script": " पूर्व-अनुरोध स्क्रिप्ट जावास्क्रिप्ट में लिखी जाती हैं, और अनुरोध भेजे जाने से पहले चलाई जाती हैं।",
"script_fail": " ऐसा लगता है कि प्री-रिक्वेस्ट स्क्रिप्ट में गड़बड़ है। नीचे दी गई त्रुटि की जाँच करें और उसके अनुसार स्क्रिप्ट को ठीक करें।", "script_fail": " ऐसा लगता है कि प्री-रिक्वेस्ट स्क्रिप्ट में गड़बड़ है। नीचे दी गई त्रुटि की जाँच करें और उसके अनुसार स्क्रिप्ट को ठीक करें।",
"test_script_fail": " ऐसा लगता है कि परीक्षण स्क्रिप्ट में कोई त्रुटि है। कृपया त्रुटियों को ठीक करें और फिर से परीक्षण चलाएं", "test_script_fail": " ऐसा लगता है कि परीक्षण स्क्रिप्ट में कोई त्रुटि है। कृपया त्रुटियों को ठीक करें और फिर से परीक्षण चलाएं",
"tests": "Write a test script to automate debugging.", "tests": "Write a test script to automate debugging."
"test": "डिबगिंग को स्वचालित करने के लिए एक परीक्षण स्क्रिप्ट लिखें"
}, },
"hide": { "hide": {
"collection": "संग्रह पैनल संक्षिप्त करें", "collection": "संग्रह पैनल संक्षिप्त करें",
@@ -308,13 +338,36 @@
"json_description": "Hoppscotch Collections JSON फ़ाइल से संग्रह आयात करें", "json_description": "Hoppscotch Collections JSON फ़ाइल से संग्रह आयात करें",
"title": "आयात करें" "title": "आयात करें"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "संग्रह को संक्षिप्त या विस्तृत करें", "collapse_collection": "संग्रह को संक्षिप्त या विस्तृत करें",
"collapse_sidebar": "साइडबार को संक्षिप्त या विस्तृत करें", "collapse_sidebar": "साइडबार को संक्षिप्त या विस्तृत करें",
"column": "लंबवत लेआउट", "column": "लंबवत लेआउट",
"name": "लेआउट", "name": "लेआउट",
"row": "क्षैतिज लेआउट", "row": "क्षैतिज लेआउट"
"zen_mode": "ज़ेन मोड"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -419,6 +472,7 @@
"payload": "पेलोड", "payload": "पेलोड",
"query": "सवाल", "query": "सवाल",
"raw_body": "कच्चे अनुरोध निकाय", "raw_body": "कच्चे अनुरोध निकाय",
"rename": "Rename Request",
"renamed": "अनुरोध नाम दिया गया", "renamed": "अनुरोध नाम दिया गया",
"run": "दौड़ना", "run": "दौड़ना",
"save": "बचाना", "save": "बचाना",
@@ -426,6 +480,7 @@
"saved": "अनुरोध सहेजा गया", "saved": "अनुरोध सहेजा गया",
"share": "शेयर करना", "share": "शेयर करना",
"share_description": "अपने दोस्तों के साथ hoppscotch साझा करें", "share_description": "अपने दोस्तों के साथ hoppscotch साझा करें",
"stop": "Stop",
"title": "प्रार्थना", "title": "प्रार्थना",
"type": "अनुरोध का प्रकार", "type": "अनुरोध का प्रकार",
"url": "यूआरएल", "url": "यूआरएल",
@@ -460,7 +515,6 @@
"account_name_description": "यह आपका प्रदर्शन नाम है।", "account_name_description": "यह आपका प्रदर्शन नाम है।",
"background": "पार्श्वभूमि", "background": "पार्श्वभूमि",
"black_mode": "काला", "black_mode": "काला",
"change_font_size": "फॉण्ट आकार बदलें",
"choose_language": "भाषा चुनें", "choose_language": "भाषा चुनें",
"dark_mode": "अँधेरा", "dark_mode": "अँधेरा",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -473,10 +527,6 @@
"extensions": "ब्राउज़र विस्तार", "extensions": "ब्राउज़र विस्तार",
"extensions_use_toggle": "अनुरोध भेजने के लिए ब्राउज़र एक्सटेंशन का उपयोग करें (यदि मौजूद है)", "extensions_use_toggle": "अनुरोध भेजने के लिए ब्राउज़र एक्सटेंशन का उपयोग करें (यदि मौजूद है)",
"follow": "हमारे पर का पालन करें", "follow": "हमारे पर का पालन करें",
"font_size": "फ़ॉन्ट आकार",
"font_size_large": "विशाल",
"font_size_medium": "मध्यम",
"font_size_small": "छोटा",
"interceptor": "इंटरसेप्टर", "interceptor": "इंटरसेप्टर",
"interceptor_description": "एप्लिकेशन और एपीआई के बीच मिडलवेयर।", "interceptor_description": "एप्लिकेशन और एपीआई के बीच मिडलवेयर।",
"language": "भाषा", "language": "भाषा",
@@ -541,19 +591,27 @@
"settings": "सेटिंग्स पृष्ठ पर जाएं", "settings": "सेटिंग्स पृष्ठ पर जाएं",
"title": "मार्गदर्शन" "title": "मार्गदर्शन"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "कॉपी अनुरोध लिंक", "copy_request_link": "कॉपी अनुरोध लिंक",
"delete_method": "हटाएं विधि का चयन करें", "delete_method": "हटाएं विधि का चयन करें",
"get_method": "गेट विधि का चयन करें", "get_method": "गेट विधि का चयन करें",
"head_method": "हेड विधि का चयन करें", "head_method": "हेड विधि का चयन करें",
"import_curl": "Import cURL",
"method": "तरीका", "method": "तरीका",
"next_method": "अगली विधि का चयन करें", "next_method": "अगली विधि का चयन करें",
"post_method": "पोस्ट विधि का चयन करें", "post_method": "पोस्ट विधि का चयन करें",
"previous_method": "पिछली विधि का चयन करें", "previous_method": "पिछली विधि का चयन करें",
"put_method": "पुट विधि का चयन करें", "put_method": "पुट विधि का चयन करें",
"rename": "Rename Request",
"reset_request": "रीसेट अनुरोध", "reset_request": "रीसेट अनुरोध",
"save_request": "Save Request",
"save_to_collections": "संग्रह के लिए सहेजें", "save_to_collections": "संग्रह के लिए सहेजें",
"send_request": "अनुरोध भेजा", "send_request": "अनुरोध भेजा",
"show_code": "Generate code snippet",
"title": "प्रार्थना" "title": "प्रार्थना"
}, },
"response": { "response": {
@@ -583,6 +641,85 @@
"log": "लकड़ी का लट्ठा", "log": "लकड़ी का लट्ठा",
"url": "यूआरएल" "url": "यूआरएल"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "घटना प्रकार", "event_type": "घटना प्रकार",
"log": "लकड़ी का लट्ठा", "log": "लकड़ी का लट्ठा",
@@ -640,8 +777,11 @@
"tab": { "tab": {
"authorization": "प्राधिकार", "authorization": "प्राधिकार",
"body": "शरीर", "body": "शरीर",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "संग्रह", "collections": "संग्रह",
"documentation": "प्रलेखन", "documentation": "प्रलेखन",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "हेडर", "headers": "हेडर",
"history": "इतिहास", "history": "इतिहास",

View File

@@ -5,6 +5,7 @@
"choose_file": "Válasszon egy fájlt", "choose_file": "Válasszon egy fájlt",
"clear": "Törlés", "clear": "Törlés",
"clear_all": "Összes törlése", "clear_all": "Összes törlése",
"clear_history": "Clear all History",
"close": "Bezárás", "close": "Bezárás",
"connect": "Kapcsolódás", "connect": "Kapcsolódás",
"connecting": "Kapcsolódás", "connecting": "Kapcsolódás",
@@ -31,6 +32,7 @@
"paste": "Beillesztés", "paste": "Beillesztés",
"prettify": "Csinosítás", "prettify": "Csinosítás",
"remove": "Eltávolítás", "remove": "Eltávolítás",
"rename": "Rename",
"restore": "Visszaállítás", "restore": "Visszaállítás",
"save": "Mentés", "save": "Mentés",
"scroll_to_bottom": "Görgetés az aljára", "scroll_to_bottom": "Görgetés az aljára",
@@ -77,6 +79,8 @@
"search": "Keresés", "search": "Keresés",
"share": "Megosztás", "share": "Megosztás",
"shortcuts": "Gyorsbillentyűk", "shortcuts": "Gyorsbillentyűk",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Reflektorfény", "spotlight": "Reflektorfény",
"status": "Állapot", "status": "Állapot",
"status_description": "A weboldal állapotának ellenőrzése", "status_description": "A weboldal állapotának ellenőrzése",
@@ -131,12 +135,15 @@
"renamed": "Gyűjtemény átnevezve", "renamed": "Gyűjtemény átnevezve",
"request_in_use": "A kérés használatban", "request_in_use": "A kérés használatban",
"save_as": "Mentés másként", "save_as": "Mentés másként",
"save_to_collection": "Save to Collection",
"select": "Gyűjtemény kiválasztása", "select": "Gyűjtemény kiválasztása",
"select_location": "Hely kiválasztása", "select_location": "Hely kiválasztása",
"select_team": "Csapat kiválasztása", "select_team": "Csapat kiválasztása",
"team_collections": "Csapat gyűjteményei" "team_collections": "Csapat gyűjteményei"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Biztosan el szeretné hagyni ezt a csapatot?", "exit_team": "Biztosan el szeretné hagyni ezt a csapatot?",
"logout": "Biztosan ki szeretne jelentkezni?", "logout": "Biztosan ki szeretne jelentkezni?",
"remove_collection": "Biztosan véglegesen törölni szeretné ezt a gyűjteményt?", "remove_collection": "Biztosan véglegesen törölni szeretné ezt a gyűjteményt?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Szeretné menteni az ezen a lapon elvégzett változtatásokat?", "save_unsaved_tab": "Szeretné menteni az ezen a lapon elvégzett változtatásokat?",
"sync": "Szeretné visszaállítani a munkaterületét a felhőből? Ez el fogja vetni a helyi folyamatát." "sync": "Szeretné visszaállítani a munkaterületét a felhőből? Ez el fogja vetni a helyi folyamatát."
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "{count}. fejléc", "header": "{count}. fejléc",
"message": "{count}. üzenet", "message": "{count}. üzenet",
@@ -192,17 +204,31 @@
"create_new": "Új környezet létrehozása", "create_new": "Új környezet létrehozása",
"created": "Környezet létrehozva", "created": "Környezet létrehozva",
"deleted": "Környezet törlése", "deleted": "Környezet törlése",
"duplicated": "Environment duplicated",
"edit": "Környezet szerkesztése", "edit": "Környezet szerkesztése",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Adjon nevet a környezetnek", "invalid_name": "Adjon nevet a környezetnek",
"list": "Environment variables",
"my_environments": "Saját környezetek", "my_environments": "Saját környezetek",
"name": "Name",
"nested_overflow": "az egymásba ágyazott környezeti változók 10 szintre vannak korlátozva", "nested_overflow": "az egymásba ágyazott környezeti változók 10 szintre vannak korlátozva",
"new": "Új környezet", "new": "Új környezet",
"no_active_environment": "No active environment",
"no_environment": "Nincs környezet", "no_environment": "Nincs környezet",
"no_environment_description": "Nem lettek környezetek kiválasztva. Válassza ki, hogy mit kell tenni a következő változókkal.", "no_environment_description": "Nem lettek környezetek kiválasztva. Válassza ki, hogy mit kell tenni a következő változókkal.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Környezet kiválasztása", "select": "Környezet kiválasztása",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Csapatkörnyezetek", "team_environments": "Csapatkörnyezetek",
"title": "Környezetek", "title": "Környezetek",
"updated": "Környezet frissítve", "updated": "Környezet frissítve",
"value": "Value",
"variable": "Variable",
"variable_list": "Változólista" "variable_list": "Változólista"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Nincs időtartam", "no_duration": "Nincs időtartam",
"no_results_found": "Nincs találat", "no_results_found": "Nincs találat",
"page_not_found": "Ez az oldal nem található", "page_not_found": "Ez az oldal nem található",
"proxy_error": "Proxy error",
"script_fail": "Nem sikerült végrehajtani a kérés előtti parancsfájlt", "script_fail": "Nem sikerült végrehajtani a kérés előtti parancsfájlt",
"something_went_wrong": "Valami elromlott", "something_went_wrong": "Valami elromlott",
"test_script_fail": "Nem sikerült végrehajtani a kérés utáni parancsfájlt" "test_script_fail": "Nem sikerült végrehajtani a kérés utáni parancsfájlt"
@@ -251,9 +278,13 @@
"renamed": "Mappa átnevezve" "renamed": "Mappa átnevezve"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutációk", "mutations": "Mutációk",
"schema": "Séma", "schema": "Séma",
"subscriptions": "Feliratkozások" "subscriptions": "Feliratkozások",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Idő", "time": "Idő",
@@ -307,13 +338,36 @@
"json_description": "Gyűjtemények importálása Hoppscotch-gyűjtemények JSON-fájlból", "json_description": "Gyűjtemények importálása Hoppscotch-gyűjtemények JSON-fájlból",
"title": "Importálás" "title": "Importálás"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Gyűjtemények összecsukása vagy kinyitása", "collapse_collection": "Gyűjtemények összecsukása vagy kinyitása",
"collapse_sidebar": "Az oldalsáv összecsukása vagy kinyitása", "collapse_sidebar": "Az oldalsáv összecsukása vagy kinyitása",
"column": "Függőleges elrendezés", "column": "Függőleges elrendezés",
"name": "Elrendezés", "name": "Elrendezés",
"row": "Vízszintes elrendezés", "row": "Vízszintes elrendezés"
"zen_mode": "Zen mód"
}, },
"modal": { "modal": {
"close_unsaved_tab": "Elmentetlen változtatásai vannak", "close_unsaved_tab": "Elmentetlen változtatásai vannak",
@@ -418,6 +472,7 @@
"payload": "Hasznos teher", "payload": "Hasznos teher",
"query": "Lekérdezés", "query": "Lekérdezés",
"raw_body": "Nyers kéréstörzs", "raw_body": "Nyers kéréstörzs",
"rename": "Rename Request",
"renamed": "Kérés átnevezve", "renamed": "Kérés átnevezve",
"run": "Futtatás", "run": "Futtatás",
"save": "Mentés", "save": "Mentés",
@@ -425,6 +480,7 @@
"saved": "Kérés elmentve", "saved": "Kérés elmentve",
"share": "Megosztás", "share": "Megosztás",
"share_description": "A Hoppscotch megosztása az ismerőseivel", "share_description": "A Hoppscotch megosztása az ismerőseivel",
"stop": "Stop",
"title": "Kérés", "title": "Kérés",
"type": "Kérés típusa", "type": "Kérés típusa",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Ez a megjelenített neve.", "account_name_description": "Ez a megjelenített neve.",
"background": "Háttér", "background": "Háttér",
"black_mode": "Fekete", "black_mode": "Fekete",
"change_font_size": "Betűméret megváltoztatása",
"choose_language": "Nyelv kiválasztása", "choose_language": "Nyelv kiválasztása",
"dark_mode": "Sötét", "dark_mode": "Sötét",
"delete_account": "Fiók törlése", "delete_account": "Fiók törlése",
@@ -472,10 +527,6 @@
"extensions": "Böngészőkiterjesztés", "extensions": "Böngészőkiterjesztés",
"extensions_use_toggle": "A böngészőkiterjesztés használata a kérések küldéséhez (ha jelen van)", "extensions_use_toggle": "A böngészőkiterjesztés használata a kérések küldéséhez (ha jelen van)",
"follow": "Kövessen minket", "follow": "Kövessen minket",
"font_size": "Betűméret",
"font_size_large": "Nagy",
"font_size_medium": "Közepes",
"font_size_small": "Kicsi",
"interceptor": "Elfogó", "interceptor": "Elfogó",
"interceptor_description": "Középprogram az alkalmazás és az API-k között.", "interceptor_description": "Középprogram az alkalmazás és az API-k között.",
"language": "Nyelv", "language": "Nyelv",
@@ -540,19 +591,27 @@
"settings": "Ugrás a beállítások oldalra", "settings": "Ugrás a beállítások oldalra",
"title": "Navigáció" "title": "Navigáció"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kérés hivatkozásának másolása", "copy_request_link": "Kérés hivatkozásának másolása",
"delete_method": "DELETE módszer kiválasztása", "delete_method": "DELETE módszer kiválasztása",
"get_method": "GET módszer kiválasztása", "get_method": "GET módszer kiválasztása",
"head_method": "HEAD módszer kiválasztása", "head_method": "HEAD módszer kiválasztása",
"import_curl": "Import cURL",
"method": "Módszer", "method": "Módszer",
"next_method": "Következő módszer kiválasztása", "next_method": "Következő módszer kiválasztása",
"post_method": "POST módszer kiválasztása", "post_method": "POST módszer kiválasztása",
"previous_method": "Előző módszer kiválasztása", "previous_method": "Előző módszer kiválasztása",
"put_method": "PUT módszer kiválasztása", "put_method": "PUT módszer kiválasztása",
"rename": "Rename Request",
"reset_request": "Kérés visszaállítása", "reset_request": "Kérés visszaállítása",
"save_request": "Save Request",
"save_to_collections": "Mentés a gyűjteményekbe", "save_to_collections": "Mentés a gyűjteményekbe",
"send_request": "Kérés elküldése", "send_request": "Kérés elküldése",
"show_code": "Generate code snippet",
"title": "Kérés" "title": "Kérés"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Napló", "log": "Napló",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Esemény típusa", "event_type": "Esemény típusa",
"log": "Napló", "log": "Napló",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Felhatalmazás", "authorization": "Felhatalmazás",
"body": "Törzs", "body": "Törzs",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Gyűjtemények", "collections": "Gyűjtemények",
"documentation": "Dokumentáció", "documentation": "Dokumentáció",
"duplicate": "Duplicate Tab",
"environments": "Környezetek", "environments": "Környezetek",
"headers": "Fejlécek", "headers": "Fejlécek",
"history": "Előzmények", "history": "Előzmények",

View File

@@ -5,6 +5,7 @@
"choose_file": "Pilih file", "choose_file": "Pilih file",
"clear": "Bersihkan", "clear": "Bersihkan",
"clear_all": "Bersihkan semua", "clear_all": "Bersihkan semua",
"clear_history": "Clear all History",
"close": "Tutup", "close": "Tutup",
"connect": "Sambungkan", "connect": "Sambungkan",
"connecting": "Menyambungkan", "connecting": "Menyambungkan",
@@ -31,6 +32,7 @@
"paste": "Tempel", "paste": "Tempel",
"prettify": "Prettify", "prettify": "Prettify",
"remove": "Hapus", "remove": "Hapus",
"rename": "Rename",
"restore": "Pulihkan", "restore": "Pulihkan",
"save": "Simpan", "save": "Simpan",
"scroll_to_bottom": "Gulir ke bawah", "scroll_to_bottom": "Gulir ke bawah",
@@ -77,6 +79,8 @@
"search": "Mencari", "search": "Mencari",
"share": "Membagikan", "share": "Membagikan",
"shortcuts": "Jalan pintas", "shortcuts": "Jalan pintas",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Menyoroti", "spotlight": "Menyoroti",
"status": "Status", "status": "Status",
"status_description": "Periksa status situs web", "status_description": "Periksa status situs web",
@@ -118,25 +122,28 @@
}, },
"collection": { "collection": {
"created": "Koleksi dibuat", "created": "Koleksi dibuat",
"different_parent": "Cannot reorder collection with different parent", "different_parent": "Tidak dapat mengubah urutan koleksi dengan induk yang berbeda",
"edit": "Mengubah Koleksi", "edit": "Mengubah Koleksi",
"invalid_name": "Berikan nama untuk Koleksi", "invalid_name": "Berikan nama untuk Koleksi",
"invalid_root_move": "Collection already in the root", "invalid_root_move": "Koleksi sudah berada di akar direktori",
"moved": "Moved Successfully", "moved": "Berhasil Dipindahkan",
"my_collections": "Koleksi Saya", "my_collections": "Koleksi Saya",
"name": "Koleksi Baru Saya", "name": "Koleksi Baru Saya",
"name_length_insufficient": "Nama koleksi harus minimal 3 karakter", "name_length_insufficient": "Nama koleksi harus minimal 3 karakter",
"new": "Koleksi baru", "new": "Koleksi baru",
"order_changed": "Collection Order Updated", "order_changed": "Pembaruan Urutan Koleksi",
"renamed": "Koleksi berganti nama", "renamed": "Koleksi berganti nama",
"request_in_use": "Permintaan sedang digunakan", "request_in_use": "Permintaan sedang digunakan",
"save_as": "Simpan Sebagai", "save_as": "Simpan Sebagai",
"save_to_collection": "Save to Collection",
"select": "Pilih Koleksi", "select": "Pilih Koleksi",
"select_location": "Pilih lokasi", "select_location": "Pilih lokasi",
"select_team": "Pilih team", "select_team": "Pilih tim",
"team_collections": "Koleksi Tim" "team_collections": "Koleksi Tim"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Apakah Anda yakin ingin keluar dari tim ini?", "exit_team": "Apakah Anda yakin ingin keluar dari tim ini?",
"logout": "Apakah Anda yakin ingin keluar?", "logout": "Apakah Anda yakin ingin keluar?",
"remove_collection": "Apakah Anda yakin ingin menghapus koleksi ini secara permanen?", "remove_collection": "Apakah Anda yakin ingin menghapus koleksi ini secara permanen?",
@@ -147,9 +154,14 @@
"remove_team": "Apakah Anda yakin ingin menghapus tim ini?", "remove_team": "Apakah Anda yakin ingin menghapus tim ini?",
"remove_telemetry": "Apakah Anda yakin ingin menyisih dari Telemetri?", "remove_telemetry": "Apakah Anda yakin ingin menyisih dari Telemetri?",
"request_change": "Apakah Anda yakin ingin membuang permintaan saat ini, perubahan yang belum disimpan akan hilang.", "request_change": "Apakah Anda yakin ingin membuang permintaan saat ini, perubahan yang belum disimpan akan hilang.",
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Apakah Anda ingin menyimpan perubahan yang dibuat di tab ini?",
"sync": "Apakah Anda ingin memulihkan ruang kerja Anda dari cloud? Ini akan membuang kemajuan lokal Anda." "sync": "Apakah Anda ingin memulihkan ruang kerja Anda dari cloud? Ini akan membuang kemajuan lokal Anda."
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Header {count}", "header": "Header {count}",
"message": "Pesan {count}", "message": "Pesan {count}",
@@ -180,8 +192,8 @@
"profile": "Masuk untuk melihat profil Anda", "profile": "Masuk untuk melihat profil Anda",
"protocols": "Protokol kosong", "protocols": "Protokol kosong",
"schema": "Hubungkan ke endpoint GraphQL untuk melihat skema", "schema": "Hubungkan ke endpoint GraphQL untuk melihat skema",
"shortcodes": "Shortcodes are empty", "shortcodes": "Shortcodes kosong",
"subscription": "Subscriptions are empty", "subscription": "Langganan kosong",
"team_name": "Nama team kosong", "team_name": "Nama team kosong",
"teams": "Kamu bukan di team manapun", "teams": "Kamu bukan di team manapun",
"tests": "Tidak ada tes untuk permintaan ini" "tests": "Tidak ada tes untuk permintaan ini"
@@ -189,20 +201,34 @@
"environment": { "environment": {
"add_to_global": "Tambahkan ke Global", "add_to_global": "Tambahkan ke Global",
"added": "Tambahan Environment", "added": "Tambahan Environment",
"create_new": "Membuat baru environment", "create_new": "Membuat environment baru",
"created": "Environment dibuat", "created": "Environment dibuat",
"deleted": "Environment dihapus", "deleted": "Environment dihapus",
"duplicated": "Environment duplicated",
"edit": "Sunting Environment", "edit": "Sunting Environment",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Tolong beri nama untuk environment", "invalid_name": "Tolong beri nama untuk environment",
"my_environments": "My Environments", "list": "Environment variables",
"nested_overflow": "variabel environment bersarang dibatasi hingga 10 level", "my_environments": "Environment Saya",
"name": "Name",
"nested_overflow": "Variabel environment bersarang dibatasi hingga 10 level",
"new": "Environment Baru", "new": "Environment Baru",
"no_active_environment": "No active environment",
"no_environment": "No environment", "no_environment": "No environment",
"no_environment_description": "Tidak ada environment yang dipilih. Pilih apa yang harus dilakukan dengan variabel berikut.", "no_environment_description": "Tidak ada environment yang dipilih. Pilih apa yang harus dilakukan dengan variabel berikut.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Pilih environment", "select": "Pilih environment",
"team_environments": "Team Environments", "set": "Set environment",
"title": "Environments", "set_as_environment": "Set as environment",
"team_environments": "Environment Tim",
"title": "Environment",
"updated": "Environment diperbarui", "updated": "Environment diperbarui",
"value": "Value",
"variable": "Variable",
"variable_list": "Daftar Variable" "variable_list": "Daftar Variable"
}, },
"error": { "error": {
@@ -210,8 +236,8 @@
"check_console_details": "Periksa console log untuk detailnya.", "check_console_details": "Periksa console log untuk detailnya.",
"curl_invalid_format": "cURL tidak diformat dengan benar", "curl_invalid_format": "cURL tidak diformat dengan benar",
"danger_zone": "Danger zone", "danger_zone": "Danger zone",
"delete_account": "Your account is currently an owner in these teams:", "delete_account": "Akun Anda saat ini merupakan pemilik dalam tim-tim ini:",
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.", "delete_account_description": "Anda harus menghapus diri Anda dari tim-tim ini, mentransfer kepemilikan, atau menghapus tim-tim ini sebelum Anda dapat menghapus akun Anda.",
"empty_req_name": "Nama Permintaan Kosong", "empty_req_name": "Nama Permintaan Kosong",
"f12_details": "(F12 untuk detailnya)", "f12_details": "(F12 untuk detailnya)",
"gql_prettify_invalid_query": "Tidak dapat prettify kueri yang tidak valid, menyelesaikan kesalahan sintaksis kueri, dan coba lagi", "gql_prettify_invalid_query": "Tidak dapat prettify kueri yang tidak valid, menyelesaikan kesalahan sintaksis kueri, dan coba lagi",
@@ -226,6 +252,7 @@
"no_duration": "Tidak ada durasi", "no_duration": "Tidak ada durasi",
"no_results_found": "Tidak ada kecocokan yang ditemukan", "no_results_found": "Tidak ada kecocokan yang ditemukan",
"page_not_found": "Halaman ini tidak dapat ditemukan", "page_not_found": "Halaman ini tidak dapat ditemukan",
"proxy_error": "Proxy error",
"script_fail": "Tidak dapat menjalankan pre-request script", "script_fail": "Tidak dapat menjalankan pre-request script",
"something_went_wrong": "Ada yang salah", "something_went_wrong": "Ada yang salah",
"test_script_fail": "Tidak dapat mengeksekusi post-request script" "test_script_fail": "Tidak dapat mengeksekusi post-request script"
@@ -251,9 +278,13 @@
"renamed": "Folder berganti nama" "renamed": "Folder berganti nama"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutations", "mutations": "Mutations",
"schema": "Schema", "schema": "Schema",
"subscriptions": "Subscriptions" "subscriptions": "Subscriptions",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -294,7 +325,7 @@
"from_json_description": "Impor dari Hoppscotch berkas koleksi", "from_json_description": "Impor dari Hoppscotch berkas koleksi",
"from_my_collections": "Impor dari Koleksi Saya", "from_my_collections": "Impor dari Koleksi Saya",
"from_my_collections_description": "Impor dari Berkas Koleksi Saya", "from_my_collections_description": "Impor dari Berkas Koleksi Saya",
"from_openapi": "Import dari OpenAPI", "from_openapi": "Impor dari OpenAPI",
"from_openapi_description": "Impor dari OpenAPI syarat berkas (YML/JSON)", "from_openapi_description": "Impor dari OpenAPI syarat berkas (YML/JSON)",
"from_postman": "Impor dari Postman", "from_postman": "Impor dari Postman",
"from_postman_description": "Impor dari Koleksi Postman", "from_postman_description": "Impor dari Koleksi Postman",
@@ -307,32 +338,55 @@
"json_description": "Impor Koleksi dari berkas JSON Koleksi Hoppscotch", "json_description": "Impor Koleksi dari berkas JSON Koleksi Hoppscotch",
"title": "Impor" "title": "Impor"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Ciutkan atau Perluas Collections", "collapse_collection": "Ciutkan atau Perluas Collections",
"collapse_sidebar": "Ciutkan atau Perluas sidebar", "collapse_sidebar": "Ciutkan atau Perluas sidebar",
"column": "Vertikal layout", "column": "Vertikal layout",
"name": "Layout", "name": "Layout",
"row": "Horisontal layout", "row": "Horisontal layout"
"zen_mode": "Zen mode"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "Anda memiliki perubahan yang belum disimpan",
"collections": "Koleksi", "collections": "Koleksi",
"confirm": "Mengonfirmasi", "confirm": "Mengonfirmasi",
"edit_request": "Edit Request", "edit_request": "Edit Request",
"import_export": "Impor / Ekspor" "import_export": "Impor / Ekspor"
}, },
"mqtt": { "mqtt": {
"already_subscribed": "You are already subscribed to this topic.", "already_subscribed": "Anda sudah berlangganan topik ini.",
"clean_session": "Clean Session", "clean_session": "Sesi Bersih",
"clear_input": "Clear input", "clear_input": "Hapus input",
"clear_input_on_send": "Clear input on send", "clear_input_on_send": "Hapus input saat mengirim",
"client_id": "Client ID", "client_id": "Client ID",
"color": "Pick a color", "color": "Pilih warna",
"communication": "Komunikasi", "communication": "Komunikasi",
"connection_config": "Connection Config", "connection_config": "Konfigurasi Koneksi",
"connection_not_authorized": "This MQTT connection does not use any authentication.", "connection_not_authorized": "Koneksi MQTT ini tidak menggunakan otentikasi",
"invalid_topic": "Please provide a topic for the subscription", "invalid_topic": "Harap berikan topik untuk langganan",
"keep_alive": "Keep Alive", "keep_alive": "Keep Alive",
"log": "Log", "log": "Log",
"lw_message": "Last-Will Message", "lw_message": "Last-Will Message",
@@ -340,8 +394,8 @@
"lw_retain": "Last-Will Retain", "lw_retain": "Last-Will Retain",
"lw_topic": "Last-Will Topic", "lw_topic": "Last-Will Topic",
"message": "Pesan", "message": "Pesan",
"new": "New Subscription", "new": "Langganan Baru",
"not_connected": "Please start a MQTT connection first.", "not_connected": "Mulai koneksi MQTT terlebih dahulu",
"publish": "Menerbitkan", "publish": "Menerbitkan",
"qos": "QoS", "qos": "QoS",
"ssl": "SSL", "ssl": "SSL",
@@ -396,19 +450,19 @@
"text": "Text" "text": "Text"
}, },
"copy_link": "Salin tautan", "copy_link": "Salin tautan",
"different_collection": "Cannot reorder requests from different collections", "different_collection": "Tidak dapat mengubah urutan permintaan dari koleksi yang berbeda",
"duplicated": "Request duplicated", "duplicated": "Request duplicated",
"duration": "Durasi", "duration": "Durasi",
"enter_curl": "Masukkan cURL", "enter_curl": "Masukkan cURL",
"generate_code": "Generate code", "generate_code": "Hasilkan kode",
"generated_code": "Generated code", "generated_code": "Hasilkan kode",
"header_list": "Daftar Header", "header_list": "Daftar Header",
"invalid_name": "Harap berikan nama untuk request", "invalid_name": "Harap berikan nama untuk request",
"method": "Method", "method": "Method",
"moved": "Request moved", "moved": "Request moved",
"name": "Request nama", "name": "Request nama",
"new": "Request baru", "new": "Request baru",
"order_changed": "Request Order Updated", "order_changed": "Urutan Request Diperbarui",
"override": "Membatalkan", "override": "Membatalkan",
"override_help": "Set <kbd>Content-Type</kbd> in Headers", "override_help": "Set <kbd>Content-Type</kbd> in Headers",
"overriden": "Diganti", "overriden": "Diganti",
@@ -418,6 +472,7 @@
"payload": "Payload", "payload": "Payload",
"query": "Query", "query": "Query",
"raw_body": "Raw Request Body", "raw_body": "Raw Request Body",
"rename": "Rename Request",
"renamed": "Request berganti nama", "renamed": "Request berganti nama",
"run": "Jalankan", "run": "Jalankan",
"save": "Menyimpan", "save": "Menyimpan",
@@ -425,6 +480,7 @@
"saved": "Request disimpan", "saved": "Request disimpan",
"share": "Membagikan", "share": "Membagikan",
"share_description": "Bagikan Hoppscotch dengan teman-teman Anda", "share_description": "Bagikan Hoppscotch dengan teman-teman Anda",
"stop": "Stop",
"title": "Request", "title": "Request",
"type": "Tipe Request", "type": "Tipe Request",
"url": "URL", "url": "URL",
@@ -453,13 +509,12 @@
"settings": { "settings": {
"accent_color": "Accent color", "accent_color": "Accent color",
"account": "Akun", "account": "Akun",
"account_deleted": "Your account has been deleted", "account_deleted": "Akun Anda telah dihapus",
"account_description": "Sesuaikan pengaturan akun Anda.", "account_description": "Sesuaikan pengaturan akun Anda.",
"account_email_description": "Alamat surel utama Anda.", "account_email_description": "Alamat surel utama Anda.",
"account_name_description": "Ini adalah nama tampilan Anda.", "account_name_description": "Ini adalah nama tampilan Anda.",
"background": "Latar belakang", "background": "Latar belakang",
"black_mode": "Hitam", "black_mode": "Hitam",
"change_font_size": "Ubah ukuran font",
"choose_language": "Pilih bahasa", "choose_language": "Pilih bahasa",
"dark_mode": "Gelap", "dark_mode": "Gelap",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Ekstensi Peramban", "extensions": "Ekstensi Peramban",
"extensions_use_toggle": "Gunakan ekstensi peramban untuk mengirim permintaan (jika ada)", "extensions_use_toggle": "Gunakan ekstensi peramban untuk mengirim permintaan (jika ada)",
"follow": "Ikuti kami", "follow": "Ikuti kami",
"font_size": "Ukuran huruf",
"font_size_large": "Besar",
"font_size_medium": "Sedang",
"font_size_small": "Kecil",
"interceptor": "Pencegat", "interceptor": "Pencegat",
"interceptor_description": "Middleware antara aplikasi dan API.", "interceptor_description": "Middleware antara aplikasi dan API.",
"language": "Bahasa", "language": "Bahasa",
@@ -540,19 +591,27 @@
"settings": "Pergi ke halaman Pengaturan", "settings": "Pergi ke halaman Pengaturan",
"title": "Navigasi" "title": "Navigasi"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Salin Tautan Permintaan", "copy_request_link": "Salin Tautan Permintaan",
"delete_method": "Pilih metode DELETE", "delete_method": "Pilih metode DELETE",
"get_method": "Pilih metode GET", "get_method": "Pilih metode GET",
"head_method": "Pilih metode HEAD", "head_method": "Pilih metode HEAD",
"import_curl": "Import cURL",
"method": "metode", "method": "metode",
"next_method": "Pilih metode Next", "next_method": "Pilih metode Next",
"post_method": "Pilih metode POST", "post_method": "Pilih metode POST",
"previous_method": "Pilih metode Previous", "previous_method": "Pilih metode Previous",
"put_method": "Pilih metode PUT", "put_method": "Pilih metode PUT",
"rename": "Rename Request",
"reset_request": "Mengatur ulang Request", "reset_request": "Mengatur ulang Request",
"save_request": "Save Request",
"save_to_collections": "Menyimpan ke Collections", "save_to_collections": "Menyimpan ke Collections",
"send_request": "Kirim Request", "send_request": "Kirim Request",
"show_code": "Generate code snippet",
"title": "Request" "title": "Request"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Log", "log": "Log",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tipe Event", "event_type": "Tipe Event",
"log": "Log", "log": "Log",
@@ -609,7 +747,7 @@
"file_imported": "File diimpor", "file_imported": "File diimpor",
"finished_in": "Selesai dalam {duration} ms", "finished_in": "Selesai dalam {duration} ms",
"history_deleted": "Riwayat dihapus", "history_deleted": "Riwayat dihapus",
"linewrap": "Wrap lines", "linewrap": "Bungkus baris",
"loading": "Memuat...", "loading": "Memuat...",
"message_received": "Pesan: {message} tiba di topik: {topic}", "message_received": "Pesan: {message} tiba di topik: {topic}",
"mqtt_subscription_failed": "Terjadi masalah saat berlangganan topik: {topic}", "mqtt_subscription_failed": "Terjadi masalah saat berlangganan topik: {topic}",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Authorization", "authorization": "Authorization",
"body": "Body", "body": "Body",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Collections", "collections": "Collections",
"documentation": "Dokumentasi", "documentation": "Dokumentasi",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Headers", "headers": "Headers",
"history": "Riwayat", "history": "Riwayat",
@@ -666,7 +807,7 @@
"email_do_not_match": "Surel tidak cocok dengan detail akun Anda. Hubungi pemilik tim Anda.", "email_do_not_match": "Surel tidak cocok dengan detail akun Anda. Hubungi pemilik tim Anda.",
"exit": "Keluar dari Tim", "exit": "Keluar dari Tim",
"exit_disabled": "Hanya pemilik yang tidak dapat keluar dari tim", "exit_disabled": "Hanya pemilik yang tidak dapat keluar dari tim",
"invalid_coll_id": "Invalid collection ID", "invalid_coll_id": "ID koleksi tidak valid",
"invalid_email_format": "Format surel tidak valid", "invalid_email_format": "Format surel tidak valid",
"invalid_id": "ID tim tidak valid. Hubungi pemilik tim Anda.", "invalid_id": "ID tim tidak valid. Hubungi pemilik tim Anda.",
"invalid_invite_link": "Tautan undangan tidak valid", "invalid_invite_link": "Tautan undangan tidak valid",
@@ -690,7 +831,7 @@
"member_removed": "Pengguna dihapus", "member_removed": "Pengguna dihapus",
"member_role_updated": "Peran pengguna diperbarui", "member_role_updated": "Peran pengguna diperbarui",
"members": "Anggota", "members": "Anggota",
"more_members": "+{count} more", "more_members": "+{count} lebih",
"name_length_insufficient": "Nama tim harus setidaknya 6 karakter", "name_length_insufficient": "Nama tim harus setidaknya 6 karakter",
"name_updated": "Nama tim diperbarui", "name_updated": "Nama tim diperbarui",
"new": "Tim Baru", "new": "Tim Baru",
@@ -698,13 +839,13 @@
"new_name": "Tim baru saya", "new_name": "Tim baru saya",
"no_access": "Anda tidak memiliki akses edit ke collections ini", "no_access": "Anda tidak memiliki akses edit ke collections ini",
"no_invite_found": "Undangan tidak ditemukan. Hubungi pemilik tim Anda.", "no_invite_found": "Undangan tidak ditemukan. Hubungi pemilik tim Anda.",
"no_request_found": "Request not found.", "no_request_found": "Request tidak ditemukan.",
"not_found": "Tim tidak ditemukan. Hubungi pemilik tim Anda.", "not_found": "Tim tidak ditemukan. Hubungi pemilik tim Anda.",
"not_valid_viewer": "Anda bukan penonton yang valid. Hubungi pemilik tim Anda.", "not_valid_viewer": "Anda bukan penonton yang valid. Hubungi pemilik tim Anda.",
"parent_coll_move": "Cannot move collection to a child collection", "parent_coll_move": "Tidak dapat memindahkan koleksi ke dalam koleksi anak",
"pending_invites": "Undangan tertunda", "pending_invites": "Undangan tertunda",
"permissions": "Izin", "permissions": "Izin",
"same_target_destination": "Same target and destination", "same_target_destination": "Sama tujuan dan destinasi",
"saved": "Tim disimpan", "saved": "Tim disimpan",
"select_a_team": "Pilih tim", "select_a_team": "Pilih tim",
"title": "tim", "title": "tim",
@@ -712,9 +853,9 @@
"we_sent_invite_link_description": "Minta semua undangan untuk memeriksa kotak masuk mereka. Klik tautan untuk bergabung dengan tim." "we_sent_invite_link_description": "Minta semua undangan untuk memeriksa kotak masuk mereka. Klik tautan untuk bergabung dengan tim."
}, },
"team_environment": { "team_environment": {
"deleted": "Environment Deleted", "deleted": "Environment dihapus",
"duplicate": "Environment Duplicated", "duplicate": "Environment diduplikasi",
"not_found": "Environment not found." "not_found": "Environment tidak ditemukan."
}, },
"test": { "test": {
"failed": "Tes gagal", "failed": "Tes gagal",
@@ -734,9 +875,9 @@
"url": "URL" "url": "URL"
}, },
"workspace": { "workspace": {
"change": "Change workspace", "change": "Beralih workspace",
"personal": "My Workspace", "personal": "Workspace Saya",
"team": "Team Workspace", "team": "Workspace Tim",
"title": "Workspaces" "title": "Workspaces"
} }
} }

View File

@@ -5,6 +5,7 @@
"choose_file": "Scegli un file", "choose_file": "Scegli un file",
"clear": "Cancella", "clear": "Cancella",
"clear_all": "Cancella tutto", "clear_all": "Cancella tutto",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Connetti", "connect": "Connetti",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Abbellisci", "prettify": "Abbellisci",
"remove": "Rimuovi", "remove": "Rimuovi",
"rename": "Rename",
"restore": "Ripristina", "restore": "Ripristina",
"save": "Salva", "save": "Salva",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Cerca", "search": "Cerca",
"share": "Condividi", "share": "Condividi",
"shortcuts": "Scorciatoie", "shortcuts": "Scorciatoie",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Riflettore", "spotlight": "Riflettore",
"status": "Stato", "status": "Stato",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Raccolta rinominata", "renamed": "Raccolta rinominata",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Salva come", "save_as": "Salva come",
"save_to_collection": "Save to Collection",
"select": "Seleziona una raccolta", "select": "Seleziona una raccolta",
"select_location": "Seleziona la posizione", "select_location": "Seleziona la posizione",
"select_team": "Seleziona un team", "select_team": "Seleziona un team",
"team_collections": "Raccolte di team" "team_collections": "Raccolte di team"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Sei sicuro di voler uscire?", "logout": "Sei sicuro di voler uscire?",
"remove_collection": "Sei sicuro di voler eliminare definitivamente questa raccolta?", "remove_collection": "Sei sicuro di voler eliminare definitivamente questa raccolta?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Vuoi ripristinare il tuo spazio di lavoro con quello del cloud? Questo annullerà le tue modifiche fatte in locale." "sync": "Vuoi ripristinare il tuo spazio di lavoro con quello del cloud? Questo annullerà le tue modifiche fatte in locale."
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Intestazione {count}", "header": "Intestazione {count}",
"message": "Messaggio {count}", "message": "Messaggio {count}",
@@ -192,17 +204,31 @@
"create_new": "Crea un nuovo ambiente", "create_new": "Crea un nuovo ambiente",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Modifica ambiente", "edit": "Modifica ambiente",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Si prega di fornire un nome valido per l'ambiente", "invalid_name": "Si prega di fornire un nome valido per l'ambiente",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nuovo ambiente", "new": "Nuovo ambiente",
"no_active_environment": "No active environment",
"no_environment": "Nessun ambiente", "no_environment": "Nessun ambiente",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Seleziona ambiente", "select": "Seleziona ambiente",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Ambienti", "title": "Ambienti",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Elenco variabili" "variable_list": "Elenco variabili"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Nessuna durata", "no_duration": "Nessuna durata",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Impossibile eseguire lo script di pre-richiesta", "script_fail": "Impossibile eseguire lo script di pre-richiesta",
"something_went_wrong": "Qualcosa è andato storto", "something_went_wrong": "Qualcosa è andato storto",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Cartella rinominata" "renamed": "Cartella rinominata"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutazioni", "mutations": "Mutazioni",
"schema": "Schema", "schema": "Schema",
"subscriptions": "Sottoscrizioni" "subscriptions": "Sottoscrizioni",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Importa" "title": "Importa"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Disposizione verticale", "column": "Disposizione verticale",
"name": "Layout", "name": "Layout",
"row": "Disposizione orizzontale", "row": "Disposizione orizzontale"
"zen_mode": "Modalità zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Contenuto (Payload)", "payload": "Contenuto (Payload)",
"query": "Query", "query": "Query",
"raw_body": "Corpo della richiesta non formattato", "raw_body": "Corpo della richiesta non formattato",
"rename": "Rename Request",
"renamed": "Richiesta rinominata", "renamed": "Richiesta rinominata",
"run": "Esegui", "run": "Esegui",
"save": "Salva", "save": "Salva",
@@ -425,6 +480,7 @@
"saved": "Richiesta salvata", "saved": "Richiesta salvata",
"share": "Condividi", "share": "Condividi",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Richiesta", "title": "Richiesta",
"type": "Tipo di richiesta", "type": "Tipo di richiesta",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Questo è il tuo nome mostrato.", "account_name_description": "Questo è il tuo nome mostrato.",
"background": "Sfondo", "background": "Sfondo",
"black_mode": "Nero", "black_mode": "Nero",
"change_font_size": "Cambia la dimensione dei caratteri",
"choose_language": "Scegli la lingua", "choose_language": "Scegli la lingua",
"dark_mode": "Scuro", "dark_mode": "Scuro",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Estensioni", "extensions": "Estensioni",
"extensions_use_toggle": "Utilizza l'estensione del browser per inviare richieste (se presente)", "extensions_use_toggle": "Utilizza l'estensione del browser per inviare richieste (se presente)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Dimensione dei caratteri",
"font_size_large": "Grande",
"font_size_medium": "Medio",
"font_size_small": "Piccolo",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware tra applicazione e API.", "interceptor_description": "Middleware tra applicazione e API.",
"language": "Lingua", "language": "Lingua",
@@ -540,19 +591,27 @@
"settings": "Vai alla pagina Impostazioni", "settings": "Vai alla pagina Impostazioni",
"title": "Navigazione" "title": "Navigazione"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copia il link alla richiesta", "copy_request_link": "Copia il link alla richiesta",
"delete_method": "Seleziona il metodo DELETE", "delete_method": "Seleziona il metodo DELETE",
"get_method": "Seleziona il metodo GET", "get_method": "Seleziona il metodo GET",
"head_method": "Seleziona il metodo HEAD", "head_method": "Seleziona il metodo HEAD",
"import_curl": "Import cURL",
"method": "Metodo", "method": "Metodo",
"next_method": "Seleziona il metodo successivo", "next_method": "Seleziona il metodo successivo",
"post_method": "Seleziona il metodo POST", "post_method": "Seleziona il metodo POST",
"previous_method": "Seleziona il metodo precedente", "previous_method": "Seleziona il metodo precedente",
"put_method": "Seleziona il metodo PUT", "put_method": "Seleziona il metodo PUT",
"rename": "Rename Request",
"reset_request": "Resetta la richiesta", "reset_request": "Resetta la richiesta",
"save_request": "Save Request",
"save_to_collections": "Salva nelle raccolte", "save_to_collections": "Salva nelle raccolte",
"send_request": "Invia richiesta", "send_request": "Invia richiesta",
"show_code": "Generate code snippet",
"title": "Richiesta" "title": "Richiesta"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Log", "log": "Log",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tipo di evento", "event_type": "Tipo di evento",
"log": "Log", "log": "Log",
@@ -627,7 +765,7 @@
"support": { "support": {
"changelog": "Maggiori informazioni sulle ultime versioni", "changelog": "Maggiori informazioni sulle ultime versioni",
"chat": "Domande? Chatta con noi!", "chat": "Domande? Chatta con noi!",
"community": "Fai domande e aiuta gli altri", "community": "Fai domande e aiuta gli altri",
"documentation": "Maggiori informazioni su Hoppscotch", "documentation": "Maggiori informazioni su Hoppscotch",
"forum": "Fai domande e ottieni risposte", "forum": "Fai domande e ottieni risposte",
"github": "Follow us on Github", "github": "Follow us on Github",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorizzazione", "authorization": "Autorizzazione",
"body": "Corpo", "body": "Corpo",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Raccolte", "collections": "Raccolte",
"documentation": "Documentazione", "documentation": "Documentazione",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Intestazioni", "headers": "Intestazioni",
"history": "Cronologia", "history": "Cronologia",

View File

@@ -5,6 +5,7 @@
"choose_file": "ファイルを選択してください", "choose_file": "ファイルを選択してください",
"clear": "クリア", "clear": "クリア",
"clear_all": "すべてクリア", "clear_all": "すべてクリア",
"clear_history": "Clear all History",
"close": "閉じる", "close": "閉じる",
"connect": "接続", "connect": "接続",
"connecting": "接続中", "connecting": "接続中",
@@ -31,6 +32,7 @@
"paste": "貼り付け", "paste": "貼り付け",
"prettify": "自動整形", "prettify": "自動整形",
"remove": "削除", "remove": "削除",
"rename": "Rename",
"restore": "戻す", "restore": "戻す",
"save": "保存", "save": "保存",
"scroll_to_bottom": "下にスクロール", "scroll_to_bottom": "下にスクロール",
@@ -77,6 +79,8 @@
"search": "検索", "search": "検索",
"share": "共有", "share": "共有",
"shortcuts": "ショートカット", "shortcuts": "ショートカット",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "スポットライト", "spotlight": "スポットライト",
"status": "状態", "status": "状態",
"status_description": "ウェブサイトの状態を確認", "status_description": "ウェブサイトの状態を確認",
@@ -131,12 +135,15 @@
"renamed": "コレクション名が変更されました", "renamed": "コレクション名が変更されました",
"request_in_use": "使用中のリクエスト", "request_in_use": "使用中のリクエスト",
"save_as": "名前を付けて保存", "save_as": "名前を付けて保存",
"save_to_collection": "Save to Collection",
"select": "コレクションを選択", "select": "コレクションを選択",
"select_location": "場所を選択", "select_location": "場所を選択",
"select_team": "チームを選択", "select_team": "チームを選択",
"team_collections": "チームコレクション" "team_collections": "チームコレクション"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "本当にこのチームから退出しますか?", "exit_team": "本当にこのチームから退出しますか?",
"logout": "ログアウトしてもよろしいですか?", "logout": "ログアウトしてもよろしいですか?",
"remove_collection": "このコレクションを完全に削除してもよろしいですか?", "remove_collection": "このコレクションを完全に削除してもよろしいですか?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "クラウドからワークスペースを復元しますか?この場合、ローカルの進行状況は破棄されます。" "sync": "クラウドからワークスペースを復元しますか?この場合、ローカルの進行状況は破棄されます。"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "ヘッダー {count}", "header": "ヘッダー {count}",
"message": "メッセージ {count}", "message": "メッセージ {count}",
@@ -192,17 +204,31 @@
"create_new": "新しい環境変数を作成", "create_new": "新しい環境変数を作成",
"created": "環境変数を作成しました", "created": "環境変数を作成しました",
"deleted": "環境変数を削除しました", "deleted": "環境変数を削除しました",
"duplicated": "Environment duplicated",
"edit": "環境変数の編集", "edit": "環境変数の編集",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "環境変数名を入力してください", "invalid_name": "環境変数名を入力してください",
"list": "Environment variables",
"my_environments": "個人の環境変数", "my_environments": "個人の環境変数",
"name": "Name",
"nested_overflow": "環境変数の入れ子は10段階までです", "nested_overflow": "環境変数の入れ子は10段階までです",
"new": "新しい環境変数", "new": "新しい環境変数",
"no_active_environment": "No active environment",
"no_environment": "環境変数が存在しません", "no_environment": "環境変数が存在しません",
"no_environment_description": "環境変数が選択されていません。次の環境変数から選択してください。", "no_environment_description": "環境変数が選択されていません。次の環境変数から選択してください。",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "環境変数を選択", "select": "環境変数を選択",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "チームの環境変数", "team_environments": "チームの環境変数",
"title": "環境変数", "title": "環境変数",
"updated": "環境変数を更新しました", "updated": "環境変数を更新しました",
"value": "Value",
"variable": "Variable",
"variable_list": "環境変数リスト" "variable_list": "環境変数リスト"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "期間なし", "no_duration": "期間なし",
"no_results_found": "該当するものがありませんでした", "no_results_found": "該当するものがありませんでした",
"page_not_found": "このページは見つかりませんでした", "page_not_found": "このページは見つかりませんでした",
"proxy_error": "Proxy error",
"script_fail": "リクエスト前のスクリプトを実行できませんでした", "script_fail": "リクエスト前のスクリプトを実行できませんでした",
"something_went_wrong": "不明なエラーです", "something_went_wrong": "不明なエラーです",
"test_script_fail": "リクエスト後のスクリプトを実行できませんでした" "test_script_fail": "リクエスト後のスクリプトを実行できませんでした"
@@ -251,9 +278,13 @@
"renamed": "フォルダ名が変更されました" "renamed": "フォルダ名が変更されました"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "ミューテーション", "mutations": "ミューテーション",
"schema": "スキーマ", "schema": "スキーマ",
"subscriptions": "サブスクリプション" "subscriptions": "サブスクリプション",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "時間", "time": "時間",
@@ -307,13 +338,36 @@
"json_description": "Hoppscotchのコレクション (JSONファイル) からインポート", "json_description": "Hoppscotchのコレクション (JSONファイル) からインポート",
"title": "インポート" "title": "インポート"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "コレクションを表示・非表示", "collapse_collection": "コレクションを表示・非表示",
"collapse_sidebar": "サイドバーを表示・非表示", "collapse_sidebar": "サイドバーを表示・非表示",
"column": "縦型レイアウト", "column": "縦型レイアウト",
"name": "レイアウト", "name": "レイアウト",
"row": "横型レイアウト", "row": "横型レイアウト"
"zen_mode": "禅モード"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "ペイロード", "payload": "ペイロード",
"query": "クエリ", "query": "クエリ",
"raw_body": "生のリクエストボディ", "raw_body": "生のリクエストボディ",
"rename": "Rename Request",
"renamed": "リクエストの名前を変更", "renamed": "リクエストの名前を変更",
"run": "実行", "run": "実行",
"save": "保存", "save": "保存",
@@ -425,6 +480,7 @@
"saved": "保存されたリクエスト", "saved": "保存されたリクエスト",
"share": "共有", "share": "共有",
"share_description": "Hoppscotchを友人に共有", "share_description": "Hoppscotchを友人に共有",
"stop": "Stop",
"title": "リクエスト", "title": "リクエスト",
"type": "リクエストの種類", "type": "リクエストの種類",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "あなたの表示名", "account_name_description": "あなたの表示名",
"background": "背景", "background": "背景",
"black_mode": "ブラック", "black_mode": "ブラック",
"change_font_size": "フォントの大きさを変更",
"choose_language": "言語を選択", "choose_language": "言語を選択",
"dark_mode": "ダーク", "dark_mode": "ダーク",
"delete_account": "アカウントの削除", "delete_account": "アカウントの削除",
@@ -472,10 +527,6 @@
"extensions": "拡張機能", "extensions": "拡張機能",
"extensions_use_toggle": "ブラウザ拡張機能を使用してリクエストを送信する(利用可能な場合)", "extensions_use_toggle": "ブラウザ拡張機能を使用してリクエストを送信する(利用可能な場合)",
"follow": "フォローする", "follow": "フォローする",
"font_size": "フォントサイズ",
"font_size_large": "大きめ",
"font_size_medium": "普通",
"font_size_small": "小さめ",
"interceptor": "インターセプタ", "interceptor": "インターセプタ",
"interceptor_description": "アプリケーションとAPIをつなぐミドルウェア", "interceptor_description": "アプリケーションとAPIをつなぐミドルウェア",
"language": "言語", "language": "言語",
@@ -540,19 +591,27 @@
"settings": "設定ページに移動", "settings": "設定ページに移動",
"title": "ナビゲーション" "title": "ナビゲーション"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "コピーリクエストリンク", "copy_request_link": "コピーリクエストリンク",
"delete_method": "DELETEメソッドを選択", "delete_method": "DELETEメソッドを選択",
"get_method": "GETメソッドを選択", "get_method": "GETメソッドを選択",
"head_method": "HEADメソッドを選択", "head_method": "HEADメソッドを選択",
"import_curl": "Import cURL",
"method": "メソッド", "method": "メソッド",
"next_method": "次のメソッドを選択", "next_method": "次のメソッドを選択",
"post_method": "POSTメソッドを選択", "post_method": "POSTメソッドを選択",
"previous_method": "前のメソッドを選択", "previous_method": "前のメソッドを選択",
"put_method": "PUTメソッドを選択", "put_method": "PUTメソッドを選択",
"rename": "Rename Request",
"reset_request": "リセットリクエスト", "reset_request": "リセットリクエスト",
"save_request": "Save Request",
"save_to_collections": "コレクションに保存", "save_to_collections": "コレクションに保存",
"send_request": "リクエストを送信", "send_request": "リクエストを送信",
"show_code": "Generate code snippet",
"title": "リクエスト" "title": "リクエスト"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "ログ", "log": "ログ",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "イベントの種類", "event_type": "イベントの種類",
"log": "ログ", "log": "ログ",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "認証", "authorization": "認証",
"body": "ボディ", "body": "ボディ",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "コレクション", "collections": "コレクション",
"documentation": "ドキュメント", "documentation": "ドキュメント",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "ヘッダー", "headers": "ヘッダー",
"history": "履歴", "history": "履歴",

View File

@@ -5,6 +5,7 @@
"choose_file": "파일 선택", "choose_file": "파일 선택",
"clear": "지우기", "clear": "지우기",
"clear_all": "모두 지우기", "clear_all": "모두 지우기",
"clear_history": "Clear all History",
"close": "닫기", "close": "닫기",
"connect": "연결", "connect": "연결",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "붙여넣기", "paste": "붙여넣기",
"prettify": "구문 강조", "prettify": "구문 강조",
"remove": "제거", "remove": "제거",
"rename": "Rename",
"restore": "복원", "restore": "복원",
"save": "저장", "save": "저장",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "찾기", "search": "찾기",
"share": "공유하기", "share": "공유하기",
"shortcuts": "바로가기", "shortcuts": "바로가기",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "스포트라이트", "spotlight": "스포트라이트",
"status": "상태", "status": "상태",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "모음집 이름이 변경됨", "renamed": "모음집 이름이 변경됨",
"request_in_use": "사용 중인 요청", "request_in_use": "사용 중인 요청",
"save_as": "다른 이름으로 저장", "save_as": "다른 이름으로 저장",
"save_to_collection": "Save to Collection",
"select": "모음집 선택", "select": "모음집 선택",
"select_location": "위치 선택", "select_location": "위치 선택",
"select_team": "팀 선택", "select_team": "팀 선택",
"team_collections": "팀 모음집" "team_collections": "팀 모음집"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "이 팀을 떠나겠습니까?", "exit_team": "이 팀을 떠나겠습니까?",
"logout": "로그아웃하겠습니까?", "logout": "로그아웃하겠습니까?",
"remove_collection": "이 모음집을 영구적으로 삭제하겠습니까?", "remove_collection": "이 모음집을 영구적으로 삭제하겠습니까?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "이 작업 공간을 동기화하겠습니까?" "sync": "이 작업 공간을 동기화하겠습니까?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "헤더 {count}", "header": "헤더 {count}",
"message": "메시지 {count}", "message": "메시지 {count}",
@@ -192,17 +204,31 @@
"create_new": "새 환경 만들기", "create_new": "새 환경 만들기",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "환경 편집", "edit": "환경 편집",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "환경 이름을 바르게 입력하세요.", "invalid_name": "환경 이름을 바르게 입력하세요.",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "환경 변수는 열 단계까지만 중첩될 수 있습니다.", "nested_overflow": "환경 변수는 열 단계까지만 중첩될 수 있습니다.",
"new": "새 환경", "new": "새 환경",
"no_active_environment": "No active environment",
"no_environment": "환경 없음", "no_environment": "환경 없음",
"no_environment_description": "선택한 환경이 없습니다. 선택해주세요.", "no_environment_description": "선택한 환경이 없습니다. 선택해주세요.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "환경 선택", "select": "환경 선택",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "환경", "title": "환경",
"updated": "환경 수정됨", "updated": "환경 수정됨",
"value": "Value",
"variable": "Variable",
"variable_list": "변수 목록" "variable_list": "변수 목록"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "소요 시간 없음", "no_duration": "소요 시간 없음",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "해당 페이지를 찾을 수 없습니다.", "page_not_found": "해당 페이지를 찾을 수 없습니다.",
"proxy_error": "Proxy error",
"script_fail": "사전 요청 스크립트를 실행할 수 없습니다.", "script_fail": "사전 요청 스크립트를 실행할 수 없습니다.",
"something_went_wrong": "문제가 발생했습니다.", "something_went_wrong": "문제가 발생했습니다.",
"test_script_fail": "테스트 스크립트를 실행할 수 없습니다." "test_script_fail": "테스트 스크립트를 실행할 수 없습니다."
@@ -251,9 +278,13 @@
"renamed": "폴더 이름이 변경됨" "renamed": "폴더 이름이 변경됨"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "뮤테이션", "mutations": "뮤테이션",
"schema": "스키마", "schema": "스키마",
"subscriptions": "섭스크립션" "subscriptions": "섭스크립션",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "호프스카치 모음집 JSON 파일을 가져옵니다.", "json_description": "호프스카치 모음집 JSON 파일을 가져옵니다.",
"title": "가져오기" "title": "가져오기"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "가로형 레이아웃", "column": "가로형 레이아웃",
"name": "Layout", "name": "Layout",
"row": "세로형 레이아웃", "row": "세로형 레이아웃"
"zen_mode": "전체화면"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "페이로드", "payload": "페이로드",
"query": "쿼리", "query": "쿼리",
"raw_body": "원시 요청 본문", "raw_body": "원시 요청 본문",
"rename": "Rename Request",
"renamed": "요청 이름이 변경됨", "renamed": "요청 이름이 변경됨",
"run": "실행", "run": "실행",
"save": "저장", "save": "저장",
@@ -425,6 +480,7 @@
"saved": "요청이 저장됨", "saved": "요청이 저장됨",
"share": "공유하기", "share": "공유하기",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "제목", "title": "제목",
"type": "요청 유형", "type": "요청 유형",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "디스플레이 이름입니다.", "account_name_description": "디스플레이 이름입니다.",
"background": "배경", "background": "배경",
"black_mode": "검은 테마", "black_mode": "검은 테마",
"change_font_size": "글자 크기 변경",
"choose_language": "언어 선택", "choose_language": "언어 선택",
"dark_mode": "어두운 테마", "dark_mode": "어두운 테마",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "익스텐션", "extensions": "익스텐션",
"extensions_use_toggle": "브라우저 익스텐션을 사용하여 요청 보내기(있는 경우)", "extensions_use_toggle": "브라우저 익스텐션을 사용하여 요청 보내기(있는 경우)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "글꼴 크기",
"font_size_large": "크게",
"font_size_medium": "중간",
"font_size_small": "작게",
"interceptor": "인터셉터", "interceptor": "인터셉터",
"interceptor_description": "애플리케이션과 API 간의 미들웨어.", "interceptor_description": "애플리케이션과 API 간의 미들웨어.",
"language": "언어", "language": "언어",
@@ -540,19 +591,27 @@
"settings": "설정 페이지로 이동", "settings": "설정 페이지로 이동",
"title": "내비게이션" "title": "내비게이션"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "요청 링크 복사", "copy_request_link": "요청 링크 복사",
"delete_method": "DELETE 메서드 선택", "delete_method": "DELETE 메서드 선택",
"get_method": "GET 메서드 선택", "get_method": "GET 메서드 선택",
"head_method": "HEAD 메서드 선택", "head_method": "HEAD 메서드 선택",
"import_curl": "Import cURL",
"method": "메서드", "method": "메서드",
"next_method": "다음 메서드 선택", "next_method": "다음 메서드 선택",
"post_method": "POST 메서드 선택", "post_method": "POST 메서드 선택",
"previous_method": "이전 메서드 선택", "previous_method": "이전 메서드 선택",
"put_method": "PUT 메서드 선택", "put_method": "PUT 메서드 선택",
"rename": "Rename Request",
"reset_request": "요청 초기화", "reset_request": "요청 초기화",
"save_request": "Save Request",
"save_to_collections": "모음집에 저장", "save_to_collections": "모음집에 저장",
"send_request": "요청 보내기", "send_request": "요청 보내기",
"show_code": "Generate code snippet",
"title": "요청" "title": "요청"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "로그", "log": "로그",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "이벤트 유형", "event_type": "이벤트 유형",
"log": "로그", "log": "로그",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "인증", "authorization": "인증",
"body": "본문", "body": "본문",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "모음집", "collections": "모음집",
"documentation": "문서", "documentation": "문서",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "헤더", "headers": "헤더",
"history": "이력", "history": "이력",

View File

@@ -5,6 +5,7 @@
"choose_file": "Kies een bestand", "choose_file": "Kies een bestand",
"clear": "Wis", "clear": "Wis",
"clear_all": "Wis alles", "clear_all": "Wis alles",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Verbinden", "connect": "Verbinden",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Netter opmaken", "prettify": "Netter opmaken",
"remove": "Verwijderen", "remove": "Verwijderen",
"rename": "Rename",
"restore": "Herstellen", "restore": "Herstellen",
"save": "Opslaan", "save": "Opslaan",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Zoeken", "search": "Zoeken",
"share": "Deel", "share": "Deel",
"shortcuts": "Sneltoetsen", "shortcuts": "Sneltoetsen",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Spotlight", "spotlight": "Spotlight",
"status": "Toestand", "status": "Toestand",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Collectie hernoemd", "renamed": "Collectie hernoemd",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Opslaan als", "save_as": "Opslaan als",
"save_to_collection": "Save to Collection",
"select": "Selecteer een collectie", "select": "Selecteer een collectie",
"select_location": "Selecteer een locatie", "select_location": "Selecteer een locatie",
"select_team": "Selecteer een team", "select_team": "Selecteer een team",
"team_collections": "Teamcollecties" "team_collections": "Teamcollecties"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Weet u zeker dat u wilt uitloggen?", "logout": "Weet u zeker dat u wilt uitloggen?",
"remove_collection": "Weet je zeker dat je deze collectie definitief wilt verwijderen?", "remove_collection": "Weet je zeker dat je deze collectie definitief wilt verwijderen?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Weet u zeker dat u deze werkruimte wilt synchroniseren?" "sync": "Weet u zeker dat u deze werkruimte wilt synchroniseren?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Kop {count}", "header": "Kop {count}",
"message": "Bericht {count}", "message": "Bericht {count}",
@@ -192,17 +204,31 @@
"create_new": "Nieuwe omgeving maken", "create_new": "Nieuwe omgeving maken",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Omgeving bewerken", "edit": "Omgeving bewerken",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Geef een geldige naam op voor de omgeving", "invalid_name": "Geef een geldige naam op voor de omgeving",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nieuwe omgeving", "new": "Nieuwe omgeving",
"no_active_environment": "No active environment",
"no_environment": "Geen omgeving", "no_environment": "Geen omgeving",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Selecteer omgeving", "select": "Selecteer omgeving",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "omgevingen", "title": "omgevingen",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Variabele lijst" "variable_list": "Variabele lijst"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Geen duur", "no_duration": "Geen duur",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Kon pre-aanvraagscript niet uitvoeren", "script_fail": "Kon pre-aanvraagscript niet uitvoeren",
"something_went_wrong": "Er is iets fout gegaan", "something_went_wrong": "Er is iets fout gegaan",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Map hernoemd" "renamed": "Map hernoemd"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutaties", "mutations": "Mutaties",
"schema": "Schema", "schema": "Schema",
"subscriptions": "Abonnementen" "subscriptions": "Abonnementen",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Importeren" "title": "Importeren"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zen-modus"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Payload", "payload": "Payload",
"query": "Vraag", "query": "Vraag",
"raw_body": "Ruwe body", "raw_body": "Ruwe body",
"rename": "Rename Request",
"renamed": "Verzoek hernoemd", "renamed": "Verzoek hernoemd",
"run": "Uitvoeren", "run": "Uitvoeren",
"save": "Opslaan", "save": "Opslaan",
@@ -425,6 +480,7 @@
"saved": "Verzoek opgeslagen", "saved": "Verzoek opgeslagen",
"share": "Deel", "share": "Deel",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Verzoek", "title": "Verzoek",
"type": "Aanvraag type", "type": "Aanvraag type",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Dit is uw weergavenaam.", "account_name_description": "Dit is uw weergavenaam.",
"background": "Achtergrond", "background": "Achtergrond",
"black_mode": "zwart", "black_mode": "zwart",
"change_font_size": "Verander lettergrootte",
"choose_language": "Kies een taal", "choose_language": "Kies een taal",
"dark_mode": "Donker", "dark_mode": "Donker",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Extensies", "extensions": "Extensies",
"extensions_use_toggle": "Gebruik de browserextensie om verzoeken te versturen (indien aanwezig)", "extensions_use_toggle": "Gebruik de browserextensie om verzoeken te versturen (indien aanwezig)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Lettergrootte",
"font_size_large": "Groot",
"font_size_medium": "Medium",
"font_size_small": "Klein",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware tussen applicatie en API's.", "interceptor_description": "Middleware tussen applicatie en API's.",
"language": "Taal", "language": "Taal",
@@ -540,19 +591,27 @@
"settings": "Ga naar de pagina Instellingen", "settings": "Ga naar de pagina Instellingen",
"title": "Navigatie" "title": "Navigatie"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopieer aanvraaglink", "copy_request_link": "Kopieer aanvraaglink",
"delete_method": "Selecteer DELETE-methode", "delete_method": "Selecteer DELETE-methode",
"get_method": "Selecteer GET-methode", "get_method": "Selecteer GET-methode",
"head_method": "Selecteer HEAD-methode:", "head_method": "Selecteer HEAD-methode:",
"import_curl": "Import cURL",
"method": "Methode", "method": "Methode",
"next_method": "Selecteer volgende methode", "next_method": "Selecteer volgende methode",
"post_method": "Selecteer POST-methode", "post_method": "Selecteer POST-methode",
"previous_method": "Selecteer vorige methode", "previous_method": "Selecteer vorige methode",
"put_method": "Selecteer PUT-methode", "put_method": "Selecteer PUT-methode",
"rename": "Rename Request",
"reset_request": "Verzoek resetten", "reset_request": "Verzoek resetten",
"save_request": "Save Request",
"save_to_collections": "Opslaan in collecties", "save_to_collections": "Opslaan in collecties",
"send_request": "Verstuur verzoek", "send_request": "Verstuur verzoek",
"show_code": "Generate code snippet",
"title": "Verzoek" "title": "Verzoek"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Logboek", "log": "Logboek",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Evenementtype", "event_type": "Evenementtype",
"log": "Logboek", "log": "Logboek",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorisatie", "authorization": "Autorisatie",
"body": "Inhoud", "body": "Inhoud",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Collecties", "collections": "Collecties",
"documentation": "Documentatie", "documentation": "Documentatie",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Headers", "headers": "Headers",
"history": "Geschiedenis", "history": "Geschiedenis",

View File

@@ -5,6 +5,7 @@
"choose_file": "Velg en fil", "choose_file": "Velg en fil",
"clear": "Tøm", "clear": "Tøm",
"clear_all": "Tøm alt", "clear_all": "Tøm alt",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Koble", "connect": "Koble",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Forskjønn", "prettify": "Forskjønn",
"remove": "Ta bort", "remove": "Ta bort",
"rename": "Rename",
"restore": "Gjenopprett", "restore": "Gjenopprett",
"save": "Lagre", "save": "Lagre",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Søk", "search": "Søk",
"share": "Dele", "share": "Dele",
"shortcuts": "Snarveier", "shortcuts": "Snarveier",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Spotlight", "spotlight": "Spotlight",
"status": "Status", "status": "Status",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Samlingen ble omdøpt", "renamed": "Samlingen ble omdøpt",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Lagre som", "save_as": "Lagre som",
"save_to_collection": "Save to Collection",
"select": "Velg en samling", "select": "Velg en samling",
"select_location": "Velg plassering", "select_location": "Velg plassering",
"select_team": "Velg et lag", "select_team": "Velg et lag",
"team_collections": "Lagsamlinger" "team_collections": "Lagsamlinger"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Er du sikker på at du vil logge deg av?", "logout": "Er du sikker på at du vil logge deg av?",
"remove_collection": "Er du sikker på at du vil slette denne samlingen permanent?", "remove_collection": "Er du sikker på at du vil slette denne samlingen permanent?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Er du sikker på at du vil synkronisere dette arbeidsområdet?" "sync": "Er du sikker på at du vil synkronisere dette arbeidsområdet?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Overskrift {count}", "header": "Overskrift {count}",
"message": "Melding {count}", "message": "Melding {count}",
@@ -192,17 +204,31 @@
"create_new": "Skap nytt miljø", "create_new": "Skap nytt miljø",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Rediger miljø", "edit": "Rediger miljø",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Oppgi et gyldig navn på miljøet", "invalid_name": "Oppgi et gyldig navn på miljøet",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nytt miljø", "new": "Nytt miljø",
"no_active_environment": "No active environment",
"no_environment": "Ingen miljø", "no_environment": "Ingen miljø",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Velg miljø", "select": "Velg miljø",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Miljøer", "title": "Miljøer",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Variabel liste" "variable_list": "Variabel liste"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Ingen varighet", "no_duration": "Ingen varighet",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Kunne ikke kjøre forhåndsforespørselsskript", "script_fail": "Kunne ikke kjøre forhåndsforespørselsskript",
"something_went_wrong": "Noe gikk galt", "something_went_wrong": "Noe gikk galt",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Mappen ble gitt nytt navn" "renamed": "Mappen ble gitt nytt navn"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutasjoner", "mutations": "Mutasjoner",
"schema": "Skjema", "schema": "Skjema",
"subscriptions": "Abonnementer" "subscriptions": "Abonnementer",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Import" "title": "Import"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Zen-modus"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Nyttelast", "payload": "Nyttelast",
"query": "Spørsmål", "query": "Spørsmål",
"raw_body": "Raw Request Body", "raw_body": "Raw Request Body",
"rename": "Rename Request",
"renamed": "Forespørsel omdøpt", "renamed": "Forespørsel omdøpt",
"run": "Løpe", "run": "Løpe",
"save": "Lagre", "save": "Lagre",
@@ -425,6 +480,7 @@
"saved": "Forespørselen er lagret", "saved": "Forespørselen er lagret",
"share": "Dele", "share": "Dele",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Be om", "title": "Be om",
"type": "Type forespørsel", "type": "Type forespørsel",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Dette er visningsnavnet ditt.", "account_name_description": "Dette er visningsnavnet ditt.",
"background": "Bakgrunn", "background": "Bakgrunn",
"black_mode": "Svart", "black_mode": "Svart",
"change_font_size": "Endre skriftstørrelse",
"choose_language": "Velg språk", "choose_language": "Velg språk",
"dark_mode": "Mørk", "dark_mode": "Mørk",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Utvidelser", "extensions": "Utvidelser",
"extensions_use_toggle": "Bruk nettleserutvidelsen til å sende forespørsler (hvis de er tilstede)", "extensions_use_toggle": "Bruk nettleserutvidelsen til å sende forespørsler (hvis de er tilstede)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Skriftstørrelse",
"font_size_large": "Stor",
"font_size_medium": "Medium",
"font_size_small": "Liten",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Mellomvare mellom applikasjon og API-er.", "interceptor_description": "Mellomvare mellom applikasjon og API-er.",
"language": "Språk", "language": "Språk",
@@ -540,19 +591,27 @@
"settings": "Gå til Innstillinger-siden", "settings": "Gå til Innstillinger-siden",
"title": "Navigasjon" "title": "Navigasjon"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopier forespørselskobling", "copy_request_link": "Kopier forespørselskobling",
"delete_method": "Velg SLETT metoden", "delete_method": "Velg SLETT metoden",
"get_method": "Velg GET-metode", "get_method": "Velg GET-metode",
"head_method": "Velg HEAD-metode", "head_method": "Velg HEAD-metode",
"import_curl": "Import cURL",
"method": "Metode", "method": "Metode",
"next_method": "Velg Neste metode", "next_method": "Velg Neste metode",
"post_method": "Velg POST-metode", "post_method": "Velg POST-metode",
"previous_method": "Velg Forrige metode", "previous_method": "Velg Forrige metode",
"put_method": "Velg PUT-metode", "put_method": "Velg PUT-metode",
"rename": "Rename Request",
"reset_request": "Tilbakestill forespørsel", "reset_request": "Tilbakestill forespørsel",
"save_request": "Save Request",
"save_to_collections": "Lagre i samlinger", "save_to_collections": "Lagre i samlinger",
"send_request": "Send forespørsel", "send_request": "Send forespørsel",
"show_code": "Generate code snippet",
"title": "Be om" "title": "Be om"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Logg", "log": "Logg",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Hendelsestype", "event_type": "Hendelsestype",
"log": "Logg", "log": "Logg",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorisasjon", "authorization": "Autorisasjon",
"body": "Kropp", "body": "Kropp",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Samlinger", "collections": "Samlinger",
"documentation": "Dokumentasjon", "documentation": "Dokumentasjon",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Overskrifter", "headers": "Overskrifter",
"history": "Historie", "history": "Historie",

View File

@@ -5,6 +5,7 @@
"choose_file": "Wybierz plik", "choose_file": "Wybierz plik",
"clear": "Wyczyść", "clear": "Wyczyść",
"clear_all": "Wyczyść wszystko", "clear_all": "Wyczyść wszystko",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Połącz", "connect": "Połącz",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Popraw czytelność", "prettify": "Popraw czytelność",
"remove": "Usuń", "remove": "Usuń",
"rename": "Rename",
"restore": "Przywróć", "restore": "Przywróć",
"save": "Zapisz", "save": "Zapisz",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Szukaj", "search": "Szukaj",
"share": "Udostępnij", "share": "Udostępnij",
"shortcuts": "Skróty", "shortcuts": "Skróty",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Reflektor", "spotlight": "Reflektor",
"status": "Status", "status": "Status",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Zmieniono nazwę kolekcji", "renamed": "Zmieniono nazwę kolekcji",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Zapisz jako", "save_as": "Zapisz jako",
"save_to_collection": "Save to Collection",
"select": "Wybierz kolekcję", "select": "Wybierz kolekcję",
"select_location": "Wybierz lokalizację", "select_location": "Wybierz lokalizację",
"select_team": "Wybierz zespół", "select_team": "Wybierz zespół",
"team_collections": "Kolekcje zespołowe" "team_collections": "Kolekcje zespołowe"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Czy na pewno chcesz się wylogować?", "logout": "Czy na pewno chcesz się wylogować?",
"remove_collection": "Czy na pewno chcesz trwale usunąć tę kolekcję?", "remove_collection": "Czy na pewno chcesz trwale usunąć tę kolekcję?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Czy na pewno chcesz zsynchronizować ten obszar roboczy?" "sync": "Czy na pewno chcesz zsynchronizować ten obszar roboczy?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Nagłówek {count}", "header": "Nagłówek {count}",
"message": "Wiadomość {count}", "message": "Wiadomość {count}",
@@ -192,17 +204,31 @@
"create_new": "Stwórz nowe środowisko", "create_new": "Stwórz nowe środowisko",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Edytuj środowisko", "edit": "Edytuj środowisko",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Podaj prawidłową nazwę środowiska", "invalid_name": "Podaj prawidłową nazwę środowiska",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Nowe środowisko", "new": "Nowe środowisko",
"no_active_environment": "No active environment",
"no_environment": "Brak środowiska", "no_environment": "Brak środowiska",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Wybierz środowisko", "select": "Wybierz środowisko",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Środowiska", "title": "Środowiska",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Lista zmiennych" "variable_list": "Lista zmiennych"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Brak czasu trwania", "no_duration": "Brak czasu trwania",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Nie można wykonać skryptu żądania wstępnego", "script_fail": "Nie można wykonać skryptu żądania wstępnego",
"something_went_wrong": "Coś poszło nie tak", "something_went_wrong": "Coś poszło nie tak",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Zmieniono nazwę folderu" "renamed": "Zmieniono nazwę folderu"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutacje", "mutations": "Mutacje",
"schema": "Schemat", "schema": "Schemat",
"subscriptions": "Subskrypcje" "subscriptions": "Subskrypcje",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Import" "title": "Import"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Pionowy układ", "column": "Pionowy układ",
"name": "Layout", "name": "Layout",
"row": "Poziomy układ", "row": "Poziomy układ"
"zen_mode": "Tryb Zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Dane żądania", "payload": "Dane żądania",
"query": "Zapytanie", "query": "Zapytanie",
"raw_body": "Surowa treść żądania", "raw_body": "Surowa treść żądania",
"rename": "Rename Request",
"renamed": "Zmieniono nazwę żądania", "renamed": "Zmieniono nazwę żądania",
"run": "Uruchom", "run": "Uruchom",
"save": "Zapisz", "save": "Zapisz",
@@ -425,6 +480,7 @@
"saved": "Żądanie zostało zapisane", "saved": "Żądanie zostało zapisane",
"share": "Udostępnij", "share": "Udostępnij",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Żądanie", "title": "Żądanie",
"type": "Typ żądania", "type": "Typ żądania",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "To jest Twoja nazwa wyświetlana.", "account_name_description": "To jest Twoja nazwa wyświetlana.",
"background": "Tło", "background": "Tło",
"black_mode": "Czarny", "black_mode": "Czarny",
"change_font_size": "Zmień rozmiar czczionki",
"choose_language": "Wybierz język", "choose_language": "Wybierz język",
"dark_mode": "Ciemny", "dark_mode": "Ciemny",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Rozszerzenia", "extensions": "Rozszerzenia",
"extensions_use_toggle": "Użyj rozszerzenia przeglądarki do wysyłania żądań (jeśli istnieje)", "extensions_use_toggle": "Użyj rozszerzenia przeglądarki do wysyłania żądań (jeśli istnieje)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Rozmiar czcionki",
"font_size_large": "Wielki",
"font_size_medium": "Średni",
"font_size_small": "Mały",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Oprogramowanie pośredniczące między aplikacją a interfejsami API.", "interceptor_description": "Oprogramowanie pośredniczące między aplikacją a interfejsami API.",
"language": "Język", "language": "Język",
@@ -540,19 +591,27 @@
"settings": "Przejdź do strony Ustawienia", "settings": "Przejdź do strony Ustawienia",
"title": "Nawigacja" "title": "Nawigacja"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Kopiuj łącze żądania", "copy_request_link": "Kopiuj łącze żądania",
"delete_method": "Wybierz metodę DELETE", "delete_method": "Wybierz metodę DELETE",
"get_method": "Wybierz metodę GET", "get_method": "Wybierz metodę GET",
"head_method": "Wybierz metodę HEAD", "head_method": "Wybierz metodę HEAD",
"import_curl": "Import cURL",
"method": "metoda", "method": "metoda",
"next_method": "Wybierz następną metodę", "next_method": "Wybierz następną metodę",
"post_method": "Wybierz metodę POST", "post_method": "Wybierz metodę POST",
"previous_method": "Wybierz poprzednią metodę", "previous_method": "Wybierz poprzednią metodę",
"put_method": "Wybierz metodę PUT", "put_method": "Wybierz metodę PUT",
"rename": "Rename Request",
"reset_request": "Zresetuj żądanie", "reset_request": "Zresetuj żądanie",
"save_request": "Save Request",
"save_to_collections": "Zapisz w kolekcjach", "save_to_collections": "Zapisz w kolekcjach",
"send_request": "Wyślij żądanie", "send_request": "Wyślij żądanie",
"show_code": "Generate code snippet",
"title": "Żądania" "title": "Żądania"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Logi", "log": "Logi",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Typ wydarzenia", "event_type": "Typ wydarzenia",
"log": "Logi", "log": "Logi",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autoryzacja", "authorization": "Autoryzacja",
"body": "Ciało", "body": "Ciało",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Kolekcje", "collections": "Kolekcje",
"documentation": "Dokumentacja", "documentation": "Dokumentacja",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Nagłówki", "headers": "Nagłówki",
"history": "Historia", "history": "Historia",

View File

@@ -5,6 +5,7 @@
"choose_file": "Escolha um arquivo", "choose_file": "Escolha um arquivo",
"clear": "Limpar", "clear": "Limpar",
"clear_all": "Limpar tudo", "clear_all": "Limpar tudo",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Conectar", "connect": "Conectar",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Colar", "paste": "Colar",
"prettify": "Embelezar", "prettify": "Embelezar",
"remove": "Remover", "remove": "Remover",
"rename": "Rename",
"restore": "Restaurar", "restore": "Restaurar",
"save": "Salvar", "save": "Salvar",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Procurar", "search": "Procurar",
"share": "Compartilhado", "share": "Compartilhado",
"shortcuts": "Atalhos", "shortcuts": "Atalhos",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Holofote", "spotlight": "Holofote",
"status": "Estado", "status": "Estado",
"status_description": "Cheque o estado do website.", "status_description": "Cheque o estado do website.",
@@ -131,12 +135,15 @@
"renamed": "Coleção renomeada", "renamed": "Coleção renomeada",
"request_in_use": "Requisição em uso", "request_in_use": "Requisição em uso",
"save_as": "Salvar como", "save_as": "Salvar como",
"save_to_collection": "Save to Collection",
"select": "Selecione uma coleção", "select": "Selecione uma coleção",
"select_location": "Selecione a localização", "select_location": "Selecione a localização",
"select_team": "Selecione uma equipe", "select_team": "Selecione uma equipe",
"team_collections": "Coleções da equipe" "team_collections": "Coleções da equipe"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Tem certeza que deseja sair desta equipe?", "exit_team": "Tem certeza que deseja sair desta equipe?",
"logout": "Tem certeza que deseja sair?", "logout": "Tem certeza que deseja sair?",
"remove_collection": "Tem certeza de que deseja excluir esta coleção permanentemente?", "remove_collection": "Tem certeza de que deseja excluir esta coleção permanentemente?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Tem certeza de que deseja sincronizar este espaço de trabalho?" "sync": "Tem certeza de que deseja sincronizar este espaço de trabalho?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Cabeçalho {count}", "header": "Cabeçalho {count}",
"message": "Mensagem {count}", "message": "Mensagem {count}",
@@ -192,17 +204,31 @@
"create_new": "Crie um novo ambiente", "create_new": "Crie um novo ambiente",
"created": "Ambiente criado", "created": "Ambiente criado",
"deleted": "Deleção de ambiente", "deleted": "Deleção de ambiente",
"duplicated": "Environment duplicated",
"edit": "Editar Ambiente", "edit": "Editar Ambiente",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Forneça um nome válido para o ambiente", "invalid_name": "Forneça um nome válido para o ambiente",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "Variáveis de ambiente aninhadas são limitadas a 10 níveis", "nested_overflow": "Variáveis de ambiente aninhadas são limitadas a 10 níveis",
"new": "Novo ambiente", "new": "Novo ambiente",
"no_active_environment": "No active environment",
"no_environment": "Sem ambiente", "no_environment": "Sem ambiente",
"no_environment_description": "Nenhum ambiente foi selecionado. Escolha o que fazer com as seguintes variáveis.", "no_environment_description": "Nenhum ambiente foi selecionado. Escolha o que fazer com as seguintes variáveis.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Selecione o ambiente", "select": "Selecione o ambiente",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Ambientes", "title": "Ambientes",
"updated": "Atualizacao de ambientes", "updated": "Atualizacao de ambientes",
"value": "Value",
"variable": "Variable",
"variable_list": "Lista de Variáveis" "variable_list": "Lista de Variáveis"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Sem duração", "no_duration": "Sem duração",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Não foi possível executar o script pré-requisição", "script_fail": "Não foi possível executar o script pré-requisição",
"something_went_wrong": "Algo deu errado", "something_went_wrong": "Algo deu errado",
"test_script_fail": "Não foi possível executar o script pós-requisição" "test_script_fail": "Não foi possível executar o script pós-requisição"
@@ -251,9 +278,13 @@
"renamed": "Pasta renomeada" "renamed": "Pasta renomeada"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutações", "mutations": "Mutações",
"schema": "Esquema", "schema": "Esquema",
"subscriptions": "Assinaturas" "subscriptions": "Assinaturas",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Importa coleções de um arquivo JSON de Coleções Hoppscotch", "json_description": "Importa coleções de um arquivo JSON de Coleções Hoppscotch",
"title": "Importar" "title": "Importar"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Encolher ou expandir coleções", "collapse_collection": "Encolher ou expandir coleções",
"collapse_sidebar": "Encolher ou Expandir a barra lateral", "collapse_sidebar": "Encolher ou Expandir a barra lateral",
"column": "Layout vertical", "column": "Layout vertical",
"name": "Layout", "name": "Layout",
"row": "Layout horizontal", "row": "Layout horizontal"
"zen_mode": "Modo zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Payload", "payload": "Payload",
"query": "Enviar", "query": "Enviar",
"raw_body": "Corpo de Requisição Bruta", "raw_body": "Corpo de Requisição Bruta",
"rename": "Rename Request",
"renamed": "Requisição renomeada", "renamed": "Requisição renomeada",
"run": "Executar", "run": "Executar",
"save": "Salvar", "save": "Salvar",
@@ -425,6 +480,7 @@
"saved": "Requisição salva", "saved": "Requisição salva",
"share": "Compartilhadar", "share": "Compartilhadar",
"share_description": "Compartilhe o Hoppscotch com seus amigos", "share_description": "Compartilhe o Hoppscotch com seus amigos",
"stop": "Stop",
"title": "Solicitar", "title": "Solicitar",
"type": "Tipo de requisição", "type": "Tipo de requisição",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Este é o seu nome de exibição.", "account_name_description": "Este é o seu nome de exibição.",
"background": "Fundo", "background": "Fundo",
"black_mode": "Preto", "black_mode": "Preto",
"change_font_size": "Mudar TAMANHO DA FONTE",
"choose_language": "Escolha o seu idioma", "choose_language": "Escolha o seu idioma",
"dark_mode": "Escuro", "dark_mode": "Escuro",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Extensões", "extensions": "Extensões",
"extensions_use_toggle": "Use a extensão do navegador para enviar solicitações (se houver)", "extensions_use_toggle": "Use a extensão do navegador para enviar solicitações (se houver)",
"follow": "Nos siga", "follow": "Nos siga",
"font_size": "Tamanho da fonte",
"font_size_large": "Grande",
"font_size_medium": "Médio",
"font_size_small": "Pequeno",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware entre aplicativo e APIs.", "interceptor_description": "Middleware entre aplicativo e APIs.",
"language": "Língua", "language": "Língua",
@@ -540,19 +591,27 @@
"settings": "Vá para a página de configurações", "settings": "Vá para a página de configurações",
"title": "Navegação" "title": "Navegação"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copiar link de requisição", "copy_request_link": "Copiar link de requisição",
"delete_method": "Selecione o método DELETE", "delete_method": "Selecione o método DELETE",
"get_method": "Selecione o método GET", "get_method": "Selecione o método GET",
"head_method": "Selecione o método HEAD", "head_method": "Selecione o método HEAD",
"import_curl": "Import cURL",
"method": "Método", "method": "Método",
"next_method": "Selecione o próximo método", "next_method": "Selecione o próximo método",
"post_method": "Selecione o método POST", "post_method": "Selecione o método POST",
"previous_method": "Selecione o método anterior", "previous_method": "Selecione o método anterior",
"put_method": "Selecione o método PUT", "put_method": "Selecione o método PUT",
"rename": "Rename Request",
"reset_request": "Pedido de reinicialização", "reset_request": "Pedido de reinicialização",
"save_request": "Save Request",
"save_to_collections": "Salvar em coleções", "save_to_collections": "Salvar em coleções",
"send_request": "Enviar requisição", "send_request": "Enviar requisição",
"show_code": "Generate code snippet",
"title": "Solicitar" "title": "Solicitar"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Registro", "log": "Registro",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tipo de evento", "event_type": "Tipo de evento",
"log": "Registro", "log": "Registro",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorização", "authorization": "Autorização",
"body": "Corpo", "body": "Corpo",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Coleções", "collections": "Coleções",
"documentation": "Documentação", "documentation": "Documentação",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Cabeçalhos", "headers": "Cabeçalhos",
"history": "História", "history": "História",

View File

@@ -5,6 +5,7 @@
"choose_file": "Escolha um arquivo", "choose_file": "Escolha um arquivo",
"clear": "Claro", "clear": "Claro",
"clear_all": "Limpar tudo", "clear_all": "Limpar tudo",
"clear_history": "Clear all History",
"close": "Close", "close": "Close",
"connect": "Conectar", "connect": "Conectar",
"connecting": "Connecting", "connecting": "Connecting",
@@ -31,6 +32,7 @@
"paste": "Paste", "paste": "Paste",
"prettify": "Embelezar", "prettify": "Embelezar",
"remove": "Remover", "remove": "Remover",
"rename": "Rename",
"restore": "Restaurar", "restore": "Restaurar",
"save": "Salvar", "save": "Salvar",
"scroll_to_bottom": "Scroll to bottom", "scroll_to_bottom": "Scroll to bottom",
@@ -77,6 +79,8 @@
"search": "Procurar", "search": "Procurar",
"share": "Compartilhado", "share": "Compartilhado",
"shortcuts": "Atalhos", "shortcuts": "Atalhos",
"social_description": "Follow us on social media to stay updated with the latest news, updates and releases.",
"social_links": "Social links",
"spotlight": "Holofote", "spotlight": "Holofote",
"status": "Status", "status": "Status",
"status_description": "Check the status of the website", "status_description": "Check the status of the website",
@@ -131,12 +135,15 @@
"renamed": "Coleção renomeada", "renamed": "Coleção renomeada",
"request_in_use": "Request in use", "request_in_use": "Request in use",
"save_as": "Salvar como", "save_as": "Salvar como",
"save_to_collection": "Save to Collection",
"select": "Selecione uma coleção", "select": "Selecione uma coleção",
"select_location": "Selecione a localização", "select_location": "Selecione a localização",
"select_team": "Selecione uma equipe", "select_team": "Selecione uma equipe",
"team_collections": "Coleções da equipe" "team_collections": "Coleções da equipe"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Are you sure you want to close this tab?",
"close_unsaved_tabs": "Are you sure you want to close all tabs? {count} unsaved tabs will be lost.",
"exit_team": "Are you sure you want to leave this team?", "exit_team": "Are you sure you want to leave this team?",
"logout": "Tem certeza que deseja sair?", "logout": "Tem certeza que deseja sair?",
"remove_collection": "Tem certeza de que deseja excluir esta coleção permanentemente?", "remove_collection": "Tem certeza de que deseja excluir esta coleção permanentemente?",
@@ -150,6 +157,11 @@
"save_unsaved_tab": "Do you want to save changes made in this tab?", "save_unsaved_tab": "Do you want to save changes made in this tab?",
"sync": "Tem certeza de que deseja sincronizar este espaço de trabalho?" "sync": "Tem certeza de que deseja sincronizar este espaço de trabalho?"
}, },
"context_menu": {
"add_parameters": "Add to parameters",
"open_request_in_new_tab": "Open request in new tab",
"set_environment_variable": "Set as variable"
},
"count": { "count": {
"header": "Cabeçalho {count}", "header": "Cabeçalho {count}",
"message": "Mensagem {count}", "message": "Mensagem {count}",
@@ -192,17 +204,31 @@
"create_new": "Crie um novo ambiente", "create_new": "Crie um novo ambiente",
"created": "Environment created", "created": "Environment created",
"deleted": "Environment deletion", "deleted": "Environment deletion",
"duplicated": "Environment duplicated",
"edit": "Editar Ambiente", "edit": "Editar Ambiente",
"empty_variables": "No variables",
"global": "Global",
"global_variables": "Global variables",
"invalid_name": "Forneça um nome válido para o ambiente", "invalid_name": "Forneça um nome válido para o ambiente",
"list": "Environment variables",
"my_environments": "My Environments", "my_environments": "My Environments",
"name": "Name",
"nested_overflow": "nested environment variables are limited to 10 levels", "nested_overflow": "nested environment variables are limited to 10 levels",
"new": "Novo ambiente", "new": "Novo ambiente",
"no_active_environment": "No active environment",
"no_environment": "Sem ambiente", "no_environment": "Sem ambiente",
"no_environment_description": "No environments were selected. Choose what to do with the following variables.", "no_environment_description": "No environments were selected. Choose what to do with the following variables.",
"quick_peek": "Environment Quick Peek",
"replace_with_variable": "Replace with variable",
"scope": "Scope",
"select": "Selecione o ambiente", "select": "Selecione o ambiente",
"set": "Set environment",
"set_as_environment": "Set as environment",
"team_environments": "Team Environments", "team_environments": "Team Environments",
"title": "Ambientes", "title": "Ambientes",
"updated": "Environment updation", "updated": "Environment updation",
"value": "Value",
"variable": "Variable",
"variable_list": "Lista de Variáveis" "variable_list": "Lista de Variáveis"
}, },
"error": { "error": {
@@ -226,6 +252,7 @@
"no_duration": "Sem duração", "no_duration": "Sem duração",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be found", "page_not_found": "This page could not be found",
"proxy_error": "Proxy error",
"script_fail": "Não foi possível executar o script de pré-solicitação", "script_fail": "Não foi possível executar o script de pré-solicitação",
"something_went_wrong": "Algo deu errado", "something_went_wrong": "Algo deu errado",
"test_script_fail": "Could not execute post-request script" "test_script_fail": "Could not execute post-request script"
@@ -251,9 +278,13 @@
"renamed": "Pasta renomeada" "renamed": "Pasta renomeada"
}, },
"graphql": { "graphql": {
"connection_switch_confirm": "Do you want to connect with the latest GraphQL endpoint?",
"connection_switch_new_url": "Switching to a tab will disconnected you from the active GraphQL connection. New connection URL is",
"connection_switch_url": "You're connected to a GraphQL endpoint the connection URL is",
"mutations": "Mutações", "mutations": "Mutações",
"schema": "Esquema", "schema": "Esquema",
"subscriptions": "Assinaturas" "subscriptions": "Assinaturas",
"switch_connection": "Switch connection"
}, },
"group": { "group": {
"time": "Time", "time": "Time",
@@ -307,13 +338,36 @@
"json_description": "Import collections from a Hoppscotch Collections JSON file", "json_description": "Import collections from a Hoppscotch Collections JSON file",
"title": "Importar" "title": "Importar"
}, },
"inspections": {
"description": "Inspect possible errors",
"environment": {
"add_environment": "Add to Environment",
"not_found": "Environment variable “{environment}” not found."
},
"header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead."
},
"response": {
"401_error": "Please check your authentication credentials.",
"404_error": "Please check your request URL and method type.",
"cors_error": "Please check your Cross-Origin Resource Sharing configuration.",
"default_error": "Please check your request.",
"network_error": "Please check your network connection."
},
"title": "Inspector",
"url": {
"extension_not_installed": "Extension not installed.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.",
"extention_enable_action": "Enable Browser Extension",
"extention_not_enabled": "Extension not enabled."
}
},
"layout": { "layout": {
"collapse_collection": "Collapse or Expand Collections", "collapse_collection": "Collapse or Expand Collections",
"collapse_sidebar": "Collapse or Expand the sidebar", "collapse_sidebar": "Collapse or Expand the sidebar",
"column": "Vertical layout", "column": "Vertical layout",
"name": "Layout", "name": "Layout",
"row": "Horizontal layout", "row": "Horizontal layout"
"zen_mode": "Modo zen"
}, },
"modal": { "modal": {
"close_unsaved_tab": "You have unsaved changes", "close_unsaved_tab": "You have unsaved changes",
@@ -418,6 +472,7 @@
"payload": "Carga útil", "payload": "Carga útil",
"query": "Consulta", "query": "Consulta",
"raw_body": "Corpo de Solicitação Bruta", "raw_body": "Corpo de Solicitação Bruta",
"rename": "Rename Request",
"renamed": "Pedido renomeado", "renamed": "Pedido renomeado",
"run": "Corre", "run": "Corre",
"save": "Salvar", "save": "Salvar",
@@ -425,6 +480,7 @@
"saved": "Pedido salvo", "saved": "Pedido salvo",
"share": "Compartilhado", "share": "Compartilhado",
"share_description": "Share Hoppscotch with your friends", "share_description": "Share Hoppscotch with your friends",
"stop": "Stop",
"title": "Solicitar", "title": "Solicitar",
"type": "Tipo de solicitação", "type": "Tipo de solicitação",
"url": "URL", "url": "URL",
@@ -459,7 +515,6 @@
"account_name_description": "Este é o seu nome de exibição.", "account_name_description": "Este é o seu nome de exibição.",
"background": "Fundo", "background": "Fundo",
"black_mode": "Preto", "black_mode": "Preto",
"change_font_size": "Mudar TAMANHO DA FONTE",
"choose_language": "Escolha o seu idioma", "choose_language": "Escolha o seu idioma",
"dark_mode": "Escuro", "dark_mode": "Escuro",
"delete_account": "Delete account", "delete_account": "Delete account",
@@ -472,10 +527,6 @@
"extensions": "Extensões", "extensions": "Extensões",
"extensions_use_toggle": "Use a extensão do navegador para enviar solicitações (se houver)", "extensions_use_toggle": "Use a extensão do navegador para enviar solicitações (se houver)",
"follow": "Follow Us", "follow": "Follow Us",
"font_size": "Tamanho da fonte",
"font_size_large": "Grande",
"font_size_medium": "Médio",
"font_size_small": "Pequeno",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"interceptor_description": "Middleware entre aplicativo e APIs.", "interceptor_description": "Middleware entre aplicativo e APIs.",
"language": "Língua", "language": "Língua",
@@ -540,19 +591,27 @@
"settings": "Vá para a página de configurações", "settings": "Vá para a página de configurações",
"title": "Navegação" "title": "Navegação"
}, },
"others": {
"prettify": "Prettify Editor's Content",
"title": "Others"
},
"request": { "request": {
"copy_request_link": "Copiar link de solicitação", "copy_request_link": "Copiar link de solicitação",
"delete_method": "Selecione o método DELETE", "delete_method": "Selecione o método DELETE",
"get_method": "Selecione o método GET", "get_method": "Selecione o método GET",
"head_method": "Selecione o método HEAD", "head_method": "Selecione o método HEAD",
"import_curl": "Import cURL",
"method": "Método", "method": "Método",
"next_method": "Selecione o próximo método", "next_method": "Selecione o próximo método",
"post_method": "Selecione o método POST", "post_method": "Selecione o método POST",
"previous_method": "Selecione o método anterior", "previous_method": "Selecione o método anterior",
"put_method": "Selecione o método PUT", "put_method": "Selecione o método PUT",
"rename": "Rename Request",
"reset_request": "Pedido de reinicialização", "reset_request": "Pedido de reinicialização",
"save_request": "Save Request",
"save_to_collections": "Salvar em coleções", "save_to_collections": "Salvar em coleções",
"send_request": "Enviar pedido", "send_request": "Enviar pedido",
"show_code": "Generate code snippet",
"title": "Solicitar" "title": "Solicitar"
}, },
"response": { "response": {
@@ -582,6 +641,85 @@
"log": "Registro", "log": "Registro",
"url": "URL" "url": "URL"
}, },
"spotlight": {
"change_language": "Change Language",
"environments": {
"delete": "Delete current environment",
"duplicate": "Duplicate current environment",
"duplicate_global": "Duplicate global environment",
"edit": "Edit current environment",
"edit_global": "Edit global environment",
"new": "Create new environment",
"new_variable": "Create a new environment variable",
"title": "Environments"
},
"general": {
"chat": "Chat with support",
"help_menu": "Help and support",
"open_docs": "Read Documentation",
"open_github": "Open GitHub repository",
"open_keybindings": "Keyboard shortcuts",
"social": "Social",
"title": "General"
},
"graphql": {
"connect": "Connect to server",
"disconnect": "Disconnect from server"
},
"miscellaneous": {
"invite": "Invite your friends to Hoppscotch",
"title": "Miscellaneous"
},
"request": {
"save_as_new": "Save as new request",
"select_method": "Select method",
"switch_to": "Switch to",
"tab_authorization": "Authorization tab",
"tab_body": "Body tab",
"tab_headers": "Headers tab",
"tab_parameters": "Parameters tab",
"tab_pre_request_script": "Pre-request script tab",
"tab_query": "Query tab",
"tab_tests": "Tests tab",
"tab_variables": "Variables tab"
},
"response": {
"copy": "Copy response",
"download": "Download response as file",
"title": "Response"
},
"section": {
"interceptor": "Interceptor",
"interface": "Interface",
"theme": "Theme",
"user": "User"
},
"settings": {
"change_interceptor": "Change Interceptor",
"change_language": "Change Language",
"theme": {
"black": "Black",
"dark": "Dark",
"light": "Light",
"system": "System preference"
}
},
"tab": {
"close_current": "Close current tab",
"close_others": "Close all other tabs",
"duplicate": "Duplicate current tab",
"new_tab": "Open a new tab",
"title": "Tabs"
},
"workspace": {
"delete": "Delete current team",
"edit": "Edit current team",
"invite": "Invite people to team",
"new": "Create new team",
"switch_to_personal": "Switch to your personal workspace",
"title": "Teams"
}
},
"sse": { "sse": {
"event_type": "Tipo de evento", "event_type": "Tipo de evento",
"log": "Registro", "log": "Registro",
@@ -639,8 +777,11 @@
"tab": { "tab": {
"authorization": "Autorização", "authorization": "Autorização",
"body": "Corpo", "body": "Corpo",
"close": "Close Tab",
"close_others": "Close other Tabs",
"collections": "Coleções", "collections": "Coleções",
"documentation": "Documentação", "documentation": "Documentação",
"duplicate": "Duplicate Tab",
"environments": "Environments", "environments": "Environments",
"headers": "Cabeçalhos", "headers": "Cabeçalhos",
"history": "História", "history": "História",

Some files were not shown because too many files have changed in this diff Show More