Compare commits
141 Commits
2023.4.0
...
feat/condi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58782fd8d8 | ||
|
|
42cb728577 | ||
|
|
b9f36d04a8 | ||
|
|
1704cc2bad | ||
|
|
ab9775d55f | ||
|
|
88f6a4ae26 | ||
|
|
af7ff9dc17 | ||
|
|
610538ca02 | ||
|
|
8970ff5c68 | ||
|
|
d1a564d5b8 | ||
|
|
cf29c29d16 | ||
|
|
8bb1d19c07 | ||
|
|
c3d03d7162 | ||
|
|
a72b1feda5 | ||
|
|
bdab2bb2d0 | ||
|
|
e50b3ddcc4 | ||
|
|
8d59a69f48 | ||
|
|
c1efa381f0 | ||
|
|
d090585685 | ||
|
|
7b590fa57d | ||
|
|
83536ad715 | ||
|
|
197b48182f | ||
|
|
48356cb589 | ||
|
|
29171d1b6f | ||
|
|
e869d49e16 | ||
|
|
6496bea846 | ||
|
|
39842559b5 | ||
|
|
51efb35aa6 | ||
|
|
9402bb9285 | ||
|
|
5a516f7242 | ||
|
|
3b217d78e7 | ||
|
|
8e153b38dc | ||
|
|
6f38bfb148 | ||
|
|
82b6e08d68 | ||
|
|
31fd6567b7 | ||
|
|
25177bd635 | ||
|
|
6928eb7992 | ||
|
|
8300f9a0a2 | ||
|
|
525ba77739 | ||
|
|
6bc748a267 | ||
|
|
5230d2d3b8 | ||
|
|
c3531c9d8b | ||
|
|
b29c04c28d | ||
|
|
b2af353941 | ||
|
|
9dbce74f5e | ||
|
|
db1cf5cc08 | ||
|
|
09360abf81 | ||
|
|
355bd62b8d | ||
|
|
5650de1183 | ||
|
|
2ee8614b93 | ||
|
|
5632334c9a | ||
|
|
780dd8a713 | ||
|
|
7db3c6d290 | ||
|
|
c765270dfe | ||
|
|
03f667c21d | ||
|
|
f79f3078dc | ||
|
|
6e29a2f6d4 | ||
|
|
6304fd50c3 | ||
|
|
2ec29c47ad | ||
|
|
399a238bf4 | ||
|
|
b20ab72298 | ||
|
|
f723e6496a | ||
|
|
8c0aff8863 | ||
|
|
64c5077506 | ||
|
|
2afc87847d | ||
|
|
878ec833ce | ||
|
|
039de8015f | ||
|
|
f67b366b90 | ||
|
|
6f35574d68 | ||
|
|
77e8a36ab0 | ||
|
|
d7cc9f5dbc | ||
|
|
fc3e3aeaec | ||
|
|
4ba135f3b9 | ||
|
|
24894e05dc | ||
|
|
e2b668bee2 | ||
|
|
f112c46bb4 | ||
|
|
331d482b22 | ||
|
|
b07243f131 | ||
|
|
84b0c30d64 | ||
|
|
e3dd9e99a1 | ||
|
|
e3091cb6db | ||
|
|
270f796683 | ||
|
|
24c6bce02d | ||
|
|
2db567589f | ||
|
|
1fe83ebdc8 | ||
|
|
8320d4f222 | ||
|
|
e76c1bc64c | ||
|
|
1f3f8464ea | ||
|
|
81a7e23a12 | ||
|
|
e75391cdf1 | ||
|
|
a213c0c26c | ||
|
|
15424903ed | ||
|
|
1cce117b0a | ||
|
|
abc7b4b6f3 | ||
|
|
05e32ef9e4 | ||
|
|
f0a1fc319c | ||
|
|
385cabc6aa | ||
|
|
397b26a9f3 | ||
|
|
9a40058329 | ||
|
|
7ec2380ed5 | ||
|
|
3d4825305d | ||
|
|
26e564288b | ||
|
|
385a587cfd | ||
|
|
215df02783 | ||
|
|
7c7ed68b20 | ||
|
|
c910a0314a | ||
|
|
ddaec1b9ac | ||
|
|
9dbdef9286 | ||
|
|
e77eef1532 | ||
|
|
1fe0b8861d | ||
|
|
aeb9172144 | ||
|
|
1b413e2f47 | ||
|
|
d6c8400116 | ||
|
|
4a0205e622 | ||
|
|
c2520006ac | ||
|
|
99817fd8bd | ||
|
|
3f35fedd9d | ||
|
|
b7c2d13992 | ||
|
|
a6426587fb | ||
|
|
5f68356278 | ||
|
|
08f61e7408 | ||
|
|
9beda15f00 | ||
|
|
09d1663f81 | ||
|
|
f43b6e7cff | ||
|
|
6581eb4fd1 | ||
|
|
caedfe5c1e | ||
|
|
f6a234aaf9 | ||
|
|
8450fb6596 | ||
|
|
41fa3b5a8c | ||
|
|
522de45a62 | ||
|
|
4acc4b2dda | ||
|
|
c1f4855daf | ||
|
|
3506e96cfd | ||
|
|
b42a94ed77 | ||
|
|
80da790a3c | ||
|
|
d6c706d0f9 | ||
|
|
bd09a6ac45 | ||
|
|
4ada31b20e | ||
|
|
5d8b55e96b | ||
|
|
eab4893aa2 | ||
|
|
4806499040 |
1
.dockerignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*/**/node_modules
|
||||||
10
.env.example
@@ -13,12 +13,13 @@ 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"
|
||||||
|
ALLOWED_AUTH_PROVIDERS = GOOGLE,GITHUB,MICROSOFT,EMAIL
|
||||||
|
|
||||||
# Google Auth Config
|
# Google Auth Config
|
||||||
GOOGLE_CLIENT_ID="************************************************"
|
GOOGLE_CLIENT_ID="************************************************"
|
||||||
GOOGLE_CLIENT_SECRET="************************************************"
|
GOOGLE_CLIENT_SECRET="************************************************"
|
||||||
GOOGLE_CALLBACK_URL="http://localhost:3170/v1/auth/google/callback"
|
GOOGLE_CALLBACK_URL="http://localhost:3170/v1/auth/google/callback"
|
||||||
GOOGLE_SCOPE="['email', 'profile'],"
|
GOOGLE_SCOPE="email,profile"
|
||||||
|
|
||||||
# Github Auth Config
|
# Github Auth Config
|
||||||
GITHUB_CLIENT_ID="************************************************"
|
GITHUB_CLIENT_ID="************************************************"
|
||||||
@@ -31,6 +32,7 @@ MICROSOFT_CLIENT_ID="************************************************"
|
|||||||
MICROSOFT_CLIENT_SECRET="************************************************"
|
MICROSOFT_CLIENT_SECRET="************************************************"
|
||||||
MICROSOFT_CALLBACK_URL="http://localhost:3170/v1/auth/microsoft/callback"
|
MICROSOFT_CALLBACK_URL="http://localhost:3170/v1/auth/microsoft/callback"
|
||||||
MICROSOFT_SCOPE="user.read"
|
MICROSOFT_SCOPE="user.read"
|
||||||
|
MICROSOFT_TENANT="common"
|
||||||
|
|
||||||
# Mailer config
|
# Mailer config
|
||||||
MAILER_SMTP_URL="smtps://user@domain.com:pass@smtp.domain.com"
|
MAILER_SMTP_URL="smtps://user@domain.com:pass@smtp.domain.com"
|
||||||
@@ -51,9 +53,9 @@ VITE_ADMIN_URL=http://localhost:3100
|
|||||||
|
|
||||||
# Backend URLs
|
# Backend URLs
|
||||||
VITE_BACKEND_GQL_URL=http://localhost:3170/graphql
|
VITE_BACKEND_GQL_URL=http://localhost:3170/graphql
|
||||||
VITE_BACKEND_WS_URL=wss://localhost:3170/graphql
|
VITE_BACKEND_WS_URL=ws://localhost:3170/graphql
|
||||||
VITE_BACKEND_API_URL=http://localhost:3170/v1
|
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/terms
|
VITE_APP_TOS_LINK=https://docs.hoppscotch.io/support/terms
|
||||||
VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/privacy
|
VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/support/privacy
|
||||||
|
|||||||
4
.github/workflows/tests.yml
vendored
@@ -2,9 +2,9 @@ name: Node.js CI
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main, staging]
|
branches: [main, staging, "release/**"]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main, staging]
|
branches: [main, staging, "release/**"]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
|
|||||||
42
.github/workflows/ui.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
name: Deploy to Netlify (ui)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
# run this workflow only if an update is made to the ui package
|
||||||
|
paths:
|
||||||
|
- "packages/hoppscotch-ui/**"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
name: Deploy
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup environment
|
||||||
|
run: mv .env.example .env
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v2.2.4
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
run_install: true
|
||||||
|
|
||||||
|
- name: Setup node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node }}
|
||||||
|
cache: pnpm
|
||||||
|
|
||||||
|
- name: Build site
|
||||||
|
run: pnpm run generate-ui
|
||||||
|
|
||||||
|
# Deploy the ui site with netlify-cli
|
||||||
|
- name: Deploy to Netlify (ui)
|
||||||
|
run: npx netlify-cli deploy --dir=packages/hoppscotch-ui/.histoire/dist --prod
|
||||||
|
env:
|
||||||
|
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_UI_SITE_ID }}
|
||||||
|
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||||
@@ -161,7 +161,7 @@ _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/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.
|
📜 **Pre-Request Scripts β:** Snippets of code associated with a request that is executed before the request is sent.
|
||||||
|
|
||||||
@@ -178,7 +178,7 @@ _Official proxy server is hosted by Hoppscotch - **[GitHub](https://github.com/h
|
|||||||
|
|
||||||
⌨️ **Keyboard Shortcuts:** Optimized for efficiency.
|
⌨️ **Keyboard Shortcuts:** Optimized for efficiency.
|
||||||
|
|
||||||
> **[Read our documentation on Keyboard Shortcuts](https://docs.hoppscotch.io/features/shortcuts)**
|
> **[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.
|
||||||
|
|
||||||
@@ -278,7 +278,8 @@ _Add-ons are developed and maintained under **[Hoppscotch Organization](https://
|
|||||||
- [Vite](https://vitejs.dev)
|
- [Vite](https://vitejs.dev)
|
||||||
|
|
||||||
## **Developing**
|
## **Developing**
|
||||||
Follow the guide in the [Self Hosted Docs](https://docs.hoppscotch.io/documentation/self-host/getting-started).
|
|
||||||
|
Follow our [self-hosting guide](https://docs.hoppscotch.io/documentation/self-host/getting-started) to get started with the development environment.
|
||||||
|
|
||||||
## **Contributing**
|
## **Contributing**
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,12 @@ services:
|
|||||||
- 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=3000
|
- PORT=3000
|
||||||
volumes:
|
volumes:
|
||||||
- ./packages/hoppscotch-backend/:/usr/src/app
|
# Uncomment the line below when modifying code. Only applicable when using the "dev" target.
|
||||||
|
# - ./packages/hoppscotch-backend/:/usr/src/app
|
||||||
- /usr/src/app/node_modules/
|
- /usr/src/app/node_modules/
|
||||||
depends_on:
|
depends_on:
|
||||||
- hoppscotch-db
|
hoppscotch-db:
|
||||||
|
condition: service_healthy
|
||||||
ports:
|
ports:
|
||||||
- "3170:3000"
|
- "3170:3000"
|
||||||
|
|
||||||
@@ -60,12 +62,20 @@ services:
|
|||||||
# you are using an external postgres instance
|
# you are using an external postgres instance
|
||||||
# This will be exposed at port 5432
|
# This will be exposed at port 5432
|
||||||
hoppscotch-db:
|
hoppscotch-db:
|
||||||
image: postgres
|
image: postgres:15
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "5432:5432"
|
||||||
|
user: postgres
|
||||||
environment:
|
environment:
|
||||||
|
# The default user defined by the docker image
|
||||||
|
POSTGRES_USER: postgres
|
||||||
# NOTE: Please UPDATE THIS PASSWORD!
|
# NOTE: Please UPDATE THIS PASSWORD!
|
||||||
POSTGRES_PASSWORD: testpass
|
POSTGRES_PASSWORD: testpass
|
||||||
POSTGRES_DB: hoppscotch
|
POSTGRES_DB: hoppscotch
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"dev": "pnpm -r do-dev",
|
"dev": "pnpm -r do-dev",
|
||||||
"gen-gql": "cross-env GQL_SCHEMA_EMIT_LOCATION='../../../gql-gen/backend-schema.gql' pnpm -r generate-gql-sdl",
|
"gen-gql": "cross-env GQL_SCHEMA_EMIT_LOCATION='../../../gql-gen/backend-schema.gql' pnpm -r generate-gql-sdl",
|
||||||
"generate": "pnpm -r do-build-prod",
|
"generate": "pnpm -r do-build-prod",
|
||||||
"start": "http-server packages/hoppscotch-web/dist -p 3000",
|
"start": "http-server packages/hoppscotch-selfhost-web/dist -p 3000",
|
||||||
"lint": "pnpm -r do-lint",
|
"lint": "pnpm -r do-lint",
|
||||||
"typecheck": "pnpm -r do-typecheck",
|
"typecheck": "pnpm -r do-typecheck",
|
||||||
"lintfix": "pnpm -r do-lintfix",
|
"lintfix": "pnpm -r do-lintfix",
|
||||||
|
|||||||
24
packages/dioc/.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
141
packages/dioc/README.md
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
# dioc
|
||||||
|
|
||||||
|
A small and lightweight dependency injection / inversion of control system.
|
||||||
|
|
||||||
|
### About
|
||||||
|
|
||||||
|
`dioc` is a really simple **DI/IOC** system where you write services (which are singletons per container) that can depend on each other and emit events that can be listened upon.
|
||||||
|
|
||||||
|
### Demo
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { Service, Container } from "dioc"
|
||||||
|
|
||||||
|
// Here is a simple service, which you can define by extending the Service class
|
||||||
|
// and providing an ID static field (of type string)
|
||||||
|
export class PersistenceService extends Service {
|
||||||
|
// This should be unique for each container
|
||||||
|
public static ID = "PERSISTENCE_SERVICE"
|
||||||
|
|
||||||
|
public read(key: string): string | undefined {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
public write(key: string, value: string) {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type TodoServiceEvent =
|
||||||
|
| { type: "TODO_CREATED"; index: number }
|
||||||
|
| { type: "TODO_DELETED"; index: number }
|
||||||
|
|
||||||
|
// Services have a built in event system
|
||||||
|
// Define the generic argument to say what are the possible emitted values
|
||||||
|
export class TodoService extends Service<TodoServiceEvent> {
|
||||||
|
public static ID = "TODO_SERVICE"
|
||||||
|
|
||||||
|
// Inject persistence service into this service
|
||||||
|
private readonly persistence = this.bind(PersistenceService)
|
||||||
|
|
||||||
|
public todos = []
|
||||||
|
|
||||||
|
// Service constructors cannot have arguments
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
|
||||||
|
this.todos = JSON.parse(this.persistence.read("todos") ?? "[]")
|
||||||
|
}
|
||||||
|
|
||||||
|
public addTodo(text: string) {
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// You can access services via the bound fields
|
||||||
|
this.persistence.write("todos", JSON.stringify(this.todos))
|
||||||
|
|
||||||
|
// This is how you emit an event
|
||||||
|
this.emit({
|
||||||
|
type: "TODO_CREATED",
|
||||||
|
index,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public removeTodo(index: number) {
|
||||||
|
// ...
|
||||||
|
|
||||||
|
this.emit({
|
||||||
|
type: "TODO_DELETED",
|
||||||
|
index,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Services need a container to run in
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
// You can initialize and get services using Container#bind
|
||||||
|
// It will automatically initialize the service (and its dependencies)
|
||||||
|
const todoService = container.bind(TodoService) // Returns an instance of TodoService
|
||||||
|
```
|
||||||
|
|
||||||
|
### Demo (Unit Test)
|
||||||
|
|
||||||
|
`dioc/testing` contains `TestContainer` which lets you bind mocked services to the container.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { TestContainer } from "dioc/testing"
|
||||||
|
import { TodoService, PersistenceService } from "./demo.ts" // The above demo code snippet
|
||||||
|
import { describe, it, expect, vi } from "vitest"
|
||||||
|
|
||||||
|
describe("TodoService", () => {
|
||||||
|
it("addTodo writes to persistence", () => {
|
||||||
|
const container = new TestContainer()
|
||||||
|
|
||||||
|
const writeFn = vi.fn()
|
||||||
|
|
||||||
|
// The first parameter is the service to mock and the second parameter
|
||||||
|
// is the mocked service fields and functions
|
||||||
|
container.bindMock(PersistenceService, {
|
||||||
|
read: () => undefined, // Not really important for this test
|
||||||
|
write: writeFn,
|
||||||
|
})
|
||||||
|
|
||||||
|
// the peristence service bind in TodoService will now use the
|
||||||
|
// above defined mocked implementation
|
||||||
|
const todoService = container.bind(TodoService)
|
||||||
|
|
||||||
|
todoService.addTodo("sup")
|
||||||
|
|
||||||
|
expect(writeFn).toHaveBeenCalledOnce()
|
||||||
|
expect(writeFn).toHaveBeenCalledWith("todos", JSON.stringify(["sup"]))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Demo (Vue)
|
||||||
|
|
||||||
|
`dioc/vue` contains a Vue Plugin and a `useService` composable that allows Vue components to use the defined services.
|
||||||
|
|
||||||
|
In the app entry point:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { createApp } from "vue"
|
||||||
|
import { diocPlugin } from "dioc/vue"
|
||||||
|
|
||||||
|
const app = createApp()
|
||||||
|
|
||||||
|
app.use(diocPlugin, {
|
||||||
|
container: new Container(), // You can pass in the container you want to provide to the components here
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
In your Vue components:
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<script setup>
|
||||||
|
import { TodoService } from "./demo.ts" // The above demo
|
||||||
|
import { useService } from "dioc/vue"
|
||||||
|
|
||||||
|
const todoService = useService(TodoService) // Returns an instance of the TodoService class
|
||||||
|
</script>
|
||||||
|
```
|
||||||
2
packages/dioc/index.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export { default } from "./dist/main.d.ts"
|
||||||
|
export * from "./dist/main.d.ts"
|
||||||
147
packages/dioc/lib/container.ts
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
import { Service } from "./service"
|
||||||
|
import { Observable, Subject } from 'rxjs'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores the current container instance in the current operating context.
|
||||||
|
*
|
||||||
|
* NOTE: This should not be used outside of dioc library code
|
||||||
|
*/
|
||||||
|
export let currentContainer: Container | null = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The events emitted by the container
|
||||||
|
*
|
||||||
|
* `SERVICE_BIND` - emitted when a service is bound to the container directly or as a dependency to another service
|
||||||
|
* `SERVICE_INIT` - emitted when a service is initialized
|
||||||
|
*/
|
||||||
|
export type ContainerEvent =
|
||||||
|
| {
|
||||||
|
type: 'SERVICE_BIND';
|
||||||
|
|
||||||
|
/** The Service ID of the service being bounded (the dependency) */
|
||||||
|
boundeeID: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Service ID of the bounder that is binding the boundee (the dependent)
|
||||||
|
*
|
||||||
|
* NOTE: This will be undefined if the service is bound directly to the container
|
||||||
|
*/
|
||||||
|
bounderID: string | undefined
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: 'SERVICE_INIT';
|
||||||
|
|
||||||
|
/** The Service ID of the service being initialized */
|
||||||
|
serviceID: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The dependency injection container, allows for services to be initialized and maintains the dependency trees.
|
||||||
|
*/
|
||||||
|
export class Container {
|
||||||
|
/** Used during the `bind` operation to detect circular dependencies */
|
||||||
|
private bindStack: string[] = []
|
||||||
|
|
||||||
|
/** The map of bound services to their IDs */
|
||||||
|
protected boundMap = new Map<string, Service<unknown>>()
|
||||||
|
|
||||||
|
/** The RxJS observable representing the event stream */
|
||||||
|
protected event$ = new Subject<ContainerEvent>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether a container has the given service bound
|
||||||
|
* @param service The service to check for
|
||||||
|
*/
|
||||||
|
public hasBound<
|
||||||
|
T extends typeof Service<any> & { ID: string }
|
||||||
|
>(service: T): boolean {
|
||||||
|
return this.boundMap.has(service.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the service bound to the container with the given ID or if not found, undefined.
|
||||||
|
*
|
||||||
|
* NOTE: This is an advanced method and should not be used as much as possible.
|
||||||
|
*
|
||||||
|
* @param serviceID The ID of the service to get
|
||||||
|
*/
|
||||||
|
public getBoundServiceWithID(serviceID: string): Service<unknown> | undefined {
|
||||||
|
return this.boundMap.get(serviceID)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a service to the container. This is equivalent to marking a service as a dependency.
|
||||||
|
* @param service The class reference of a service to bind
|
||||||
|
* @param bounder The class reference of the service that is binding the service (if bound directly to the container, this should be undefined)
|
||||||
|
*/
|
||||||
|
public bind<T extends typeof Service<any> & { ID: string }>(
|
||||||
|
service: T,
|
||||||
|
bounder: ((typeof Service<T>) & { ID: string }) | undefined = undefined
|
||||||
|
): InstanceType<T> {
|
||||||
|
// We need to store the current container in a variable so that we can restore it after the bind operation
|
||||||
|
const oldCurrentContainer = currentContainer;
|
||||||
|
currentContainer = this;
|
||||||
|
|
||||||
|
// If the service is already bound, return the existing instance
|
||||||
|
if (this.hasBound(service)) {
|
||||||
|
this.event$.next({
|
||||||
|
type: 'SERVICE_BIND',
|
||||||
|
boundeeID: service.ID,
|
||||||
|
bounderID: bounder?.ID // Return the bounder ID if it is defined, else assume its the container
|
||||||
|
})
|
||||||
|
|
||||||
|
return this.boundMap.get(service.ID) as InstanceType<T> // Casted as InstanceType<T> because service IDs and types are expected to match
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect circular dependency and throw error
|
||||||
|
if (this.bindStack.findIndex((serviceID) => serviceID === service.ID) !== -1) {
|
||||||
|
const circularServices = `${this.bindStack.join(' -> ')} -> ${service.ID}`
|
||||||
|
|
||||||
|
throw new Error(`Circular dependency detected.\nChain: ${circularServices}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Push the service ID onto the bind stack to detect circular dependencies
|
||||||
|
this.bindStack.push(service.ID)
|
||||||
|
|
||||||
|
// Initialize the service and emit events
|
||||||
|
|
||||||
|
// NOTE: We need to cast the service to any as TypeScript thinks that the service is abstract
|
||||||
|
const instance: Service<any> = new (service as any)()
|
||||||
|
|
||||||
|
this.boundMap.set(service.ID, instance)
|
||||||
|
|
||||||
|
this.bindStack.pop()
|
||||||
|
|
||||||
|
this.event$.next({
|
||||||
|
type: 'SERVICE_INIT',
|
||||||
|
serviceID: service.ID,
|
||||||
|
})
|
||||||
|
|
||||||
|
this.event$.next({
|
||||||
|
type: 'SERVICE_BIND',
|
||||||
|
boundeeID: service.ID,
|
||||||
|
bounderID: bounder?.ID
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Restore the current container
|
||||||
|
currentContainer = oldCurrentContainer;
|
||||||
|
|
||||||
|
// We expect the return type to match the service definition
|
||||||
|
return instance as InstanceType<T>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an iterator of the currently bound service IDs and their instances
|
||||||
|
*/
|
||||||
|
public getBoundServices(): IterableIterator<[string, Service<any>]> {
|
||||||
|
return this.boundMap.entries()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the public container event stream
|
||||||
|
*/
|
||||||
|
public getEventStream(): Observable<ContainerEvent> {
|
||||||
|
return this.event$.asObservable()
|
||||||
|
}
|
||||||
|
}
|
||||||
2
packages/dioc/lib/main.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export * from "./container"
|
||||||
|
export * from "./service"
|
||||||
65
packages/dioc/lib/service.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import { Observable, Subject } from 'rxjs'
|
||||||
|
import { Container, currentContainer } from './container'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Dioc service that can bound to a container and can bind dependency services.
|
||||||
|
*
|
||||||
|
* NOTE: Services cannot have a constructor that takes arguments.
|
||||||
|
*
|
||||||
|
* @template EventDef The type of events that can be emitted by the service. These will be accessible by event streams
|
||||||
|
*/
|
||||||
|
export abstract class Service<EventDef = {}> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The internal event stream of the service
|
||||||
|
*/
|
||||||
|
private event$ = new Subject<EventDef>()
|
||||||
|
|
||||||
|
/** The container the service is bound to */
|
||||||
|
#container: Container
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
if (!currentContainer) {
|
||||||
|
throw new Error(
|
||||||
|
`Tried to initialize service with no container (ID: ${ (this.constructor as any).ID })`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.#container = currentContainer
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a dependency service into this service.
|
||||||
|
* @param service The class reference of the service to bind
|
||||||
|
*/
|
||||||
|
protected bind<T extends typeof Service<any> & { ID: string }>(service: T): InstanceType<T> {
|
||||||
|
if (!currentContainer) {
|
||||||
|
throw new Error('No currentContainer defined.')
|
||||||
|
}
|
||||||
|
|
||||||
|
return currentContainer.bind(service, this.constructor as typeof Service<any> & { ID: string })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the container the service is bound to
|
||||||
|
*/
|
||||||
|
protected getContainer(): Container {
|
||||||
|
return this.#container
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emits an event on the service's event stream
|
||||||
|
* @param event The event to emit
|
||||||
|
*/
|
||||||
|
protected emit(event: EventDef) {
|
||||||
|
this.event$.next(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the event stream of the service
|
||||||
|
*/
|
||||||
|
public getEventStream(): Observable<EventDef> {
|
||||||
|
|
||||||
|
return this.event$.asObservable()
|
||||||
|
}
|
||||||
|
}
|
||||||
33
packages/dioc/lib/testing.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { Container, Service } from "./main";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A container that can be used for writing tests, contains additional methods
|
||||||
|
* for binding suitable for writing tests. (see `bindMock`).
|
||||||
|
*/
|
||||||
|
export class TestContainer extends Container {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a mock service to the container.
|
||||||
|
*
|
||||||
|
* @param service
|
||||||
|
* @param mock
|
||||||
|
*/
|
||||||
|
public bindMock<
|
||||||
|
T extends typeof Service<any> & { ID: string },
|
||||||
|
U extends Partial<InstanceType<T>>
|
||||||
|
>(service: T, mock: U): U {
|
||||||
|
if (this.boundMap.has(service.ID)) {
|
||||||
|
throw new Error(`Service '${service.ID}' already bound to container. Did you already call bindMock on this ?`)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.boundMap.set(service.ID, mock as any)
|
||||||
|
|
||||||
|
this.event$.next({
|
||||||
|
type: "SERVICE_BIND",
|
||||||
|
boundeeID: service.ID,
|
||||||
|
bounderID: undefined,
|
||||||
|
})
|
||||||
|
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
}
|
||||||
34
packages/dioc/lib/vue.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import { Plugin, inject } from "vue"
|
||||||
|
import { Container } from "./container"
|
||||||
|
import { Service } from "./service"
|
||||||
|
|
||||||
|
const VUE_CONTAINER_KEY = Symbol()
|
||||||
|
|
||||||
|
// TODO: Some Vue version issue with plugin generics is breaking type checking
|
||||||
|
/**
|
||||||
|
* The Vue Dioc Plugin, this allows the composables to work and access the container
|
||||||
|
*
|
||||||
|
* NOTE: Make sure you add `vue` as dependency to be able to use this plugin (duh)
|
||||||
|
*/
|
||||||
|
export const diocPlugin: Plugin = {
|
||||||
|
install(app, { container }) {
|
||||||
|
app.provide(VUE_CONTAINER_KEY, container)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A composable that binds a service to a Vue Component
|
||||||
|
*
|
||||||
|
* @param service The class reference of the service to bind
|
||||||
|
*/
|
||||||
|
export function useService<
|
||||||
|
T extends typeof Service<any> & { ID: string }
|
||||||
|
>(service: T): InstanceType<T> {
|
||||||
|
const container = inject(VUE_CONTAINER_KEY) as Container | undefined | null
|
||||||
|
|
||||||
|
if (!container) {
|
||||||
|
throw new Error("Container not found, did you forget to install the dioc plugin?")
|
||||||
|
}
|
||||||
|
|
||||||
|
return container.bind(service)
|
||||||
|
}
|
||||||
54
packages/dioc/package.json
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"name": "dioc",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.1.0",
|
||||||
|
"type": "module",
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"index.d.ts"
|
||||||
|
],
|
||||||
|
"main": "./dist/counter.umd.cjs",
|
||||||
|
"module": "./dist/counter.js",
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./dist/main.d.ts",
|
||||||
|
"require": "./dist/index.cjs",
|
||||||
|
"import": "./dist/index.js"
|
||||||
|
},
|
||||||
|
"./vue": {
|
||||||
|
"types": "./dist/vue.d.ts",
|
||||||
|
"require": "./dist/vue.cjs",
|
||||||
|
"import": "./dist/vue.js"
|
||||||
|
},
|
||||||
|
"./testing": {
|
||||||
|
"types": "./dist/testing.d.ts",
|
||||||
|
"require": "./dist/testing.cjs",
|
||||||
|
"import": "./dist/testing.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vite build && tsc --emitDeclarationOnly",
|
||||||
|
"prepare": "pnpm run build",
|
||||||
|
"test": "vitest run",
|
||||||
|
"do-test": "pnpm run test",
|
||||||
|
"test:watch": "vitest"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"typescript": "^4.9.4",
|
||||||
|
"vite": "^4.0.4",
|
||||||
|
"vitest": "^0.29.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"rxjs": "^7.8.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vue": "^3.2.25"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"vue": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
262
packages/dioc/test/container.spec.ts
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
import { it, expect, describe, vi } from "vitest"
|
||||||
|
import { Service } from "../lib/service"
|
||||||
|
import { Container, currentContainer, ContainerEvent } from "../lib/container"
|
||||||
|
|
||||||
|
class TestServiceA extends Service {
|
||||||
|
public static ID = "TestServiceA"
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestServiceB extends Service {
|
||||||
|
public static ID = "TestServiceB"
|
||||||
|
|
||||||
|
// Marked public to allow for testing
|
||||||
|
public readonly serviceA = this.bind(TestServiceA)
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("Container", () => {
|
||||||
|
describe("getBoundServiceWithID", () => {
|
||||||
|
it("returns the service instance if it is bound to the container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const service = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(container.getBoundServiceWithID(TestServiceA.ID)).toBe(service)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns undefined if the service is not bound to the container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
expect(container.getBoundServiceWithID(TestServiceA.ID)).toBeUndefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("bind", () => {
|
||||||
|
it("correctly binds the service to it", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const service = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
// @ts-expect-error getContainer is defined as a protected property, but we are leveraging it here to check
|
||||||
|
expect(service.getContainer()).toBe(container)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("after bind, the current container is set back to its previous value", () => {
|
||||||
|
const originalValue = currentContainer
|
||||||
|
|
||||||
|
const container = new Container()
|
||||||
|
container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(currentContainer).toBe(originalValue)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("dependent services are registered in the same container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceB = container.bind(TestServiceB)
|
||||||
|
|
||||||
|
// @ts-expect-error getContainer is defined as a protected property, but we are leveraging it here to check
|
||||||
|
expect(serviceB.serviceA.getContainer()).toBe(container)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("binding an already initialized service returns the initialized instance (services are singletons)", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceA = container.bind(TestServiceA)
|
||||||
|
const serviceA2 = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(serviceA).toBe(serviceA2)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("binding a service which is a dependency of another service returns the same instance created from the dependency resolution (services are singletons)", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceB = container.bind(TestServiceB)
|
||||||
|
const serviceA = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(serviceB.serviceA).toBe(serviceA)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("binding an initialized service as a dependency returns the same instance", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceA = container.bind(TestServiceA)
|
||||||
|
const serviceB = container.bind(TestServiceB)
|
||||||
|
|
||||||
|
expect(serviceB.serviceA).toBe(serviceA)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("container emits an init event when an uninitialized service is initialized via bind and event only called once", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn<
|
||||||
|
[ContainerEvent & { type: "SERVICE_INIT" }],
|
||||||
|
void
|
||||||
|
>()
|
||||||
|
|
||||||
|
container.getEventStream().subscribe((ev) => {
|
||||||
|
if (ev.type === "SERVICE_INIT") {
|
||||||
|
serviceFunc(ev)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const instance = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledOnce()
|
||||||
|
expect(serviceFunc).toHaveBeenCalledWith(<ContainerEvent>{
|
||||||
|
type: "SERVICE_INIT",
|
||||||
|
serviceID: TestServiceA.ID,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("the bind event emitted has an undefined bounderID when the service is bound directly to the container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn<
|
||||||
|
[ContainerEvent & { type: "SERVICE_BIND" }],
|
||||||
|
void
|
||||||
|
>()
|
||||||
|
|
||||||
|
container.getEventStream().subscribe((ev) => {
|
||||||
|
if (ev.type === "SERVICE_BIND") {
|
||||||
|
serviceFunc(ev)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledOnce()
|
||||||
|
expect(serviceFunc).toHaveBeenCalledWith(<ContainerEvent>{
|
||||||
|
type: "SERVICE_BIND",
|
||||||
|
boundeeID: TestServiceA.ID,
|
||||||
|
bounderID: undefined,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("the bind event emitted has the correct bounderID when the service is bound to another service", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn<
|
||||||
|
[ContainerEvent & { type: "SERVICE_BIND" }],
|
||||||
|
void
|
||||||
|
>()
|
||||||
|
|
||||||
|
container.getEventStream().subscribe((ev) => {
|
||||||
|
// We only care about the bind event of TestServiceA
|
||||||
|
if (ev.type === "SERVICE_BIND" && ev.boundeeID === TestServiceA.ID) {
|
||||||
|
serviceFunc(ev)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
container.bind(TestServiceB)
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledOnce()
|
||||||
|
expect(serviceFunc).toHaveBeenCalledWith(<ContainerEvent>{
|
||||||
|
type: "SERVICE_BIND",
|
||||||
|
boundeeID: TestServiceA.ID,
|
||||||
|
bounderID: TestServiceB.ID,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("hasBound", () => {
|
||||||
|
it("returns true if the given service is bound to the container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
container.bind(TestServiceA)
|
||||||
|
|
||||||
|
expect(container.hasBound(TestServiceA)).toEqual(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns false if the given service is not bound to the container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
expect(container.hasBound(TestServiceA)).toEqual(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns true when the service is bound because it is a dependency of another service", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
container.bind(TestServiceB)
|
||||||
|
|
||||||
|
expect(container.hasBound(TestServiceA)).toEqual(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("getEventStream", () => {
|
||||||
|
it("returns an observable which emits events correctly when services are initialized", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn<
|
||||||
|
[ContainerEvent & { type: "SERVICE_INIT" }],
|
||||||
|
void
|
||||||
|
>()
|
||||||
|
|
||||||
|
container.getEventStream().subscribe((ev) => {
|
||||||
|
if (ev.type === "SERVICE_INIT") {
|
||||||
|
serviceFunc(ev)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
container.bind(TestServiceB)
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledTimes(2)
|
||||||
|
expect(serviceFunc).toHaveBeenNthCalledWith(1, <ContainerEvent>{
|
||||||
|
type: "SERVICE_INIT",
|
||||||
|
serviceID: TestServiceA.ID,
|
||||||
|
})
|
||||||
|
expect(serviceFunc).toHaveBeenNthCalledWith(2, <ContainerEvent>{
|
||||||
|
type: "SERVICE_INIT",
|
||||||
|
serviceID: TestServiceB.ID,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns an observable which emits events correctly when services are bound", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn<
|
||||||
|
[ContainerEvent & { type: "SERVICE_BIND" }],
|
||||||
|
void
|
||||||
|
>()
|
||||||
|
|
||||||
|
container.getEventStream().subscribe((ev) => {
|
||||||
|
if (ev.type === "SERVICE_BIND") {
|
||||||
|
serviceFunc(ev)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
container.bind(TestServiceB)
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledTimes(2)
|
||||||
|
expect(serviceFunc).toHaveBeenNthCalledWith(1, <ContainerEvent>{
|
||||||
|
type: "SERVICE_BIND",
|
||||||
|
boundeeID: TestServiceA.ID,
|
||||||
|
bounderID: TestServiceB.ID,
|
||||||
|
})
|
||||||
|
expect(serviceFunc).toHaveBeenNthCalledWith(2, <ContainerEvent>{
|
||||||
|
type: "SERVICE_BIND",
|
||||||
|
boundeeID: TestServiceB.ID,
|
||||||
|
bounderID: undefined,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("getBoundServices", () => {
|
||||||
|
it("returns an iterator over all services bound to the container in the format [service id, service instance]", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const instanceB = container.bind(TestServiceB)
|
||||||
|
const instanceA = instanceB.serviceA
|
||||||
|
|
||||||
|
expect(Array.from(container.getBoundServices())).toEqual([
|
||||||
|
[TestServiceA.ID, instanceA],
|
||||||
|
[TestServiceB.ID, instanceB],
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns an empty iterator if no services are bound", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
expect(Array.from(container.getBoundServices())).toEqual([])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
66
packages/dioc/test/service.spec.ts
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import { describe, expect, it, vi } from "vitest"
|
||||||
|
import { Service, Container } from "../lib/main"
|
||||||
|
|
||||||
|
class TestServiceA extends Service {
|
||||||
|
public static ID = "TestServiceA"
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestServiceB extends Service<"test"> {
|
||||||
|
public static ID = "TestServiceB"
|
||||||
|
|
||||||
|
// Marked public to allow for testing
|
||||||
|
public readonly serviceA = this.bind(TestServiceA)
|
||||||
|
|
||||||
|
public emitTestEvent() {
|
||||||
|
this.emit("test")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("Service", () => {
|
||||||
|
describe("constructor", () => {
|
||||||
|
it("throws an error if the service is initialized without a container", () => {
|
||||||
|
expect(() => new TestServiceA()).toThrowError(
|
||||||
|
"Tried to initialize service with no container (ID: TestServiceA)"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("bind", () => {
|
||||||
|
it("correctly binds the dependency service using the container", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceA = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
const serviceB = container.bind(TestServiceB)
|
||||||
|
expect(serviceB.serviceA).toBe(serviceA)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("getContainer", () => {
|
||||||
|
it("returns the container the service is bound to", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceA = container.bind(TestServiceA)
|
||||||
|
|
||||||
|
// @ts-expect-error getContainer is a protected member, we are just using it to help with testing
|
||||||
|
expect(serviceA.getContainer()).toBe(container)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("getEventStream", () => {
|
||||||
|
it("returns the valid event stream of the service", () => {
|
||||||
|
const container = new Container()
|
||||||
|
|
||||||
|
const serviceB = container.bind(TestServiceB)
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn()
|
||||||
|
|
||||||
|
serviceB.getEventStream().subscribe(serviceFunc)
|
||||||
|
|
||||||
|
serviceB.emitTestEvent()
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledOnce()
|
||||||
|
expect(serviceFunc).toHaveBeenCalledWith("test")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
92
packages/dioc/test/test-container.spec.ts
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
import { describe, expect, it, vi } from "vitest"
|
||||||
|
import { TestContainer } from "../lib/testing"
|
||||||
|
import { Service } from "../lib/service"
|
||||||
|
import { ContainerEvent } from "../lib/container"
|
||||||
|
|
||||||
|
class TestServiceA extends Service {
|
||||||
|
public static ID = "TestServiceA"
|
||||||
|
|
||||||
|
public test() {
|
||||||
|
return "real"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestServiceB extends Service {
|
||||||
|
public static ID = "TestServiceB"
|
||||||
|
|
||||||
|
// declared public to help with testing
|
||||||
|
public readonly serviceA = this.bind(TestServiceA)
|
||||||
|
|
||||||
|
public test() {
|
||||||
|
return this.serviceA.test()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("TestContainer", () => {
|
||||||
|
describe("bindMock", () => {
|
||||||
|
it("returns the fake service defined", () => {
|
||||||
|
const container = new TestContainer()
|
||||||
|
|
||||||
|
const fakeService = {
|
||||||
|
test: () => "fake",
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = container.bindMock(TestServiceA, fakeService)
|
||||||
|
|
||||||
|
expect(result).toBe(fakeService)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("new services bound to the container get the mock service", () => {
|
||||||
|
const container = new TestContainer()
|
||||||
|
|
||||||
|
const fakeServiceA = {
|
||||||
|
test: () => "fake",
|
||||||
|
}
|
||||||
|
|
||||||
|
container.bindMock(TestServiceA, fakeServiceA)
|
||||||
|
|
||||||
|
const serviceB = container.bind(TestServiceB)
|
||||||
|
|
||||||
|
expect(serviceB.serviceA).toBe(fakeServiceA)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("container emits SERVICE_BIND event", () => {
|
||||||
|
const container = new TestContainer()
|
||||||
|
|
||||||
|
const fakeServiceA = {
|
||||||
|
test: () => "fake",
|
||||||
|
}
|
||||||
|
|
||||||
|
const serviceFunc = vi.fn<[ContainerEvent, void]>()
|
||||||
|
|
||||||
|
container.getEventStream().subscribe((ev) => {
|
||||||
|
serviceFunc(ev)
|
||||||
|
})
|
||||||
|
|
||||||
|
container.bindMock(TestServiceA, fakeServiceA)
|
||||||
|
|
||||||
|
expect(serviceFunc).toHaveBeenCalledOnce()
|
||||||
|
expect(serviceFunc).toHaveBeenCalledWith(<ContainerEvent>{
|
||||||
|
type: "SERVICE_BIND",
|
||||||
|
boundeeID: TestServiceA.ID,
|
||||||
|
bounderID: undefined,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("throws if service already bound", () => {
|
||||||
|
const container = new TestContainer()
|
||||||
|
|
||||||
|
const fakeServiceA = {
|
||||||
|
test: () => "fake",
|
||||||
|
}
|
||||||
|
|
||||||
|
container.bindMock(TestServiceA, fakeServiceA)
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
container.bindMock(TestServiceA, fakeServiceA)
|
||||||
|
}).toThrowError(
|
||||||
|
"Service 'TestServiceA' already bound to container. Did you already call bindMock on this ?"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
2
packages/dioc/testing.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export { default } from "./dist/testing.d.ts"
|
||||||
|
export * from "./dist/testing.d.ts"
|
||||||
21
packages/dioc/tsconfig.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ESNext",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"lib": ["ESNext", "DOM"],
|
||||||
|
"moduleResolution": "Node",
|
||||||
|
"strict": true,
|
||||||
|
"declaration": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"skipLibCheck": true
|
||||||
|
},
|
||||||
|
"include": ["lib"]
|
||||||
|
}
|
||||||
16
packages/dioc/vite.config.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { defineConfig } from 'vite'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
build: {
|
||||||
|
lib: {
|
||||||
|
entry: {
|
||||||
|
index: './lib/main.ts',
|
||||||
|
vue: './lib/vue.ts',
|
||||||
|
testing: './lib/testing.ts',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
rollupOptions: {
|
||||||
|
external: ['vue'],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
7
packages/dioc/vitest.config.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { defineConfig } from "vitest/config"
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
test: {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
2
packages/dioc/vue.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export { default } from "./dist/vue.d.ts"
|
||||||
|
export * from "./dist/vue.d.ts"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "hoppscotch-backend",
|
"name": "hoppscotch-backend",
|
||||||
"version": "2023.4.0",
|
"version": "2023.4.8",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -411,6 +411,23 @@ export class AdminResolver {
|
|||||||
return deletedTeam.right;
|
return deletedTeam.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Mutation(() => Boolean, {
|
||||||
|
description: 'Revoke a team Invite by Invite ID',
|
||||||
|
})
|
||||||
|
@UseGuards(GqlAuthGuard, GqlAdminGuard)
|
||||||
|
async revokeTeamInviteByAdmin(
|
||||||
|
@Args({
|
||||||
|
name: 'inviteID',
|
||||||
|
description: 'Team Invite ID',
|
||||||
|
type: () => ID,
|
||||||
|
})
|
||||||
|
inviteID: string,
|
||||||
|
): Promise<boolean> {
|
||||||
|
const invite = await this.adminService.revokeTeamInviteByID(inviteID);
|
||||||
|
if (E.isLeft(invite)) throwErr(invite.left);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Subscriptions */
|
/* Subscriptions */
|
||||||
|
|
||||||
@Subscription(() => InvitedUser, {
|
@Subscription(() => InvitedUser, {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import {
|
|||||||
INVALID_EMAIL,
|
INVALID_EMAIL,
|
||||||
ONLY_ONE_ADMIN_ACCOUNT,
|
ONLY_ONE_ADMIN_ACCOUNT,
|
||||||
TEAM_INVITE_ALREADY_MEMBER,
|
TEAM_INVITE_ALREADY_MEMBER,
|
||||||
|
TEAM_INVITE_NO_INVITE_FOUND,
|
||||||
USER_ALREADY_INVITED,
|
USER_ALREADY_INVITED,
|
||||||
USER_IS_ADMIN,
|
USER_IS_ADMIN,
|
||||||
USER_NOT_FOUND,
|
USER_NOT_FOUND,
|
||||||
@@ -181,7 +182,7 @@ export class AdminService {
|
|||||||
* @returns an array team invitations
|
* @returns an array team invitations
|
||||||
*/
|
*/
|
||||||
async pendingInvitationCountInTeam(teamID: string) {
|
async pendingInvitationCountInTeam(teamID: string) {
|
||||||
const invitations = await this.teamInvitationService.getAllTeamInvitations(
|
const invitations = await this.teamInvitationService.getTeamInvitations(
|
||||||
teamID,
|
teamID,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -236,11 +237,11 @@ export class AdminService {
|
|||||||
const user = await this.userService.findUserByEmail(userEmail);
|
const user = await this.userService.findUserByEmail(userEmail);
|
||||||
if (O.isNone(user)) return E.left(USER_NOT_FOUND);
|
if (O.isNone(user)) return E.left(USER_NOT_FOUND);
|
||||||
|
|
||||||
const isUserAlreadyMember = await this.teamService.getTeamMemberTE(
|
const teamMember = await this.teamService.getTeamMemberTE(
|
||||||
teamID,
|
teamID,
|
||||||
user.value.uid,
|
user.value.uid,
|
||||||
)();
|
)();
|
||||||
if (E.left(isUserAlreadyMember)) {
|
if (E.isLeft(teamMember)) {
|
||||||
const addedUser = await this.teamService.addMemberToTeamWithEmail(
|
const addedUser = await this.teamService.addMemberToTeamWithEmail(
|
||||||
teamID,
|
teamID,
|
||||||
userEmail,
|
userEmail,
|
||||||
@@ -248,6 +249,18 @@ export class AdminService {
|
|||||||
);
|
);
|
||||||
if (E.isLeft(addedUser)) return E.left(addedUser.left);
|
if (E.isLeft(addedUser)) return E.left(addedUser.left);
|
||||||
|
|
||||||
|
const userInvitation =
|
||||||
|
await this.teamInvitationService.getTeamInviteByEmailAndTeamID(
|
||||||
|
userEmail,
|
||||||
|
teamID,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (E.isRight(userInvitation)) {
|
||||||
|
await this.teamInvitationService.revokeInvitation(
|
||||||
|
userInvitation.right.id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return E.right(addedUser.right);
|
return E.right(addedUser.right);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,4 +417,19 @@ export class AdminService {
|
|||||||
if (E.isLeft(team)) return E.left(team.left);
|
if (E.isLeft(team)) return E.left(team.left);
|
||||||
return E.right(team.right);
|
return E.right(team.right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revoke a team invite by ID
|
||||||
|
* @param inviteID Team Invite ID
|
||||||
|
* @returns an Either of boolean or error
|
||||||
|
*/
|
||||||
|
async revokeTeamInviteByID(inviteID: string) {
|
||||||
|
const teamInvite = await this.teamInvitationService.revokeInvitation(
|
||||||
|
inviteID,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (E.isLeft(teamInvite)) return E.left(teamInvite.left);
|
||||||
|
|
||||||
|
return E.right(teamInvite.right);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ import {
|
|||||||
Body,
|
Body,
|
||||||
Controller,
|
Controller,
|
||||||
Get,
|
Get,
|
||||||
|
InternalServerErrorException,
|
||||||
Post,
|
Post,
|
||||||
Query,
|
Query,
|
||||||
Req,
|
|
||||||
Request,
|
Request,
|
||||||
Res,
|
Res,
|
||||||
UseGuards,
|
UseGuards,
|
||||||
@@ -19,12 +19,18 @@ import { JwtAuthGuard } from './guards/jwt-auth.guard';
|
|||||||
import { GqlUser } from 'src/decorators/gql-user.decorator';
|
import { GqlUser } from 'src/decorators/gql-user.decorator';
|
||||||
import { AuthUser } from 'src/types/AuthUser';
|
import { AuthUser } from 'src/types/AuthUser';
|
||||||
import { RTCookie } from 'src/decorators/rt-cookie.decorator';
|
import { RTCookie } from 'src/decorators/rt-cookie.decorator';
|
||||||
import { authCookieHandler, throwHTTPErr } from './helper';
|
import {
|
||||||
|
AuthProvider,
|
||||||
|
authCookieHandler,
|
||||||
|
authProviderCheck,
|
||||||
|
throwHTTPErr,
|
||||||
|
} from './helper';
|
||||||
import { GoogleSSOGuard } from './guards/google-sso.guard';
|
import { GoogleSSOGuard } from './guards/google-sso.guard';
|
||||||
import { GithubSSOGuard } from './guards/github-sso.guard';
|
import { GithubSSOGuard } from './guards/github-sso.guard';
|
||||||
import { MicrosoftSSOGuard } from './guards/microsoft-sso-.guard';
|
import { MicrosoftSSOGuard } from './guards/microsoft-sso-.guard';
|
||||||
import { ThrottlerBehindProxyGuard } from 'src/guards/throttler-behind-proxy.guard';
|
import { ThrottlerBehindProxyGuard } from 'src/guards/throttler-behind-proxy.guard';
|
||||||
import { SkipThrottle } from '@nestjs/throttler';
|
import { SkipThrottle } from '@nestjs/throttler';
|
||||||
|
import { AUTH_PROVIDER_NOT_SPECIFIED } from 'src/errors';
|
||||||
|
|
||||||
@UseGuards(ThrottlerBehindProxyGuard)
|
@UseGuards(ThrottlerBehindProxyGuard)
|
||||||
@Controller({ path: 'auth', version: '1' })
|
@Controller({ path: 'auth', version: '1' })
|
||||||
@@ -39,6 +45,9 @@ export class AuthController {
|
|||||||
@Body() authData: SignInMagicDto,
|
@Body() authData: SignInMagicDto,
|
||||||
@Query('origin') origin: string,
|
@Query('origin') origin: string,
|
||||||
) {
|
) {
|
||||||
|
if (!authProviderCheck(AuthProvider.EMAIL))
|
||||||
|
throwHTTPErr({ message: AUTH_PROVIDER_NOT_SPECIFIED, statusCode: 404 });
|
||||||
|
|
||||||
const deviceIdToken = await this.authService.signInMagicLink(
|
const deviceIdToken = await this.authService.signInMagicLink(
|
||||||
authData.email,
|
authData.email,
|
||||||
origin,
|
origin,
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { RTJwtStrategy } from './strategies/rt-jwt.strategy';
|
|||||||
import { GoogleStrategy } from './strategies/google.strategy';
|
import { GoogleStrategy } from './strategies/google.strategy';
|
||||||
import { GithubStrategy } from './strategies/github.strategy';
|
import { GithubStrategy } from './strategies/github.strategy';
|
||||||
import { MicrosoftStrategy } from './strategies/microsoft.strategy';
|
import { MicrosoftStrategy } from './strategies/microsoft.strategy';
|
||||||
|
import { AuthProvider, authProviderCheck } from './helper';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -26,9 +27,9 @@ import { MicrosoftStrategy } from './strategies/microsoft.strategy';
|
|||||||
AuthService,
|
AuthService,
|
||||||
JwtStrategy,
|
JwtStrategy,
|
||||||
RTJwtStrategy,
|
RTJwtStrategy,
|
||||||
GoogleStrategy,
|
...(authProviderCheck(AuthProvider.GOOGLE) ? [GoogleStrategy] : []),
|
||||||
GithubStrategy,
|
...(authProviderCheck(AuthProvider.GITHUB) ? [GithubStrategy] : []),
|
||||||
MicrosoftStrategy,
|
...(authProviderCheck(AuthProvider.MICROSOFT) ? [MicrosoftStrategy] : []),
|
||||||
],
|
],
|
||||||
controllers: [AuthController],
|
controllers: [AuthController],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -228,11 +228,11 @@ export class AuthService {
|
|||||||
url = process.env.VITE_BASE_URL;
|
url = process.env.VITE_BASE_URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.mailerService.sendAuthEmail(email, {
|
await this.mailerService.sendEmail(email, {
|
||||||
template: 'code-your-own',
|
template: 'code-your-own',
|
||||||
variables: {
|
variables: {
|
||||||
inviteeEmail: email,
|
inviteeEmail: email,
|
||||||
magicLink: `${url}/magic-link?token=${generatedTokens.token}`,
|
magicLink: `${url}/enter?token=${generatedTokens.token}`,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,20 @@
|
|||||||
import { ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { AuthGuard } from '@nestjs/passport';
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
|
import { AuthProvider, authProviderCheck, throwHTTPErr } from '../helper';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { AUTH_PROVIDER_NOT_SPECIFIED } from 'src/errors';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class GithubSSOGuard extends AuthGuard('github') {
|
export class GithubSSOGuard extends AuthGuard('github') implements CanActivate {
|
||||||
|
canActivate(
|
||||||
|
context: ExecutionContext,
|
||||||
|
): boolean | Promise<boolean> | Observable<boolean> {
|
||||||
|
if (!authProviderCheck(AuthProvider.GITHUB))
|
||||||
|
throwHTTPErr({ message: AUTH_PROVIDER_NOT_SPECIFIED, statusCode: 404 });
|
||||||
|
|
||||||
|
return super.canActivate(context);
|
||||||
|
}
|
||||||
|
|
||||||
getAuthenticateOptions(context: ExecutionContext) {
|
getAuthenticateOptions(context: ExecutionContext) {
|
||||||
const req = context.switchToHttp().getRequest();
|
const req = context.switchToHttp().getRequest();
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,20 @@
|
|||||||
import { ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { AuthGuard } from '@nestjs/passport';
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
|
import { AuthProvider, authProviderCheck, throwHTTPErr } from '../helper';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { AUTH_PROVIDER_NOT_SPECIFIED } from 'src/errors';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class GoogleSSOGuard extends AuthGuard('google') {
|
export class GoogleSSOGuard extends AuthGuard('google') implements CanActivate {
|
||||||
|
canActivate(
|
||||||
|
context: ExecutionContext,
|
||||||
|
): boolean | Promise<boolean> | Observable<boolean> {
|
||||||
|
if (!authProviderCheck(AuthProvider.GOOGLE))
|
||||||
|
throwHTTPErr({ message: AUTH_PROVIDER_NOT_SPECIFIED, statusCode: 404 });
|
||||||
|
|
||||||
|
return super.canActivate(context);
|
||||||
|
}
|
||||||
|
|
||||||
getAuthenticateOptions(context: ExecutionContext) {
|
getAuthenticateOptions(context: ExecutionContext) {
|
||||||
const req = context.switchToHttp().getRequest();
|
const req = context.switchToHttp().getRequest();
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,26 @@
|
|||||||
import { ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { AuthGuard } from '@nestjs/passport';
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
|
import { AuthProvider, authProviderCheck, throwHTTPErr } from '../helper';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { AUTH_PROVIDER_NOT_SPECIFIED } from 'src/errors';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MicrosoftSSOGuard extends AuthGuard('microsoft') {
|
export class MicrosoftSSOGuard
|
||||||
|
extends AuthGuard('microsoft')
|
||||||
|
implements CanActivate
|
||||||
|
{
|
||||||
|
canActivate(
|
||||||
|
context: ExecutionContext,
|
||||||
|
): boolean | Promise<boolean> | Observable<boolean> {
|
||||||
|
if (!authProviderCheck(AuthProvider.MICROSOFT))
|
||||||
|
throwHTTPErr({
|
||||||
|
message: AUTH_PROVIDER_NOT_SPECIFIED,
|
||||||
|
statusCode: 404,
|
||||||
|
});
|
||||||
|
|
||||||
|
return super.canActivate(context);
|
||||||
|
}
|
||||||
|
|
||||||
getAuthenticateOptions(context: ExecutionContext) {
|
getAuthenticateOptions(context: ExecutionContext) {
|
||||||
const req = context.switchToHttp().getRequest();
|
const req = context.switchToHttp().getRequest();
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { ForbiddenException, HttpException, HttpStatus } from '@nestjs/common';
|
import { HttpException, HttpStatus } from '@nestjs/common';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
import { AuthError } from 'src/types/AuthError';
|
import { AuthError } from 'src/types/AuthError';
|
||||||
import { AuthTokens } from 'src/types/AuthTokens';
|
import { AuthTokens } from 'src/types/AuthTokens';
|
||||||
import { Response } from 'express';
|
import { Response } from 'express';
|
||||||
import * as cookie from 'cookie';
|
import * as cookie from 'cookie';
|
||||||
import { COOKIES_NOT_FOUND } from 'src/errors';
|
import { AUTH_PROVIDER_NOT_SPECIFIED, COOKIES_NOT_FOUND } from 'src/errors';
|
||||||
|
import { throwErr } from 'src/utils';
|
||||||
|
|
||||||
enum AuthTokenType {
|
enum AuthTokenType {
|
||||||
ACCESS_TOKEN = 'access_token',
|
ACCESS_TOKEN = 'access_token',
|
||||||
@@ -16,6 +17,13 @@ export enum Origin {
|
|||||||
APP = 'app',
|
APP = 'app',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum AuthProvider {
|
||||||
|
GOOGLE = 'GOOGLE',
|
||||||
|
GITHUB = 'GITHUB',
|
||||||
|
MICROSOFT = 'MICROSOFT',
|
||||||
|
EMAIL = 'EMAIL',
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function allows throw to be used as an expression
|
* This function allows throw to be used as an expression
|
||||||
* @param errMessage Message present in the error message
|
* @param errMessage Message present in the error message
|
||||||
@@ -63,7 +71,7 @@ export const authCookieHandler = (
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!redirect) {
|
if (!redirect) {
|
||||||
res.status(HttpStatus.OK).send();
|
return res.status(HttpStatus.OK).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
// check to see if redirectUrl is a whitelisted url
|
// check to see if redirectUrl is a whitelisted url
|
||||||
@@ -72,7 +80,7 @@ export const authCookieHandler = (
|
|||||||
// if it is not redirect by default to REDIRECT_URL
|
// if it is not redirect by default to REDIRECT_URL
|
||||||
redirectUrl = process.env.REDIRECT_URL;
|
redirectUrl = process.env.REDIRECT_URL;
|
||||||
|
|
||||||
res.status(HttpStatus.OK).redirect(redirectUrl);
|
return res.status(HttpStatus.OK).redirect(redirectUrl);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -97,3 +105,25 @@ export const subscriptionContextCookieParser = (rawCookies: string) => {
|
|||||||
refresh_token: cookies[AuthTokenType.REFRESH_TOKEN],
|
refresh_token: cookies[AuthTokenType.REFRESH_TOKEN],
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if given auth provider is present in the ALLOWED_AUTH_PROVIDERS env variable
|
||||||
|
*
|
||||||
|
* @param provider Provider we want to check the presence of
|
||||||
|
* @returns Boolean if provider specified is present or not
|
||||||
|
*/
|
||||||
|
export function authProviderCheck(provider: string) {
|
||||||
|
if (!provider) {
|
||||||
|
throwErr(AUTH_PROVIDER_NOT_SPECIFIED);
|
||||||
|
}
|
||||||
|
|
||||||
|
const envVariables = process.env.ALLOWED_AUTH_PROVIDERS
|
||||||
|
? process.env.ALLOWED_AUTH_PROVIDERS.split(',').map((provider) =>
|
||||||
|
provider.trim().toUpperCase(),
|
||||||
|
)
|
||||||
|
: [];
|
||||||
|
|
||||||
|
if (!envVariables.includes(provider.toUpperCase())) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export class MicrosoftStrategy extends PassportStrategy(Strategy) {
|
|||||||
clientSecret: process.env.MICROSOFT_CLIENT_SECRET,
|
clientSecret: process.env.MICROSOFT_CLIENT_SECRET,
|
||||||
callbackURL: process.env.MICROSOFT_CALLBACK_URL,
|
callbackURL: process.env.MICROSOFT_CALLBACK_URL,
|
||||||
scope: [process.env.MICROSOFT_SCOPE],
|
scope: [process.env.MICROSOFT_SCOPE],
|
||||||
passReqToCallback: true,
|
tenant: process.env.MICROSOFT_TENANT,
|
||||||
store: true,
|
store: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,31 @@ export const AUTH_FAIL = 'auth/fail';
|
|||||||
export const JSON_INVALID = 'json_invalid';
|
export const JSON_INVALID = 'json_invalid';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tried to delete an user data document from fb firestore but failed.
|
* Auth Provider not specified
|
||||||
|
* (Auth)
|
||||||
|
*/
|
||||||
|
export const AUTH_PROVIDER_NOT_SPECIFIED = 'auth/provider_not_specified';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Environment variable "ALLOWED_AUTH_PROVIDERS" is not present in .env file
|
||||||
|
*/
|
||||||
|
export const ENV_NOT_FOUND_KEY_AUTH_PROVIDERS =
|
||||||
|
'"ALLOWED_AUTH_PROVIDERS" is not present in .env file';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Environment variable "ALLOWED_AUTH_PROVIDERS" is empty in .env file
|
||||||
|
*/
|
||||||
|
export const ENV_EMPTY_AUTH_PROVIDERS =
|
||||||
|
'"ALLOWED_AUTH_PROVIDERS" is empty in .env file';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Environment variable "ALLOWED_AUTH_PROVIDERS" contains unsupported provider in .env file
|
||||||
|
*/
|
||||||
|
export const ENV_NOT_SUPPORT_AUTH_PROVIDERS =
|
||||||
|
'"ALLOWED_AUTH_PROVIDERS" contains an unsupported auth provider in .env file';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tried to delete a user data document from fb firestore but failed.
|
||||||
* (FirebaseService)
|
* (FirebaseService)
|
||||||
*/
|
*/
|
||||||
export const USER_FB_DOCUMENT_DELETION_FAILED =
|
export const USER_FB_DOCUMENT_DELETION_FAILED =
|
||||||
@@ -231,7 +255,7 @@ 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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tried to perform 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)
|
||||||
*/
|
*/
|
||||||
export const TEAM_REQ_NOT_REQUIRED_ROLE = 'team_req/not_required_role';
|
export const TEAM_REQ_NOT_REQUIRED_ROLE = 'team_req/not_required_role';
|
||||||
@@ -262,7 +286,7 @@ export const TEAM_REQ_REORDERING_FAILED = 'team_req/reordering_failed' as const;
|
|||||||
export const SENDER_EMAIL_INVALID = 'mailer/sender_email_invalid' as const;
|
export const SENDER_EMAIL_INVALID = 'mailer/sender_email_invalid' as const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tried to perform action on a request when the user is not even member of the team
|
* Tried to perform an action on a request when the user is not even a member of the team
|
||||||
* (GqlRequestTeamMemberGuard, GqlCollectionTeamMemberGuard)
|
* (GqlRequestTeamMemberGuard, GqlCollectionTeamMemberGuard)
|
||||||
*/
|
*/
|
||||||
export const TEAM_REQ_NOT_MEMBER = 'team_req/not_member';
|
export const TEAM_REQ_NOT_MEMBER = 'team_req/not_member';
|
||||||
@@ -307,11 +331,18 @@ export const SHORTCODE_INVALID_JSON = 'shortcode/invalid_json' as const;
|
|||||||
export const SHORTCODE_ALREADY_EXISTS = 'shortcode/already_exists' as const;
|
export const SHORTCODE_ALREADY_EXISTS = 'shortcode/already_exists' as const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invalid or non-existent TEAM ENVIRONMMENT ID
|
* Invalid or non-existent TEAM ENVIRONMENT ID
|
||||||
* (TeamEnvironmentsService)
|
* (TeamEnvironmentsService)
|
||||||
*/
|
*/
|
||||||
export const TEAM_ENVIRONMENT_NOT_FOUND = 'team_environment/not_found' as const;
|
export const TEAM_ENVIRONMENT_NOT_FOUND = 'team_environment/not_found' as const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invalid TEAM ENVIRONMENT name
|
||||||
|
* (TeamEnvironmentsService)
|
||||||
|
*/
|
||||||
|
export const TEAM_ENVIRONMENT_SHORT_NAME =
|
||||||
|
'team_environment/short_name' as const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The user is not a member of the team of the given environment
|
* The user is not a member of the team of the given environment
|
||||||
* (GqlTeamEnvTeamGuard)
|
* (GqlTeamEnvTeamGuard)
|
||||||
@@ -340,7 +371,7 @@ export const USER_SETTINGS_NULL_SETTINGS =
|
|||||||
'user_settings/null_settings' as const;
|
'user_settings/null_settings' as const;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global environment doesnt exists for the user
|
* Global environment doesn't exist for the user
|
||||||
* (UserEnvironmentsService)
|
* (UserEnvironmentsService)
|
||||||
*/
|
*/
|
||||||
export const USER_ENVIRONMENT_GLOBAL_ENV_DOES_NOT_EXISTS =
|
export const USER_ENVIRONMENT_GLOBAL_ENV_DOES_NOT_EXISTS =
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import {
|
|||||||
UserMagicLinkMailDescription,
|
UserMagicLinkMailDescription,
|
||||||
} from './MailDescriptions';
|
} from './MailDescriptions';
|
||||||
import { throwErr } from 'src/utils';
|
import { throwErr } from 'src/utils';
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import { EMAIL_FAILED } from 'src/errors';
|
import { EMAIL_FAILED } from 'src/errors';
|
||||||
import { MailerService as NestMailerService } from '@nestjs-modules/mailer';
|
import { MailerService as NestMailerService } from '@nestjs-modules/mailer';
|
||||||
|
|
||||||
@@ -35,33 +34,14 @@ export class MailerService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends an email to the given email address given a mail description
|
* Sends an email to the given email address given a mail description
|
||||||
* @param to The email address to be sent to (NOTE: this is not validated)
|
* @param to Receiver's email id
|
||||||
* @param mailDesc Definition of what email to be sent
|
* @param mailDesc Definition of what email to be sent
|
||||||
|
* @returns Response if email was send successfully or not
|
||||||
*/
|
*/
|
||||||
sendMail(
|
async sendEmail(
|
||||||
to: string,
|
to: string,
|
||||||
mailDesc: MailDescription | UserMagicLinkMailDescription,
|
mailDesc: MailDescription | UserMagicLinkMailDescription,
|
||||||
) {
|
) {
|
||||||
return TE.tryCatch(
|
|
||||||
async () => {
|
|
||||||
await this.nestMailerService.sendMail({
|
|
||||||
to,
|
|
||||||
template: mailDesc.template,
|
|
||||||
subject: this.resolveSubjectForMailDesc(mailDesc),
|
|
||||||
context: mailDesc.variables,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
() => EMAIL_FAILED,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param to Receiver's email id
|
|
||||||
* @param mailDesc Details of email to be sent for Magic-Link auth
|
|
||||||
* @returns Response if email was send successfully or not
|
|
||||||
*/
|
|
||||||
async sendAuthEmail(to: string, mailDesc: UserMagicLinkMailDescription) {
|
|
||||||
try {
|
try {
|
||||||
await this.nestMailerService.sendMail({
|
await this.nestMailerService.sendMail({
|
||||||
to,
|
to,
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import * as cookieParser from 'cookie-parser';
|
|||||||
import { VersioningType } from '@nestjs/common';
|
import { VersioningType } from '@nestjs/common';
|
||||||
import * as session from 'express-session';
|
import * as session from 'express-session';
|
||||||
import { emitGQLSchemaFile } from './gql-schema';
|
import { emitGQLSchemaFile } from './gql-schema';
|
||||||
|
import { checkEnvironmentAuthProvider } from './utils';
|
||||||
|
|
||||||
async function bootstrap() {
|
async function bootstrap() {
|
||||||
console.log(`Running in production: ${process.env.PRODUCTION}`);
|
console.log(`Running in production: ${process.env.PRODUCTION}`);
|
||||||
console.log(`Port: ${process.env.PORT}`);
|
console.log(`Port: ${process.env.PORT}`);
|
||||||
console.log(`Database: ${process.env.DATABASE_URL}`);
|
|
||||||
|
checkEnvironmentAuthProvider();
|
||||||
|
|
||||||
const app = await NestFactory.create(AppModule);
|
const app = await NestFactory.create(AppModule);
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { Reflector } from '@nestjs/core';
|
import { Reflector } from '@nestjs/core';
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import * as O from 'fp-ts/Option';
|
|
||||||
import * as S from 'fp-ts/string';
|
|
||||||
import { pipe } from 'fp-ts/function';
|
|
||||||
import {
|
|
||||||
getAnnotatedRequiredRoles,
|
|
||||||
getGqlArg,
|
|
||||||
getUserFromGQLContext,
|
|
||||||
throwErr,
|
|
||||||
} from 'src/utils';
|
|
||||||
import { TeamEnvironmentsService } from './team-environments.service';
|
import { TeamEnvironmentsService } from './team-environments.service';
|
||||||
import {
|
import {
|
||||||
BUG_AUTH_NO_USER_CTX,
|
BUG_AUTH_NO_USER_CTX,
|
||||||
@@ -19,6 +9,10 @@ import {
|
|||||||
TEAM_ENVIRONMENT_NOT_FOUND,
|
TEAM_ENVIRONMENT_NOT_FOUND,
|
||||||
} from 'src/errors';
|
} from 'src/errors';
|
||||||
import { TeamService } from 'src/team/team.service';
|
import { TeamService } from 'src/team/team.service';
|
||||||
|
import { GqlExecutionContext } from '@nestjs/graphql';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
import { TeamMemberRole } from '@prisma/client';
|
||||||
|
import { throwErr } from 'src/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A guard which checks whether the caller of a GQL Operation
|
* A guard which checks whether the caller of a GQL Operation
|
||||||
@@ -33,50 +27,31 @@ export class GqlTeamEnvTeamGuard implements CanActivate {
|
|||||||
private readonly teamService: TeamService,
|
private readonly teamService: TeamService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
canActivate(context: ExecutionContext): Promise<boolean> {
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||||
return pipe(
|
const requireRoles = this.reflector.get<TeamMemberRole[]>(
|
||||||
TE.Do,
|
'requiresTeamRole',
|
||||||
|
context.getHandler(),
|
||||||
|
);
|
||||||
|
if (!requireRoles) throw new Error(BUG_TEAM_ENV_GUARD_NO_REQUIRE_ROLES);
|
||||||
|
|
||||||
TE.bindW('requiredRoles', () =>
|
const gqlExecCtx = GqlExecutionContext.create(context);
|
||||||
pipe(
|
|
||||||
getAnnotatedRequiredRoles(this.reflector, context),
|
|
||||||
TE.fromOption(() => BUG_TEAM_ENV_GUARD_NO_REQUIRE_ROLES),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.bindW('user', () =>
|
const { user } = gqlExecCtx.getContext().req;
|
||||||
pipe(
|
if (user == undefined) throw new Error(BUG_AUTH_NO_USER_CTX);
|
||||||
getUserFromGQLContext(context),
|
|
||||||
TE.fromOption(() => BUG_AUTH_NO_USER_CTX),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.bindW('envID', () =>
|
const { id } = gqlExecCtx.getArgs<{ id: string }>();
|
||||||
pipe(
|
if (!id) throwErr(BUG_TEAM_ENV_GUARD_NO_ENV_ID);
|
||||||
getGqlArg('id', context),
|
|
||||||
O.fromPredicate(S.isString),
|
|
||||||
TE.fromOption(() => BUG_TEAM_ENV_GUARD_NO_ENV_ID),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.bindW('membership', ({ envID, user }) =>
|
const teamEnvironment =
|
||||||
pipe(
|
await this.teamEnvironmentService.getTeamEnvironment(id);
|
||||||
this.teamEnvironmentService.getTeamEnvironment(envID),
|
if (E.isLeft(teamEnvironment)) throwErr(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
TE.fromTaskOption(() => TEAM_ENVIRONMENT_NOT_FOUND),
|
|
||||||
TE.chainW((env) =>
|
|
||||||
pipe(
|
|
||||||
this.teamService.getTeamMemberTE(env.teamID, user.uid),
|
|
||||||
TE.mapLeft(() => TEAM_ENVIRONMENT_NOT_TEAM_MEMBER),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.map(({ membership, requiredRoles }) =>
|
const member = await this.teamService.getTeamMember(
|
||||||
requiredRoles.includes(membership.role),
|
teamEnvironment.right.teamID,
|
||||||
),
|
user.uid,
|
||||||
|
);
|
||||||
|
if (!member) throwErr(TEAM_ENVIRONMENT_NOT_TEAM_MEMBER);
|
||||||
|
|
||||||
TE.getOrElse(throwErr),
|
return requireRoles.includes(member.role);
|
||||||
)();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import { ArgsType, Field, ID } from '@nestjs/graphql';
|
||||||
|
|
||||||
|
@ArgsType()
|
||||||
|
export class CreateTeamEnvironmentArgs {
|
||||||
|
@Field({
|
||||||
|
name: 'name',
|
||||||
|
description: 'Name of the Team Environment',
|
||||||
|
})
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Field(() => ID, {
|
||||||
|
name: 'teamID',
|
||||||
|
description: 'ID of the Team',
|
||||||
|
})
|
||||||
|
teamID: string;
|
||||||
|
|
||||||
|
@Field({
|
||||||
|
name: 'variables',
|
||||||
|
description: 'JSON string of the variables object',
|
||||||
|
})
|
||||||
|
variables: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ArgsType()
|
||||||
|
export class UpdateTeamEnvironmentArgs {
|
||||||
|
@Field(() => ID, {
|
||||||
|
name: 'id',
|
||||||
|
description: 'ID of the Team Environment',
|
||||||
|
})
|
||||||
|
id: string;
|
||||||
|
@Field({
|
||||||
|
name: 'name',
|
||||||
|
description: 'Name of the Team Environment',
|
||||||
|
})
|
||||||
|
name: string;
|
||||||
|
@Field({
|
||||||
|
name: 'variables',
|
||||||
|
description: 'JSON string of the variables object',
|
||||||
|
})
|
||||||
|
variables: string;
|
||||||
|
}
|
||||||
@@ -13,6 +13,11 @@ import { throwErr } from 'src/utils';
|
|||||||
import { GqlTeamEnvTeamGuard } from './gql-team-env-team.guard';
|
import { GqlTeamEnvTeamGuard } from './gql-team-env-team.guard';
|
||||||
import { TeamEnvironment } from './team-environments.model';
|
import { TeamEnvironment } from './team-environments.model';
|
||||||
import { TeamEnvironmentsService } from './team-environments.service';
|
import { TeamEnvironmentsService } from './team-environments.service';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
import {
|
||||||
|
CreateTeamEnvironmentArgs,
|
||||||
|
UpdateTeamEnvironmentArgs,
|
||||||
|
} from './input-type.args';
|
||||||
|
|
||||||
@UseGuards(GqlThrottlerGuard)
|
@UseGuards(GqlThrottlerGuard)
|
||||||
@Resolver(() => 'TeamEnvironment')
|
@Resolver(() => 'TeamEnvironment')
|
||||||
@@ -29,29 +34,18 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, GqlTeamMemberGuard)
|
@UseGuards(GqlAuthGuard, GqlTeamMemberGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
||||||
createTeamEnvironment(
|
async createTeamEnvironment(
|
||||||
@Args({
|
@Args() args: CreateTeamEnvironmentArgs,
|
||||||
name: 'name',
|
|
||||||
description: 'Name of the Team Environment',
|
|
||||||
})
|
|
||||||
name: string,
|
|
||||||
@Args({
|
|
||||||
name: 'teamID',
|
|
||||||
description: 'ID of the Team',
|
|
||||||
type: () => ID,
|
|
||||||
})
|
|
||||||
teamID: string,
|
|
||||||
@Args({
|
|
||||||
name: 'variables',
|
|
||||||
description: 'JSON string of the variables object',
|
|
||||||
})
|
|
||||||
variables: string,
|
|
||||||
): Promise<TeamEnvironment> {
|
): Promise<TeamEnvironment> {
|
||||||
return this.teamEnvironmentsService.createTeamEnvironment(
|
const teamEnvironment =
|
||||||
name,
|
await this.teamEnvironmentsService.createTeamEnvironment(
|
||||||
teamID,
|
args.name,
|
||||||
variables,
|
args.teamID,
|
||||||
)();
|
args.variables,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (E.isLeft(teamEnvironment)) throwErr(teamEnvironment.left);
|
||||||
|
return teamEnvironment.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => Boolean, {
|
@Mutation(() => Boolean, {
|
||||||
@@ -59,7 +53,7 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
||||||
deleteTeamEnvironment(
|
async deleteTeamEnvironment(
|
||||||
@Args({
|
@Args({
|
||||||
name: 'id',
|
name: 'id',
|
||||||
description: 'ID of the Team Environment',
|
description: 'ID of the Team Environment',
|
||||||
@@ -67,10 +61,12 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
id: string,
|
id: string,
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
return pipe(
|
const isDeleted = await this.teamEnvironmentsService.deleteTeamEnvironment(
|
||||||
this.teamEnvironmentsService.deleteTeamEnvironment(id),
|
id,
|
||||||
TE.getOrElse(throwErr),
|
);
|
||||||
)();
|
|
||||||
|
if (E.isLeft(isDeleted)) throwErr(isDeleted.left);
|
||||||
|
return isDeleted.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => TeamEnvironment, {
|
@Mutation(() => TeamEnvironment, {
|
||||||
@@ -79,28 +75,19 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
||||||
updateTeamEnvironment(
|
async updateTeamEnvironment(
|
||||||
@Args({
|
@Args()
|
||||||
name: 'id',
|
args: UpdateTeamEnvironmentArgs,
|
||||||
description: 'ID of the Team Environment',
|
|
||||||
type: () => ID,
|
|
||||||
})
|
|
||||||
id: string,
|
|
||||||
@Args({
|
|
||||||
name: 'name',
|
|
||||||
description: 'Name of the Team Environment',
|
|
||||||
})
|
|
||||||
name: string,
|
|
||||||
@Args({
|
|
||||||
name: 'variables',
|
|
||||||
description: 'JSON string of the variables object',
|
|
||||||
})
|
|
||||||
variables: string,
|
|
||||||
): Promise<TeamEnvironment> {
|
): Promise<TeamEnvironment> {
|
||||||
return pipe(
|
const updatedTeamEnvironment =
|
||||||
this.teamEnvironmentsService.updateTeamEnvironment(id, name, variables),
|
await this.teamEnvironmentsService.updateTeamEnvironment(
|
||||||
TE.getOrElse(throwErr),
|
args.id,
|
||||||
)();
|
args.name,
|
||||||
|
args.variables,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (E.isLeft(updatedTeamEnvironment)) throwErr(updatedTeamEnvironment.left);
|
||||||
|
return updatedTeamEnvironment.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => TeamEnvironment, {
|
@Mutation(() => TeamEnvironment, {
|
||||||
@@ -108,7 +95,7 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
||||||
deleteAllVariablesFromTeamEnvironment(
|
async deleteAllVariablesFromTeamEnvironment(
|
||||||
@Args({
|
@Args({
|
||||||
name: 'id',
|
name: 'id',
|
||||||
description: 'ID of the Team Environment',
|
description: 'ID of the Team Environment',
|
||||||
@@ -116,10 +103,13 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
id: string,
|
id: string,
|
||||||
): Promise<TeamEnvironment> {
|
): Promise<TeamEnvironment> {
|
||||||
return pipe(
|
const teamEnvironment =
|
||||||
this.teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(id),
|
await this.teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
||||||
TE.getOrElse(throwErr),
|
id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
|
if (E.isLeft(teamEnvironment)) throwErr(teamEnvironment.left);
|
||||||
|
return teamEnvironment.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => TeamEnvironment, {
|
@Mutation(() => TeamEnvironment, {
|
||||||
@@ -127,7 +117,7 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
@UseGuards(GqlAuthGuard, GqlTeamEnvTeamGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
|
||||||
createDuplicateEnvironment(
|
async createDuplicateEnvironment(
|
||||||
@Args({
|
@Args({
|
||||||
name: 'id',
|
name: 'id',
|
||||||
description: 'ID of the Team Environment',
|
description: 'ID of the Team Environment',
|
||||||
@@ -135,10 +125,12 @@ export class TeamEnvironmentsResolver {
|
|||||||
})
|
})
|
||||||
id: string,
|
id: string,
|
||||||
): Promise<TeamEnvironment> {
|
): Promise<TeamEnvironment> {
|
||||||
return pipe(
|
const res = await this.teamEnvironmentsService.createDuplicateEnvironment(
|
||||||
this.teamEnvironmentsService.createDuplicateEnvironment(id),
|
id,
|
||||||
TE.getOrElse(throwErr),
|
);
|
||||||
)();
|
|
||||||
|
if (E.isLeft(res)) throwErr(res.left);
|
||||||
|
return res.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subscriptions */
|
/* Subscriptions */
|
||||||
|
|||||||
@@ -2,7 +2,11 @@ import { mockDeep, mockReset } from 'jest-mock-extended';
|
|||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
import { TeamEnvironment } from './team-environments.model';
|
import { TeamEnvironment } from './team-environments.model';
|
||||||
import { TeamEnvironmentsService } from './team-environments.service';
|
import { TeamEnvironmentsService } from './team-environments.service';
|
||||||
import { TEAM_ENVIRONMENT_NOT_FOUND } from 'src/errors';
|
import {
|
||||||
|
JSON_INVALID,
|
||||||
|
TEAM_ENVIRONMENT_NOT_FOUND,
|
||||||
|
TEAM_ENVIRONMENT_SHORT_NAME,
|
||||||
|
} from 'src/errors';
|
||||||
|
|
||||||
const mockPrisma = mockDeep<PrismaService>();
|
const mockPrisma = mockDeep<PrismaService>();
|
||||||
|
|
||||||
@@ -31,125 +35,81 @@ beforeEach(() => {
|
|||||||
|
|
||||||
describe('TeamEnvironmentsService', () => {
|
describe('TeamEnvironmentsService', () => {
|
||||||
describe('getTeamEnvironment', () => {
|
describe('getTeamEnvironment', () => {
|
||||||
test('queries the db with the id', async () => {
|
test('should successfully return a TeamEnvironment with valid ID', async () => {
|
||||||
mockPrisma.teamEnvironment.findFirst.mockResolvedValue(teamEnvironment);
|
mockPrisma.teamEnvironment.findFirstOrThrow.mockResolvedValueOnce(
|
||||||
|
teamEnvironment,
|
||||||
await teamEnvironmentsService.getTeamEnvironment('123')();
|
|
||||||
|
|
||||||
expect(mockPrisma.teamEnvironment.findFirst).toHaveBeenCalledWith(
|
|
||||||
expect.objectContaining({
|
|
||||||
where: {
|
|
||||||
id: '123',
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
);
|
||||||
});
|
|
||||||
|
|
||||||
test('requests prisma to reject the query promise if not found', async () => {
|
const result = await teamEnvironmentsService.getTeamEnvironment(
|
||||||
mockPrisma.teamEnvironment.findFirst.mockResolvedValue(teamEnvironment);
|
teamEnvironment.id,
|
||||||
|
|
||||||
await teamEnvironmentsService.getTeamEnvironment('123')();
|
|
||||||
|
|
||||||
expect(mockPrisma.teamEnvironment.findFirst).toHaveBeenCalledWith(
|
|
||||||
expect.objectContaining({
|
|
||||||
rejectOnNotFound: true,
|
|
||||||
}),
|
|
||||||
);
|
);
|
||||||
|
expect(result).toEqualRight(teamEnvironment);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should return a Some of the correct environment if exists', async () => {
|
test('should throw TEAM_ENVIRONMENT_NOT_FOUND with invalid ID', async () => {
|
||||||
mockPrisma.teamEnvironment.findFirst.mockResolvedValue(teamEnvironment);
|
mockPrisma.teamEnvironment.findFirstOrThrow.mockRejectedValueOnce(
|
||||||
|
'RejectOnNotFound',
|
||||||
|
);
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.getTeamEnvironment('123')();
|
const result = await teamEnvironmentsService.getTeamEnvironment(
|
||||||
|
teamEnvironment.id,
|
||||||
expect(result).toEqualSome(teamEnvironment);
|
);
|
||||||
});
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
|
|
||||||
test('should return a None if the environment does not exist', async () => {
|
|
||||||
mockPrisma.teamEnvironment.findFirst.mockRejectedValue('NotFoundError');
|
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.getTeamEnvironment('123')();
|
|
||||||
|
|
||||||
expect(result).toBeNone();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('createTeamEnvironment', () => {
|
describe('createTeamEnvironment', () => {
|
||||||
test('should create and return a new team environment given a valid name,variable and team ID', async () => {
|
test('should successfully create and return a new team environment given valid inputs', async () => {
|
||||||
mockPrisma.teamEnvironment.create.mockResolvedValue(teamEnvironment);
|
mockPrisma.teamEnvironment.create.mockResolvedValue(teamEnvironment);
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.createTeamEnvironment(
|
const result = await teamEnvironmentsService.createTeamEnvironment(
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
teamEnvironment.teamID,
|
teamEnvironment.teamID,
|
||||||
JSON.stringify(teamEnvironment.variables),
|
JSON.stringify(teamEnvironment.variables),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqual(<TeamEnvironment>{
|
expect(result).toEqualRight({
|
||||||
id: teamEnvironment.id,
|
...teamEnvironment,
|
||||||
name: teamEnvironment.name,
|
|
||||||
teamID: teamEnvironment.teamID,
|
|
||||||
variables: JSON.stringify(teamEnvironment.variables),
|
variables: JSON.stringify(teamEnvironment.variables),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should reject if given team ID is invalid', async () => {
|
test('should throw TEAM_ENVIRONMENT_SHORT_NAME if input TeamEnvironment name is invalid', async () => {
|
||||||
mockPrisma.teamEnvironment.create.mockRejectedValue(null as any);
|
const result = await teamEnvironmentsService.createTeamEnvironment(
|
||||||
|
'12',
|
||||||
|
teamEnvironment.teamID,
|
||||||
|
JSON.stringify(teamEnvironment.variables),
|
||||||
|
);
|
||||||
|
|
||||||
await expect(
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_SHORT_NAME);
|
||||||
teamEnvironmentsService.createTeamEnvironment(
|
|
||||||
teamEnvironment.name,
|
|
||||||
'invalidteamid',
|
|
||||||
JSON.stringify(teamEnvironment.variables),
|
|
||||||
),
|
|
||||||
).rejects.toBeDefined();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should reject if provided team environment name is not a string', async () => {
|
|
||||||
mockPrisma.teamEnvironment.create.mockRejectedValue(null as any);
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
teamEnvironmentsService.createTeamEnvironment(
|
|
||||||
null as any,
|
|
||||||
teamEnvironment.teamID,
|
|
||||||
JSON.stringify(teamEnvironment.variables),
|
|
||||||
),
|
|
||||||
).rejects.toBeDefined();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should reject if provided variable is not a string', async () => {
|
|
||||||
mockPrisma.teamEnvironment.create.mockRejectedValue(null as any);
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
teamEnvironmentsService.createTeamEnvironment(
|
|
||||||
teamEnvironment.name,
|
|
||||||
teamEnvironment.teamID,
|
|
||||||
null as any,
|
|
||||||
),
|
|
||||||
).rejects.toBeDefined();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should send pubsub message to "team_environment/<teamID>/created" if team environment is created successfully', async () => {
|
test('should send pubsub message to "team_environment/<teamID>/created" if team environment is created successfully', async () => {
|
||||||
mockPrisma.teamEnvironment.create.mockResolvedValueOnce(teamEnvironment);
|
mockPrisma.teamEnvironment.create.mockResolvedValue(teamEnvironment);
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.createTeamEnvironment(
|
const result = await teamEnvironmentsService.createTeamEnvironment(
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
teamEnvironment.teamID,
|
teamEnvironment.teamID,
|
||||||
JSON.stringify(teamEnvironment.variables),
|
JSON.stringify(teamEnvironment.variables),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
||||||
`team_environment/${teamEnvironment.teamID}/created`,
|
`team_environment/${teamEnvironment.teamID}/created`,
|
||||||
result,
|
{
|
||||||
|
...teamEnvironment,
|
||||||
|
variables: JSON.stringify(teamEnvironment.variables),
|
||||||
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('deleteTeamEnvironment', () => {
|
describe('deleteTeamEnvironment', () => {
|
||||||
test('should resolve to true given a valid team environment ID', async () => {
|
test('should successfully delete a TeamEnvironment with a valid ID', async () => {
|
||||||
mockPrisma.teamEnvironment.delete.mockResolvedValueOnce(teamEnvironment);
|
mockPrisma.teamEnvironment.delete.mockResolvedValueOnce(teamEnvironment);
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.deleteTeamEnvironment(
|
const result = await teamEnvironmentsService.deleteTeamEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(true);
|
expect(result).toEqualRight(true);
|
||||||
});
|
});
|
||||||
@@ -159,7 +119,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
|
|
||||||
const result = await teamEnvironmentsService.deleteTeamEnvironment(
|
const result = await teamEnvironmentsService.deleteTeamEnvironment(
|
||||||
'invalidid',
|
'invalidid',
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
});
|
});
|
||||||
@@ -169,7 +129,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
|
|
||||||
const result = await teamEnvironmentsService.deleteTeamEnvironment(
|
const result = await teamEnvironmentsService.deleteTeamEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
||||||
`team_environment/${teamEnvironment.teamID}/deleted`,
|
`team_environment/${teamEnvironment.teamID}/deleted`,
|
||||||
@@ -182,7 +142,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('updateVariablesInTeamEnvironment', () => {
|
describe('updateVariablesInTeamEnvironment', () => {
|
||||||
test('should add new variable to a team environment', async () => {
|
test('should successfully add new variable to a team environment', async () => {
|
||||||
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
variables: [{ key: 'value' }],
|
variables: [{ key: 'value' }],
|
||||||
@@ -192,7 +152,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
JSON.stringify([{ key: 'value' }]),
|
JSON.stringify([{ key: 'value' }]),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
expect(result).toEqualRight(<TeamEnvironment>{
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
@@ -200,7 +160,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should add new variable to already existing list of variables in a team environment', async () => {
|
test('should successfully add new variable to already existing list of variables in a team environment', async () => {
|
||||||
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
variables: [{ key: 'value' }, { key_2: 'value_2' }],
|
variables: [{ key: 'value' }, { key_2: 'value_2' }],
|
||||||
@@ -210,7 +170,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
JSON.stringify([{ key: 'value' }, { key_2: 'value_2' }]),
|
JSON.stringify([{ key: 'value' }, { key_2: 'value_2' }]),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
expect(result).toEqualRight(<TeamEnvironment>{
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
@@ -218,7 +178,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should edit existing variables in a team environment', async () => {
|
test('should successfully edit existing variables in a team environment', async () => {
|
||||||
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
variables: [{ key: '1234' }],
|
variables: [{ key: '1234' }],
|
||||||
@@ -228,7 +188,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
JSON.stringify([{ key: '1234' }]),
|
JSON.stringify([{ key: '1234' }]),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
expect(result).toEqualRight(<TeamEnvironment>{
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
@@ -236,22 +196,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should delete existing variable in a team environment', async () => {
|
test('should successfully edit name of an existing team environment', async () => {
|
||||||
mockPrisma.teamEnvironment.update.mockResolvedValueOnce(teamEnvironment);
|
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.updateTeamEnvironment(
|
|
||||||
teamEnvironment.id,
|
|
||||||
teamEnvironment.name,
|
|
||||||
JSON.stringify([{}]),
|
|
||||||
)();
|
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
|
||||||
...teamEnvironment,
|
|
||||||
variables: JSON.stringify([{}]),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should edit name of an existing team environment', async () => {
|
|
||||||
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
mockPrisma.teamEnvironment.update.mockResolvedValueOnce({
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
variables: [{ key: '123' }],
|
variables: [{ key: '123' }],
|
||||||
@@ -261,7 +206,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
JSON.stringify([{ key: '123' }]),
|
JSON.stringify([{ key: '123' }]),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
expect(result).toEqualRight(<TeamEnvironment>{
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
@@ -269,14 +214,24 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should reject to TEAM_ENVIRONMMENT_NOT_FOUND if provided id is invalid', async () => {
|
test('should throw TEAM_ENVIRONMENT_SHORT_NAME if input TeamEnvironment name is invalid', async () => {
|
||||||
|
const result = await teamEnvironmentsService.updateTeamEnvironment(
|
||||||
|
teamEnvironment.id,
|
||||||
|
'12',
|
||||||
|
JSON.stringify([{ key: 'value' }]),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_SHORT_NAME);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should throw TEAM_ENVIRONMMENT_NOT_FOUND if provided id is invalid', async () => {
|
||||||
mockPrisma.teamEnvironment.update.mockRejectedValue('RecordNotFound');
|
mockPrisma.teamEnvironment.update.mockRejectedValue('RecordNotFound');
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.updateTeamEnvironment(
|
const result = await teamEnvironmentsService.updateTeamEnvironment(
|
||||||
'invalidid',
|
'invalidid',
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
JSON.stringify(teamEnvironment.variables),
|
JSON.stringify(teamEnvironment.variables),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
});
|
});
|
||||||
@@ -288,7 +243,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
teamEnvironment.name,
|
teamEnvironment.name,
|
||||||
JSON.stringify([{ key: 'value' }]),
|
JSON.stringify([{ key: 'value' }]),
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
||||||
`team_environment/${teamEnvironment.teamID}/updated`,
|
`team_environment/${teamEnvironment.teamID}/updated`,
|
||||||
@@ -301,13 +256,13 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('deleteAllVariablesFromTeamEnvironment', () => {
|
describe('deleteAllVariablesFromTeamEnvironment', () => {
|
||||||
test('should delete all variables in a team environment', async () => {
|
test('should successfully delete all variables in a team environment', async () => {
|
||||||
mockPrisma.teamEnvironment.update.mockResolvedValueOnce(teamEnvironment);
|
mockPrisma.teamEnvironment.update.mockResolvedValueOnce(teamEnvironment);
|
||||||
|
|
||||||
const result =
|
const result =
|
||||||
await teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
await teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
expect(result).toEqualRight(<TeamEnvironment>{
|
||||||
...teamEnvironment,
|
...teamEnvironment,
|
||||||
@@ -315,13 +270,13 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should reject to 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.update.mockRejectedValue('RecordNotFound');
|
mockPrisma.teamEnvironment.update.mockRejectedValue('RecordNotFound');
|
||||||
|
|
||||||
const result =
|
const result =
|
||||||
await teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
await teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
||||||
'invalidid',
|
'invalidid',
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
});
|
});
|
||||||
@@ -332,7 +287,7 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
const result =
|
const result =
|
||||||
await teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
await teamEnvironmentsService.deleteAllVariablesFromTeamEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
||||||
`team_environment/${teamEnvironment.teamID}/updated`,
|
`team_environment/${teamEnvironment.teamID}/updated`,
|
||||||
@@ -345,33 +300,33 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('createDuplicateEnvironment', () => {
|
describe('createDuplicateEnvironment', () => {
|
||||||
test('should duplicate an existing team environment', async () => {
|
test('should successfully duplicate an existing team environment', async () => {
|
||||||
mockPrisma.teamEnvironment.findFirst.mockResolvedValueOnce(
|
mockPrisma.teamEnvironment.findFirst.mockResolvedValueOnce(
|
||||||
teamEnvironment,
|
teamEnvironment,
|
||||||
);
|
);
|
||||||
|
|
||||||
mockPrisma.teamEnvironment.create.mockResolvedValueOnce({
|
mockPrisma.teamEnvironment.create.mockResolvedValueOnce({
|
||||||
...teamEnvironment,
|
|
||||||
id: 'newid',
|
id: 'newid',
|
||||||
|
...teamEnvironment,
|
||||||
});
|
});
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.createDuplicateEnvironment(
|
const result = await teamEnvironmentsService.createDuplicateEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualRight(<TeamEnvironment>{
|
expect(result).toEqualRight(<TeamEnvironment>{
|
||||||
...teamEnvironment,
|
|
||||||
id: 'newid',
|
id: 'newid',
|
||||||
|
...teamEnvironment,
|
||||||
variables: JSON.stringify(teamEnvironment.variables),
|
variables: JSON.stringify(teamEnvironment.variables),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should reject to 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.findFirst.mockRejectedValue('NotFoundError');
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.createDuplicateEnvironment(
|
const result = await teamEnvironmentsService.createDuplicateEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
expect(result).toEqualLeft(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
});
|
});
|
||||||
@@ -382,19 +337,19 @@ describe('TeamEnvironmentsService', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
mockPrisma.teamEnvironment.create.mockResolvedValueOnce({
|
mockPrisma.teamEnvironment.create.mockResolvedValueOnce({
|
||||||
...teamEnvironment,
|
|
||||||
id: 'newid',
|
id: 'newid',
|
||||||
|
...teamEnvironment,
|
||||||
});
|
});
|
||||||
|
|
||||||
const result = await teamEnvironmentsService.createDuplicateEnvironment(
|
const result = await teamEnvironmentsService.createDuplicateEnvironment(
|
||||||
teamEnvironment.id,
|
teamEnvironment.id,
|
||||||
)();
|
);
|
||||||
|
|
||||||
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
expect(mockPubSub.publish).toHaveBeenCalledWith(
|
||||||
`team_environment/${teamEnvironment.teamID}/created`,
|
`team_environment/${teamEnvironment.teamID}/created`,
|
||||||
{
|
{
|
||||||
...teamEnvironment,
|
|
||||||
id: 'newid',
|
id: 'newid',
|
||||||
|
...teamEnvironment,
|
||||||
variables: JSON.stringify([{}]),
|
variables: JSON.stringify([{}]),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { pipe } from 'fp-ts/function';
|
import { TeamEnvironment as DBTeamEnvironment, Prisma } from '@prisma/client';
|
||||||
import * as T from 'fp-ts/Task';
|
|
||||||
import * as TO from 'fp-ts/TaskOption';
|
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import * as A from 'fp-ts/Array';
|
|
||||||
import { Prisma } from '@prisma/client';
|
|
||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
import { PubSubService } from 'src/pubsub/pubsub.service';
|
import { PubSubService } from 'src/pubsub/pubsub.service';
|
||||||
import { TeamEnvironment } from './team-environments.model';
|
import { TeamEnvironment } from './team-environments.model';
|
||||||
import { TEAM_ENVIRONMENT_NOT_FOUND } from 'src/errors';
|
import {
|
||||||
|
TEAM_ENVIRONMENT_NOT_FOUND,
|
||||||
|
TEAM_ENVIRONMENT_SHORT_NAME,
|
||||||
|
} from 'src/errors';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
import { isValidLength } from 'src/utils';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TeamEnvironmentsService {
|
export class TeamEnvironmentsService {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -17,219 +16,218 @@ export class TeamEnvironmentsService {
|
|||||||
private readonly pubsub: PubSubService,
|
private readonly pubsub: PubSubService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
getTeamEnvironment(id: string) {
|
TITLE_LENGTH = 3;
|
||||||
return TO.tryCatch(() =>
|
|
||||||
this.prisma.teamEnvironment.findFirst({
|
/**
|
||||||
where: { id },
|
* TeamEnvironments are saved in the DB in the following way
|
||||||
|
* [{ key: value }, { key: value },....]
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Typecast a database TeamEnvironment to a TeamEnvironment model
|
||||||
|
* @param teamEnvironment database TeamEnvironment
|
||||||
|
* @returns TeamEnvironment model
|
||||||
|
*/
|
||||||
|
private cast(teamEnvironment: DBTeamEnvironment): TeamEnvironment {
|
||||||
|
return {
|
||||||
|
id: teamEnvironment.id,
|
||||||
|
name: teamEnvironment.name,
|
||||||
|
teamID: teamEnvironment.teamID,
|
||||||
|
variables: JSON.stringify(teamEnvironment.variables),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get details of a TeamEnvironment.
|
||||||
|
*
|
||||||
|
* @param id TeamEnvironment ID
|
||||||
|
* @returns Either of a TeamEnvironment or error message
|
||||||
|
*/
|
||||||
|
async getTeamEnvironment(id: string) {
|
||||||
|
try {
|
||||||
|
const teamEnvironment =
|
||||||
|
await this.prisma.teamEnvironment.findFirstOrThrow({
|
||||||
|
where: { id },
|
||||||
|
});
|
||||||
|
return E.right(teamEnvironment);
|
||||||
|
} catch (error) {
|
||||||
|
return E.left(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new TeamEnvironment.
|
||||||
|
*
|
||||||
|
* @param name name of new TeamEnvironment
|
||||||
|
* @param teamID teamID of new TeamEnvironment
|
||||||
|
* @param variables JSONified string of contents of new TeamEnvironment
|
||||||
|
* @returns Either of a TeamEnvironment or error message
|
||||||
|
*/
|
||||||
|
async createTeamEnvironment(name: string, teamID: string, variables: string) {
|
||||||
|
const isTitleValid = isValidLength(name, this.TITLE_LENGTH);
|
||||||
|
if (!isTitleValid) return E.left(TEAM_ENVIRONMENT_SHORT_NAME);
|
||||||
|
|
||||||
|
const result = await this.prisma.teamEnvironment.create({
|
||||||
|
data: {
|
||||||
|
name: name,
|
||||||
|
teamID: teamID,
|
||||||
|
variables: JSON.parse(variables),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const createdTeamEnvironment = this.cast(result);
|
||||||
|
|
||||||
|
this.pubsub.publish(
|
||||||
|
`team_environment/${createdTeamEnvironment.teamID}/created`,
|
||||||
|
createdTeamEnvironment,
|
||||||
|
);
|
||||||
|
|
||||||
|
return E.right(createdTeamEnvironment);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a TeamEnvironment.
|
||||||
|
*
|
||||||
|
* @param id TeamEnvironment ID
|
||||||
|
* @returns Either of boolean or error message
|
||||||
|
*/
|
||||||
|
async deleteTeamEnvironment(id: string) {
|
||||||
|
try {
|
||||||
|
const result = await this.prisma.teamEnvironment.delete({
|
||||||
|
where: {
|
||||||
|
id: id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const deletedTeamEnvironment = this.cast(result);
|
||||||
|
|
||||||
|
this.pubsub.publish(
|
||||||
|
`team_environment/${deletedTeamEnvironment.teamID}/deleted`,
|
||||||
|
deletedTeamEnvironment,
|
||||||
|
);
|
||||||
|
|
||||||
|
return E.right(true);
|
||||||
|
} catch (error) {
|
||||||
|
return E.left(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a TeamEnvironment.
|
||||||
|
*
|
||||||
|
* @param id TeamEnvironment ID
|
||||||
|
* @param name TeamEnvironment name
|
||||||
|
* @param variables JSONified string of contents of new TeamEnvironment
|
||||||
|
* @returns Either of a TeamEnvironment or error message
|
||||||
|
*/
|
||||||
|
async updateTeamEnvironment(id: string, name: string, variables: string) {
|
||||||
|
try {
|
||||||
|
const isTitleValid = isValidLength(name, this.TITLE_LENGTH);
|
||||||
|
if (!isTitleValid) return E.left(TEAM_ENVIRONMENT_SHORT_NAME);
|
||||||
|
|
||||||
|
const result = await this.prisma.teamEnvironment.update({
|
||||||
|
where: { id: id },
|
||||||
|
data: {
|
||||||
|
name,
|
||||||
|
variables: JSON.parse(variables),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const updatedTeamEnvironment = this.cast(result);
|
||||||
|
|
||||||
|
this.pubsub.publish(
|
||||||
|
`team_environment/${updatedTeamEnvironment.teamID}/updated`,
|
||||||
|
updatedTeamEnvironment,
|
||||||
|
);
|
||||||
|
|
||||||
|
return E.right(updatedTeamEnvironment);
|
||||||
|
} catch (error) {
|
||||||
|
return E.left(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear contents of a TeamEnvironment.
|
||||||
|
*
|
||||||
|
* @param id TeamEnvironment ID
|
||||||
|
* @returns Either of a TeamEnvironment or error message
|
||||||
|
*/
|
||||||
|
async deleteAllVariablesFromTeamEnvironment(id: string) {
|
||||||
|
try {
|
||||||
|
const result = await this.prisma.teamEnvironment.update({
|
||||||
|
where: { id: id },
|
||||||
|
data: {
|
||||||
|
variables: [],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const teamEnvironment = this.cast(result);
|
||||||
|
|
||||||
|
this.pubsub.publish(
|
||||||
|
`team_environment/${teamEnvironment.teamID}/updated`,
|
||||||
|
teamEnvironment,
|
||||||
|
);
|
||||||
|
|
||||||
|
return E.right(teamEnvironment);
|
||||||
|
} catch (error) {
|
||||||
|
return E.left(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a duplicate of a existing TeamEnvironment.
|
||||||
|
*
|
||||||
|
* @param id TeamEnvironment ID
|
||||||
|
* @returns Either of a TeamEnvironment or error message
|
||||||
|
*/
|
||||||
|
async createDuplicateEnvironment(id: string) {
|
||||||
|
try {
|
||||||
|
const environment = await this.prisma.teamEnvironment.findFirst({
|
||||||
|
where: {
|
||||||
|
id: id,
|
||||||
|
},
|
||||||
rejectOnNotFound: true,
|
rejectOnNotFound: true,
|
||||||
}),
|
});
|
||||||
);
|
|
||||||
|
const result = await this.prisma.teamEnvironment.create({
|
||||||
|
data: {
|
||||||
|
name: environment.name,
|
||||||
|
teamID: environment.teamID,
|
||||||
|
variables: environment.variables as Prisma.JsonArray,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const duplicatedTeamEnvironment = this.cast(result);
|
||||||
|
|
||||||
|
this.pubsub.publish(
|
||||||
|
`team_environment/${duplicatedTeamEnvironment.teamID}/created`,
|
||||||
|
duplicatedTeamEnvironment,
|
||||||
|
);
|
||||||
|
|
||||||
|
return E.right(duplicatedTeamEnvironment);
|
||||||
|
} catch (error) {
|
||||||
|
return E.left(TEAM_ENVIRONMENT_NOT_FOUND);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createTeamEnvironment(name: string, teamID: string, variables: string) {
|
/**
|
||||||
return pipe(
|
* Fetch all TeamEnvironments of a team.
|
||||||
() =>
|
*
|
||||||
this.prisma.teamEnvironment.create({
|
* @param teamID teamID of new TeamEnvironment
|
||||||
data: {
|
* @returns List of TeamEnvironments
|
||||||
name: name,
|
*/
|
||||||
teamID: teamID,
|
async fetchAllTeamEnvironments(teamID: string) {
|
||||||
variables: JSON.parse(variables),
|
const result = await this.prisma.teamEnvironment.findMany({
|
||||||
},
|
where: {
|
||||||
}),
|
teamID: teamID,
|
||||||
T.chainFirst(
|
},
|
||||||
(environment) => () =>
|
});
|
||||||
this.pubsub.publish(
|
const teamEnvironments = result.map((item) => {
|
||||||
`team_environment/${environment.teamID}/created`,
|
return this.cast(item);
|
||||||
<TeamEnvironment>{
|
});
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
T.map((data) => {
|
|
||||||
return <TeamEnvironment>{
|
|
||||||
id: data.id,
|
|
||||||
name: data.name,
|
|
||||||
teamID: data.teamID,
|
|
||||||
variables: JSON.stringify(data.variables),
|
|
||||||
};
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
deleteTeamEnvironment(id: string) {
|
return teamEnvironments;
|
||||||
return pipe(
|
|
||||||
TE.tryCatch(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamEnvironment.delete({
|
|
||||||
where: {
|
|
||||||
id: id,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
() => TEAM_ENVIRONMENT_NOT_FOUND,
|
|
||||||
),
|
|
||||||
TE.chainFirst((environment) =>
|
|
||||||
TE.fromTask(() =>
|
|
||||||
this.pubsub.publish(
|
|
||||||
`team_environment/${environment.teamID}/deleted`,
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.map((data) => true),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateTeamEnvironment(id: string, name: string, variables: string) {
|
|
||||||
return pipe(
|
|
||||||
TE.tryCatch(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamEnvironment.update({
|
|
||||||
where: { id: id },
|
|
||||||
data: {
|
|
||||||
name,
|
|
||||||
variables: JSON.parse(variables),
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
() => TEAM_ENVIRONMENT_NOT_FOUND,
|
|
||||||
),
|
|
||||||
TE.chainFirst((environment) =>
|
|
||||||
TE.fromTask(() =>
|
|
||||||
this.pubsub.publish(
|
|
||||||
`team_environment/${environment.teamID}/updated`,
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.map(
|
|
||||||
(environment) =>
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
deleteAllVariablesFromTeamEnvironment(id: string) {
|
|
||||||
return pipe(
|
|
||||||
TE.tryCatch(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamEnvironment.update({
|
|
||||||
where: { id: id },
|
|
||||||
data: {
|
|
||||||
variables: [],
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
() => TEAM_ENVIRONMENT_NOT_FOUND,
|
|
||||||
),
|
|
||||||
TE.chainFirst((environment) =>
|
|
||||||
TE.fromTask(() =>
|
|
||||||
this.pubsub.publish(
|
|
||||||
`team_environment/${environment.teamID}/updated`,
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.map(
|
|
||||||
(environment) =>
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
createDuplicateEnvironment(id: string) {
|
|
||||||
return pipe(
|
|
||||||
TE.tryCatch(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamEnvironment.findFirst({
|
|
||||||
where: {
|
|
||||||
id: id,
|
|
||||||
},
|
|
||||||
rejectOnNotFound: true,
|
|
||||||
}),
|
|
||||||
() => TEAM_ENVIRONMENT_NOT_FOUND,
|
|
||||||
),
|
|
||||||
TE.chain((environment) =>
|
|
||||||
TE.fromTask(() =>
|
|
||||||
this.prisma.teamEnvironment.create({
|
|
||||||
data: {
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: environment.variables as Prisma.JsonArray,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.chainFirst((environment) =>
|
|
||||||
TE.fromTask(() =>
|
|
||||||
this.pubsub.publish(
|
|
||||||
`team_environment/${environment.teamID}/created`,
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.map(
|
|
||||||
(environment) =>
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
fetchAllTeamEnvironments(teamID: string) {
|
|
||||||
return pipe(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamEnvironment.findMany({
|
|
||||||
where: {
|
|
||||||
teamID: teamID,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
T.map(
|
|
||||||
A.map(
|
|
||||||
(environment) =>
|
|
||||||
<TeamEnvironment>{
|
|
||||||
id: environment.id,
|
|
||||||
name: environment.name,
|
|
||||||
teamID: environment.teamID,
|
|
||||||
variables: JSON.stringify(environment.variables),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ export class TeamEnvsTeamResolver {
|
|||||||
description: 'Returns all Team Environments for the given Team',
|
description: 'Returns all Team Environments for the given Team',
|
||||||
})
|
})
|
||||||
teamEnvironments(@Parent() team: Team): Promise<TeamEnvironment[]> {
|
teamEnvironments(@Parent() team: Team): Promise<TeamEnvironment[]> {
|
||||||
return this.teamEnvironmentService.fetchAllTeamEnvironments(team.id)();
|
return this.teamEnvironmentService.fetchAllTeamEnvironments(team.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { ArgsType, Field, ID } from '@nestjs/graphql';
|
||||||
|
import { TeamMemberRole } from 'src/team/team.model';
|
||||||
|
|
||||||
|
@ArgsType()
|
||||||
|
export class CreateTeamInvitationArgs {
|
||||||
|
@Field(() => ID, {
|
||||||
|
name: 'teamID',
|
||||||
|
description: 'ID of the Team ID to invite from',
|
||||||
|
})
|
||||||
|
teamID: string;
|
||||||
|
|
||||||
|
@Field({ name: 'inviteeEmail', description: 'Email of the user to invite' })
|
||||||
|
inviteeEmail: string;
|
||||||
|
|
||||||
|
@Field(() => TeamMemberRole, {
|
||||||
|
name: 'inviteeRole',
|
||||||
|
description: 'Role to be given to the user',
|
||||||
|
})
|
||||||
|
inviteeRole: TeamMemberRole;
|
||||||
|
}
|
||||||
@@ -12,15 +12,10 @@ import { TeamInvitation } from './team-invitation.model';
|
|||||||
import { TeamInvitationService } from './team-invitation.service';
|
import { TeamInvitationService } from './team-invitation.service';
|
||||||
import { pipe } from 'fp-ts/function';
|
import { pipe } from 'fp-ts/function';
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
import * as TE from 'fp-ts/TaskEither';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
import { Team, TeamMember, TeamMemberRole } from 'src/team/team.model';
|
import { Team, TeamMember, TeamMemberRole } from 'src/team/team.model';
|
||||||
import { EmailCodec } from 'src/types/Email';
|
import { TEAM_INVITE_NO_INVITE_FOUND, USER_NOT_FOUND } from 'src/errors';
|
||||||
import {
|
|
||||||
INVALID_EMAIL,
|
|
||||||
TEAM_INVITE_EMAIL_DO_NOT_MATCH,
|
|
||||||
TEAM_INVITE_NO_INVITE_FOUND,
|
|
||||||
USER_NOT_FOUND,
|
|
||||||
} from 'src/errors';
|
|
||||||
import { GqlUser } from 'src/decorators/gql-user.decorator';
|
import { GqlUser } from 'src/decorators/gql-user.decorator';
|
||||||
import { User } from 'src/user/user.model';
|
import { User } from 'src/user/user.model';
|
||||||
import { UseGuards } from '@nestjs/common';
|
import { UseGuards } from '@nestjs/common';
|
||||||
@@ -36,6 +31,8 @@ import { UserService } from 'src/user/user.service';
|
|||||||
import { PubSubService } from 'src/pubsub/pubsub.service';
|
import { PubSubService } from 'src/pubsub/pubsub.service';
|
||||||
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 { AuthUser } from 'src/types/AuthUser';
|
||||||
|
import { CreateTeamInvitationArgs } from './input-type.args';
|
||||||
|
|
||||||
@UseGuards(GqlThrottlerGuard)
|
@UseGuards(GqlThrottlerGuard)
|
||||||
@Resolver(() => TeamInvitation)
|
@Resolver(() => TeamInvitation)
|
||||||
@@ -79,8 +76,8 @@ export class TeamInvitationResolver {
|
|||||||
'Gets the Team Invitation with the given ID, or null if not exists',
|
'Gets the Team Invitation with the given ID, or null if not exists',
|
||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, TeamInviteViewerGuard)
|
@UseGuards(GqlAuthGuard, TeamInviteViewerGuard)
|
||||||
teamInvitation(
|
async teamInvitation(
|
||||||
@GqlUser() user: User,
|
@GqlUser() user: AuthUser,
|
||||||
@Args({
|
@Args({
|
||||||
name: 'inviteID',
|
name: 'inviteID',
|
||||||
description: 'ID of the Team Invitation to lookup',
|
description: 'ID of the Team Invitation to lookup',
|
||||||
@@ -88,17 +85,11 @@ export class TeamInvitationResolver {
|
|||||||
})
|
})
|
||||||
inviteID: string,
|
inviteID: string,
|
||||||
): Promise<TeamInvitation> {
|
): Promise<TeamInvitation> {
|
||||||
return pipe(
|
const teamInvitation = await this.teamInvitationService.getInvitation(
|
||||||
this.teamInvitationService.getInvitation(inviteID),
|
inviteID,
|
||||||
TE.fromTaskOption(() => TEAM_INVITE_NO_INVITE_FOUND),
|
);
|
||||||
TE.chainW(
|
if (O.isNone(teamInvitation)) throwErr(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
TE.fromPredicate(
|
return teamInvitation.value;
|
||||||
(a) => a.inviteeEmail.toLowerCase() === user.email?.toLowerCase(),
|
|
||||||
() => TEAM_INVITE_EMAIL_DO_NOT_MATCH,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.getOrElse(throwErr),
|
|
||||||
)();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => TeamInvitation, {
|
@Mutation(() => TeamInvitation, {
|
||||||
@@ -106,56 +97,19 @@ export class TeamInvitationResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, GqlTeamMemberGuard)
|
@UseGuards(GqlAuthGuard, GqlTeamMemberGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER)
|
@RequiresTeamRole(TeamMemberRole.OWNER)
|
||||||
createTeamInvitation(
|
async createTeamInvitation(
|
||||||
@GqlUser()
|
@GqlUser() user: AuthUser,
|
||||||
user: User,
|
@Args() args: CreateTeamInvitationArgs,
|
||||||
|
|
||||||
@Args({
|
|
||||||
name: 'teamID',
|
|
||||||
description: 'ID of the Team ID to invite from',
|
|
||||||
type: () => ID,
|
|
||||||
})
|
|
||||||
teamID: string,
|
|
||||||
@Args({
|
|
||||||
name: 'inviteeEmail',
|
|
||||||
description: 'Email of the user to invite',
|
|
||||||
})
|
|
||||||
inviteeEmail: string,
|
|
||||||
@Args({
|
|
||||||
name: 'inviteeRole',
|
|
||||||
type: () => TeamMemberRole,
|
|
||||||
description: 'Role to be given to the user',
|
|
||||||
})
|
|
||||||
inviteeRole: TeamMemberRole,
|
|
||||||
): Promise<TeamInvitation> {
|
): Promise<TeamInvitation> {
|
||||||
return pipe(
|
const teamInvitation = await this.teamInvitationService.createInvitation(
|
||||||
TE.Do,
|
user,
|
||||||
|
args.teamID,
|
||||||
|
args.inviteeEmail,
|
||||||
|
args.inviteeRole,
|
||||||
|
);
|
||||||
|
|
||||||
// Validate email
|
if (E.isLeft(teamInvitation)) throwErr(teamInvitation.left);
|
||||||
TE.bindW('email', () =>
|
return teamInvitation.right;
|
||||||
pipe(
|
|
||||||
EmailCodec.decode(inviteeEmail),
|
|
||||||
TE.fromEither,
|
|
||||||
TE.mapLeft(() => INVALID_EMAIL),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Validate and get Team
|
|
||||||
TE.bindW('team', () => this.teamService.getTeamWithIDTE(teamID)),
|
|
||||||
|
|
||||||
// Create team
|
|
||||||
TE.chainW(({ email, team }) =>
|
|
||||||
this.teamInvitationService.createInvitation(
|
|
||||||
user,
|
|
||||||
team,
|
|
||||||
email,
|
|
||||||
inviteeRole,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// If failed, throw err (so the message is passed) else return value
|
|
||||||
TE.getOrElse(throwErr),
|
|
||||||
)();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => Boolean, {
|
@Mutation(() => Boolean, {
|
||||||
@@ -163,7 +117,7 @@ export class TeamInvitationResolver {
|
|||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, TeamInviteTeamOwnerGuard)
|
@UseGuards(GqlAuthGuard, TeamInviteTeamOwnerGuard)
|
||||||
@RequiresTeamRole(TeamMemberRole.OWNER)
|
@RequiresTeamRole(TeamMemberRole.OWNER)
|
||||||
revokeTeamInvitation(
|
async revokeTeamInvitation(
|
||||||
@Args({
|
@Args({
|
||||||
name: 'inviteID',
|
name: 'inviteID',
|
||||||
type: () => ID,
|
type: () => ID,
|
||||||
@@ -171,19 +125,19 @@ export class TeamInvitationResolver {
|
|||||||
})
|
})
|
||||||
inviteID: string,
|
inviteID: string,
|
||||||
): Promise<true> {
|
): Promise<true> {
|
||||||
return pipe(
|
const isRevoked = await this.teamInvitationService.revokeInvitation(
|
||||||
this.teamInvitationService.revokeInvitation(inviteID),
|
inviteID,
|
||||||
TE.map(() => true as const),
|
);
|
||||||
TE.getOrElse(throwErr),
|
if (E.isLeft(isRevoked)) throwErr(isRevoked.left);
|
||||||
)();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mutation(() => TeamMember, {
|
@Mutation(() => TeamMember, {
|
||||||
description: 'Accept an Invitation',
|
description: 'Accept an Invitation',
|
||||||
})
|
})
|
||||||
@UseGuards(GqlAuthGuard, TeamInviteeGuard)
|
@UseGuards(GqlAuthGuard, TeamInviteeGuard)
|
||||||
acceptTeamInvitation(
|
async acceptTeamInvitation(
|
||||||
@GqlUser() user: User,
|
@GqlUser() user: AuthUser,
|
||||||
@Args({
|
@Args({
|
||||||
name: 'inviteID',
|
name: 'inviteID',
|
||||||
type: () => ID,
|
type: () => ID,
|
||||||
@@ -191,10 +145,12 @@ export class TeamInvitationResolver {
|
|||||||
})
|
})
|
||||||
inviteID: string,
|
inviteID: string,
|
||||||
): Promise<TeamMember> {
|
): Promise<TeamMember> {
|
||||||
return pipe(
|
const teamMember = await this.teamInvitationService.acceptInvitation(
|
||||||
this.teamInvitationService.acceptInvitation(inviteID, user),
|
inviteID,
|
||||||
TE.getOrElse(throwErr),
|
user,
|
||||||
)();
|
);
|
||||||
|
if (E.isLeft(teamMember)) throwErr(teamMember.left);
|
||||||
|
return teamMember.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subscriptions
|
// Subscriptions
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import * as T from 'fp-ts/Task';
|
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
import * as TO from 'fp-ts/TaskOption';
|
import * as E from 'fp-ts/Either';
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import { pipe, flow, constVoid } from 'fp-ts/function';
|
|
||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
import { Team, TeamMemberRole } from 'src/team/team.model';
|
import { TeamInvitation as DBTeamInvitation } from '@prisma/client';
|
||||||
import { Email } from 'src/types/Email';
|
import { TeamMember, TeamMemberRole } from 'src/team/team.model';
|
||||||
import { User } from 'src/user/user.model';
|
|
||||||
import { TeamService } from 'src/team/team.service';
|
import { TeamService } from 'src/team/team.service';
|
||||||
import {
|
import {
|
||||||
|
INVALID_EMAIL,
|
||||||
|
TEAM_INVALID_ID,
|
||||||
TEAM_INVITE_ALREADY_MEMBER,
|
TEAM_INVITE_ALREADY_MEMBER,
|
||||||
TEAM_INVITE_EMAIL_DO_NOT_MATCH,
|
TEAM_INVITE_EMAIL_DO_NOT_MATCH,
|
||||||
TEAM_INVITE_MEMBER_HAS_INVITE,
|
TEAM_INVITE_MEMBER_HAS_INVITE,
|
||||||
TEAM_INVITE_NO_INVITE_FOUND,
|
TEAM_INVITE_NO_INVITE_FOUND,
|
||||||
|
TEAM_MEMBER_NOT_FOUND,
|
||||||
} from 'src/errors';
|
} from 'src/errors';
|
||||||
import { TeamInvitation } from './team-invitation.model';
|
import { TeamInvitation } from './team-invitation.model';
|
||||||
import { MailerService } from 'src/mailer/mailer.service';
|
import { MailerService } from 'src/mailer/mailer.service';
|
||||||
import { UserService } from 'src/user/user.service';
|
import { UserService } from 'src/user/user.service';
|
||||||
import { PubSubService } from 'src/pubsub/pubsub.service';
|
import { PubSubService } from 'src/pubsub/pubsub.service';
|
||||||
|
import { validateEmail } from '../utils';
|
||||||
|
import { AuthUser } from 'src/types/AuthUser';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TeamInvitationService {
|
export class TeamInvitationService {
|
||||||
@@ -29,245 +30,221 @@ export class TeamInvitationService {
|
|||||||
private readonly mailerService: MailerService,
|
private readonly mailerService: MailerService,
|
||||||
|
|
||||||
private readonly pubsub: PubSubService,
|
private readonly pubsub: PubSubService,
|
||||||
) {
|
) {}
|
||||||
this.getInvitation = this.getInvitation.bind(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
getInvitation(inviteID: string): TO.TaskOption<TeamInvitation> {
|
/**
|
||||||
return pipe(
|
* Cast a DBTeamInvitation to a TeamInvitation
|
||||||
() =>
|
* @param dbTeamInvitation database TeamInvitation
|
||||||
this.prisma.teamInvitation.findUnique({
|
* @returns TeamInvitation model
|
||||||
where: {
|
*/
|
||||||
id: inviteID,
|
cast(dbTeamInvitation: DBTeamInvitation): TeamInvitation {
|
||||||
},
|
return {
|
||||||
}),
|
...dbTeamInvitation,
|
||||||
TO.fromTask,
|
inviteeRole: TeamMemberRole[dbTeamInvitation.inviteeRole],
|
||||||
TO.chain(flow(O.fromNullable, TO.fromOption)),
|
};
|
||||||
TO.map((x) => x as TeamInvitation),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
getInvitationWithEmail(email: Email, team: Team) {
|
|
||||||
return pipe(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamInvitation.findUnique({
|
|
||||||
where: {
|
|
||||||
teamID_inviteeEmail: {
|
|
||||||
inviteeEmail: email,
|
|
||||||
teamID: team.id,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
TO.fromTask,
|
|
||||||
TO.chain(flow(O.fromNullable, TO.fromOption)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
createInvitation(
|
|
||||||
creator: User,
|
|
||||||
team: Team,
|
|
||||||
inviteeEmail: Email,
|
|
||||||
inviteeRole: TeamMemberRole,
|
|
||||||
) {
|
|
||||||
return pipe(
|
|
||||||
// Perform all validation checks
|
|
||||||
TE.sequenceArray([
|
|
||||||
// creator should be a TeamMember
|
|
||||||
pipe(
|
|
||||||
this.teamService.getTeamMemberTE(team.id, creator.uid),
|
|
||||||
TE.map(constVoid),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Invitee should not be a team member
|
|
||||||
pipe(
|
|
||||||
async () => await this.userService.findUserByEmail(inviteeEmail),
|
|
||||||
TO.foldW(
|
|
||||||
() => TE.right(undefined), // If no user, short circuit to completion
|
|
||||||
(user) =>
|
|
||||||
pipe(
|
|
||||||
// If user is found, check if team member
|
|
||||||
this.teamService.getTeamMemberTE(team.id, user.uid),
|
|
||||||
TE.foldW(
|
|
||||||
() => TE.right(undefined), // Not team-member, this is good
|
|
||||||
() => TE.left(TEAM_INVITE_ALREADY_MEMBER), // Is team member, not good
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TE.map(constVoid),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Should not have an existing invite
|
|
||||||
pipe(
|
|
||||||
this.getInvitationWithEmail(inviteeEmail, team),
|
|
||||||
TE.fromTaskOption(() => null),
|
|
||||||
TE.swap,
|
|
||||||
TE.map(constVoid),
|
|
||||||
TE.mapLeft(() => TEAM_INVITE_MEMBER_HAS_INVITE),
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
|
|
||||||
// Create the invitation
|
|
||||||
TE.chainTaskK(
|
|
||||||
() => () =>
|
|
||||||
this.prisma.teamInvitation.create({
|
|
||||||
data: {
|
|
||||||
teamID: team.id,
|
|
||||||
inviteeEmail,
|
|
||||||
inviteeRole,
|
|
||||||
creatorUid: creator.uid,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Send email, this is a side effect
|
|
||||||
TE.chainFirstTaskK((invitation) =>
|
|
||||||
pipe(
|
|
||||||
this.mailerService.sendMail(inviteeEmail, {
|
|
||||||
template: 'team-invitation',
|
|
||||||
variables: {
|
|
||||||
invitee: creator.displayName ?? 'A Hoppscotch User',
|
|
||||||
action_url: `https://hoppscotch.io/join-team?id=${invitation.id}`,
|
|
||||||
invite_team_name: team.name,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
|
|
||||||
TE.getOrElseW(() => T.of(undefined)), // This value doesn't matter as we don't mind the return value (chainFirst) as long as the task completes
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Send PubSub topic
|
|
||||||
TE.chainFirstTaskK((invitation) =>
|
|
||||||
TE.fromTask(async () => {
|
|
||||||
const inv: TeamInvitation = {
|
|
||||||
id: invitation.id,
|
|
||||||
teamID: invitation.teamID,
|
|
||||||
creatorUid: invitation.creatorUid,
|
|
||||||
inviteeEmail: invitation.inviteeEmail,
|
|
||||||
inviteeRole: TeamMemberRole[invitation.inviteeRole],
|
|
||||||
};
|
|
||||||
|
|
||||||
this.pubsub.publish(`team/${inv.teamID}/invite_added`, inv);
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Map to model type
|
|
||||||
TE.map((x) => x as TeamInvitation),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
revokeInvitation(inviteID: string) {
|
|
||||||
return pipe(
|
|
||||||
// Make sure invite exists
|
|
||||||
this.getInvitation(inviteID),
|
|
||||||
TE.fromTaskOption(() => TEAM_INVITE_NO_INVITE_FOUND),
|
|
||||||
|
|
||||||
// Delete team invitation
|
|
||||||
TE.chainTaskK(
|
|
||||||
() => () =>
|
|
||||||
this.prisma.teamInvitation.delete({
|
|
||||||
where: {
|
|
||||||
id: inviteID,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Emit Pubsub Event
|
|
||||||
TE.chainFirst((invitation) =>
|
|
||||||
TE.fromTask(() =>
|
|
||||||
this.pubsub.publish(
|
|
||||||
`team/${invitation.teamID}/invite_removed`,
|
|
||||||
invitation.id,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// We are not returning anything
|
|
||||||
TE.map(constVoid),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
getAllInvitationsInTeam(team: Team) {
|
|
||||||
return pipe(
|
|
||||||
() =>
|
|
||||||
this.prisma.teamInvitation.findMany({
|
|
||||||
where: {
|
|
||||||
teamID: team.id,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
T.map((x) => x as TeamInvitation[]),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptInvitation(inviteID: string, acceptedBy: User) {
|
|
||||||
return pipe(
|
|
||||||
TE.Do,
|
|
||||||
|
|
||||||
// First get the invitation
|
|
||||||
TE.bindW('invitation', () =>
|
|
||||||
pipe(
|
|
||||||
this.getInvitation(inviteID),
|
|
||||||
TE.fromTaskOption(() => TEAM_INVITE_NO_INVITE_FOUND),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Validation checks
|
|
||||||
TE.chainFirstW(({ invitation }) =>
|
|
||||||
TE.sequenceArray([
|
|
||||||
// Make sure the invited user is not part of the team
|
|
||||||
pipe(
|
|
||||||
this.teamService.getTeamMemberTE(invitation.teamID, acceptedBy.uid),
|
|
||||||
TE.swap,
|
|
||||||
TE.bimap(
|
|
||||||
() => TEAM_INVITE_ALREADY_MEMBER,
|
|
||||||
constVoid, // The return type is ignored
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Make sure the invited user and accepting user has the same email
|
|
||||||
pipe(
|
|
||||||
undefined,
|
|
||||||
TE.fromPredicate(
|
|
||||||
(a) => acceptedBy.email === invitation.inviteeEmail,
|
|
||||||
() => TEAM_INVITE_EMAIL_DO_NOT_MATCH,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Add the team member
|
|
||||||
// TODO: Somehow bring subscriptions to this ?
|
|
||||||
TE.bindW('teamMember', ({ invitation }) =>
|
|
||||||
pipe(
|
|
||||||
TE.tryCatch(
|
|
||||||
() =>
|
|
||||||
this.teamService.addMemberToTeam(
|
|
||||||
invitation.teamID,
|
|
||||||
acceptedBy.uid,
|
|
||||||
invitation.inviteeRole,
|
|
||||||
),
|
|
||||||
() => TEAM_INVITE_ALREADY_MEMBER, // Can only fail if Team Member already exists, which we checked, but due to async lets assert that here too
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.chainFirstW(({ invitation }) => this.revokeInvitation(invitation.id)),
|
|
||||||
|
|
||||||
TE.map(({ teamMember }) => teamMember),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch the count invitations for a given team.
|
* Get the team invite
|
||||||
* @param teamID team id
|
* @param inviteID invite id
|
||||||
* @returns a count team invitations for a team
|
* @returns an Option of team invitation or none
|
||||||
*/
|
*/
|
||||||
async getAllTeamInvitations(teamID: string) {
|
async getInvitation(inviteID: string) {
|
||||||
const invitations = await this.prisma.teamInvitation.findMany({
|
try {
|
||||||
|
const dbInvitation = await this.prisma.teamInvitation.findUniqueOrThrow({
|
||||||
|
where: {
|
||||||
|
id: inviteID,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return O.some(this.cast(dbInvitation));
|
||||||
|
} catch (e) {
|
||||||
|
return O.none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the team invite for an invitee with email and teamID.
|
||||||
|
* @param inviteeEmail invitee email
|
||||||
|
* @param teamID team id
|
||||||
|
* @returns an Either of team invitation for the invitee or error
|
||||||
|
*/
|
||||||
|
async getTeamInviteByEmailAndTeamID(inviteeEmail: string, teamID: string) {
|
||||||
|
const isEmailValid = validateEmail(inviteeEmail);
|
||||||
|
if (!isEmailValid) return E.left(INVALID_EMAIL);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const teamInvite = await this.prisma.teamInvitation.findUniqueOrThrow({
|
||||||
|
where: {
|
||||||
|
teamID_inviteeEmail: {
|
||||||
|
inviteeEmail: inviteeEmail,
|
||||||
|
teamID: teamID,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return E.right(teamInvite);
|
||||||
|
} catch (e) {
|
||||||
|
return E.left(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a team invitation
|
||||||
|
* @param creator creator of the invitation
|
||||||
|
* @param teamID team id
|
||||||
|
* @param inviteeEmail invitee email
|
||||||
|
* @param inviteeRole invitee role
|
||||||
|
* @returns an Either of team invitation or error message
|
||||||
|
*/
|
||||||
|
async createInvitation(
|
||||||
|
creator: AuthUser,
|
||||||
|
teamID: string,
|
||||||
|
inviteeEmail: string,
|
||||||
|
inviteeRole: TeamMemberRole,
|
||||||
|
) {
|
||||||
|
// validate email
|
||||||
|
const isEmailValid = validateEmail(inviteeEmail);
|
||||||
|
if (!isEmailValid) return E.left(INVALID_EMAIL);
|
||||||
|
|
||||||
|
// team ID should valid
|
||||||
|
const team = await this.teamService.getTeamWithID(teamID);
|
||||||
|
if (!team) return E.left(TEAM_INVALID_ID);
|
||||||
|
|
||||||
|
// invitation creator should be a TeamMember
|
||||||
|
const isTeamMember = await this.teamService.getTeamMember(
|
||||||
|
team.id,
|
||||||
|
creator.uid,
|
||||||
|
);
|
||||||
|
if (!isTeamMember) return E.left(TEAM_MEMBER_NOT_FOUND);
|
||||||
|
|
||||||
|
// Checking to see if the invitee is already part of the team or not
|
||||||
|
const inviteeUser = await this.userService.findUserByEmail(inviteeEmail);
|
||||||
|
if (O.isSome(inviteeUser)) {
|
||||||
|
// invitee should not already a member
|
||||||
|
const isTeamMember = await this.teamService.getTeamMember(
|
||||||
|
team.id,
|
||||||
|
inviteeUser.value.uid,
|
||||||
|
);
|
||||||
|
if (isTeamMember) return E.left(TEAM_INVITE_ALREADY_MEMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check invitee already invited earlier or not
|
||||||
|
const teamInvitation = await this.getTeamInviteByEmailAndTeamID(
|
||||||
|
inviteeEmail,
|
||||||
|
team.id,
|
||||||
|
);
|
||||||
|
if (E.isRight(teamInvitation)) return E.left(TEAM_INVITE_MEMBER_HAS_INVITE);
|
||||||
|
|
||||||
|
// create the invitation
|
||||||
|
const dbInvitation = await this.prisma.teamInvitation.create({
|
||||||
|
data: {
|
||||||
|
teamID: team.id,
|
||||||
|
inviteeEmail,
|
||||||
|
inviteeRole,
|
||||||
|
creatorUid: creator.uid,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.mailerService.sendEmail(inviteeEmail, {
|
||||||
|
template: 'team-invitation',
|
||||||
|
variables: {
|
||||||
|
invitee: creator.displayName ?? 'A Hoppscotch User',
|
||||||
|
action_url: `${process.env.VITE_BASE_URL}/join-team?id=${dbInvitation.id}`,
|
||||||
|
invite_team_name: team.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const invitation = this.cast(dbInvitation);
|
||||||
|
this.pubsub.publish(`team/${invitation.teamID}/invite_added`, invitation);
|
||||||
|
|
||||||
|
return E.right(invitation);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revoke a team invitation
|
||||||
|
* @param inviteID invite id
|
||||||
|
* @returns an Either of true or error message
|
||||||
|
*/
|
||||||
|
async revokeInvitation(inviteID: string) {
|
||||||
|
// check if the invite exists
|
||||||
|
const invitation = await this.getInvitation(inviteID);
|
||||||
|
if (O.isNone(invitation)) return E.left(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
|
|
||||||
|
// delete the invite
|
||||||
|
await this.prisma.teamInvitation.delete({
|
||||||
|
where: {
|
||||||
|
id: inviteID,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
this.pubsub.publish(
|
||||||
|
`team/${invitation.value.teamID}/invite_removed`,
|
||||||
|
invitation.value.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
return E.right(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accept a team invitation
|
||||||
|
* @param inviteID invite id
|
||||||
|
* @param acceptedBy user who accepted the invitation
|
||||||
|
* @returns an Either of team member or error message
|
||||||
|
*/
|
||||||
|
async acceptInvitation(inviteID: string, acceptedBy: AuthUser) {
|
||||||
|
// check if the invite exists
|
||||||
|
const invitation = await this.getInvitation(inviteID);
|
||||||
|
if (O.isNone(invitation)) return E.left(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
|
|
||||||
|
// make sure the user is not already a member of the team
|
||||||
|
const teamMemberInvitee = await this.teamService.getTeamMember(
|
||||||
|
invitation.value.teamID,
|
||||||
|
acceptedBy.uid,
|
||||||
|
);
|
||||||
|
if (teamMemberInvitee) return E.left(TEAM_INVITE_ALREADY_MEMBER);
|
||||||
|
|
||||||
|
// make sure the user is the same as the invitee
|
||||||
|
if (
|
||||||
|
acceptedBy.email.toLowerCase() !==
|
||||||
|
invitation.value.inviteeEmail.toLowerCase()
|
||||||
|
)
|
||||||
|
return E.left(TEAM_INVITE_EMAIL_DO_NOT_MATCH);
|
||||||
|
|
||||||
|
// add the user to the team
|
||||||
|
let teamMember: TeamMember;
|
||||||
|
try {
|
||||||
|
teamMember = await this.teamService.addMemberToTeam(
|
||||||
|
invitation.value.teamID,
|
||||||
|
acceptedBy.uid,
|
||||||
|
invitation.value.inviteeRole,
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
return E.left(TEAM_INVITE_ALREADY_MEMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete the invite
|
||||||
|
await this.revokeInvitation(inviteID);
|
||||||
|
|
||||||
|
return E.right(teamMember);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch all team invitations for a given team.
|
||||||
|
* @param teamID team id
|
||||||
|
* @returns array of team invitations for a team
|
||||||
|
*/
|
||||||
|
async getTeamInvitations(teamID: string) {
|
||||||
|
const dbInvitations = await this.prisma.teamInvitation.findMany({
|
||||||
where: {
|
where: {
|
||||||
teamID: teamID,
|
teamID: teamID,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const invitations: TeamInvitation[] = dbInvitations.map((dbInvitation) =>
|
||||||
|
this.cast(dbInvitation),
|
||||||
|
);
|
||||||
|
|
||||||
return invitations;
|
return invitations;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { pipe } from 'fp-ts/function';
|
|
||||||
import { TeamService } from 'src/team/team.service';
|
import { TeamService } from 'src/team/team.service';
|
||||||
import { TeamInvitationService } from './team-invitation.service';
|
import { TeamInvitationService } from './team-invitation.service';
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
import * as T from 'fp-ts/Task';
|
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import { GqlExecutionContext } from '@nestjs/graphql';
|
import { GqlExecutionContext } from '@nestjs/graphql';
|
||||||
import {
|
import {
|
||||||
BUG_AUTH_NO_USER_CTX,
|
BUG_AUTH_NO_USER_CTX,
|
||||||
BUG_TEAM_INVITE_NO_INVITE_ID,
|
BUG_TEAM_INVITE_NO_INVITE_ID,
|
||||||
TEAM_INVITE_NO_INVITE_FOUND,
|
TEAM_INVITE_NO_INVITE_FOUND,
|
||||||
|
TEAM_MEMBER_NOT_FOUND,
|
||||||
TEAM_NOT_REQUIRED_ROLE,
|
TEAM_NOT_REQUIRED_ROLE,
|
||||||
} from 'src/errors';
|
} from 'src/errors';
|
||||||
import { User } from 'src/user/user.model';
|
|
||||||
import { throwErr } from 'src/utils';
|
import { throwErr } from 'src/utils';
|
||||||
import { TeamMemberRole } from 'src/team/team.model';
|
import { TeamMemberRole } from 'src/team/team.model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This guard only allows team owner to execute the resolver
|
||||||
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TeamInviteTeamOwnerGuard implements CanActivate {
|
export class TeamInviteTeamOwnerGuard implements CanActivate {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -24,48 +24,30 @@ export class TeamInviteTeamOwnerGuard implements CanActivate {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async canActivate(context: ExecutionContext): Promise<boolean> {
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||||
return pipe(
|
// Get GQL context
|
||||||
TE.Do,
|
const gqlExecCtx = GqlExecutionContext.create(context);
|
||||||
|
|
||||||
TE.bindW('gqlCtx', () => TE.of(GqlExecutionContext.create(context))),
|
// Get user
|
||||||
|
const { user } = gqlExecCtx.getContext().req;
|
||||||
|
if (!user) throwErr(BUG_AUTH_NO_USER_CTX);
|
||||||
|
|
||||||
// Get the invite
|
// Get the invite
|
||||||
TE.bindW('invite', ({ gqlCtx }) =>
|
const { inviteID } = gqlExecCtx.getArgs<{ inviteID: string }>();
|
||||||
pipe(
|
if (!inviteID) throwErr(BUG_TEAM_INVITE_NO_INVITE_ID);
|
||||||
O.fromNullable(gqlCtx.getArgs<{ inviteID?: string }>().inviteID),
|
|
||||||
TE.fromOption(() => BUG_TEAM_INVITE_NO_INVITE_ID),
|
|
||||||
TE.chainW((inviteID) =>
|
|
||||||
pipe(
|
|
||||||
this.teamInviteService.getInvitation(inviteID),
|
|
||||||
TE.fromTaskOption(() => TEAM_INVITE_NO_INVITE_FOUND),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.bindW('user', ({ gqlCtx }) =>
|
const invitation = await this.teamInviteService.getInvitation(inviteID);
|
||||||
pipe(
|
if (O.isNone(invitation)) throwErr(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
gqlCtx.getContext().req.user,
|
|
||||||
O.fromNullable,
|
|
||||||
TE.fromOption(() => BUG_AUTH_NO_USER_CTX),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.bindW('userMember', ({ invite, user }) =>
|
// Fetch team member details of this user
|
||||||
this.teamService.getTeamMemberTE(invite.teamID, user.uid),
|
const teamMember = await this.teamService.getTeamMember(
|
||||||
),
|
invitation.value.teamID,
|
||||||
|
user.uid,
|
||||||
|
);
|
||||||
|
|
||||||
TE.chainW(
|
if (!teamMember) throwErr(TEAM_MEMBER_NOT_FOUND);
|
||||||
TE.fromPredicate(
|
if (teamMember.role !== TeamMemberRole.OWNER)
|
||||||
({ userMember }) => userMember.role === TeamMemberRole.OWNER,
|
throwErr(TEAM_NOT_REQUIRED_ROLE);
|
||||||
() => TEAM_NOT_REQUIRED_ROLE,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.fold(
|
return true;
|
||||||
(err) => throwErr(err),
|
|
||||||
() => T.of(true),
|
|
||||||
),
|
|
||||||
)();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,23 @@
|
|||||||
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { TeamInvitationService } from './team-invitation.service';
|
import { TeamInvitationService } from './team-invitation.service';
|
||||||
import { pipe, flow } from 'fp-ts/function';
|
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import * as T from 'fp-ts/Task';
|
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
import { GqlExecutionContext } from '@nestjs/graphql';
|
import { GqlExecutionContext } from '@nestjs/graphql';
|
||||||
import {
|
import {
|
||||||
BUG_AUTH_NO_USER_CTX,
|
BUG_AUTH_NO_USER_CTX,
|
||||||
BUG_TEAM_INVITE_NO_INVITE_ID,
|
BUG_TEAM_INVITE_NO_INVITE_ID,
|
||||||
TEAM_INVITE_NOT_VALID_VIEWER,
|
|
||||||
TEAM_INVITE_NO_INVITE_FOUND,
|
TEAM_INVITE_NO_INVITE_FOUND,
|
||||||
|
TEAM_MEMBER_NOT_FOUND,
|
||||||
} from 'src/errors';
|
} from 'src/errors';
|
||||||
import { User } from 'src/user/user.model';
|
|
||||||
import { throwErr } from 'src/utils';
|
import { throwErr } from 'src/utils';
|
||||||
import { TeamService } from 'src/team/team.service';
|
import { TeamService } from 'src/team/team.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This guard only allows user to execute the resolver
|
||||||
|
* 1. If user is invitee, allow
|
||||||
|
* 2. Or else, if user is team member, allow
|
||||||
|
*
|
||||||
|
* TLDR: Allow if user is invitee or team member
|
||||||
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TeamInviteViewerGuard implements CanActivate {
|
export class TeamInviteViewerGuard implements CanActivate {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -23,50 +26,32 @@ export class TeamInviteViewerGuard implements CanActivate {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async canActivate(context: ExecutionContext): Promise<boolean> {
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||||
return pipe(
|
// Get GQL context
|
||||||
TE.Do,
|
const gqlExecCtx = GqlExecutionContext.create(context);
|
||||||
|
|
||||||
// Get GQL Context
|
// Get user
|
||||||
TE.bindW('gqlCtx', () => TE.of(GqlExecutionContext.create(context))),
|
const { user } = gqlExecCtx.getContext().req;
|
||||||
|
if (!user) throwErr(BUG_AUTH_NO_USER_CTX);
|
||||||
|
|
||||||
// Get user
|
// Get the invite
|
||||||
TE.bindW('user', ({ gqlCtx }) =>
|
const { inviteID } = gqlExecCtx.getArgs<{ inviteID: string }>();
|
||||||
pipe(
|
if (!inviteID) throwErr(BUG_TEAM_INVITE_NO_INVITE_ID);
|
||||||
O.fromNullable(gqlCtx.getContext<{ user?: User }>().user),
|
|
||||||
TE.fromOption(() => BUG_AUTH_NO_USER_CTX),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Get the invite
|
const invitation = await this.teamInviteService.getInvitation(inviteID);
|
||||||
TE.bindW('invite', ({ gqlCtx }) =>
|
if (O.isNone(invitation)) throwErr(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
pipe(
|
|
||||||
O.fromNullable(gqlCtx.getArgs<{ inviteID?: string }>().inviteID),
|
|
||||||
TE.fromOption(() => BUG_TEAM_INVITE_NO_INVITE_ID),
|
|
||||||
TE.chainW(
|
|
||||||
flow(
|
|
||||||
this.teamInviteService.getInvitation,
|
|
||||||
TE.fromTaskOption(() => TEAM_INVITE_NO_INVITE_FOUND),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Check if the user and the invite email match, else if we can resolver the user as a team member
|
// Check if the user and the invite email match, else if user is a team member
|
||||||
// any better solution ?
|
if (
|
||||||
TE.chainW(({ user, invite }) =>
|
user.email?.toLowerCase() !== invitation.value.inviteeEmail.toLowerCase()
|
||||||
user.email?.toLowerCase() === invite.inviteeEmail.toLowerCase()
|
) {
|
||||||
? TE.of(true)
|
const teamMember = await this.teamService.getTeamMember(
|
||||||
: pipe(
|
invitation.value.teamID,
|
||||||
this.teamService.getTeamMemberTE(invite.teamID, user.uid),
|
user.uid,
|
||||||
TE.map(() => true),
|
);
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
TE.mapLeft((e) =>
|
if (!teamMember) throwErr(TEAM_MEMBER_NOT_FOUND);
|
||||||
e === 'team/member_not_found' ? TEAM_INVITE_NOT_VALID_VIEWER : e,
|
}
|
||||||
),
|
|
||||||
|
|
||||||
TE.fold(throwErr, () => T.of(true)),
|
return true;
|
||||||
)();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||||
import { TeamInvitationService } from './team-invitation.service';
|
import { TeamInvitationService } from './team-invitation.service';
|
||||||
import { pipe, flow } from 'fp-ts/function';
|
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
import * as T from 'fp-ts/Task';
|
|
||||||
import * as TE from 'fp-ts/TaskEither';
|
|
||||||
import { GqlExecutionContext } from '@nestjs/graphql';
|
import { GqlExecutionContext } from '@nestjs/graphql';
|
||||||
import { User } from 'src/user/user.model';
|
|
||||||
import {
|
import {
|
||||||
BUG_AUTH_NO_USER_CTX,
|
BUG_AUTH_NO_USER_CTX,
|
||||||
BUG_TEAM_INVITE_NO_INVITE_ID,
|
BUG_TEAM_INVITE_NO_INVITE_ID,
|
||||||
@@ -24,44 +20,26 @@ export class TeamInviteeGuard implements CanActivate {
|
|||||||
constructor(private readonly teamInviteService: TeamInvitationService) {}
|
constructor(private readonly teamInviteService: TeamInvitationService) {}
|
||||||
|
|
||||||
async canActivate(context: ExecutionContext): Promise<boolean> {
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||||
return pipe(
|
// Get GQL Context
|
||||||
TE.Do,
|
const gqlExecCtx = GqlExecutionContext.create(context);
|
||||||
|
|
||||||
// Get execution context
|
// Get user
|
||||||
TE.bindW('gqlCtx', () => TE.of(GqlExecutionContext.create(context))),
|
const { user } = gqlExecCtx.getContext().req;
|
||||||
|
if (!user) throwErr(BUG_AUTH_NO_USER_CTX);
|
||||||
|
|
||||||
// Get user
|
// Get the invite
|
||||||
TE.bindW('user', ({ gqlCtx }) =>
|
const { inviteID } = gqlExecCtx.getArgs<{ inviteID: string }>();
|
||||||
pipe(
|
if (!inviteID) throwErr(BUG_TEAM_INVITE_NO_INVITE_ID);
|
||||||
O.fromNullable(gqlCtx.getContext<{ user?: User }>().user),
|
|
||||||
TE.fromOption(() => BUG_AUTH_NO_USER_CTX),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Get invite
|
const invitation = await this.teamInviteService.getInvitation(inviteID);
|
||||||
TE.bindW('invite', ({ gqlCtx }) =>
|
if (O.isNone(invitation)) throwErr(TEAM_INVITE_NO_INVITE_FOUND);
|
||||||
pipe(
|
|
||||||
O.fromNullable(gqlCtx.getArgs<{ inviteID?: string }>().inviteID),
|
|
||||||
TE.fromOption(() => BUG_TEAM_INVITE_NO_INVITE_ID),
|
|
||||||
TE.chainW(
|
|
||||||
flow(
|
|
||||||
this.teamInviteService.getInvitation,
|
|
||||||
TE.fromTaskOption(() => TEAM_INVITE_NO_INVITE_FOUND),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Check if the emails match
|
if (
|
||||||
TE.chainW(
|
user.email.toLowerCase() !== invitation.value.inviteeEmail.toLowerCase()
|
||||||
TE.fromPredicate(
|
) {
|
||||||
({ user, invite }) => user.email === invite.inviteeEmail,
|
throwErr(TEAM_INVITE_EMAIL_DO_NOT_MATCH);
|
||||||
() => TEAM_INVITE_EMAIL_DO_NOT_MATCH,
|
}
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Fold it to a promise
|
return true;
|
||||||
TE.fold(throwErr, () => T.of(true)),
|
|
||||||
)();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ export class TeamTeamInviteExtResolver {
|
|||||||
complexity: 10,
|
complexity: 10,
|
||||||
})
|
})
|
||||||
teamInvitations(@Parent() team: Team): Promise<TeamInvitation[]> {
|
teamInvitations(@Parent() team: Team): Promise<TeamInvitation[]> {
|
||||||
return this.teamInviteService.getAllInvitationsInTeam(team)();
|
return this.teamInviteService.getTeamInvitations(team.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { HttpStatus } from '@nestjs/common';
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
** Custom interface to handle errors specific to Auth module
|
** Custom interface to handle errors specific to Auth module
|
||||||
** Since its REST we need to return HTTP status code along with error message
|
** Since its REST we need to return the HTTP status code along with the error message
|
||||||
*/
|
*/
|
||||||
export type AuthError = {
|
export type AuthError = {
|
||||||
message: string;
|
message: string;
|
||||||
|
|||||||
@@ -360,13 +360,15 @@ describe('UserHistoryService', () => {
|
|||||||
});
|
});
|
||||||
describe('removeRequestFromHistory', () => {
|
describe('removeRequestFromHistory', () => {
|
||||||
test('Should resolve right and delete request from users history', async () => {
|
test('Should resolve right and delete request from users history', async () => {
|
||||||
|
const executedOn = new Date();
|
||||||
|
|
||||||
mockPrisma.userHistory.delete.mockResolvedValueOnce({
|
mockPrisma.userHistory.delete.mockResolvedValueOnce({
|
||||||
userUid: 'abc',
|
userUid: 'abc',
|
||||||
id: '1',
|
id: '1',
|
||||||
request: [{}],
|
request: [{}],
|
||||||
responseMetadata: [{}],
|
responseMetadata: [{}],
|
||||||
reqType: ReqType.REST,
|
reqType: ReqType.REST,
|
||||||
executedOn: new Date(),
|
executedOn: executedOn,
|
||||||
isStarred: false,
|
isStarred: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -376,7 +378,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: executedOn,
|
||||||
isStarred: false,
|
isStarred: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -384,7 +386,7 @@ describe('UserHistoryService', () => {
|
|||||||
await userHistoryService.removeRequestFromHistory('abc', '1'),
|
await userHistoryService.removeRequestFromHistory('abc', '1'),
|
||||||
).toEqualRight(userHistory);
|
).toEqualRight(userHistory);
|
||||||
});
|
});
|
||||||
test('Should resolve left and error out when req id is invalid ', async () => {
|
test('Should resolve left and error out when req id is invalid', async () => {
|
||||||
mockPrisma.userHistory.delete.mockResolvedValueOnce(null);
|
mockPrisma.userHistory.delete.mockResolvedValueOnce(null);
|
||||||
|
|
||||||
return expect(
|
return expect(
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ import * as E from 'fp-ts/Either';
|
|||||||
import * as A from 'fp-ts/Array';
|
import * as A from 'fp-ts/Array';
|
||||||
import { TeamMemberRole } from './team/team.model';
|
import { TeamMemberRole } from './team/team.model';
|
||||||
import { User } from './user/user.model';
|
import { User } from './user/user.model';
|
||||||
import { JSON_INVALID } from './errors';
|
import { ENV_EMPTY_AUTH_PROVIDERS, ENV_NOT_FOUND_KEY_AUTH_PROVIDERS, ENV_NOT_SUPPORT_AUTH_PROVIDERS, JSON_INVALID } from './errors';
|
||||||
|
import { AuthProvider } from './auth/helper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A workaround to throw an exception in an expression.
|
* A workaround to throw an exception in an expression.
|
||||||
@@ -152,3 +153,31 @@ export function isValidLength(title: string, length: number) {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is called by bootstrap() in main.ts
|
||||||
|
* It checks if the "ALLOWED_AUTH_PROVIDERS" environment variable is properly set or not.
|
||||||
|
* If not, it throws an error.
|
||||||
|
*/
|
||||||
|
export function checkEnvironmentAuthProvider() {
|
||||||
|
if (!process.env.hasOwnProperty('ALLOWED_AUTH_PROVIDERS')) {
|
||||||
|
throw new Error(ENV_NOT_FOUND_KEY_AUTH_PROVIDERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.ALLOWED_AUTH_PROVIDERS === '') {
|
||||||
|
throw new Error(ENV_EMPTY_AUTH_PROVIDERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
const givenAuthProviders = process.env.ALLOWED_AUTH_PROVIDERS.split(',').map(
|
||||||
|
(provider) => provider.toLocaleUpperCase(),
|
||||||
|
);
|
||||||
|
const supportedAuthProviders = Object.values(AuthProvider).map(
|
||||||
|
(provider: string) => provider.toLocaleUpperCase(),
|
||||||
|
);
|
||||||
|
|
||||||
|
for (const givenAuthProvider of givenAuthProviders) {
|
||||||
|
if (!supportedAuthProviders.includes(givenAuthProvider)) {
|
||||||
|
throw new Error(ENV_NOT_SUPPORT_AUTH_PROVIDERS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ const CLI_BEFORE_ALL_TXT = `hopp: The ${accent(
|
|||||||
)}) ${chalk.black.bold.bgYellowBright(" ALPHA ")} \n`;
|
)}) ${chalk.black.bold.bgYellowBright(" ALPHA ")} \n`;
|
||||||
|
|
||||||
const CLI_AFTER_ALL_TXT = `\nFor more help, head on to ${accent(
|
const CLI_AFTER_ALL_TXT = `\nFor more help, head on to ${accent(
|
||||||
"https://docs.hoppscotch.io/cli"
|
"https://docs.hoppscotch.io/documentation/clients/cli"
|
||||||
)}`;
|
)}`;
|
||||||
|
|
||||||
program
|
program
|
||||||
@@ -59,7 +59,9 @@ program
|
|||||||
.description("running hoppscotch collection.json file")
|
.description("running hoppscotch collection.json file")
|
||||||
.addHelpText(
|
.addHelpText(
|
||||||
"after",
|
"after",
|
||||||
`\nFor help, head on to ${accent("https://docs.hoppscotch.io/cli#test")}`
|
`\nFor help, head on to ${accent(
|
||||||
|
"https://docs.hoppscotch.io/documentation/clients/cli#commands"
|
||||||
|
)}`
|
||||||
)
|
)
|
||||||
.action(async (path, options) => await test(path, options)());
|
.action(async (path, options) => await test(path, options)());
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ module.exports = {
|
|||||||
env: {
|
env: {
|
||||||
browser: true,
|
browser: true,
|
||||||
node: true,
|
node: true,
|
||||||
jest: true,
|
|
||||||
},
|
},
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
sourceType: "module",
|
sourceType: "module",
|
||||||
|
|||||||
1
packages/hoppscotch-common/assets/icons/star-off.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>
|
||||||
|
After Width: | Height: | Size: 337 B |
@@ -4,6 +4,7 @@
|
|||||||
@apply after:backface-hidden;
|
@apply after:backface-hidden;
|
||||||
@apply selection:bg-accentDark;
|
@apply selection:bg-accentDark;
|
||||||
@apply selection:text-accentContrast;
|
@apply selection:text-accentContrast;
|
||||||
|
@apply overscroll-none;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
@@ -459,6 +460,14 @@ pre.ace_editor {
|
|||||||
@apply bg-dividerLight;
|
@apply bg-dividerLight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.splitpanes--horizontal .splitpanes__pane {
|
||||||
|
@apply transition-none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.splitpanes--vertical .splitpanes__pane {
|
||||||
|
@apply transition-none;
|
||||||
|
}
|
||||||
|
|
||||||
.cm-focused {
|
.cm-focused {
|
||||||
@apply select-auto;
|
@apply select-auto;
|
||||||
@apply outline-none #{!important};
|
@apply outline-none #{!important};
|
||||||
|
|||||||
@@ -207,16 +207,19 @@
|
|||||||
:root.light {
|
:root.light {
|
||||||
@include light-theme;
|
@include light-theme;
|
||||||
@include light-editor-theme;
|
@include light-editor-theme;
|
||||||
|
color-scheme: light;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root.dark {
|
:root.dark {
|
||||||
@include dark-theme;
|
@include dark-theme;
|
||||||
@include dark-editor-theme;
|
@include dark-editor-theme;
|
||||||
|
color-scheme: dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root.black {
|
:root.black {
|
||||||
@include black-theme;
|
@include black-theme;
|
||||||
@include black-editor-theme;
|
@include black-editor-theme;
|
||||||
|
color-scheme: dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root[data-accent="blue"] {
|
:root[data-accent="blue"] {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Redigeer",
|
"edit": "Redigeer",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Gaan terug",
|
"go_back": "Gaan terug",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiket",
|
"label": "Etiket",
|
||||||
"learn_more": "Leer meer",
|
"learn_more": "Leer meer",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Versameling geskep",
|
"created": "Versameling geskep",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Wysig versameling",
|
"edit": "Wysig versameling",
|
||||||
"invalid_name": "Gee 'n geldige naam vir die versameling",
|
"invalid_name": "Gee 'n geldige naam vir die versameling",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "My versamelings",
|
"my_collections": "My versamelings",
|
||||||
"name": "My nuwe versameling",
|
"name": "My nuwe versameling",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Nuwe versameling",
|
"new": "Nuwe versameling",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Weet u seker dat u hierdie span wil uitvee?",
|
"remove_team": "Weet u seker dat u hierdie span wil uitvee?",
|
||||||
"remove_telemetry": "Weet u seker dat u van Telemetry wil afskakel?",
|
"remove_telemetry": "Weet u seker dat u van Telemetry wil afskakel?",
|
||||||
"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?",
|
||||||
"sync": "Is u seker dat u hierdie werkruimte wil sinkroniseer?"
|
"sync": "Is u seker dat u hierdie werkruimte wil sinkroniseer?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen -modus"
|
"zen_mode": "Zen -modus"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Versamelings",
|
"collections": "Versamelings",
|
||||||
"confirm": "Bevestig",
|
"confirm": "Bevestig",
|
||||||
"edit_request": "Wysig versoek",
|
"edit_request": "Wysig versoek",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopieer skakel",
|
"copy_link": "Kopieer skakel",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Duur",
|
"duration": "Duur",
|
||||||
"enter_curl": "Voer cURL in",
|
"enter_curl": "Voer cURL in",
|
||||||
"generate_code": "Genereer kode",
|
"generate_code": "Genereer kode",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Koplys",
|
"header_list": "Koplys",
|
||||||
"invalid_name": "Gee 'n naam vir die versoek",
|
"invalid_name": "Gee 'n naam vir die versoek",
|
||||||
"method": "Metode",
|
"method": "Metode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Versoek naam",
|
"name": "Versoek naam",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Reaksie liggaam",
|
"body": "Reaksie liggaam",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Opskrifte",
|
"headers": "Opskrifte",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tyd",
|
"time": "Tyd",
|
||||||
"title": "Reaksie",
|
"title": "Reaksie",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "wag vir verbinding",
|
"waiting_for_connection": "wag vir verbinding",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Liggaam",
|
"body": "Liggaam",
|
||||||
"collections": "Versamelings",
|
"collections": "Versamelings",
|
||||||
"documentation": "Dokumentasie",
|
"documentation": "Dokumentasie",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Opskrifte",
|
"headers": "Opskrifte",
|
||||||
"history": "Geskiedenis",
|
"history": "Geskiedenis",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Verlaat span",
|
"exit": "Verlaat span",
|
||||||
"exit_disabled": "Slegs eienaar kan nie die span verlaat nie",
|
"exit_disabled": "Slegs eienaar kan nie die span verlaat nie",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Die e -posformaat is ongeldig",
|
"invalid_email_format": "Die e -posformaat is ongeldig",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Gebruiker verwyder",
|
"member_removed": "Gebruiker verwyder",
|
||||||
"member_role_updated": "Gebruikersrolle opgedateer",
|
"member_role_updated": "Gebruikersrolle opgedateer",
|
||||||
"members": "Lede",
|
"members": "Lede",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Spannaam moet ten minste 6 karakters lank wees",
|
"name_length_insufficient": "Spannaam moet ten minste 6 karakters lank wees",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nuwe span",
|
"new": "Nuwe span",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "My nuwe span",
|
"new_name": "My nuwe span",
|
||||||
"no_access": "U het nie redigeertoegang tot hierdie versamelings nie",
|
"no_access": "U het nie redigeertoegang tot hierdie versamelings nie",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Toestemmings",
|
"permissions": "Toestemmings",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Span gered",
|
"saved": "Span gered",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Spanne",
|
"title": "Spanne",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Boodskap",
|
"message": "Boodskap",
|
||||||
"protocols": "Protokolle",
|
"protocols": "Protokolle",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "يحرر",
|
"edit": "يحرر",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "عد",
|
"go_back": "عد",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "ملصق",
|
"label": "ملصق",
|
||||||
"learn_more": "اقرأ أكثر",
|
"learn_more": "اقرأ أكثر",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "تم إنشاء المجموعة",
|
"created": "تم إنشاء المجموعة",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "تحرير المجموعة",
|
"edit": "تحرير المجموعة",
|
||||||
"invalid_name": "الرجاء تقديم اسم صالح للمجموعة",
|
"invalid_name": "الرجاء تقديم اسم صالح للمجموعة",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "مجموعاتي",
|
"my_collections": "مجموعاتي",
|
||||||
"name": "مجموعتي الجديدة",
|
"name": "مجموعتي الجديدة",
|
||||||
"name_length_insufficient": "اسم المجموعة يجب ان لايقل على 3 رموز",
|
"name_length_insufficient": "اسم المجموعة يجب ان لايقل على 3 رموز",
|
||||||
"new": "مجموعة جديدة",
|
"new": "مجموعة جديدة",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "تمت إعادة تسمية المجموعة",
|
"renamed": "تمت إعادة تسمية المجموعة",
|
||||||
"request_in_use": "Request in use",
|
"request_in_use": "Request in use",
|
||||||
"save_as": "حفظ باسم",
|
"save_as": "حفظ باسم",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "هل أنت متأكد أنك تريد حذف هذا الفريق؟",
|
"remove_team": "هل أنت متأكد أنك تريد حذف هذا الفريق؟",
|
||||||
"remove_telemetry": "هل أنت متأكد أنك تريد الانسحاب من القياس عن بعد؟",
|
"remove_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?",
|
||||||
"sync": "هل أنت متأكد أنك تريد مزامنة مساحة العمل هذه؟"
|
"sync": "هل أنت متأكد أنك تريد مزامنة مساحة العمل هذه؟"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "وضع Zen"
|
"zen_mode": "وضع Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "المجموعات",
|
"collections": "المجموعات",
|
||||||
"confirm": "يتأكد",
|
"confirm": "يتأكد",
|
||||||
"edit_request": "تحرير الطلب",
|
"edit_request": "تحرير الطلب",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "نسخ الوصلة",
|
"copy_link": "نسخ الوصلة",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "مدة",
|
"duration": "مدة",
|
||||||
"enter_curl": "أدخل cURL",
|
"enter_curl": "أدخل cURL",
|
||||||
"generate_code": "إنشاء التعليمات البرمجية",
|
"generate_code": "إنشاء التعليمات البرمجية",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "قائمة الرأس",
|
"header_list": "قائمة الرأس",
|
||||||
"invalid_name": "يرجى تقديم اسم للطلب",
|
"invalid_name": "يرجى تقديم اسم للطلب",
|
||||||
"method": "طريقة",
|
"method": "طريقة",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "اسم الطلب",
|
"name": "اسم الطلب",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "هيئة الاستجابة",
|
"body": "هيئة الاستجابة",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "الرؤوس",
|
"headers": "الرؤوس",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "حالة",
|
"status": "حالة",
|
||||||
"time": "وقت",
|
"time": "وقت",
|
||||||
"title": "إجابة",
|
"title": "إجابة",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "في انتظار الاتصال",
|
"waiting_for_connection": "في انتظار الاتصال",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "الجسم",
|
"body": "الجسم",
|
||||||
"collections": "المجموعات",
|
"collections": "المجموعات",
|
||||||
"documentation": "توثيق",
|
"documentation": "توثيق",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "الرؤوس",
|
"headers": "الرؤوس",
|
||||||
"history": "تاريخ",
|
"history": "تاريخ",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "البريد الإلكتروني لا يتوافق مع معلومات حسابك. اتصل بمدير الفريق.",
|
"email_do_not_match": "البريد الإلكتروني لا يتوافق مع معلومات حسابك. اتصل بمدير الفريق.",
|
||||||
"exit": "فريق الخروج",
|
"exit": "فريق الخروج",
|
||||||
"exit_disabled": "فقط المالك لا يمكنه الخروج من الفريق",
|
"exit_disabled": "فقط المالك لا يمكنه الخروج من الفريق",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "تنسيق البريد الإلكتروني غير صالح",
|
"invalid_email_format": "تنسيق البريد الإلكتروني غير صالح",
|
||||||
"invalid_id": "معرف الفريق غير صالح. اتصل بمدير الفريق.",
|
"invalid_id": "معرف الفريق غير صالح. اتصل بمدير الفريق.",
|
||||||
"invalid_invite_link": "رابط الدعوة غير صالح",
|
"invalid_invite_link": "رابط الدعوة غير صالح",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "تمت إزالة المستخدم",
|
"member_removed": "تمت إزالة المستخدم",
|
||||||
"member_role_updated": "تم تحديث أدوار المستخدم",
|
"member_role_updated": "تم تحديث أدوار المستخدم",
|
||||||
"members": "أعضاء",
|
"members": "أعضاء",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "يجب أن يتكون اسم الفريق من 6 أحرف على الأقل",
|
"name_length_insufficient": "يجب أن يتكون اسم الفريق من 6 أحرف على الأقل",
|
||||||
"name_updated": "تم تحديث اسم الفريق",
|
"name_updated": "تم تحديث اسم الفريق",
|
||||||
"new": "فريق جديد",
|
"new": "فريق جديد",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "فريقي الجديد",
|
"new_name": "فريقي الجديد",
|
||||||
"no_access": "ليس لديك حق التعديل في هذه المجموعات",
|
"no_access": "ليس لديك حق التعديل في هذه المجموعات",
|
||||||
"no_invite_found": "لم يتم العثور على الدعوة. اتصل بمدير الفريق",
|
"no_invite_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",
|
||||||
"pending_invites": "دعوات معلقة",
|
"pending_invites": "دعوات معلقة",
|
||||||
"permissions": "أذونات",
|
"permissions": "أذونات",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "فريق حفظ",
|
"saved": "فريق حفظ",
|
||||||
"select_a_team": "اختر فريق",
|
"select_a_team": "اختر فريق",
|
||||||
"title": "فرق",
|
"title": "فرق",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "رسالة",
|
"message": "رسالة",
|
||||||
"protocols": "البروتوكولات",
|
"protocols": "البروتوكولات",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"filter": "Filtrar resposta",
|
"filter": "Filtrar resposta",
|
||||||
"go_back": "Tornar",
|
"go_back": "Tornar",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiquetar",
|
"label": "Etiquetar",
|
||||||
"learn_more": "Aprèn més",
|
"learn_more": "Aprèn més",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Col·lecció creada",
|
"created": "Col·lecció creada",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Editar la col·lecció",
|
"edit": "Editar la col·lecció",
|
||||||
"invalid_name": "Proporcioneu un nom vàlid per a la col·lecció",
|
"invalid_name": "Proporcioneu un nom vàlid per a la col·lecció",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Les meves col·leccions",
|
"my_collections": "Les meves col·leccions",
|
||||||
"name": "La meva nova col·lecció",
|
"name": "La meva nova col·lecció",
|
||||||
"name_length_insufficient": "El nom de la col·lecció ha de tenir almenys 3 caràcters",
|
"name_length_insufficient": "El nom de la col·lecció ha de tenir almenys 3 caràcters",
|
||||||
"new": "Nova col · lecció",
|
"new": "Nova col · lecció",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Està segur que vol suprimir aquest equip?",
|
"remove_team": "Està segur que vol suprimir aquest equip?",
|
||||||
"remove_telemetry": "Està segur que vol desactivar Telemetry?",
|
"remove_telemetry": "Està segur que vol desactivar Telemetry?",
|
||||||
"request_change": "Està segur que vol descartar la sol·licitud actual, els canvis no desats es perdran.",
|
"request_change": "Està segur que vol descartar la sol·licitud actual, els canvis no desats es perdran.",
|
||||||
|
"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?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Mode Zen"
|
"zen_mode": "Mode Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Col·leccions",
|
"collections": "Col·leccions",
|
||||||
"confirm": "Confirmar",
|
"confirm": "Confirmar",
|
||||||
"edit_request": "Sol·licitud d'edició",
|
"edit_request": "Sol·licitud d'edició",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Copia l'enllaç",
|
"copy_link": "Copia l'enllaç",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Durada",
|
"duration": "Durada",
|
||||||
"enter_curl": "Introduïu cURL",
|
"enter_curl": "Introduïu cURL",
|
||||||
"generate_code": "Generar codi",
|
"generate_code": "Generar codi",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Llista de capçaleres",
|
"header_list": "Llista de capçaleres",
|
||||||
"invalid_name": "Proporcioneu un nom per a la sol·licitud",
|
"invalid_name": "Proporcioneu un nom per a la sol·licitud",
|
||||||
"method": "Mètode",
|
"method": "Mètode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Sol·licita el nom",
|
"name": "Sol·licita el nom",
|
||||||
"new": "Nova sol·licitud",
|
"new": "Nova sol·licitud",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Sobreescriure",
|
"override": "Sobreescriure",
|
||||||
"override_help": "Estableix <kbd>Content-Type</kbd> a les capçaleres (Headers)",
|
"override_help": "Estableix <kbd>Content-Type</kbd> a les capçaleres (Headers)",
|
||||||
"overriden": "Sobreescrit",
|
"overriden": "Sobreescrit",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "Visualitzar els meus enllaços"
|
"view_my_links": "Visualitzar els meus enllaços"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Cos de resposta",
|
"body": "Cos de resposta",
|
||||||
"filter_response_body": "Filtrar el cos de la resposta JSON (utilitza la sintaxi JSONPath)",
|
"filter_response_body": "Filtrar el cos de la resposta JSON (utilitza la sintaxi JSONPath)",
|
||||||
"headers": "Capçaleres",
|
"headers": "Capçaleres",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Estat",
|
"status": "Estat",
|
||||||
"time": "Temps",
|
"time": "Temps",
|
||||||
"title": "Resposta",
|
"title": "Resposta",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "esperant la connexió",
|
"waiting_for_connection": "esperant la connexió",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Cos",
|
"body": "Cos",
|
||||||
"collections": "Col·leccions",
|
"collections": "Col·leccions",
|
||||||
"documentation": "Documentació",
|
"documentation": "Documentació",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Capçaleres",
|
"headers": "Capçaleres",
|
||||||
"history": "Historial",
|
"history": "Historial",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "El correu electrònic no coincideix amb les dades del vostre compte. Contacta amb el propietari del teu equip.",
|
"email_do_not_match": "El correu electrònic no coincideix amb les dades del vostre compte. Contacta amb el propietari del teu equip.",
|
||||||
"exit": "Sortir de l'equip",
|
"exit": "Sortir de l'equip",
|
||||||
"exit_disabled": "L'únic propietari no pot sortir de l'equip",
|
"exit_disabled": "L'únic propietari no pot sortir de l'equip",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "El format del correu electrònic no és vàlid",
|
"invalid_email_format": "El format del correu electrònic no és vàlid",
|
||||||
"invalid_id": "Identificador d'equip no vàlid. Contacta amb el propietari del teu equip.",
|
"invalid_id": "Identificador d'equip no vàlid. Contacta amb el propietari del teu equip.",
|
||||||
"invalid_invite_link": "Enllaç d'invitació no vàlid",
|
"invalid_invite_link": "Enllaç d'invitació no vàlid",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "S'ha eliminat l'usuari",
|
"member_removed": "S'ha eliminat l'usuari",
|
||||||
"member_role_updated": "Rols d'usuari actualitzats",
|
"member_role_updated": "Rols d'usuari actualitzats",
|
||||||
"members": "Membres",
|
"members": "Membres",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "El nom de l'equip ha de tenir com a mínim 6 caràcters",
|
"name_length_insufficient": "El nom de l'equip ha de tenir com a mínim 6 caràcters",
|
||||||
"name_updated": "S'ha actualitzat el nom de l'equip",
|
"name_updated": "S'ha actualitzat el nom de l'equip",
|
||||||
"new": "Nou equip",
|
"new": "Nou equip",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "El meu Nou Equip",
|
"new_name": "El meu Nou Equip",
|
||||||
"no_access": "No teniu accés d'edició a aquestes col·leccions",
|
"no_access": "No teniu accés d'edició a aquestes col·leccions",
|
||||||
"no_invite_found": "No s'ha trobat la invitació. Contacta amb el propietari del teu equip.",
|
"no_invite_found": "No s'ha trobat la invitació. Contacta amb el propietari del teu equip.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "No s'ha trobat l'equip. Contacta amb el propietari del teu equip.",
|
"not_found": "No s'ha trobat l'equip. Contacta amb el propietari del teu equip.",
|
||||||
"not_valid_viewer": "No ets un espectador vàlid. Contacta amb el propietari del teu equip.",
|
"not_valid_viewer": "No ets un espectador vàlid. Contacta amb el propietari del teu equip.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Invitacions pendents",
|
"pending_invites": "Invitacions pendents",
|
||||||
"permissions": "Permisos",
|
"permissions": "Permisos",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "S'ha guardat l'equip",
|
"saved": "S'ha guardat l'equip",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Equips",
|
"title": "Equips",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Missatge",
|
"message": "Missatge",
|
||||||
"protocols": "Protocols",
|
"protocols": "Protocols",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
"filter": "过滤",
|
"filter": "过滤",
|
||||||
"go_back": "返回",
|
"go_back": "返回",
|
||||||
|
"go_forward": "前进",
|
||||||
"group_by": "分组方式",
|
"group_by": "分组方式",
|
||||||
"label": "标签",
|
"label": "标签",
|
||||||
"learn_more": "了解更多",
|
"learn_more": "了解更多",
|
||||||
@@ -39,9 +40,9 @@
|
|||||||
"start": "开始",
|
"start": "开始",
|
||||||
"starting": "正在开始",
|
"starting": "正在开始",
|
||||||
"stop": "停止",
|
"stop": "停止",
|
||||||
"to_close": "以关闭",
|
"to_close": "关闭",
|
||||||
"to_navigate": "以定位",
|
"to_navigate": "定位",
|
||||||
"to_select": "以选择",
|
"to_select": "选择",
|
||||||
"turn_off": "关闭",
|
"turn_off": "关闭",
|
||||||
"turn_on": "开启",
|
"turn_on": "开启",
|
||||||
"undo": "撤消",
|
"undo": "撤消",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "集合已创建",
|
"created": "集合已创建",
|
||||||
|
"different_parent": "不能用不同的父类来重新排序集合",
|
||||||
"edit": "编辑集合",
|
"edit": "编辑集合",
|
||||||
"invalid_name": "请提供有效的集合名称",
|
"invalid_name": "请提供有效的集合名称",
|
||||||
|
"invalid_root_move": "该集合已经在根级了",
|
||||||
|
"moved": "移动完成",
|
||||||
"my_collections": "我的集合",
|
"my_collections": "我的集合",
|
||||||
"name": "我的新集合",
|
"name": "我的新集合",
|
||||||
"name_length_insufficient": "集合名字至少需要 3 个字符",
|
"name_length_insufficient": "集合名字至少需要 3 个字符",
|
||||||
"new": "新建集合",
|
"new": "新建集合",
|
||||||
|
"order_changed": "集合顺序已更新",
|
||||||
"renamed": "集合已更名",
|
"renamed": "集合已更名",
|
||||||
"request_in_use": "请求正在使用中",
|
"request_in_use": "请求正在使用中",
|
||||||
"save_as": "另存为",
|
"save_as": "另存为",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "你确定要删除该团队吗?",
|
"remove_team": "你确定要删除该团队吗?",
|
||||||
"remove_telemetry": "你确定要退出遥测服务吗?",
|
"remove_telemetry": "你确定要退出遥测服务吗?",
|
||||||
"request_change": "你确定你要放弃当前的请求,未保存的修改将被丢失。",
|
"request_change": "你确定你要放弃当前的请求,未保存的修改将被丢失。",
|
||||||
|
"save_unsaved_tab": "你想保存在此标签页中所作的修改吗?",
|
||||||
"sync": "您确定要同步该工作区吗?"
|
"sync": "您确定要同步该工作区吗?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -171,7 +177,7 @@
|
|||||||
"members": "团队为空",
|
"members": "团队为空",
|
||||||
"parameters": "该请求没有任何参数",
|
"parameters": "该请求没有任何参数",
|
||||||
"pending_invites": "此团队无待办邀请",
|
"pending_invites": "此团队无待办邀请",
|
||||||
"profile": "登录以查看你的个人档案",
|
"profile": "登录以查看你的个人资料",
|
||||||
"protocols": "协议为空",
|
"protocols": "协议为空",
|
||||||
"schema": "连接至 GraphQL 端点",
|
"schema": "连接至 GraphQL 端点",
|
||||||
"shortcodes": "Shortcodes 为空",
|
"shortcodes": "Shortcodes 为空",
|
||||||
@@ -203,7 +209,7 @@
|
|||||||
"browser_support_sse": "该浏览器似乎不支持 SSE。",
|
"browser_support_sse": "该浏览器似乎不支持 SSE。",
|
||||||
"check_console_details": "检查控制台日志以获悉详情",
|
"check_console_details": "检查控制台日志以获悉详情",
|
||||||
"curl_invalid_format": "cURL 格式不正确",
|
"curl_invalid_format": "cURL 格式不正确",
|
||||||
"danger_zone": "Danger zone",
|
"danger_zone": "危险区域",
|
||||||
"delete_account": "您的帐号目前为这些团队的拥有者:",
|
"delete_account": "您的帐号目前为这些团队的拥有者:",
|
||||||
"delete_account_description": "您在删除帐号前必须先将您自己从团队中移除、转移拥有权,或是删除团队。",
|
"delete_account_description": "您在删除帐号前必须先将您自己从团队中移除、转移拥有权,或是删除团队。",
|
||||||
"empty_req_name": "空请求名称",
|
"empty_req_name": "空请求名称",
|
||||||
@@ -213,7 +219,7 @@
|
|||||||
"incorrect_email": "电子邮箱错误",
|
"incorrect_email": "电子邮箱错误",
|
||||||
"invalid_link": "无效链接",
|
"invalid_link": "无效链接",
|
||||||
"invalid_link_description": "你点击的链接无效或已过期。",
|
"invalid_link_description": "你点击的链接无效或已过期。",
|
||||||
"json_parsing_failed": "Invalid JSON",
|
"json_parsing_failed": "不合法的 JSON",
|
||||||
"json_prettify_invalid_body": "无法美化无效的请求头,处理 JSON 语法错误并重试",
|
"json_prettify_invalid_body": "无法美化无效的请求头,处理 JSON 语法错误并重试",
|
||||||
"network_error": "好像发生了网络错误,请重试。",
|
"network_error": "好像发生了网络错误,请重试。",
|
||||||
"network_fail": "无法发送请求",
|
"network_fail": "无法发送请求",
|
||||||
@@ -310,13 +316,14 @@
|
|||||||
"zen_mode": "ZEN 模式"
|
"zen_mode": "ZEN 模式"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "有未保存的变更",
|
||||||
"collections": "集合",
|
"collections": "集合",
|
||||||
"confirm": "确认",
|
"confirm": "确认",
|
||||||
"edit_request": "编辑请求",
|
"edit_request": "编辑请求",
|
||||||
"import_export": "导入/导出"
|
"import_export": "导入/导出"
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"already_subscribed": "您已经订阅了此主題。",
|
"already_subscribed": "您已经订阅了此主题。",
|
||||||
"clean_session": "清除会话",
|
"clean_session": "清除会话",
|
||||||
"clear_input": "清除输入",
|
"clear_input": "清除输入",
|
||||||
"clear_input_on_send": "发送后清除输入",
|
"clear_input_on_send": "发送后清除输入",
|
||||||
@@ -348,7 +355,7 @@
|
|||||||
"navigation": {
|
"navigation": {
|
||||||
"doc": "文档",
|
"doc": "文档",
|
||||||
"graphql": "GraphQL",
|
"graphql": "GraphQL",
|
||||||
"profile": "个人档案",
|
"profile": "个人资料",
|
||||||
"realtime": "实时",
|
"realtime": "实时",
|
||||||
"rest": "REST",
|
"rest": "REST",
|
||||||
"settings": "设置"
|
"settings": "设置"
|
||||||
@@ -370,7 +377,7 @@
|
|||||||
"owner_description": "所有者可以添加、编辑和删除请求、集合及团队成员。",
|
"owner_description": "所有者可以添加、编辑和删除请求、集合及团队成员。",
|
||||||
"roles": "角色",
|
"roles": "角色",
|
||||||
"roles_description": "角色用以控制共享集合的访问权限。",
|
"roles_description": "角色用以控制共享集合的访问权限。",
|
||||||
"updated": "档案已更新",
|
"updated": "已更新",
|
||||||
"viewer": "查看者",
|
"viewer": "查看者",
|
||||||
"viewer_description": "查看者只可查看与使用请求。"
|
"viewer_description": "查看者只可查看与使用请求。"
|
||||||
},
|
},
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "文字"
|
"text": "文字"
|
||||||
},
|
},
|
||||||
"copy_link": "复制链接",
|
"copy_link": "复制链接",
|
||||||
|
"different_collection": "不能对来自不同集合的请求进行重新排序",
|
||||||
|
"duplicated": "重复的请求",
|
||||||
"duration": "持续时间",
|
"duration": "持续时间",
|
||||||
"enter_curl": "输入 cURL",
|
"enter_curl": "输入 cURL",
|
||||||
"generate_code": "生成代码",
|
"generate_code": "生成代码",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "请求头列表",
|
"header_list": "请求头列表",
|
||||||
"invalid_name": "请提供请求名称",
|
"invalid_name": "请提供请求名称",
|
||||||
"method": "方法",
|
"method": "方法",
|
||||||
|
"moved": "请求移动完成",
|
||||||
"name": "请求名称",
|
"name": "请求名称",
|
||||||
"new": "新请求",
|
"new": "新请求",
|
||||||
|
"order_changed": "请求顺序更新完成",
|
||||||
"override": "覆盖",
|
"override": "覆盖",
|
||||||
"override_help": "设置 <kbd>Content-Type</kbd> 头",
|
"override_help": "设置 <kbd>Content-Type</kbd> 头",
|
||||||
"overriden": "覆盖",
|
"overriden": "覆盖",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "查看我的链接"
|
"view_my_links": "查看我的链接"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "响应体",
|
"body": "响应体",
|
||||||
"filter_response_body": "筛选JSON响应本体(使用JSONPath语法)",
|
"filter_response_body": "筛选JSON响应本体(使用JSONPath语法)",
|
||||||
"headers": "响应头",
|
"headers": "响应头",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "状态",
|
"status": "状态",
|
||||||
"time": "时间",
|
"time": "时间",
|
||||||
"title": "响应",
|
"title": "响应",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "等待连接",
|
"waiting_for_connection": "等待连接",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -468,10 +481,10 @@
|
|||||||
"language": "语言",
|
"language": "语言",
|
||||||
"light_mode": "亮色",
|
"light_mode": "亮色",
|
||||||
"official_proxy_hosting": "官方代理由 Hoppscotch 托管。",
|
"official_proxy_hosting": "官方代理由 Hoppscotch 托管。",
|
||||||
"profile": "个人档案",
|
"profile": "个人资料",
|
||||||
"profile_description": "更新你的档案详情",
|
"profile_description": "更新你的资料",
|
||||||
"profile_email": "电子邮箱地址",
|
"profile_email": "电子邮箱地址",
|
||||||
"profile_name": "档案名称",
|
"profile_name": "名称",
|
||||||
"proxy": "网络代理",
|
"proxy": "网络代理",
|
||||||
"proxy_url": "代理网址",
|
"proxy_url": "代理网址",
|
||||||
"proxy_use_toggle": "使用代理中间件发送请求",
|
"proxy_use_toggle": "使用代理中间件发送请求",
|
||||||
@@ -521,7 +534,7 @@
|
|||||||
"documentation": "前往文档页面",
|
"documentation": "前往文档页面",
|
||||||
"forward": "前往下一页面",
|
"forward": "前往下一页面",
|
||||||
"graphql": "前往 GraphQL 页面",
|
"graphql": "前往 GraphQL 页面",
|
||||||
"profile": "前往个人档案页面",
|
"profile": "前往个人资料页面",
|
||||||
"realtime": "前往实时页面",
|
"realtime": "前往实时页面",
|
||||||
"rest": "前往 REST 页面",
|
"rest": "前往 REST 页面",
|
||||||
"settings": "前往设置页面",
|
"settings": "前往设置页面",
|
||||||
@@ -563,7 +576,7 @@
|
|||||||
},
|
},
|
||||||
"socketio": {
|
"socketio": {
|
||||||
"communication": "通讯",
|
"communication": "通讯",
|
||||||
"connection_not_authorized": "此SocketIO连接未使用任何验证。",
|
"connection_not_authorized": "此 SocketIO 连接未使用任何验证。",
|
||||||
"event_name": "事件名称",
|
"event_name": "事件名称",
|
||||||
"events": "事件",
|
"events": "事件",
|
||||||
"log": "日志",
|
"log": "日志",
|
||||||
@@ -603,12 +616,12 @@
|
|||||||
"none": "无",
|
"none": "无",
|
||||||
"nothing_found": "没有找到",
|
"nothing_found": "没有找到",
|
||||||
"published_error": "将信息:{topic}发布至主题:{message}时发生错误",
|
"published_error": "将信息:{topic}发布至主题:{message}时发生错误",
|
||||||
"published_message": "已将此信息:{message}发布至主题:{topic}",
|
"published_message": "已将此信息:{message} 发布至主题:{topic}",
|
||||||
"reconnection_error": "重连失败",
|
"reconnection_error": "重连失败",
|
||||||
"subscribed_failed": "无法订阅此主題:{topic}",
|
"subscribed_failed": "无法订阅此主题:{topic}",
|
||||||
"subscribed_success": "成功订阅此主題:{topic}",
|
"subscribed_success": "成功订阅此主题:{topic}",
|
||||||
"unsubscribed_failed": "无法取消订阅此主題:{topic}",
|
"unsubscribed_failed": "无法取消订阅此主题:{topic}",
|
||||||
"unsubscribed_success": "成功取消订阅此主題:{topic}",
|
"unsubscribed_success": "成功取消订阅此主题:{topic}",
|
||||||
"waiting_send_request": "等待发送请求"
|
"waiting_send_request": "等待发送请求"
|
||||||
},
|
},
|
||||||
"support": {
|
"support": {
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "请求体",
|
"body": "请求体",
|
||||||
"collections": "集合",
|
"collections": "集合",
|
||||||
"documentation": "帮助文档",
|
"documentation": "帮助文档",
|
||||||
|
"environments": "环境",
|
||||||
"headers": "请求头",
|
"headers": "请求头",
|
||||||
"history": "历史记录",
|
"history": "历史记录",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "邮箱无法与你的帐户信息匹配。请联系你的团队者。",
|
"email_do_not_match": "邮箱无法与你的帐户信息匹配。请联系你的团队者。",
|
||||||
"exit": "退出团队",
|
"exit": "退出团队",
|
||||||
"exit_disabled": "团队所有者无法退出团队",
|
"exit_disabled": "团队所有者无法退出团队",
|
||||||
|
"invalid_coll_id": "无效的集合 ID",
|
||||||
"invalid_email_format": "电子邮箱格式无效",
|
"invalid_email_format": "电子邮箱格式无效",
|
||||||
"invalid_id": "无效的团队 ID,请联系你的团队者。",
|
"invalid_id": "无效的团队 ID,请联系你的团队者。",
|
||||||
"invalid_invite_link": "无效的邀请链接",
|
"invalid_invite_link": "无效的邀请链接",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "用户已移除",
|
"member_removed": "用户已移除",
|
||||||
"member_role_updated": "用户角色已更新",
|
"member_role_updated": "用户角色已更新",
|
||||||
"members": "成员",
|
"members": "成员",
|
||||||
|
"more_members": "+{count} 更多",
|
||||||
"name_length_insufficient": "团队名称至少为 6 个字符",
|
"name_length_insufficient": "团队名称至少为 6 个字符",
|
||||||
"name_updated": "团队名称已更新",
|
"name_updated": "团队名称已更新",
|
||||||
"new": "新团队",
|
"new": "新团队",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "我的新团队",
|
"new_name": "我的新团队",
|
||||||
"no_access": "你没有编辑集合的权限",
|
"no_access": "你没有编辑集合的权限",
|
||||||
"no_invite_found": "未找到邀请。请联系你的团队者。",
|
"no_invite_found": "未找到邀请。请联系你的团队者。",
|
||||||
|
"no_request_found": "请求不存在",
|
||||||
"not_found": "没有找到团队,请联系您的团队所有者。",
|
"not_found": "没有找到团队,请联系您的团队所有者。",
|
||||||
"not_valid_viewer": "你不是有效的查看者。请联系你的团队者。",
|
"not_valid_viewer": "你不是有效的查看者。请联系你的团队者。",
|
||||||
|
"parent_coll_move": "不能将集合移动到一个子集合",
|
||||||
"pending_invites": "待办邀请",
|
"pending_invites": "待办邀请",
|
||||||
"permissions": "权限",
|
"permissions": "权限",
|
||||||
|
"same_target_destination": "目标相同",
|
||||||
"saved": "团队已保存",
|
"saved": "团队已保存",
|
||||||
"select_a_team": "选择团队",
|
"select_a_team": "选择团队",
|
||||||
"title": "团队",
|
"title": "团队",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "信息",
|
"message": "信息",
|
||||||
"protocols": "协议",
|
"protocols": "协议",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "切换工作空间",
|
||||||
|
"personal": "我的工作空间",
|
||||||
|
"team": "团队工作空间",
|
||||||
|
"title": "工作空间"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Upravit",
|
"edit": "Upravit",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Vrať se",
|
"go_back": "Vrať se",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Označení",
|
"label": "Označení",
|
||||||
"learn_more": "Další informace",
|
"learn_more": "Další informace",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Kolekce vytvořena",
|
"created": "Kolekce vytvořena",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Upravit sbírku",
|
"edit": "Upravit sbírku",
|
||||||
"invalid_name": "Uveďte prosím platný název kolekce",
|
"invalid_name": "Uveďte prosím platný název kolekce",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Moje sbírky",
|
"my_collections": "Moje sbírky",
|
||||||
"name": "Moje nová kolekce",
|
"name": "Moje nová kolekce",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Nová kolekce",
|
"new": "Nová kolekce",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Opravdu chcete tento tým smazat?",
|
"remove_team": "Opravdu chcete tento tým smazat?",
|
||||||
"remove_telemetry": "Opravdu se chcete odhlásit z telemetrie?",
|
"remove_telemetry": "Opravdu se chcete odhlásit z telemetrie?",
|
||||||
"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?",
|
||||||
"sync": "Opravdu chcete synchronizovat tento pracovní prostor?"
|
"sync": "Opravdu chcete synchronizovat tento pracovní prostor?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zenový režim"
|
"zen_mode": "Zenový režim"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Sbírky",
|
"collections": "Sbírky",
|
||||||
"confirm": "Potvrdit",
|
"confirm": "Potvrdit",
|
||||||
"edit_request": "Upravit požadavek",
|
"edit_request": "Upravit požadavek",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopírovat odkaz",
|
"copy_link": "Kopírovat odkaz",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Doba trvání",
|
"duration": "Doba trvání",
|
||||||
"enter_curl": "Zadejte cURL",
|
"enter_curl": "Zadejte cURL",
|
||||||
"generate_code": "Vygenerujte kód",
|
"generate_code": "Vygenerujte kód",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Seznam záhlaví",
|
"header_list": "Seznam záhlaví",
|
||||||
"invalid_name": "Uveďte prosím název žádosti",
|
"invalid_name": "Uveďte prosím název žádosti",
|
||||||
"method": "Metoda",
|
"method": "Metoda",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Vyžádejte si jméno",
|
"name": "Vyžádejte si jméno",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Odpovědní orgán",
|
"body": "Odpovědní orgán",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Záhlaví",
|
"headers": "Záhlaví",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Postavení",
|
"status": "Postavení",
|
||||||
"time": "Čas",
|
"time": "Čas",
|
||||||
"title": "Odezva",
|
"title": "Odezva",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "čekání na připojení",
|
"waiting_for_connection": "čekání na připojení",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Tělo",
|
"body": "Tělo",
|
||||||
"collections": "Sbírky",
|
"collections": "Sbírky",
|
||||||
"documentation": "Dokumentace",
|
"documentation": "Dokumentace",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Záhlaví",
|
"headers": "Záhlaví",
|
||||||
"history": "Dějiny",
|
"history": "Dějiny",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Ukončete tým",
|
"exit": "Ukončete tým",
|
||||||
"exit_disabled": "Pouze vlastník nemůže opustit tým",
|
"exit_disabled": "Pouze vlastník nemůže opustit tým",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Formát e -mailu je neplatný",
|
"invalid_email_format": "Formát e -mailu je neplatný",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Uživatel odstraněn",
|
"member_removed": "Uživatel odstraněn",
|
||||||
"member_role_updated": "Role uživatelů aktualizovány",
|
"member_role_updated": "Role uživatelů aktualizovány",
|
||||||
"members": "Členové",
|
"members": "Členové",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Název týmu by měl mít alespoň 6 znaků",
|
"name_length_insufficient": "Název týmu by měl mít alespoň 6 znaků",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nový tým",
|
"new": "Nový tým",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Můj nový tým",
|
"new_name": "Můj nový tým",
|
||||||
"no_access": "K těmto kolekcím nemáte přístup k úpravám",
|
"no_access": "K těmto kolekcím nemáte přístup k úpravám",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Oprávnění",
|
"permissions": "Oprávnění",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Tým uložen",
|
"saved": "Tým uložen",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Týmy",
|
"title": "Týmy",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Zpráva",
|
"message": "Zpráva",
|
||||||
"protocols": "Protokoly",
|
"protocols": "Protokoly",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Redigere",
|
"edit": "Redigere",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Gå tilbage",
|
"go_back": "Gå tilbage",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiket",
|
"label": "Etiket",
|
||||||
"learn_more": "Lær mere",
|
"learn_more": "Lær mere",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Samlingen er oprettet",
|
"created": "Samlingen er oprettet",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Rediger samling",
|
"edit": "Rediger samling",
|
||||||
"invalid_name": "Angiv et gyldigt navn til samlingen",
|
"invalid_name": "Angiv et gyldigt navn til samlingen",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Mine samlinger",
|
"my_collections": "Mine samlinger",
|
||||||
"name": "Min nye samling",
|
"name": "Min nye samling",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Ny kollektion",
|
"new": "Ny kollektion",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Er du sikker på, at du vil slette dette hold?",
|
"remove_team": "Er du sikker på, at du vil slette dette hold?",
|
||||||
"remove_telemetry": "Er du sikker på, at du vil fravælge telemetri?",
|
"remove_telemetry": "Er du sikker på, at du vil fravælge telemetri?",
|
||||||
"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?",
|
||||||
"sync": "Er du sikker på, at du vil synkronisere dette arbejdsområde?"
|
"sync": "Er du sikker på, at du vil synkronisere dette arbejdsområde?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen -tilstand"
|
"zen_mode": "Zen -tilstand"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Samlinger",
|
"collections": "Samlinger",
|
||||||
"confirm": "Bekræfte",
|
"confirm": "Bekræfte",
|
||||||
"edit_request": "Rediger anmodning",
|
"edit_request": "Rediger anmodning",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopier link",
|
"copy_link": "Kopier link",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Varighed",
|
"duration": "Varighed",
|
||||||
"enter_curl": "Indtast cURL",
|
"enter_curl": "Indtast cURL",
|
||||||
"generate_code": "Generer kode",
|
"generate_code": "Generer kode",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Overskriftsliste",
|
"header_list": "Overskriftsliste",
|
||||||
"invalid_name": "Angiv et navn på anmodningen",
|
"invalid_name": "Angiv et navn på anmodningen",
|
||||||
"method": "Metode",
|
"method": "Metode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Anmodningsnavn",
|
"name": "Anmodningsnavn",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Svarorgan",
|
"body": "Svarorgan",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Overskrifter",
|
"headers": "Overskrifter",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tid",
|
"time": "Tid",
|
||||||
"title": "Respons",
|
"title": "Respons",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "venter på forbindelse",
|
"waiting_for_connection": "venter på forbindelse",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Legeme",
|
"body": "Legeme",
|
||||||
"collections": "Samlinger",
|
"collections": "Samlinger",
|
||||||
"documentation": "Dokumentation",
|
"documentation": "Dokumentation",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Overskrifter",
|
"headers": "Overskrifter",
|
||||||
"history": "Historie",
|
"history": "Historie",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Afslut Team",
|
"exit": "Afslut Team",
|
||||||
"exit_disabled": "Kun ejeren kan ikke forlade teamet",
|
"exit_disabled": "Kun ejeren kan ikke forlade teamet",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "E -mailformatet er ugyldigt",
|
"invalid_email_format": "E -mailformatet er ugyldigt",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Bruger fjernet",
|
"member_removed": "Bruger fjernet",
|
||||||
"member_role_updated": "Brugerroller opdateret",
|
"member_role_updated": "Brugerroller opdateret",
|
||||||
"members": "Medlemmer",
|
"members": "Medlemmer",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Holdnavnet bør mindst være 6 tegn langt",
|
"name_length_insufficient": "Holdnavnet bør mindst være 6 tegn langt",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nyt team",
|
"new": "Nyt team",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Mit nye hold",
|
"new_name": "Mit nye hold",
|
||||||
"no_access": "Du har ikke redigeringsadgang til disse samlinger",
|
"no_access": "Du har ikke redigeringsadgang til disse samlinger",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Tilladelser",
|
"permissions": "Tilladelser",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Hold reddet",
|
"saved": "Hold reddet",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Hold",
|
"title": "Hold",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Besked",
|
"message": "Besked",
|
||||||
"protocols": "Protokoller",
|
"protocols": "Protokoller",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Bearbeiten",
|
"edit": "Bearbeiten",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Zurück",
|
"go_back": "Zurück",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etikett",
|
"label": "Etikett",
|
||||||
"learn_more": "Mehr erfahren",
|
"learn_more": "Mehr erfahren",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Sammlung erstellt",
|
"created": "Sammlung erstellt",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Sammlung bearbeiten",
|
"edit": "Sammlung bearbeiten",
|
||||||
"invalid_name": "Bitte gib einen gültigen Namen für die Sammlung an",
|
"invalid_name": "Bitte gib einen gültigen Namen für die Sammlung an",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Meine Sammlungen",
|
"my_collections": "Meine Sammlungen",
|
||||||
"name": "Meine neue Sammlung",
|
"name": "Meine neue Sammlung",
|
||||||
"name_length_insufficient": "Sammlungsname soll mindestens 3 Zeichen lang sein",
|
"name_length_insufficient": "Sammlungsname soll mindestens 3 Zeichen lang sein",
|
||||||
"new": "Neue Sammlung",
|
"new": "Neue Sammlung",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Möchtest Du dieses Team wirklich löschen?",
|
"remove_team": "Möchtest Du dieses Team wirklich löschen?",
|
||||||
"remove_telemetry": "Möchtest Du die Telemetrie wirklich deaktivieren?",
|
"remove_telemetry": "Möchtest Du die Telemetrie wirklich deaktivieren?",
|
||||||
"request_change": "Möchtest Du diese Anfrage verwerfen? Ungespeicherte Änderungen gehen verloren.",
|
"request_change": "Möchtest Du diese Anfrage verwerfen? Ungespeicherte Änderungen gehen verloren.",
|
||||||
|
"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?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen-Modus"
|
"zen_mode": "Zen-Modus"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Sammlungen",
|
"collections": "Sammlungen",
|
||||||
"confirm": "Aktion bestätigen",
|
"confirm": "Aktion bestätigen",
|
||||||
"edit_request": "Anfrage bearbeiten",
|
"edit_request": "Anfrage bearbeiten",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Link kopieren",
|
"copy_link": "Link kopieren",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Dauer",
|
"duration": "Dauer",
|
||||||
"enter_curl": "cURL eingeben",
|
"enter_curl": "cURL eingeben",
|
||||||
"generate_code": "Code generieren",
|
"generate_code": "Code generieren",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Header-Liste",
|
"header_list": "Header-Liste",
|
||||||
"invalid_name": "Bitte gib einen Namen für die Anfrage an",
|
"invalid_name": "Bitte gib einen Namen für die Anfrage an",
|
||||||
"method": "Methode",
|
"method": "Methode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Anfragename",
|
"name": "Anfragename",
|
||||||
"new": "Neue Anfrage",
|
"new": "Neue Anfrage",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Überschreiben",
|
"override": "Überschreiben",
|
||||||
"override_help": "Setze <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Setze <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Überschrieben",
|
"overriden": "Überschrieben",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Antworttext",
|
"body": "Antworttext",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Header",
|
"headers": "Header",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Zeit",
|
"time": "Zeit",
|
||||||
"title": "Antwort",
|
"title": "Antwort",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "auf Verbindung warten",
|
"waiting_for_connection": "auf Verbindung warten",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Anfragekörper",
|
"body": "Anfragekörper",
|
||||||
"collections": "Sammlungen",
|
"collections": "Sammlungen",
|
||||||
"documentation": "Dokumentation",
|
"documentation": "Dokumentation",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Header",
|
"headers": "Header",
|
||||||
"history": "Verlauf",
|
"history": "Verlauf",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "E-Mail-Adresse stimmt nicht mit Deinen Kontodaten überein, bitte kontaktiere den Teameigentümer.",
|
"email_do_not_match": "E-Mail-Adresse stimmt nicht mit Deinen Kontodaten überein, bitte kontaktiere den Teameigentümer.",
|
||||||
"exit": "Team verlassen",
|
"exit": "Team verlassen",
|
||||||
"exit_disabled": "Eigentümer können das Team nicht verlassen",
|
"exit_disabled": "Eigentümer können das Team nicht verlassen",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "E-Mail-Format ist ungültig",
|
"invalid_email_format": "E-Mail-Format ist ungültig",
|
||||||
"invalid_id": "Ungültige Team-ID, bitte kontaktiere den Teameigentümer.",
|
"invalid_id": "Ungültige Team-ID, bitte kontaktiere den Teameigentümer.",
|
||||||
"invalid_invite_link": "Ungültiger Einladungslink.",
|
"invalid_invite_link": "Ungültiger Einladungslink.",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Benutzer entfernt",
|
"member_removed": "Benutzer entfernt",
|
||||||
"member_role_updated": "Benutzerrollen aktualisiert",
|
"member_role_updated": "Benutzerrollen aktualisiert",
|
||||||
"members": "Mitglieder",
|
"members": "Mitglieder",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Der Teamname sollte mindestens 6 Zeichen lang sein",
|
"name_length_insufficient": "Der Teamname sollte mindestens 6 Zeichen lang sein",
|
||||||
"name_updated": "Teamname aktualisiert",
|
"name_updated": "Teamname aktualisiert",
|
||||||
"new": "Neues Team",
|
"new": "Neues Team",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Mein neues Team",
|
"new_name": "Mein neues Team",
|
||||||
"no_access": "Du hast keinen Bearbeitungszugriff auf diese Sammlungen",
|
"no_access": "Du hast keinen Bearbeitungszugriff auf diese Sammlungen",
|
||||||
"no_invite_found": "Einladung nicht gefunden, bitte kontaktiere den Teameigentümer.",
|
"no_invite_found": "Einladung nicht gefunden, bitte kontaktiere den Teameigentümer.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Team wurde nicht gefunde, bitte kontaktiere den Teameigentümer.",
|
"not_found": "Team wurde nicht gefunde, bitte kontaktiere den Teameigentümer.",
|
||||||
"not_valid_viewer": "Du hast nicht die richtige Berechtigung als Gast, bitte kontaktiere den Teameigentümer.",
|
"not_valid_viewer": "Du hast nicht die richtige Berechtigung als Gast, bitte kontaktiere den Teameigentümer.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Wartende Einladungen",
|
"pending_invites": "Wartende Einladungen",
|
||||||
"permissions": "Berechtigungen",
|
"permissions": "Berechtigungen",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Team gespeichert",
|
"saved": "Team gespeichert",
|
||||||
"select_a_team": "Team auswählen",
|
"select_a_team": "Team auswählen",
|
||||||
"title": "Team",
|
"title": "Team",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Nachricht",
|
"message": "Nachricht",
|
||||||
"protocols": "Protokolle",
|
"protocols": "Protokolle",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Επεξεργασία",
|
"edit": "Επεξεργασία",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Πήγαινε πίσω",
|
"go_back": "Πήγαινε πίσω",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Επιγραφή",
|
"label": "Επιγραφή",
|
||||||
"learn_more": "Μάθε περισσότερα",
|
"learn_more": "Μάθε περισσότερα",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Η συλλογή δημιουργήθηκε",
|
"created": "Η συλλογή δημιουργήθηκε",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Επεξεργασία Συλλογής",
|
"edit": "Επεξεργασία Συλλογής",
|
||||||
"invalid_name": "Καταχωρίστε ένα έγκυρο όνομα για τη συλλογή",
|
"invalid_name": "Καταχωρίστε ένα έγκυρο όνομα για τη συλλογή",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Οι Συλλογές μου",
|
"my_collections": "Οι Συλλογές μου",
|
||||||
"name": "Η νέα μου συλλογή",
|
"name": "Η νέα μου συλλογή",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Νέα συλλογή",
|
"new": "Νέα συλλογή",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Η συλλογή μετονομάστηκε",
|
"renamed": "Η συλλογή μετονομάστηκε",
|
||||||
"request_in_use": "Request in use",
|
"request_in_use": "Request in use",
|
||||||
"save_as": "Αποθήκευση ως",
|
"save_as": "Αποθήκευση ως",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την ομάδα;",
|
"remove_team": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την ομάδα;",
|
||||||
"remove_telemetry": "Είστε βέβαιοι ότι θέλετε να εξαιρεθείτε από την τηλεμετρία;",
|
"remove_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?",
|
||||||
"sync": "Είστε βέβαιοι ότι θέλετε να συγχρονίσετε αυτόν τον χώρο εργασίας;"
|
"sync": "Είστε βέβαιοι ότι θέλετε να συγχρονίσετε αυτόν τον χώρο εργασίας;"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Λειτουργία Zen"
|
"zen_mode": "Λειτουργία Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Συλλογές",
|
"collections": "Συλλογές",
|
||||||
"confirm": "Επιβεβαιώνω",
|
"confirm": "Επιβεβαιώνω",
|
||||||
"edit_request": "Αίτημα Επεξεργασίας",
|
"edit_request": "Αίτημα Επεξεργασίας",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Αντιγραφή συνδέσμου",
|
"copy_link": "Αντιγραφή συνδέσμου",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Διάρκεια",
|
"duration": "Διάρκεια",
|
||||||
"enter_curl": "Εισαγάγετε cURL",
|
"enter_curl": "Εισαγάγετε cURL",
|
||||||
"generate_code": "Δημιουργία κώδικα",
|
"generate_code": "Δημιουργία κώδικα",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Λίστα κεφαλίδων",
|
"header_list": "Λίστα κεφαλίδων",
|
||||||
"invalid_name": "Καταχωρίστε ένα όνομα για το αίτημα",
|
"invalid_name": "Καταχωρίστε ένα όνομα για το αίτημα",
|
||||||
"method": "Μέθοδος",
|
"method": "Μέθοδος",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Αίτημα ονόματος",
|
"name": "Αίτημα ονόματος",
|
||||||
"new": "Νέο Αίτημα",
|
"new": "Νέο Αίτημα",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "Προβολή των links μου"
|
"view_my_links": "Προβολή των links μου"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Σώμα απόκρισης",
|
"body": "Σώμα απόκρισης",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Κεφαλίδες",
|
"headers": "Κεφαλίδες",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Κατάσταση",
|
"status": "Κατάσταση",
|
||||||
"time": "χρόνος",
|
"time": "χρόνος",
|
||||||
"title": "Απάντηση",
|
"title": "Απάντηση",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "περιμένοντας τη σύνδεση",
|
"waiting_for_connection": "περιμένοντας τη σύνδεση",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Σώμα",
|
"body": "Σώμα",
|
||||||
"collections": "Συλλογές",
|
"collections": "Συλλογές",
|
||||||
"documentation": "Τεκμηρίωση",
|
"documentation": "Τεκμηρίωση",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Κεφαλίδες",
|
"headers": "Κεφαλίδες",
|
||||||
"history": "Ιστορία",
|
"history": "Ιστορία",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Το Email δεν ταιριάζει με τις λεπτομέριες του προφιλ σας. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
"email_do_not_match": "Το Email δεν ταιριάζει με τις λεπτομέριες του προφιλ σας. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||||
"exit": "Έξοδος από την ομάδα",
|
"exit": "Έξοδος από την ομάδα",
|
||||||
"exit_disabled": "Μόνο ο ιδιοκτήτης δεν μπορεί να αποχωρήσει από την ομάδα",
|
"exit_disabled": "Μόνο ο ιδιοκτήτης δεν μπορεί να αποχωρήσει από την ομάδα",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Η μορφή ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη",
|
"invalid_email_format": "Η μορφή ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη",
|
||||||
"invalid_id": "Μή εγκυρο αναγνωριστικό ομάδας. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
"invalid_id": "Μή εγκυρο αναγνωριστικό ομάδας. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||||
"invalid_invite_link": "Μη έγκυρος σύνδεσμος πρόσκλησης",
|
"invalid_invite_link": "Μη έγκυρος σύνδεσμος πρόσκλησης",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Ο χρήστης καταργήθηκε",
|
"member_removed": "Ο χρήστης καταργήθηκε",
|
||||||
"member_role_updated": "Οι ρόλοι των χρηστών ενημερώθηκαν",
|
"member_role_updated": "Οι ρόλοι των χρηστών ενημερώθηκαν",
|
||||||
"members": "Μέλη",
|
"members": "Μέλη",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Το όνομα της ομάδας πρέπει να έχει τουλάχιστον 6 χαρακτήρες",
|
"name_length_insufficient": "Το όνομα της ομάδας πρέπει να έχει τουλάχιστον 6 χαρακτήρες",
|
||||||
"name_updated": "Το όνομα ομάδας ανανεώθηκε",
|
"name_updated": "Το όνομα ομάδας ανανεώθηκε",
|
||||||
"new": "Νέα Ομάδα",
|
"new": "Νέα Ομάδα",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Η νέα μου ομάδα",
|
"new_name": "Η νέα μου ομάδα",
|
||||||
"no_access": "Δεν έχετε πρόσβαση επεξεργασίας σε αυτές τις συλλογές",
|
"no_access": "Δεν έχετε πρόσβαση επεξεργασίας σε αυτές τις συλλογές",
|
||||||
"no_invite_found": "Δέν βρέθηκε πρόσκληση. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
"no_invite_found": "Δέν βρέθηκε πρόσκληση. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Η ομάδα δεν βρέθηκε. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
"not_found": "Η ομάδα δεν βρέθηκε. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||||
"not_valid_viewer": "Δεν είστε έγκυρος viewer. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
"not_valid_viewer": "Δεν είστε έγκυρος viewer. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Εκκρεμης προσκλήσεις",
|
"pending_invites": "Εκκρεμης προσκλήσεις",
|
||||||
"permissions": "Άδειες",
|
"permissions": "Άδειες",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Η ομάδα σώθηκε",
|
"saved": "Η ομάδα σώθηκε",
|
||||||
"select_a_team": "Επιλογή ομάδας",
|
"select_a_team": "Επιλογή ομάδας",
|
||||||
"title": "Της ομάδας",
|
"title": "Της ομάδας",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Μήνυμα",
|
"message": "Μήνυμα",
|
||||||
"protocols": "Πρωτόκολλα",
|
"protocols": "Πρωτόκολλα",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"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",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
@@ -138,7 +139,6 @@
|
|||||||
},
|
},
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"exit_team": "Are you sure you want to leave this team?",
|
"exit_team": "Are you sure you want to leave this team?",
|
||||||
"save_unsaved_tab": "Do you want to save changes made in this tab ?",
|
|
||||||
"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?",
|
||||||
"remove_environment": "Are you sure you want to permanently delete this environment?",
|
"remove_environment": "Are you sure you want to permanently delete this environment?",
|
||||||
@@ -148,8 +148,14 @@
|
|||||||
"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?",
|
||||||
"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": {
|
||||||
|
"set_environment_variable": "Set as variable",
|
||||||
|
"add_parameter": "Add to parameter",
|
||||||
|
"open_link_in_new_tab": "Open link in new tab"
|
||||||
|
},
|
||||||
"count": {
|
"count": {
|
||||||
"header": "Header {count}",
|
"header": "Header {count}",
|
||||||
"message": "Message {count}",
|
"message": "Message {count}",
|
||||||
@@ -173,6 +179,7 @@
|
|||||||
"folder": "Folder is empty",
|
"folder": "Folder is empty",
|
||||||
"headers": "This request does not have any headers",
|
"headers": "This request does not have any headers",
|
||||||
"history": "History is empty",
|
"history": "History is empty",
|
||||||
|
"history_suggestions": "History does not have any matching entries",
|
||||||
"invites": "Invite list is empty",
|
"invites": "Invite list is empty",
|
||||||
"members": "Team is empty",
|
"members": "Team is empty",
|
||||||
"parameters": "This request does not have any parameters",
|
"parameters": "This request does not have any parameters",
|
||||||
@@ -193,16 +200,23 @@
|
|||||||
"created": "Environment created",
|
"created": "Environment created",
|
||||||
"deleted": "Environment deletion",
|
"deleted": "Environment deletion",
|
||||||
"edit": "Edit Environment",
|
"edit": "Edit Environment",
|
||||||
|
"global": "Global",
|
||||||
"invalid_name": "Please provide a name for the environment",
|
"invalid_name": "Please provide a name for the environment",
|
||||||
"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 Environment",
|
"new": "New Environment",
|
||||||
"no_environment": "No 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.",
|
||||||
|
"replace_with_variable": "Replace with variable",
|
||||||
|
"scope": "Scope",
|
||||||
"select": "Select environment",
|
"select": "Select environment",
|
||||||
|
"set_as_environment": "Set as environment",
|
||||||
"team_environments": "Team Environments",
|
"team_environments": "Team Environments",
|
||||||
"title": "Environments",
|
"title": "Environments",
|
||||||
"updated": "Environment updated",
|
"updated": "Environment updated",
|
||||||
|
"value": "Value",
|
||||||
|
"variable": "Variable",
|
||||||
"variable_list": "Variable List"
|
"variable_list": "Variable List"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
@@ -316,9 +330,9 @@
|
|||||||
"zen_mode": "Zen mode"
|
"zen_mode": "Zen mode"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Collections",
|
"collections": "Collections",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"close_unsaved_tab": "Close Unsaved Tab ?",
|
|
||||||
"edit_request": "Edit Request",
|
"edit_request": "Edit Request",
|
||||||
"import_export": "Import / Export"
|
"import_export": "Import / Export"
|
||||||
},
|
},
|
||||||
@@ -432,6 +446,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Response Body",
|
"body": "Response Body",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Headers",
|
"headers": "Headers",
|
||||||
@@ -445,6 +460,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Time",
|
"time": "Time",
|
||||||
"title": "Response",
|
"title": "Response",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "waiting for connection",
|
"waiting_for_connection": "waiting for connection",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -580,6 +596,11 @@
|
|||||||
"log": "Log",
|
"log": "Log",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
|
"spotlight": {
|
||||||
|
"section": {
|
||||||
|
"user": "User"
|
||||||
|
}
|
||||||
|
},
|
||||||
"sse": {
|
"sse": {
|
||||||
"event_type": "Event type",
|
"event_type": "Event type",
|
||||||
"log": "Log",
|
"log": "Log",
|
||||||
@@ -664,9 +685,9 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Exit Team",
|
"exit": "Exit Team",
|
||||||
"exit_disabled": "Only owner cannot exit the team",
|
"exit_disabled": "Only owner cannot exit the team",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Email format is invalid",
|
"invalid_email_format": "Email format is invalid",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_coll_id": "Invalid collection ID",
|
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
"invalid_invite_link_description": "The link you followed is invalid. Contact your team owner.",
|
"invalid_invite_link_description": "The link you followed is invalid. Contact your team owner.",
|
||||||
"invalid_member_permission": "Please provide a valid permission to the team member",
|
"invalid_member_permission": "Please provide a valid permission to the team member",
|
||||||
|
|||||||
@@ -1,43 +1,44 @@
|
|||||||
{
|
{
|
||||||
"action": {
|
"action": {
|
||||||
"autoscroll": "Autoscroll",
|
"autoscroll": "Desplazamiento automático",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"choose_file": "Seleccionar archivo",
|
"choose_file": "Seleccionar archivo",
|
||||||
"clear": "Limpiar",
|
"clear": "Limpiar",
|
||||||
"clear_all": "Limpiar todo",
|
"clear_all": "Limpiar todo",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
"connect": "Conectar",
|
"connect": "Conectar",
|
||||||
"connecting": "Connecting",
|
"connecting": "Conectando",
|
||||||
"copy": "Copiar",
|
"copy": "Copiar",
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"disconnect": "Desconectar",
|
"disconnect": "Desconectar",
|
||||||
"dismiss": "Descartar",
|
"dismiss": "Descartar",
|
||||||
"dont_save": "Don't save",
|
"dont_save": "No guardar",
|
||||||
"download_file": "Descargar archivo",
|
"download_file": "Descargar archivo",
|
||||||
"drag_to_reorder": "Arrastrar para reordenar",
|
"drag_to_reorder": "Arrastrar para reordenar",
|
||||||
"duplicate": "Duplicar",
|
"duplicate": "Duplicar",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"filter": "Filter",
|
"filter": "Filtrar",
|
||||||
"go_back": "Volver",
|
"go_back": "Volver",
|
||||||
"group_by": "Group by",
|
"go_forward": "Adelante",
|
||||||
|
"group_by": "Agrupar por",
|
||||||
"label": "Etiqueta",
|
"label": "Etiqueta",
|
||||||
"learn_more": "Aprender más",
|
"learn_more": "Aprender más",
|
||||||
"less": "Menos",
|
"less": "Menos",
|
||||||
"more": "Más",
|
"more": "Más",
|
||||||
"new": "Nuevo",
|
"new": "Nuevo",
|
||||||
"no": "No",
|
"no": "No",
|
||||||
"open_workspace": "Open workspace",
|
"open_workspace": "Abrir espacio de trabajo",
|
||||||
"paste": "Pegar",
|
"paste": "Pegar",
|
||||||
"prettify": "Embellecer",
|
"prettify": "Embellecer",
|
||||||
"remove": "Eliminar",
|
"remove": "Eliminar",
|
||||||
"restore": "Restaurar",
|
"restore": "Restaurar",
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"scroll_to_bottom": "Scroll to bottom",
|
"scroll_to_bottom": "Desplazar hacia abajo",
|
||||||
"scroll_to_top": "Scroll to top",
|
"scroll_to_top": "Desplazar hacia arriba",
|
||||||
"search": "Buscar",
|
"search": "Buscar",
|
||||||
"send": "Enviar",
|
"send": "Enviar",
|
||||||
"start": "Comenzar",
|
"start": "Comenzar",
|
||||||
"starting": "Starting",
|
"starting": "Iniciando",
|
||||||
"stop": "Detener",
|
"stop": "Detener",
|
||||||
"to_close": "para cerrar",
|
"to_close": "para cerrar",
|
||||||
"to_navigate": "para navegar",
|
"to_navigate": "para navegar",
|
||||||
@@ -55,16 +56,16 @@
|
|||||||
"chat_with_us": "Habla con nosotros",
|
"chat_with_us": "Habla con nosotros",
|
||||||
"contact_us": "Contáctanos",
|
"contact_us": "Contáctanos",
|
||||||
"copy": "Copiar",
|
"copy": "Copiar",
|
||||||
"copy_user_id": "Copy User Auth Token",
|
"copy_user_id": "Copiar token de autenticación de usuario",
|
||||||
"developer_option": "Developer options",
|
"developer_option": "Opciones para desarrolladores",
|
||||||
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
|
"developer_option_description": "Herramientas para desarrolladores que ayudan en el desarrollo y mantenimiento de Hoppscotch.",
|
||||||
"discord": "Discord",
|
"discord": "Discord",
|
||||||
"documentation": "Documentación",
|
"documentation": "Documentación",
|
||||||
"github": "GitHub",
|
"github": "GitHub",
|
||||||
"help": "Ayuda y comentarios",
|
"help": "Ayuda y comentarios",
|
||||||
"home": "Inicio",
|
"home": "Inicio",
|
||||||
"invite": "Invitar",
|
"invite": "Invitar",
|
||||||
"invite_description": "En Hoppscotch, diseñamos una interfaz simple e intuitiva para crear y administrar sus APIs. Hoppscotch es una herramienta que le ayuda a crear, probar, documentar y compartir sus APIs.",
|
"invite_description": "En Hoppscotch, diseñamos una interfaz simple e intuitiva para crear y administrar tus APIs. Hoppscotch es una herramienta que le ayuda a crear, probar, documentar y compartir tus APIs.",
|
||||||
"invite_your_friends": "Invita a tus amigos",
|
"invite_your_friends": "Invita a tus amigos",
|
||||||
"join_discord_community": "Únete a nuestra comunidad Discord",
|
"join_discord_community": "Únete a nuestra comunidad Discord",
|
||||||
"keyboard_shortcuts": "Atajos de teclado",
|
"keyboard_shortcuts": "Atajos de teclado",
|
||||||
@@ -78,7 +79,7 @@
|
|||||||
"shortcuts": "Atajos",
|
"shortcuts": "Atajos",
|
||||||
"spotlight": "Destacar",
|
"spotlight": "Destacar",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"status_description": "Check the status of the website",
|
"status_description": "Comprobar el estado del sitio web",
|
||||||
"terms_and_privacy": "Términos y privacidad",
|
"terms_and_privacy": "Términos y privacidad",
|
||||||
"twitter": "Twitter",
|
"twitter": "Twitter",
|
||||||
"type_a_command_search": "Escribe un comando o buscar algo…",
|
"type_a_command_search": "Escribe un comando o buscar algo…",
|
||||||
@@ -117,14 +118,18 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Colección creada",
|
"created": "Colección creada",
|
||||||
|
"different_parent": "No se puede reordenar la colección con un padre diferente",
|
||||||
"edit": "Editar colección",
|
"edit": "Editar colección",
|
||||||
"invalid_name": "Proporciona un nombre válido para la colección.",
|
"invalid_name": "Proporciona un nombre válido para la colección.",
|
||||||
|
"invalid_root_move": "La colección ya está en la raíz",
|
||||||
|
"moved": "Movido con éxito",
|
||||||
"my_collections": "Mis colecciones",
|
"my_collections": "Mis colecciones",
|
||||||
"name": "Mi nueva colección",
|
"name": "Mi nueva colección",
|
||||||
"name_length_insufficient": "El nombre de la colección debe tener al menos 3 caracteres",
|
"name_length_insufficient": "El nombre de la colección debe tener al menos 3 caracteres",
|
||||||
"new": "Nueva colección",
|
"new": "Nueva colección",
|
||||||
|
"order_changed": "Orden de colección actualizada",
|
||||||
"renamed": "Colección renombrada",
|
"renamed": "Colección renombrada",
|
||||||
"request_in_use": "Petición en uso",
|
"request_in_use": "Solicitud en uso",
|
||||||
"save_as": "Guardar como",
|
"save_as": "Guardar como",
|
||||||
"select": "Seleccionar colección",
|
"select": "Seleccionar colección",
|
||||||
"select_location": "Seleccionar ubicación",
|
"select_location": "Seleccionar ubicación",
|
||||||
@@ -133,16 +138,17 @@
|
|||||||
},
|
},
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"exit_team": "¿Estás seguro de que quieres dejar este equipo?",
|
"exit_team": "¿Estás seguro de que quieres dejar este equipo?",
|
||||||
"logout": "¿Está seguro de que desea cerrar la sesión?",
|
"logout": "¿Estás seguro de que deseas cerrar la sesión?",
|
||||||
"remove_collection": "¿Está seguro de que desea eliminar esta colección de forma permanente?",
|
"remove_collection": "¿Estás seguro de que deseas eliminar esta colección de forma permanente?",
|
||||||
"remove_environment": "¿Está seguro de que desea eliminar este entorno de forma permanente?",
|
"remove_environment": "¿Estás seguro de que deseas eliminar este entorno de forma permanente?",
|
||||||
"remove_folder": "¿Está seguro de que desea eliminar esta carpeta de forma permanente?",
|
"remove_folder": "¿Estás seguro de que deseas eliminar esta carpeta de forma permanente?",
|
||||||
"remove_history": "¿Está seguro de que desea eliminar todo el historial de forma permanente?",
|
"remove_history": "¿Estás seguro de que deseas eliminar todo el historial de forma permanente?",
|
||||||
"remove_request": "¿Está seguro de que desea eliminar esta petición de forma permanente?",
|
"remove_request": "¿Estás seguro de que deseas eliminar esta solicitud de forma permanente?",
|
||||||
"remove_team": "¿Está seguro de que desea eliminar este equipo?",
|
"remove_team": "¿Estás seguro de que deseas eliminar este equipo?",
|
||||||
"remove_telemetry": "¿Está seguro de que desea darse de baja de la telemetría?",
|
"remove_telemetry": "¿Estás seguro de que deseas darse de baja de la telemetría?",
|
||||||
"request_change": "Are you sure you want to discard current request, unsaved changes will be lost.",
|
"request_change": "¿Estás seguro de que deseas descartar la solicitud actual, los cambios no guardados se perderán.",
|
||||||
"sync": "¿Está seguro de que desea sincronizar este espacio de trabajo?"
|
"save_unsaved_tab": "¿Deseas guardar los cambios realizados en esta pestaña?",
|
||||||
|
"sync": "¿Estás seguro de que deseas sincronizar este espacio de trabajo?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
"header": "Encabezado {count}",
|
"header": "Encabezado {count}",
|
||||||
@@ -157,28 +163,28 @@
|
|||||||
"generate_message": "Importar cualquier colección de Hoppscotch para generar documentación de la API sobre la marcha."
|
"generate_message": "Importar cualquier colección de Hoppscotch para generar documentación de la API sobre la marcha."
|
||||||
},
|
},
|
||||||
"empty": {
|
"empty": {
|
||||||
"authorization": "Esta petición no utiliza ninguna autorización.",
|
"authorization": "Esta solicitud no utiliza ninguna autorización.",
|
||||||
"body": "Esta petición no tiene cuerpo",
|
"body": "Esta solicitud no tiene cuerpo",
|
||||||
"collection": "La colección está vacía",
|
"collection": "La colección está vacía",
|
||||||
"collections": "Las colecciones están vacías",
|
"collections": "Las colecciones están vacías",
|
||||||
"documentation": "Conectarse a un punto final de GraphQL para ver la documentación",
|
"documentation": "Conectarse a un punto final de GraphQL para ver la documentación",
|
||||||
"endpoint": "El punto final no puede estar vacío",
|
"endpoint": "El punto final no puede estar vacío",
|
||||||
"environments": "Los entornos están vacíos",
|
"environments": "Los entornos están vacíos",
|
||||||
"folder": "La carpeta está vacía",
|
"folder": "La carpeta está vacía",
|
||||||
"headers": "Esta petición no tiene encabezados",
|
"headers": "Esta solicitud no tiene encabezados",
|
||||||
"history": "El historial está vacío",
|
"history": "El historial está vacío",
|
||||||
"invites": "La lista de invitados está vacía",
|
"invites": "La lista de invitados está vacía",
|
||||||
"members": "El equipo está vacío",
|
"members": "El equipo está vacío",
|
||||||
"parameters": "Esta petición no tiene ningún parámetro",
|
"parameters": "Esta solicitud no tiene ningún parámetro",
|
||||||
"pending_invites": "No hay invitaciones pendientes para este equipo",
|
"pending_invites": "No hay invitaciones pendientes para este equipo",
|
||||||
"profile": "Iniciar sesión para ver tu perfil",
|
"profile": "Iniciar sesión para ver tu perfil",
|
||||||
"protocols": "Los protocolos están vacíos",
|
"protocols": "Los protocolos están vacíos",
|
||||||
"schema": "Conectarse a un punto final de GraphQL",
|
"schema": "Conectarse a un punto final de GraphQL",
|
||||||
"shortcodes": "Los shortcodes están vacíos",
|
"shortcodes": "Aún no se han creado Shortcodes",
|
||||||
"subscription": "Subscriptions are empty",
|
"subscription": "Subscriptions are empty",
|
||||||
"team_name": "Nombre del equipo vacío",
|
"team_name": "Nombre del equipo vacío",
|
||||||
"teams": "Los equipos están vacíos",
|
"teams": "Los equipos están vacíos",
|
||||||
"tests": "No hay pruebas para esta petición"
|
"tests": "No hay pruebas para esta solicitud"
|
||||||
},
|
},
|
||||||
"environment": {
|
"environment": {
|
||||||
"add_to_global": "Añadir a Global",
|
"add_to_global": "Añadir a Global",
|
||||||
@@ -188,38 +194,38 @@
|
|||||||
"deleted": "Eliminar el entorno",
|
"deleted": "Eliminar el entorno",
|
||||||
"edit": "Editar entorno",
|
"edit": "Editar entorno",
|
||||||
"invalid_name": "Proporciona un nombre válido para el entorno.",
|
"invalid_name": "Proporciona un nombre válido para el entorno.",
|
||||||
"my_environments": "My Environments",
|
"my_environments": "Mis entornos",
|
||||||
"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_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.",
|
||||||
"select": "Seleccionar entorno",
|
"select": "Seleccionar entorno",
|
||||||
"team_environments": "Team Environments",
|
"team_environments": "Entornos de trabajo en equipo",
|
||||||
"title": "Entornos",
|
"title": "Entornos",
|
||||||
"updated": "Actualización del entorno",
|
"updated": "Entorno actualizado",
|
||||||
"variable_list": "Lista de variables"
|
"variable_list": "Lista de variables"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"browser_support_sse": "Este navegador no parece ser compatible con los eventos enviados por el servidor.",
|
"browser_support_sse": "Este navegador no parece ser compatible con los eventos enviados por el servidor.",
|
||||||
"check_console_details": "Consulta el registro de la consola para obtener más detalles.",
|
"check_console_details": "Consulta el registro de la consola para obtener más detalles.",
|
||||||
"curl_invalid_format": "cURL no está formateado correctamente",
|
"curl_invalid_format": "cURL no está formateado correctamente",
|
||||||
"danger_zone": "Danger zone",
|
"danger_zone": "Zona de peligro",
|
||||||
"delete_account": "Your account is currently an owner in these teams:",
|
"delete_account": "Tu cuenta es actualmente propietaria en estos equipos:",
|
||||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
"delete_account_description": "Para poder eliminar tu cuenta, debes darte de baja, transferir la propiedad o eliminar estos equipos.",
|
||||||
"empty_req_name": "Nombre de petición vacío",
|
"empty_req_name": "Nombre de solicitud vacío",
|
||||||
"f12_details": "(F12 para más detalles)",
|
"f12_details": "(F12 para más detalles)",
|
||||||
"gql_prettify_invalid_query": "No se puede aplicar embellecedor a una consulta no válida, resuelve los errores de sintaxis de la consulta y vuelve a intentarlo",
|
"gql_prettify_invalid_query": "No se puede aplicar embellecedor a una consulta no válida, resuelve los errores de sintaxis de la consulta y vuelve a intentarlo",
|
||||||
"incomplete_config_urls": "URLs de configuración incompletas",
|
"incomplete_config_urls": "URLs de configuración incompletas",
|
||||||
"incorrect_email": "Correo electrónico incorrecto",
|
"incorrect_email": "Correo electrónico incorrecto",
|
||||||
"invalid_link": "Enlace no válido",
|
"invalid_link": "Enlace no válido",
|
||||||
"invalid_link_description": "El enlace que has pulsado no es válido o ha caducado.",
|
"invalid_link_description": "El enlace que has pulsado no es válido o ha caducado.",
|
||||||
"json_parsing_failed": "Invalid JSON",
|
"json_parsing_failed": "JSON no válido",
|
||||||
"json_prettify_invalid_body": "No se puede aplicar embellecedor a un cuerpo inválido, resuelve errores de sintaxis json y vuelve a intentarlo",
|
"json_prettify_invalid_body": "No se puede aplicar embellecedor a un cuerpo inválido, resuelve errores de sintaxis json y vuelve a intentarlo",
|
||||||
"network_error": "Parece que hay un error de red. Por favor, inténtalo de nuevo.",
|
"network_error": "Parece que hay un error de red. Por favor, inténtalo de nuevo.",
|
||||||
"network_fail": "No se pudo enviar la petición",
|
"network_fail": "No se pudo enviar la solicitud",
|
||||||
"no_duration": "Sin duración",
|
"no_duration": "Sin duración",
|
||||||
"no_results_found": "No matches found",
|
"no_results_found": "No se han encontrado coincidencias",
|
||||||
"page_not_found": "This page could not be found",
|
"page_not_found": "No se ha podido encontrar esta página",
|
||||||
"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"
|
||||||
@@ -250,7 +256,7 @@
|
|||||||
"subscriptions": "Suscripciones"
|
"subscriptions": "Suscripciones"
|
||||||
},
|
},
|
||||||
"group": {
|
"group": {
|
||||||
"time": "Time",
|
"time": "Tiempo",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@@ -259,19 +265,19 @@
|
|||||||
"save_workspace": "Guardar mi espacio de trabajo"
|
"save_workspace": "Guardar mi espacio de trabajo"
|
||||||
},
|
},
|
||||||
"helpers": {
|
"helpers": {
|
||||||
"authorization": "El encabezado de autorización se generará automáticamente cuando se envía la petición.",
|
"authorization": "El encabezado de autorización se generará automáticamente cuando se envía la solicitud.",
|
||||||
"generate_documentation_first": "Generar la documentación primero",
|
"generate_documentation_first": "Generar la documentación primero",
|
||||||
"network_fail": "No se puede acceder a la API. Comprueba tu conexión de red y vuelve a intentarlo.",
|
"network_fail": "No se puede acceder a la API. Comprueba tu conexión de red y vuelve a intentarlo.",
|
||||||
"offline": "Parece estar desconectado. Es posible que los datos de este espacio de trabajo no estén actualizados.",
|
"offline": "Parece estar desconectado. Es posible que los datos de este espacio de trabajo no estén actualizados.",
|
||||||
"offline_short": "Pareces estar desconectado.",
|
"offline_short": "Pareces estar desconectado.",
|
||||||
"post_request_tests": "Los scripts de prueba están escritos en JavaScript y se ejecutan después de recibir la respuesta.",
|
"post_request_tests": "Los scripts de prueba están escritos en JavaScript y se ejecutan después de recibir la respuesta.",
|
||||||
"pre_request_script": "Los scripts previos a la petición están escritos en JavaScript y se ejecutan antes de que se envíe la petición.",
|
"pre_request_script": "Los scripts previos a la solicitud están escritos en JavaScript y se ejecutan antes de que se envíe la solicitud.",
|
||||||
"script_fail": "Parece que hay un problema técnico en el script de solicitud previa. Comprueba el error a continuación y corrige el script en consecuencia.",
|
"script_fail": "Parece que hay un problema técnico en el script de solicitud previa. Comprueba el error a continuación y corrige el script en consecuencia.",
|
||||||
"test_script_fail": "Parece que hay un error con el script de prueba. Por favor, corrige los errores y ejecute las pruebas de nuevo",
|
"test_script_fail": "Parece que hay un error con el script de prueba. Por favor, corrige los errores y ejecute las pruebas de nuevo",
|
||||||
"tests": "Escribir un script de prueba para automatizar la depuración."
|
"tests": "Escribir un script de prueba para automatizar la depuración."
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"collection": "Collapse Collection Panel",
|
"collection": "Colapsar el panel de colecciones",
|
||||||
"more": "Ocultar más",
|
"more": "Ocultar más",
|
||||||
"preview": "Ocultar vista previa",
|
"preview": "Ocultar vista previa",
|
||||||
"sidebar": "Ocultar barra lateral"
|
"sidebar": "Ocultar barra lateral"
|
||||||
@@ -302,39 +308,40 @@
|
|||||||
"title": "Importar"
|
"title": "Importar"
|
||||||
},
|
},
|
||||||
"layout": {
|
"layout": {
|
||||||
"collapse_collection": "Collapse or Expand Collections",
|
"collapse_collection": "Contraer o expandir colecciones",
|
||||||
"collapse_sidebar": "Collapse or Expand the sidebar",
|
"collapse_sidebar": "Contraer o expandir la barra lateral",
|
||||||
"column": "Disposición vertical",
|
"column": "Disposición vertical",
|
||||||
"name": "Layout",
|
"name": "Diseño",
|
||||||
"row": "Disposición horizontal",
|
"row": "Disposición horizontal",
|
||||||
"zen_mode": "Modo zen"
|
"zen_mode": "Modo zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "Tienes cambios sin guardar",
|
||||||
"collections": "Colecciones",
|
"collections": "Colecciones",
|
||||||
"confirm": "Confirmar",
|
"confirm": "Confirmar",
|
||||||
"edit_request": "Editar petición",
|
"edit_request": "Editar solicitud",
|
||||||
"import_export": "Importación y exportación"
|
"import_export": "Importación y exportación"
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"already_subscribed": "You are already subscribed to this topic.",
|
"already_subscribed": "Ya estás suscrito a este tema.",
|
||||||
"clean_session": "Clean Session",
|
"clean_session": "Borrar sesión",
|
||||||
"clear_input": "Clear input",
|
"clear_input": "Borrar entrada",
|
||||||
"clear_input_on_send": "Clear input on send",
|
"clear_input_on_send": "Borrar entrada al enviar",
|
||||||
"client_id": "Client ID",
|
"client_id": "Identificación del cliente",
|
||||||
"color": "Pick a color",
|
"color": "Elige un color",
|
||||||
"communication": "Comunicación",
|
"communication": "Comunicación",
|
||||||
"connection_config": "Connection Config",
|
"connection_config": "Configuración de conexión",
|
||||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
"connection_not_authorized": "Esta conexión MQTT no utiliza ninguna autenticación.",
|
||||||
"invalid_topic": "Please provide a topic for the subscription",
|
"invalid_topic": "Indica un tema para la suscripción",
|
||||||
"keep_alive": "Keep Alive",
|
"keep_alive": "Mantenerse vivo",
|
||||||
"log": "Registro",
|
"log": "Registro",
|
||||||
"lw_message": "Last-Will Message",
|
"lw_message": "Mensaje de última voluntad",
|
||||||
"lw_qos": "Last-Will QoS",
|
"lw_qos": "QoS de última voluntad",
|
||||||
"lw_retain": "Last-Will Retain",
|
"lw_retain": "Última voluntad",
|
||||||
"lw_topic": "Last-Will Topic",
|
"lw_topic": "Tema de última voluntad",
|
||||||
"message": "Mensaje",
|
"message": "Mensaje",
|
||||||
"new": "New Subscription",
|
"new": "Nueva suscripción",
|
||||||
"not_connected": "Please start a MQTT connection first.",
|
"not_connected": "Por favor, inicia primero una conexión MQTT.",
|
||||||
"publish": "Publicar",
|
"publish": "Publicar",
|
||||||
"qos": "QoS",
|
"qos": "QoS",
|
||||||
"ssl": "SSL",
|
"ssl": "SSL",
|
||||||
@@ -346,7 +353,7 @@
|
|||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"doc": "Docs",
|
"doc": "Documentación",
|
||||||
"graphql": "GraphQL",
|
"graphql": "GraphQL",
|
||||||
"profile": "Perfil",
|
"profile": "Perfil",
|
||||||
"realtime": "Tiempo real",
|
"realtime": "Tiempo real",
|
||||||
@@ -356,7 +363,7 @@
|
|||||||
"preRequest": {
|
"preRequest": {
|
||||||
"javascript_code": "Código JavaScript",
|
"javascript_code": "Código JavaScript",
|
||||||
"learn": "Leer documentación",
|
"learn": "Leer documentación",
|
||||||
"script": "Script previo a la petición",
|
"script": "Script previo a la solicitud",
|
||||||
"snippets": "Fragmentos"
|
"snippets": "Fragmentos"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
@@ -378,51 +385,56 @@
|
|||||||
"star": "Eliminar estrella"
|
"star": "Eliminar estrella"
|
||||||
},
|
},
|
||||||
"request": {
|
"request": {
|
||||||
"added": "Petición agregada",
|
"added": "Solicitud agregada",
|
||||||
"authorization": "Autorización",
|
"authorization": "Autorización",
|
||||||
"body": "Cuerpo de la petición",
|
"body": "Cuerpo de la solicitud",
|
||||||
"choose_language": "Seleccionar lenguaje",
|
"choose_language": "Seleccionar lenguaje",
|
||||||
"content_type": "Tipo de contenido",
|
"content_type": "Tipo de contenido",
|
||||||
"content_type_titles": {
|
"content_type_titles": {
|
||||||
"others": "Others",
|
"others": "Otros",
|
||||||
"structured": "Structured",
|
"structured": "Estructurado",
|
||||||
"text": "Text"
|
"text": "Texto"
|
||||||
},
|
},
|
||||||
"copy_link": "Copiar enlace",
|
"copy_link": "Copiar enlace",
|
||||||
|
"different_collection": "No se pueden reordenar solicitudes de diferentes colecciones",
|
||||||
|
"duplicated": "Solicitud duplicada",
|
||||||
"duration": "Duración",
|
"duration": "Duración",
|
||||||
"enter_curl": "Ingrese cURL",
|
"enter_curl": "Ingrese cURL",
|
||||||
"generate_code": "Generar código",
|
"generate_code": "Generar código",
|
||||||
"generated_code": "Código generado",
|
"generated_code": "Código generado",
|
||||||
"header_list": "Lista de encabezados",
|
"header_list": "Lista de encabezados",
|
||||||
"invalid_name": "Proporciona un nombre para la petición.",
|
"invalid_name": "Proporciona un nombre para la solicitud.",
|
||||||
"method": "Método",
|
"method": "Método",
|
||||||
"name": "Nombre de petición",
|
"moved": "Request moved",
|
||||||
"new": "New Request",
|
"name": "Nombre de solicitud",
|
||||||
"override": "Override",
|
"new": "Nueva solicitud",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"order_changed": "Orden de solicitudes actualizadas",
|
||||||
"overriden": "Overridden",
|
"override": "Anular",
|
||||||
|
"override_help": "Establecer <kbd>Content-Type</kbd> en las cabeceras",
|
||||||
|
"overriden": "Anulado",
|
||||||
"parameter_list": "Parámetros de consulta",
|
"parameter_list": "Parámetros de consulta",
|
||||||
"parameters": "Parámetros",
|
"parameters": "Parámetros",
|
||||||
"path": "Ruta",
|
"path": "Ruta",
|
||||||
"payload": "Carga útil",
|
"payload": "Carga útil",
|
||||||
"query": "Consulta",
|
"query": "Consulta",
|
||||||
"raw_body": "Cuerpo de petición sin procesar",
|
"raw_body": "Cuerpo de solicitud sin procesar",
|
||||||
"renamed": "Petición renombrada",
|
"renamed": "Solicitud renombrada",
|
||||||
"run": "Ejecutar",
|
"run": "Ejecutar",
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"save_as": "Guardar como",
|
"save_as": "Guardar como",
|
||||||
"saved": "Petición guardada",
|
"saved": "Solicitud guardada",
|
||||||
"share": "Compartir",
|
"share": "Compartir",
|
||||||
"share_description": "Share Hoppscotch with your friends",
|
"share_description": "Comparte Hoppscotch con tus amigos",
|
||||||
"title": "Petición",
|
"title": "Solicitud",
|
||||||
"type": "Tipo de petición",
|
"type": "Tipo de solicitud",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"variables": "Variables",
|
"variables": "Variables",
|
||||||
"view_my_links": "Ver mis enlaces"
|
"view_my_links": "Ver mis enlaces"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Cuerpo de respuesta",
|
"body": "Cuerpo de respuesta",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filtrar el cuerpo de la respuesta JSON (utiliza la sintaxis JSONPath)",
|
||||||
"headers": "Encabezados",
|
"headers": "Encabezados",
|
||||||
"html": "HTML",
|
"html": "HTML",
|
||||||
"image": "Imagen",
|
"image": "Imagen",
|
||||||
@@ -434,13 +446,14 @@
|
|||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"time": "Tiempo",
|
"time": "Tiempo",
|
||||||
"title": "Respuesta",
|
"title": "Respuesta",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "esperando la conexión",
|
"waiting_for_connection": "esperando la conexión",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"accent_color": "Color de acentuación",
|
"accent_color": "Color de acentuación",
|
||||||
"account": "Cuenta",
|
"account": "Cuenta",
|
||||||
"account_deleted": "Your account has been deleted",
|
"account_deleted": "Tu cuenta ha sido eliminada",
|
||||||
"account_description": "Personaliza la configuración de tu cuenta.",
|
"account_description": "Personaliza la configuración de tu cuenta.",
|
||||||
"account_email_description": "Tu dirección de correo electrónico principal.",
|
"account_email_description": "Tu dirección de correo electrónico principal.",
|
||||||
"account_name_description": "Este es tu nombre para mostrar.",
|
"account_name_description": "Este es tu nombre para mostrar.",
|
||||||
@@ -449,8 +462,8 @@
|
|||||||
"change_font_size": "Cambiar tamaño de fuente",
|
"change_font_size": "Cambiar tamaño de fuente",
|
||||||
"choose_language": "Elegir idioma",
|
"choose_language": "Elegir idioma",
|
||||||
"dark_mode": "Oscuro",
|
"dark_mode": "Oscuro",
|
||||||
"delete_account": "Delete account",
|
"delete_account": "Eliminar cuenta",
|
||||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
"delete_account_description": "Una vez que elimines tu cuenta, todos tus datos se borrarán permanentemente. Esta acción no se puede deshacer.",
|
||||||
"expand_navigation": "Expandir la navegación",
|
"expand_navigation": "Expandir la navegación",
|
||||||
"experiments": "Experimentos",
|
"experiments": "Experimentos",
|
||||||
"experiments_notice": "Esta es una colección de experimentos en los que estamos trabajando que podrían resultar útiles, divertidos, ambos o ninguno. No son definitivos y es posible que no sean estables, por lo que si sucede algo demasiado extraño, no se asuste. Solo apaga la maldita cosa. Fuera de bromas,",
|
"experiments_notice": "Esta es una colección de experimentos en los que estamos trabajando que podrían resultar útiles, divertidos, ambos o ninguno. No son definitivos y es posible que no sean estables, por lo que si sucede algo demasiado extraño, no se asuste. Solo apaga la maldita cosa. Fuera de bromas,",
|
||||||
@@ -469,7 +482,7 @@
|
|||||||
"light_mode": "Luz",
|
"light_mode": "Luz",
|
||||||
"official_proxy_hosting": "El proxy oficial está alojado en Hoppscotch.",
|
"official_proxy_hosting": "El proxy oficial está alojado en Hoppscotch.",
|
||||||
"profile": "Perfil",
|
"profile": "Perfil",
|
||||||
"profile_description": "Update your profile details",
|
"profile_description": "Actualiza los datos de tu perfil",
|
||||||
"profile_email": "Correo electrónico",
|
"profile_email": "Correo electrónico",
|
||||||
"profile_name": "Nombre de perfil",
|
"profile_name": "Nombre de perfil",
|
||||||
"proxy": "Proxy",
|
"proxy": "Proxy",
|
||||||
@@ -477,8 +490,8 @@
|
|||||||
"proxy_use_toggle": "Utilizar el middleware de proxy para enviar peticiones",
|
"proxy_use_toggle": "Utilizar el middleware de proxy para enviar peticiones",
|
||||||
"read_the": "Leer el",
|
"read_the": "Leer el",
|
||||||
"reset_default": "Restablecer a los predeterminados",
|
"reset_default": "Restablecer a los predeterminados",
|
||||||
"short_codes": "Short codes",
|
"short_codes": "Shortcodes",
|
||||||
"short_codes_description": "Short codes which were created by you.",
|
"short_codes_description": "Shortcodes creados por ti.",
|
||||||
"sidebar_on_left": "Barra lateral a la izquierda",
|
"sidebar_on_left": "Barra lateral a la izquierda",
|
||||||
"sync": "Sincronizar",
|
"sync": "Sincronizar",
|
||||||
"sync_collections": "Colecciones",
|
"sync_collections": "Colecciones",
|
||||||
@@ -492,15 +505,15 @@
|
|||||||
"theme_description": "Personaliza el tema de tu aplicación.",
|
"theme_description": "Personaliza el tema de tu aplicación.",
|
||||||
"use_experimental_url_bar": "Utilizar la barra de URL experimental con resaltado de entorno",
|
"use_experimental_url_bar": "Utilizar la barra de URL experimental con resaltado de entorno",
|
||||||
"user": "Usuario",
|
"user": "Usuario",
|
||||||
"verified_email": "Verified email",
|
"verified_email": "Correo electrónico verificado",
|
||||||
"verify_email": "Verificar correo electrónico"
|
"verify_email": "Verificar correo electrónico"
|
||||||
},
|
},
|
||||||
"shortcodes": {
|
"shortcodes": {
|
||||||
"actions": "Actions",
|
"actions": "Acciones",
|
||||||
"created_on": "Created on",
|
"created_on": "Creado el",
|
||||||
"deleted": "Shortcode deleted",
|
"deleted": "Código corto eliminado",
|
||||||
"method": "Method",
|
"method": "Método",
|
||||||
"not_found": "Shortcode not found",
|
"not_found": "Shortcode no encontrado",
|
||||||
"short_code": "Short code",
|
"short_code": "Short code",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
@@ -528,7 +541,7 @@
|
|||||||
"title": "Navegación"
|
"title": "Navegación"
|
||||||
},
|
},
|
||||||
"request": {
|
"request": {
|
||||||
"copy_request_link": "Copiar enlace de petición",
|
"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",
|
||||||
@@ -537,10 +550,10 @@
|
|||||||
"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",
|
||||||
"reset_request": "Petición de reinicio",
|
"reset_request": "Solicitud de reinicio",
|
||||||
"save_to_collections": "Guardar en colecciones",
|
"save_to_collections": "Guardar en colecciones",
|
||||||
"send_request": "Enviar petición",
|
"send_request": "Enviar solicitud",
|
||||||
"title": "Petición"
|
"title": "Solicitud"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
"copy": "Copiar la respuesta al portapapeles",
|
"copy": "Copiar la respuesta al portapapeles",
|
||||||
@@ -582,8 +595,8 @@
|
|||||||
"connected_to": "Conectado a {name}",
|
"connected_to": "Conectado a {name}",
|
||||||
"connecting_to": "Conectando con {name}...",
|
"connecting_to": "Conectando con {name}...",
|
||||||
"connection_error": "Failed to connect",
|
"connection_error": "Failed to connect",
|
||||||
"connection_failed": "Connection failed",
|
"connection_failed": "Error de conexión",
|
||||||
"connection_lost": "Connection lost",
|
"connection_lost": "Conexión perdida",
|
||||||
"copied_to_clipboard": "Copiado al portapapeles",
|
"copied_to_clipboard": "Copiado al portapapeles",
|
||||||
"deleted": "Eliminado",
|
"deleted": "Eliminado",
|
||||||
"deprecated": "OBSOLETO",
|
"deprecated": "OBSOLETO",
|
||||||
@@ -598,18 +611,18 @@
|
|||||||
"history_deleted": "Historial eliminado",
|
"history_deleted": "Historial eliminado",
|
||||||
"linewrap": "Envolver líneas",
|
"linewrap": "Envolver líneas",
|
||||||
"loading": "Cargando...",
|
"loading": "Cargando...",
|
||||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
"message_received": "Mensaje: {mensaje} llegó sobre el tema: {topic}",
|
||||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
"mqtt_subscription_failed": "Algo ha ido mal al suscribirse al tema: {topic}",
|
||||||
"none": "Ninguno",
|
"none": "Ninguno",
|
||||||
"nothing_found": "Nada encontrado para",
|
"nothing_found": "Nada encontrado para",
|
||||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
"published_error": "Algo ha ido mal al publicar el mensaje: {topic} al tema: {message}",
|
||||||
"published_message": "Published message: {message} to topic: {topic}",
|
"published_message": "Mensaje publicado: {mensaje} al tema: {topic}",
|
||||||
"reconnection_error": "Failed to reconnect",
|
"reconnection_error": "Fallo en la reconexión",
|
||||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
"subscribed_failed": "Error al suscribirse al tema: {topic}",
|
||||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
"subscribed_success": "Suscrito con éxito al tema: {topic}",
|
||||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
"unsubscribed_failed": "Error al darse de baja del tema: {topic}",
|
||||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
"unsubscribed_success": "Se ha cancelado la suscripción al tema: {topic}",
|
||||||
"waiting_send_request": "Esperando para enviar petición"
|
"waiting_send_request": "Esperando para enviar solicitud"
|
||||||
},
|
},
|
||||||
"support": {
|
"support": {
|
||||||
"changelog": "Leer más sobre los últimos lanzamientos",
|
"changelog": "Leer más sobre los últimos lanzamientos",
|
||||||
@@ -628,11 +641,12 @@
|
|||||||
"body": "Cuerpo",
|
"body": "Cuerpo",
|
||||||
"collections": "Colecciones",
|
"collections": "Colecciones",
|
||||||
"documentation": "Documentación",
|
"documentation": "Documentación",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Encabezados",
|
"headers": "Encabezados",
|
||||||
"history": "Historial",
|
"history": "Historial",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
"parameters": "Parámetros",
|
"parameters": "Parámetros",
|
||||||
"pre_request_script": "Script previo a la petición",
|
"pre_request_script": "Script previo a la solicitud",
|
||||||
"queries": "Consultas",
|
"queries": "Consultas",
|
||||||
"query": "Consulta",
|
"query": "Consulta",
|
||||||
"schema": "Esquema",
|
"schema": "Esquema",
|
||||||
@@ -652,8 +666,9 @@
|
|||||||
"email_do_not_match": "El correo electrónico no coincide con los datos de tu cuenta. Ponte en contacto con el propietario de tu equipo.",
|
"email_do_not_match": "El correo electrónico no coincide con los datos de tu cuenta. Ponte en contacto con el propietario de tu equipo.",
|
||||||
"exit": "Salir del equipo",
|
"exit": "Salir del equipo",
|
||||||
"exit_disabled": "Solo el propietario puede salir del equipo",
|
"exit_disabled": "Solo el propietario puede salir del equipo",
|
||||||
|
"invalid_coll_id": "Identificador de colección no válido",
|
||||||
"invalid_email_format": "El formato de correo electrónico no es válido",
|
"invalid_email_format": "El formato de correo electrónico no es válido",
|
||||||
"invalid_id": "ID de equipo inválido. Ponte en contacto con el propietario de tu equipo.",
|
"invalid_id": "Identificador de equipo inválido. Ponte en contacto con el propietario de tu equipo.",
|
||||||
"invalid_invite_link": "Enlace de invitación inválido",
|
"invalid_invite_link": "Enlace de invitación inválido",
|
||||||
"invalid_invite_link_description": "El enlace que has seguido no es válido. Ponte en contacto con el propietario de tu equipo.",
|
"invalid_invite_link_description": "El enlace que has seguido no es válido. Ponte en contacto con el propietario de tu equipo.",
|
||||||
"invalid_member_permission": "Proporcionar un permiso válido al miembro del equipo",
|
"invalid_member_permission": "Proporcionar un permiso válido al miembro del equipo",
|
||||||
@@ -670,11 +685,12 @@
|
|||||||
"login_to_continue": "Iniciar sesión para continuar",
|
"login_to_continue": "Iniciar sesión para continuar",
|
||||||
"login_to_continue_description": "Tienes que estar conectado para unirte a un equipo.",
|
"login_to_continue_description": "Tienes que estar conectado para unirte a un equipo.",
|
||||||
"logout_and_try_again": "Cerrar la sesión e iniciar sesión con otra cuenta",
|
"logout_and_try_again": "Cerrar la sesión e iniciar sesión con otra cuenta",
|
||||||
"member_has_invite": "Este ID de correo electrónico ya tiene una invitación. Ponte en contacto con el propietario de tu equipo.",
|
"member_has_invite": "Este Identificador de correo electrónico ya tiene una invitación. Ponte en contacto con el propietario de tu equipo.",
|
||||||
"member_not_found": "Miembro no encontrado. Ponte en contacto con el propietario de tu equipo.",
|
"member_not_found": "Miembro no encontrado. Ponte en contacto con el propietario de tu equipo.",
|
||||||
"member_removed": "Usuario eliminado",
|
"member_removed": "Usuario eliminado",
|
||||||
"member_role_updated": "Funciones de usuario actualizadas",
|
"member_role_updated": "Funciones de usuario actualizadas",
|
||||||
"members": "Miembros",
|
"members": "Miembros",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "El nombre del equipo debe tener al menos 6 caracteres",
|
"name_length_insufficient": "El nombre del equipo debe tener al menos 6 caracteres",
|
||||||
"name_updated": "Nombre de equipo actualizado",
|
"name_updated": "Nombre de equipo actualizado",
|
||||||
"new": "Nuevo equipo",
|
"new": "Nuevo equipo",
|
||||||
@@ -682,20 +698,23 @@
|
|||||||
"new_name": "Mi nuevo equipo",
|
"new_name": "Mi nuevo equipo",
|
||||||
"no_access": "No tienes acceso de edición a estas colecciones.",
|
"no_access": "No tienes acceso de edición a estas colecciones.",
|
||||||
"no_invite_found": "No se ha encontrado la invitación. Ponte en contacto con el propietario de tu equipo.",
|
"no_invite_found": "No se ha encontrado la invitación. Ponte en contacto con el propietario de tu equipo.",
|
||||||
|
"no_request_found": "Solicitud no encontrada.",
|
||||||
"not_found": "Equipo no encontrado. Ponte en contacto con el propietario de tu equipo.",
|
"not_found": "Equipo no encontrado. Ponte en contacto con el propietario de tu equipo.",
|
||||||
"not_valid_viewer": "No eres un espectador válido. Ponte en contacto con el propietario de tu equipo.",
|
"not_valid_viewer": "No eres un espectador válido. Ponte en contacto con el propietario de tu equipo.",
|
||||||
|
"parent_coll_move": "No se puede mover la colección a una colección hija",
|
||||||
"pending_invites": "Invitaciones pendientes",
|
"pending_invites": "Invitaciones pendientes",
|
||||||
"permissions": "Permisos",
|
"permissions": "Permisos",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Equipo guardado",
|
"saved": "Equipo guardado",
|
||||||
"select_a_team": "Seleccionar un equipo",
|
"select_a_team": "Seleccionar un equipo",
|
||||||
"title": "Equipos",
|
"title": "Equipos",
|
||||||
"we_sent_invite_link": "¡Hemos enviado un enlace de invitación a todos los invitados!",
|
"we_sent_invite_link": "¡Hemos enviado un enlace de invitación a todos los invitados!",
|
||||||
"we_sent_invite_link_description": "Pide a todos los invitados que revisen su bandeja de entrada. Haz clic en el enlace para unirse al equipo."
|
"we_sent_invite_link_description": "Pide a todos los invitados que revisen tu bandeja de entrada. Haz clic en el enlace para unirse al equipo."
|
||||||
},
|
},
|
||||||
"team_environment": {
|
"team_environment": {
|
||||||
"deleted": "Environment Deleted",
|
"deleted": "Entorno eliminado",
|
||||||
"duplicate": "Environment Duplicated",
|
"duplicate": "Entorno duplicado",
|
||||||
"not_found": "Environment not found."
|
"not_found": "Entorno no encontrado."
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"failed": "prueba fallida",
|
"failed": "prueba fallida",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Mensaje",
|
"message": "Mensaje",
|
||||||
"protocols": "Protocolos",
|
"protocols": "Protocolos",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Cambiar el espacio de trabajo",
|
||||||
|
"personal": "Mi espacio de trabajo",
|
||||||
|
"team": "Espacio de trabajo en equipo",
|
||||||
|
"title": "Espacios de trabajo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Muokata",
|
"edit": "Muokata",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Mene takaisin",
|
"go_back": "Mene takaisin",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiketti",
|
"label": "Etiketti",
|
||||||
"learn_more": "Lue lisää",
|
"learn_more": "Lue lisää",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Kokoelma luotu",
|
"created": "Kokoelma luotu",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Muokkaa kokoelmaa",
|
"edit": "Muokkaa kokoelmaa",
|
||||||
"invalid_name": "Anna kokoelmalle kelvollinen nimi",
|
"invalid_name": "Anna kokoelmalle kelvollinen nimi",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Omat kokoelmat",
|
"my_collections": "Omat kokoelmat",
|
||||||
"name": "Uusi kokoelmani",
|
"name": "Uusi kokoelmani",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Uusi kokoelma",
|
"new": "Uusi kokoelma",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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ä",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Haluatko varmasti poistaa tämän ryhmän?",
|
"remove_team": "Haluatko varmasti poistaa tämän ryhmän?",
|
||||||
"remove_telemetry": "Haluatko varmasti poistaa telemetrian käytöstä?",
|
"remove_telemetry": "Haluatko varmasti poistaa telemetrian käytöstä?",
|
||||||
"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?",
|
||||||
"sync": "Haluatko varmasti synkronoida tämän työtilan?"
|
"sync": "Haluatko varmasti synkronoida tämän työtilan?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen -tila"
|
"zen_mode": "Zen -tila"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Kokoelmat",
|
"collections": "Kokoelmat",
|
||||||
"confirm": "Vahvistaa",
|
"confirm": "Vahvistaa",
|
||||||
"edit_request": "Muokkaa pyyntöä",
|
"edit_request": "Muokkaa pyyntöä",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopioi linkki",
|
"copy_link": "Kopioi linkki",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Kesto",
|
"duration": "Kesto",
|
||||||
"enter_curl": "Kirjoita cURL",
|
"enter_curl": "Kirjoita cURL",
|
||||||
"generate_code": "Luo koodi",
|
"generate_code": "Luo koodi",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Otsikkoluettelo",
|
"header_list": "Otsikkoluettelo",
|
||||||
"invalid_name": "Anna pyynnölle nimi",
|
"invalid_name": "Anna pyynnölle nimi",
|
||||||
"method": "Menetelmä",
|
"method": "Menetelmä",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Pyynnön nimi",
|
"name": "Pyynnön nimi",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Vastauselin",
|
"body": "Vastauselin",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Otsikot",
|
"headers": "Otsikot",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
"time": "Aika",
|
"time": "Aika",
|
||||||
"title": "Vastaus",
|
"title": "Vastaus",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "yhteyttä odotellessa",
|
"waiting_for_connection": "yhteyttä odotellessa",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Runko",
|
"body": "Runko",
|
||||||
"collections": "Kokoelmat",
|
"collections": "Kokoelmat",
|
||||||
"documentation": "Dokumentointi",
|
"documentation": "Dokumentointi",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Otsikot",
|
"headers": "Otsikot",
|
||||||
"history": "Historia",
|
"history": "Historia",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Poistu tiimistä",
|
"exit": "Poistu tiimistä",
|
||||||
"exit_disabled": "Vain omistaja ei voi poistua tiimistä",
|
"exit_disabled": "Vain omistaja ei voi poistua tiimistä",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Sähköpostin muoto on virheellinen",
|
"invalid_email_format": "Sähköpostin muoto on virheellinen",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Käyttäjä poistettu",
|
"member_removed": "Käyttäjä poistettu",
|
||||||
"member_role_updated": "Käyttäjäroolit päivitetty",
|
"member_role_updated": "Käyttäjäroolit päivitetty",
|
||||||
"members": "Jäsenet",
|
"members": "Jäsenet",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Joukkueen nimen tulee olla vähintään 6 merkkiä pitkä",
|
"name_length_insufficient": "Joukkueen nimen tulee olla vähintään 6 merkkiä pitkä",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Uusi tiimi",
|
"new": "Uusi tiimi",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Uusi tiimini",
|
"new_name": "Uusi tiimini",
|
||||||
"no_access": "Sinulla ei ole muokkausoikeuksia näihin kokoelmiin",
|
"no_access": "Sinulla ei ole muokkausoikeuksia näihin kokoelmiin",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Käyttöoikeudet",
|
"permissions": "Käyttöoikeudet",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Joukkue tallennettu",
|
"saved": "Joukkue tallennettu",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Joukkueet",
|
"title": "Joukkueet",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Viesti",
|
"message": "Viesti",
|
||||||
"protocols": "Pöytäkirjat",
|
"protocols": "Pöytäkirjat",
|
||||||
"url": "URL -osoite"
|
"url": "URL -osoite"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Éditer",
|
"edit": "Éditer",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Retour",
|
"go_back": "Retour",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Étiqueter",
|
"label": "Étiqueter",
|
||||||
"learn_more": "En savoir plus",
|
"learn_more": "En savoir plus",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Collection créée",
|
"created": "Collection créée",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Modifier la collection",
|
"edit": "Modifier la collection",
|
||||||
"invalid_name": "Veuillez fournir un nom valide pour la collection",
|
"invalid_name": "Veuillez fournir un nom valide pour la collection",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Mes collections",
|
"my_collections": "Mes collections",
|
||||||
"name": "Ma nouvelle collection",
|
"name": "Ma nouvelle collection",
|
||||||
"name_length_insufficient": "Le nom de la collection doit comporter au moins 3 caractères",
|
"name_length_insufficient": "Le nom de la collection doit comporter au moins 3 caractères",
|
||||||
"new": "Nouvelle collection",
|
"new": "Nouvelle collection",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Voulez-vous vraiment supprimer cette équipe ?",
|
"remove_team": "Voulez-vous vraiment supprimer cette équipe ?",
|
||||||
"remove_telemetry": "Êtes-vous sûr de vouloir désactiver la télémétrie ?",
|
"remove_telemetry": "Êtes-vous sûr de vouloir désactiver la télémétrie ?",
|
||||||
"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?",
|
||||||
"sync": "Voulez-vous vraiment synchroniser cet espace de travail ?"
|
"sync": "Voulez-vous vraiment synchroniser cet espace de travail ?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Mode Zen"
|
"zen_mode": "Mode Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Collections",
|
"collections": "Collections",
|
||||||
"confirm": "Confirmer",
|
"confirm": "Confirmer",
|
||||||
"edit_request": "Modifier la requête",
|
"edit_request": "Modifier la requête",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Texte"
|
"text": "Texte"
|
||||||
},
|
},
|
||||||
"copy_link": "Copier le lien",
|
"copy_link": "Copier le lien",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Durée",
|
"duration": "Durée",
|
||||||
"enter_curl": "Entrer cURL",
|
"enter_curl": "Entrer cURL",
|
||||||
"generate_code": "Générer le code",
|
"generate_code": "Générer le code",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Liste des en-têtes",
|
"header_list": "Liste des en-têtes",
|
||||||
"invalid_name": "Veuillez fournir un nom pour la requête",
|
"invalid_name": "Veuillez fournir un nom pour la requête",
|
||||||
"method": "Méthode",
|
"method": "Méthode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Nom de la requête",
|
"name": "Nom de la requête",
|
||||||
"new": "Nouvelle requête",
|
"new": "Nouvelle requête",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Remplacer",
|
"override": "Remplacer",
|
||||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||||
"overriden": "Remplacé",
|
"overriden": "Remplacé",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "Voir mes liens"
|
"view_my_links": "Voir mes liens"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Corps de réponse",
|
"body": "Corps de réponse",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "En-têtes",
|
"headers": "En-têtes",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"time": "Temps",
|
"time": "Temps",
|
||||||
"title": "Réponse",
|
"title": "Réponse",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "En attente de connexion",
|
"waiting_for_connection": "En attente de connexion",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Corps",
|
"body": "Corps",
|
||||||
"collections": "Collections",
|
"collections": "Collections",
|
||||||
"documentation": "Documentation",
|
"documentation": "Documentation",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "En-têtes",
|
"headers": "En-têtes",
|
||||||
"history": "Histoire",
|
"history": "Histoire",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "L'email ne correspond pas aux détails de votre compte. Contactez le propriétaire de votre équipe.",
|
"email_do_not_match": "L'email ne correspond pas aux détails de votre compte. Contactez le propriétaire de votre équipe.",
|
||||||
"exit": "Quitter l'équipe",
|
"exit": "Quitter l'équipe",
|
||||||
"exit_disabled": "Seul le propriétaire ne peut pas quitter l'équipe",
|
"exit_disabled": "Seul le propriétaire ne peut pas quitter l'équipe",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Le format de l'e-mail n'est pas valide",
|
"invalid_email_format": "Le format de l'e-mail n'est pas valide",
|
||||||
"invalid_id": "L'email ne correspond pas aux détails de votre compte. Contactez le propriétaire de votre équipe.",
|
"invalid_id": "L'email ne correspond pas aux détails de votre compte. Contactez le propriétaire de votre équipe.",
|
||||||
"invalid_invite_link": "Lien d'invitation invalide",
|
"invalid_invite_link": "Lien d'invitation invalide",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Utilisateur supprimé",
|
"member_removed": "Utilisateur supprimé",
|
||||||
"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",
|
||||||
"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",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Ma nouvelle équipe",
|
"new_name": "Ma nouvelle équipe",
|
||||||
"no_access": "Vous n'avez pas l'accès en modification à ces collections",
|
"no_access": "Vous n'avez pas l'accès en modification à ces collections",
|
||||||
"no_invite_found": "Invitation non trouvée. Contactez le propriétaire de votre équipe.",
|
"no_invite_found": "Invitation non trouvée. Contactez le propriétaire de votre équipe.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Équipe non trouvée. Contactez le propriétaire de votre équipe.",
|
"not_found": "Équipe non trouvée. Contactez le propriétaire de votre équipe.",
|
||||||
"not_valid_viewer": "Vous n'êtes pas un visionneur valide. Contactez le propriétaire de votre équipe.",
|
"not_valid_viewer": "Vous n'êtes pas un visionneur valide. Contactez le propriétaire de votre équipe.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Invitations en attente",
|
"pending_invites": "Invitations en attente",
|
||||||
"permissions": "Autorisations",
|
"permissions": "Autorisations",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Équipe enregistrée",
|
"saved": "Équipe enregistrée",
|
||||||
"select_a_team": "Choisir une équipe",
|
"select_a_team": "Choisir une équipe",
|
||||||
"title": "Équipes",
|
"title": "Équipes",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Message",
|
"message": "Message",
|
||||||
"protocols": "Protocoles",
|
"protocols": "Protocoles",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "לַעֲרוֹך",
|
"edit": "לַעֲרוֹך",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "תחזור",
|
"go_back": "תחזור",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "תווית",
|
"label": "תווית",
|
||||||
"learn_more": "למד עוד",
|
"learn_more": "למד עוד",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "אוסף נוצר",
|
"created": "אוסף נוצר",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "ערוך אוסף",
|
"edit": "ערוך אוסף",
|
||||||
"invalid_name": "אנא ספק שם תקף לאוסף",
|
"invalid_name": "אנא ספק שם תקף לאוסף",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "האוספים שלי",
|
"my_collections": "האוספים שלי",
|
||||||
"name": "האוסף החדש שלי",
|
"name": "האוסף החדש שלי",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "קולקציה חדשה",
|
"new": "קולקציה חדשה",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "שם האוסף שונה",
|
"renamed": "שם האוסף שונה",
|
||||||
"request_in_use": "Request in use",
|
"request_in_use": "Request in use",
|
||||||
"save_as": "שמור כ",
|
"save_as": "שמור כ",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "האם אתה בטוח שברצונך למחוק את הצוות הזה?",
|
"remove_team": "האם אתה בטוח שברצונך למחוק את הצוות הזה?",
|
||||||
"remove_telemetry": "האם אתה בטוח שברצונך לבטל את הסכמתך לטלמטריה?",
|
"remove_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?",
|
||||||
"sync": "האם אתה בטוח שברצונך לסנכרן את סביבת העבודה הזו?"
|
"sync": "האם אתה בטוח שברצונך לסנכרן את סביבת העבודה הזו?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "מצב זן"
|
"zen_mode": "מצב זן"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "אוספים",
|
"collections": "אוספים",
|
||||||
"confirm": "לְאַשֵׁר",
|
"confirm": "לְאַשֵׁר",
|
||||||
"edit_request": "ערוך בקשה",
|
"edit_request": "ערוך בקשה",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "העתק קישור",
|
"copy_link": "העתק קישור",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "מֶשֶׁך",
|
"duration": "מֶשֶׁך",
|
||||||
"enter_curl": "הזן cURL",
|
"enter_curl": "הזן cURL",
|
||||||
"generate_code": "צור קוד",
|
"generate_code": "צור קוד",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "רשימת כותרות",
|
"header_list": "רשימת כותרות",
|
||||||
"invalid_name": "אנא ספק שם לבקשה",
|
"invalid_name": "אנא ספק שם לבקשה",
|
||||||
"method": "שיטה",
|
"method": "שיטה",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "שם הבקשה",
|
"name": "שם הבקשה",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "גוף תגובה",
|
"body": "גוף תגובה",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "כותרות",
|
"headers": "כותרות",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "סטָטוּס",
|
"status": "סטָטוּס",
|
||||||
"time": "זְמַן",
|
"time": "זְמַן",
|
||||||
"title": "תְגוּבָה",
|
"title": "תְגוּבָה",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "מחכה לחיבור",
|
"waiting_for_connection": "מחכה לחיבור",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "גוּף",
|
"body": "גוּף",
|
||||||
"collections": "אוספים",
|
"collections": "אוספים",
|
||||||
"documentation": "תיעוד",
|
"documentation": "תיעוד",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "כותרות",
|
"headers": "כותרות",
|
||||||
"history": "הִיסטוֹרִיָה",
|
"history": "הִיסטוֹרִיָה",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "יציאה מצוות",
|
"exit": "יציאה מצוות",
|
||||||
"exit_disabled": "רק הבעלים אינו יכול לצאת מהצוות",
|
"exit_disabled": "רק הבעלים אינו יכול לצאת מהצוות",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "פורמט הדוא\"ל אינו חוקי",
|
"invalid_email_format": "פורמט הדוא\"ל אינו חוקי",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "המשתמש הוסר",
|
"member_removed": "המשתמש הוסר",
|
||||||
"member_role_updated": "תפקידי משתמשים עודכנו",
|
"member_role_updated": "תפקידי משתמשים עודכנו",
|
||||||
"members": "חברים",
|
"members": "חברים",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "שם הקבוצה צריך לכלול לפחות 6 תווים",
|
"name_length_insufficient": "שם הקבוצה צריך לכלול לפחות 6 תווים",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "קבוצה חדשה",
|
"new": "קבוצה חדשה",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "הצוות החדש שלי",
|
"new_name": "הצוות החדש שלי",
|
||||||
"no_access": "אין לך גישת עריכה לאוספים אלה",
|
"no_access": "אין לך גישת עריכה לאוספים אלה",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "הרשאות",
|
"permissions": "הרשאות",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "הקבוצה ניצלה",
|
"saved": "הקבוצה ניצלה",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "צוותים",
|
"title": "צוותים",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "הוֹדָעָה",
|
"message": "הוֹדָעָה",
|
||||||
"protocols": "פרוטוקולים",
|
"protocols": "פרוטוקולים",
|
||||||
"url": "כתובת URL"
|
"url": "כתובת URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "संपादित करें",
|
"edit": "संपादित करें",
|
||||||
"filter": "फ़िल्टर प्रतिक्रिया",
|
"filter": "फ़िल्टर प्रतिक्रिया",
|
||||||
"go_back": "वापस जाओ",
|
"go_back": "वापस जाओ",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "लेबल",
|
"label": "लेबल",
|
||||||
"learn_more": "और अधिक जानें",
|
"learn_more": "और अधिक जानें",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "संग्रह बनाया गया",
|
"created": "संग्रह बनाया गया",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "संग्रह संपादित करें",
|
"edit": "संग्रह संपादित करें",
|
||||||
"invalid_name": "कृपया संग्रह के लिए एक नाम प्रदान करें",
|
"invalid_name": "कृपया संग्रह के लिए एक नाम प्रदान करें",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "मेरे संग्रह",
|
"my_collections": "मेरे संग्रह",
|
||||||
"name": "मेरा नया संग्रह",
|
"name": "मेरा नया संग्रह",
|
||||||
"name_length_insufficient": "संग्रह का नाम कम से कम 3 वर्णों का होना चाहिए",
|
"name_length_insufficient": "संग्रह का नाम कम से कम 3 वर्णों का होना चाहिए",
|
||||||
"new": "नया संग्रह",
|
"new": "नया संग्रह",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "संग्रह का नाम बदला गया",
|
"renamed": "संग्रह का नाम बदला गया",
|
||||||
"request_in_use": "रिक्वेस्ट इन यूज़",
|
"request_in_use": "रिक्वेस्ट इन यूज़",
|
||||||
"save_as": "इस रूप में सेव करें",
|
"save_as": "इस रूप में सेव करें",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "क्या आप वाकई इस टीम को हटाना चाहते हैं?",
|
"remove_team": "क्या आप वाकई इस टीम को हटाना चाहते हैं?",
|
||||||
"remove_telemetry": "क्या आप वाकई टेलीमेट्री से ऑप्ट-आउट करना चाहते हैं?",
|
"remove_telemetry": "क्या आप वाकई टेलीमेट्री से ऑप्ट-आउट करना चाहते हैं?",
|
||||||
"request_change": "क्या आप वाकई वर्तमान अनुरोध को छोड़ना चाहते हैं, सहेजे नहीं गए परिवर्तन खो जाएंगे।",
|
"request_change": "क्या आप वाकई वर्तमान अनुरोध को छोड़ना चाहते हैं, सहेजे नहीं गए परिवर्तन खो जाएंगे।",
|
||||||
|
"save_unsaved_tab": "Do you want to save changes made in this tab?",
|
||||||
"sync": "क्या आप अपने कार्यक्षेत्र को क्लाउड से पुनर्स्थापित करना चाहेंगे? यह आपकी स्थानीय प्रगति को त्याग देगा।"
|
"sync": "क्या आप अपने कार्यक्षेत्र को क्लाउड से पुनर्स्थापित करना चाहेंगे? यह आपकी स्थानीय प्रगति को त्याग देगा।"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -311,6 +317,7 @@
|
|||||||
"zen_mode": "ज़ेन मोड"
|
"zen_mode": "ज़ेन मोड"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "संग्रह",
|
"collections": "संग्रह",
|
||||||
"confirm": "पुष्टि करें",
|
"confirm": "पुष्टि करें",
|
||||||
"edit_request": "अनुरोध संपादित करें",
|
"edit_request": "अनुरोध संपादित करें",
|
||||||
@@ -390,6 +397,8 @@
|
|||||||
"text": "मूलपाठ"
|
"text": "मूलपाठ"
|
||||||
},
|
},
|
||||||
"copy_link": "प्रतिरूप जोड़ना",
|
"copy_link": "प्रतिरूप जोड़ना",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "अवधि",
|
"duration": "अवधि",
|
||||||
"enter_curl": "कर्ल दर्ज करें",
|
"enter_curl": "कर्ल दर्ज करें",
|
||||||
"generate_code": "उत्पन्न कोड",
|
"generate_code": "उत्पन्न कोड",
|
||||||
@@ -397,8 +406,10 @@
|
|||||||
"header_list": "हेडर सूची",
|
"header_list": "हेडर सूची",
|
||||||
"invalid_name": "कृपया अनुरोध के लिए एक नाम प्रदान करें",
|
"invalid_name": "कृपया अनुरोध के लिए एक नाम प्रदान करें",
|
||||||
"method": "तरीका",
|
"method": "तरीका",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "अनुरोध नाम",
|
"name": "अनुरोध नाम",
|
||||||
"new": "नई विनती",
|
"new": "नई विनती",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "अवहेलना",
|
"override": "अवहेलना",
|
||||||
"override_help": "हेडर में <kbd> सामग्री-प्रकार </kbd> सेट करें",
|
"override_help": "हेडर में <kbd> सामग्री-प्रकार </kbd> सेट करें",
|
||||||
"overriden": "ओवरराइड",
|
"overriden": "ओवरराइड",
|
||||||
@@ -422,6 +433,7 @@
|
|||||||
"view_my_links": "मेरे लिंक देखें"
|
"view_my_links": "मेरे लिंक देखें"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "प्रतिक्रिया निकाय",
|
"body": "प्रतिक्रिया निकाय",
|
||||||
"filter_response_body": "फ़िल्टर JSON रिस्पांस बॉडी (JSONPATH सिंटैक्स का उपयोग करता है)",
|
"filter_response_body": "फ़िल्टर JSON रिस्पांस बॉडी (JSONPATH सिंटैक्स का उपयोग करता है)",
|
||||||
"headers": "हेडर",
|
"headers": "हेडर",
|
||||||
@@ -435,6 +447,7 @@
|
|||||||
"status": "दर्जा",
|
"status": "दर्जा",
|
||||||
"time": "समय",
|
"time": "समय",
|
||||||
"title": "जवाब",
|
"title": "जवाब",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "जुडने के लिए इंतजार",
|
"waiting_for_connection": "जुडने के लिए इंतजार",
|
||||||
"xml": "एक्सएमएल"
|
"xml": "एक्सएमएल"
|
||||||
},
|
},
|
||||||
@@ -629,6 +642,7 @@
|
|||||||
"body": "शरीर",
|
"body": "शरीर",
|
||||||
"collections": "संग्रह",
|
"collections": "संग्रह",
|
||||||
"documentation": "प्रलेखन",
|
"documentation": "प्रलेखन",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "हेडर",
|
"headers": "हेडर",
|
||||||
"history": "इतिहास",
|
"history": "इतिहास",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -653,6 +667,7 @@
|
|||||||
"email_do_not_match": "ईमेल आपके खाते के विवरण के साथ मेल नहीं खाता है। अपनी टीम के मालिक से संपर्क करें।",
|
"email_do_not_match": "ईमेल आपके खाते के विवरण के साथ मेल नहीं खाता है। अपनी टीम के मालिक से संपर्क करें।",
|
||||||
"exit": "निकास टीम",
|
"exit": "निकास टीम",
|
||||||
"exit_disabled": "केवल मालिक टीम से बाहर नहीं निकल सकते",
|
"exit_disabled": "केवल मालिक टीम से बाहर नहीं निकल सकते",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "ईमेल प्रारूप अमान्य है",
|
"invalid_email_format": "ईमेल प्रारूप अमान्य है",
|
||||||
"invalid_id": "अमान्य टीम आईडी। अपनी टीम के मालिक से संपर्क करें।",
|
"invalid_id": "अमान्य टीम आईडी। अपनी टीम के मालिक से संपर्क करें।",
|
||||||
"invalid_invite_link": "अमान्य आमंत्रित लिंक",
|
"invalid_invite_link": "अमान्य आमंत्रित लिंक",
|
||||||
@@ -676,6 +691,7 @@
|
|||||||
"member_removed": "उपयोगकर्ता हटा दिया",
|
"member_removed": "उपयोगकर्ता हटा दिया",
|
||||||
"member_role_updated": "उपयोगकर्ता भूमिकाएँ अद्यतन की गईं",
|
"member_role_updated": "उपयोगकर्ता भूमिकाएँ अद्यतन की गईं",
|
||||||
"members": "सदस्यों",
|
"members": "सदस्यों",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "टीम का नाम कम से कम 6 अक्षर लंबा होना चाहिए",
|
"name_length_insufficient": "टीम का नाम कम से कम 6 अक्षर लंबा होना चाहिए",
|
||||||
"name_updated": "टीम का नाम अपडेट किया गया",
|
"name_updated": "टीम का नाम अपडेट किया गया",
|
||||||
"new": "नई टीम",
|
"new": "नई टीम",
|
||||||
@@ -683,10 +699,13 @@
|
|||||||
"new_name": "मेरी नई टीम",
|
"new_name": "मेरी नई टीम",
|
||||||
"no_access": "आपके पास इन संग्रहों तक पहुंच नहीं है",
|
"no_access": "आपके पास इन संग्रहों तक पहुंच नहीं है",
|
||||||
"no_invite_found": "निमंत्रण नहीं मिला। अपनी टीम के मालिक से संपर्क करें।",
|
"no_invite_found": "निमंत्रण नहीं मिला। अपनी टीम के मालिक से संपर्क करें।",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "टीम नहीं मिली। अपनी टीम के मालिक से संपर्क करें।",
|
"not_found": "टीम नहीं मिली। अपनी टीम के मालिक से संपर्क करें।",
|
||||||
"not_valid_viewer": "आप एक वैध दर्शक नहीं हैं। अपनी टीम के मालिक से संपर्क करें।",
|
"not_valid_viewer": "आप एक वैध दर्शक नहीं हैं। अपनी टीम के मालिक से संपर्क करें।",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "लंबित आमंत्रण",
|
"pending_invites": "लंबित आमंत्रण",
|
||||||
"permissions": "अनुमतियां",
|
"permissions": "अनुमतियां",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "टीम बचाया",
|
"saved": "टीम बचाया",
|
||||||
"select_a_team": "एक टीम का चयन करें",
|
"select_a_team": "एक टीम का चयन करें",
|
||||||
"title": "टीमों",
|
"title": "टीमों",
|
||||||
@@ -714,5 +733,11 @@
|
|||||||
"message": "संदेश",
|
"message": "संदेश",
|
||||||
"protocols": "प्रोटोकॉल",
|
"protocols": "प्रोटोकॉल",
|
||||||
"url": "यूआरएल"
|
"url": "यूआरएल"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,28 +5,29 @@
|
|||||||
"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",
|
||||||
"close": "Close",
|
"close": "Bezárás",
|
||||||
"connect": "Kapcsolódás",
|
"connect": "Kapcsolódás",
|
||||||
"connecting": "Connecting",
|
"connecting": "Kapcsolódás",
|
||||||
"copy": "Másolás",
|
"copy": "Másolás",
|
||||||
"delete": "Törlés",
|
"delete": "Törlés",
|
||||||
"disconnect": "Leválasztás",
|
"disconnect": "Leválasztás",
|
||||||
"dismiss": "Eltüntetés",
|
"dismiss": "Eltüntetés",
|
||||||
"dont_save": "Ne mentse",
|
"dont_save": "Ne mentse",
|
||||||
"download_file": "Fájl letöltése",
|
"download_file": "Fájl letöltése",
|
||||||
"drag_to_reorder": "Drag to reorder",
|
"drag_to_reorder": "Húzza az átrendezéshez",
|
||||||
"duplicate": "Kettőzés",
|
"duplicate": "Kettőzés",
|
||||||
"edit": "Szerkesztés",
|
"edit": "Szerkesztés",
|
||||||
"filter": "Filter",
|
"filter": "Szűrő",
|
||||||
"go_back": "Vissza",
|
"go_back": "Vissza",
|
||||||
"group_by": "Group by",
|
"go_forward": "Előre",
|
||||||
|
"group_by": "Csoportosítás",
|
||||||
"label": "Címke",
|
"label": "Címke",
|
||||||
"learn_more": "Tudjon meg többet",
|
"learn_more": "Tudjon meg többet",
|
||||||
"less": "Kevesebb",
|
"less": "Kevesebb",
|
||||||
"more": "Több",
|
"more": "Több",
|
||||||
"new": "Új",
|
"new": "Új",
|
||||||
"no": "Nem",
|
"no": "Nem",
|
||||||
"open_workspace": "Open workspace",
|
"open_workspace": "Munkaterület megnyitása",
|
||||||
"paste": "Beillesztés",
|
"paste": "Beillesztés",
|
||||||
"prettify": "Csinosítás",
|
"prettify": "Csinosítás",
|
||||||
"remove": "Eltávolítás",
|
"remove": "Eltávolítás",
|
||||||
@@ -37,7 +38,7 @@
|
|||||||
"search": "Keresés",
|
"search": "Keresés",
|
||||||
"send": "Küldés",
|
"send": "Küldés",
|
||||||
"start": "Indítás",
|
"start": "Indítás",
|
||||||
"starting": "Starting",
|
"starting": "Indítás",
|
||||||
"stop": "Leállítás",
|
"stop": "Leállítás",
|
||||||
"to_close": "a bezáráshoz",
|
"to_close": "a bezáráshoz",
|
||||||
"to_navigate": "a navigáláshoz",
|
"to_navigate": "a navigáláshoz",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Gyűjtemény létrehozva",
|
"created": "Gyűjtemény létrehozva",
|
||||||
|
"different_parent": "Nem lehet átrendezni a különböző szülővel rendelkező gyűjteményt",
|
||||||
"edit": "Gyűjtemény szerkesztése",
|
"edit": "Gyűjtemény szerkesztése",
|
||||||
"invalid_name": "Adjon nevet a gyűjteménynek",
|
"invalid_name": "Adjon nevet a gyűjteménynek",
|
||||||
|
"invalid_root_move": "A gyűjtemény már a gyökérben van",
|
||||||
|
"moved": "Sikeresen áthelyezve",
|
||||||
"my_collections": "Saját gyűjtemények",
|
"my_collections": "Saját gyűjtemények",
|
||||||
"name": "Saját új gyűjtemény",
|
"name": "Saját új gyűjtemény",
|
||||||
"name_length_insufficient": "A gyűjtemény nevének legalább 3 karakter hosszúságúnak kell lennie",
|
"name_length_insufficient": "A gyűjtemény nevének legalább 3 karakter hosszúságúnak kell lennie",
|
||||||
"new": "Új gyűjtemény",
|
"new": "Új gyűjtemény",
|
||||||
|
"order_changed": "Gyűjtemény sorrendje frissítve",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Biztosan törölni szeretné ezt a csapatot?",
|
"remove_team": "Biztosan törölni szeretné ezt a csapatot?",
|
||||||
"remove_telemetry": "Biztosan ki szeretné kapcsolni a telemetriát?",
|
"remove_telemetry": "Biztosan ki szeretné kapcsolni a telemetriát?",
|
||||||
"request_change": "Biztosan el szeretné vetni a jelenlegi kérést? Minden mentetlen változtatás el fog veszni.",
|
"request_change": "Biztosan el szeretné vetni a jelenlegi kérést? Minden mentetlen változtatás el fog veszni.",
|
||||||
|
"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."
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -174,8 +180,8 @@
|
|||||||
"profile": "Jelentkezzen be a profilja megtekintéséhez",
|
"profile": "Jelentkezzen be a profilja megtekintéséhez",
|
||||||
"protocols": "A protokollok üresek",
|
"protocols": "A protokollok üresek",
|
||||||
"schema": "Kapcsolódjon egy GraphQL-végponthoz a séma megtekintéséhez",
|
"schema": "Kapcsolódjon egy GraphQL-végponthoz a séma megtekintéséhez",
|
||||||
"shortcodes": "Shortcodes are empty",
|
"shortcodes": "A rövid kódok üresek",
|
||||||
"subscription": "Subscriptions are empty",
|
"subscription": "A feliratkozások üresek",
|
||||||
"team_name": "A csapat neve üres",
|
"team_name": "A csapat neve üres",
|
||||||
"teams": "Ön nem tartozik semmilyen csapathoz",
|
"teams": "Ön nem tartozik semmilyen csapathoz",
|
||||||
"tests": "Nincsenek tesztek ehhez a kéréshez"
|
"tests": "Nincsenek tesztek ehhez a kéréshez"
|
||||||
@@ -188,13 +194,13 @@
|
|||||||
"deleted": "Környezet törlése",
|
"deleted": "Környezet törlése",
|
||||||
"edit": "Környezet szerkesztése",
|
"edit": "Környezet szerkesztése",
|
||||||
"invalid_name": "Adjon nevet a környezetnek",
|
"invalid_name": "Adjon nevet a környezetnek",
|
||||||
"my_environments": "My Environments",
|
"my_environments": "Saját környezetek",
|
||||||
"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_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.",
|
||||||
"select": "Környezet kiválasztása",
|
"select": "Környezet kiválasztása",
|
||||||
"team_environments": "Team Environments",
|
"team_environments": "Csapatkörnyezetek",
|
||||||
"title": "Környezetek",
|
"title": "Környezetek",
|
||||||
"updated": "Környezet frissítve",
|
"updated": "Környezet frissítve",
|
||||||
"variable_list": "Változólista"
|
"variable_list": "Változólista"
|
||||||
@@ -203,9 +209,9 @@
|
|||||||
"browser_support_sse": "Úgy tűnik, hogy ez a böngésző nem támogatja a kiszolgáló által küldött eseményeket.",
|
"browser_support_sse": "Úgy tűnik, hogy ez a böngésző nem támogatja a kiszolgáló által küldött eseményeket.",
|
||||||
"check_console_details": "Nézze meg a konzolnaplót a részletekért.",
|
"check_console_details": "Nézze meg a konzolnaplót a részletekért.",
|
||||||
"curl_invalid_format": "A cURL nincs megfelelően formázva",
|
"curl_invalid_format": "A cURL nincs megfelelően formázva",
|
||||||
"danger_zone": "Danger zone",
|
"danger_zone": "Veszélyes zóna",
|
||||||
"delete_account": "Your account is currently an owner in these teams:",
|
"delete_account": "Az Ön fiókja jelenleg tulajdonos ezekben a csapatokban:",
|
||||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
"delete_account_description": "El kell távolítani magát, át kell adnia a tulajdonjogot vagy törölnie kell ezeket a csapatokat, mielőtt törölhetné a fiókját.",
|
||||||
"empty_req_name": "Üres kérésnév",
|
"empty_req_name": "Üres kérésnév",
|
||||||
"f12_details": "(F12 a részletekért)",
|
"f12_details": "(F12 a részletekért)",
|
||||||
"gql_prettify_invalid_query": "Nem sikerült csinosítani egy érvénytelen lekérdezést, oldja meg a lekérdezés szintaktikai hibáit, és próbálja újra",
|
"gql_prettify_invalid_query": "Nem sikerült csinosítani egy érvénytelen lekérdezést, oldja meg a lekérdezés szintaktikai hibáit, és próbálja újra",
|
||||||
@@ -213,13 +219,13 @@
|
|||||||
"incorrect_email": "Hibás e-mail",
|
"incorrect_email": "Hibás e-mail",
|
||||||
"invalid_link": "Érvénytelen hivatkozás",
|
"invalid_link": "Érvénytelen hivatkozás",
|
||||||
"invalid_link_description": "A kattintott hivatkozás érvénytelen vagy lejárt.",
|
"invalid_link_description": "A kattintott hivatkozás érvénytelen vagy lejárt.",
|
||||||
"json_parsing_failed": "Invalid JSON",
|
"json_parsing_failed": "Érvénytelen JSON",
|
||||||
"json_prettify_invalid_body": "Nem sikerült csinosítani egy érvénytelen törzset, oldja meg a JSON szintaktikai hibáit, és próbálja újra",
|
"json_prettify_invalid_body": "Nem sikerült csinosítani egy érvénytelen törzset, oldja meg a JSON szintaktikai hibáit, és próbálja újra",
|
||||||
"network_error": "Úgy tűnik, hogy hálózati hiba van. Próbálja újra.",
|
"network_error": "Úgy tűnik, hogy hálózati hiba van. Próbálja újra.",
|
||||||
"network_fail": "Nem sikerült elküldeni a kérést",
|
"network_fail": "Nem sikerült elküldeni a kérést",
|
||||||
"no_duration": "Nincs időtartam",
|
"no_duration": "Nincs időtartam",
|
||||||
"no_results_found": "No matches found",
|
"no_results_found": "Nincs találat",
|
||||||
"page_not_found": "This page could not be found",
|
"page_not_found": "Ez az oldal nem található",
|
||||||
"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"
|
||||||
@@ -232,9 +238,9 @@
|
|||||||
"title": "Exportálás"
|
"title": "Exportálás"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"all": "All",
|
"all": "Összes",
|
||||||
"none": "None",
|
"none": "Nincs",
|
||||||
"starred": "Starred"
|
"starred": "Csillagozott"
|
||||||
},
|
},
|
||||||
"folder": {
|
"folder": {
|
||||||
"created": "Mappa létrehozva",
|
"created": "Mappa létrehozva",
|
||||||
@@ -250,7 +256,7 @@
|
|||||||
"subscriptions": "Feliratkozások"
|
"subscriptions": "Feliratkozások"
|
||||||
},
|
},
|
||||||
"group": {
|
"group": {
|
||||||
"time": "Time",
|
"time": "Idő",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@@ -310,31 +316,32 @@
|
|||||||
"zen_mode": "Zen mód"
|
"zen_mode": "Zen mód"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "Elmentetlen változtatásai vannak",
|
||||||
"collections": "Gyűjtemények",
|
"collections": "Gyűjtemények",
|
||||||
"confirm": "Megerősítés",
|
"confirm": "Megerősítés",
|
||||||
"edit_request": "Kérés szerkesztése",
|
"edit_request": "Kérés szerkesztése",
|
||||||
"import_export": "Importálás és exportálás"
|
"import_export": "Importálás és exportálás"
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"already_subscribed": "You are already subscribed to this topic.",
|
"already_subscribed": "Ön már feliratkozott erre a témára.",
|
||||||
"clean_session": "Clean Session",
|
"clean_session": "Munkamenet törlése",
|
||||||
"clear_input": "Clear input",
|
"clear_input": "Bevitel törlése",
|
||||||
"clear_input_on_send": "Clear input on send",
|
"clear_input_on_send": "Bevitel törlése küldéskor",
|
||||||
"client_id": "Client ID",
|
"client_id": "Ügyfél-azonosító",
|
||||||
"color": "Pick a color",
|
"color": "Válasszon színt",
|
||||||
"communication": "Kommunikáció",
|
"communication": "Kommunikáció",
|
||||||
"connection_config": "Connection Config",
|
"connection_config": "Kapcsolat beállításai",
|
||||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
"connection_not_authorized": "Ez az MQTT-kapcsolat nem használ semmilyen hitelesítést.",
|
||||||
"invalid_topic": "Please provide a topic for the subscription",
|
"invalid_topic": "Adjon témát a feliratkozáshoz",
|
||||||
"keep_alive": "Keep Alive",
|
"keep_alive": "Életben tartás",
|
||||||
"log": "Napló",
|
"log": "Napló",
|
||||||
"lw_message": "Last-Will Message",
|
"lw_message": "Utolsó kívánság üzenet",
|
||||||
"lw_qos": "Last-Will QoS",
|
"lw_qos": "Utolsó kívánság QoS",
|
||||||
"lw_retain": "Last-Will Retain",
|
"lw_retain": "Utolsó kívánság megtartás",
|
||||||
"lw_topic": "Last-Will Topic",
|
"lw_topic": "Utolsó kívánság téma",
|
||||||
"message": "Üzenet",
|
"message": "Üzenet",
|
||||||
"new": "New Subscription",
|
"new": "Új feliratkozás",
|
||||||
"not_connected": "Please start a MQTT connection first.",
|
"not_connected": "Először indítson egy MQTT-kapcsolatot.",
|
||||||
"publish": "Közzététel",
|
"publish": "Közzététel",
|
||||||
"qos": "QoS",
|
"qos": "QoS",
|
||||||
"ssl": "SSL",
|
"ssl": "SSL",
|
||||||
@@ -361,7 +368,7 @@
|
|||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"app_settings": "Alkalmazás beállításai",
|
"app_settings": "Alkalmazás beállításai",
|
||||||
"default_hopp_displayname": "Unnamed User",
|
"default_hopp_displayname": "Névtelen felhasználó",
|
||||||
"editor": "Szerkesztő",
|
"editor": "Szerkesztő",
|
||||||
"editor_description": "A szerkesztők hozzáadhatnak, szerkeszthetnek és törölhetnek kéréseket.",
|
"editor_description": "A szerkesztők hozzáadhatnak, szerkeszthetnek és törölhetnek kéréseket.",
|
||||||
"email_verification_mail": "Egy ellenőrző e-mail el lett küldve az e-mail-címére. Kattintson a hivatkozásra az e-mail-címe ellenőrzéséhez.",
|
"email_verification_mail": "Egy ellenőrző e-mail el lett küldve az e-mail-címére. Kattintson a hivatkozásra az e-mail-címe ellenőrzéséhez.",
|
||||||
@@ -384,22 +391,26 @@
|
|||||||
"choose_language": "Nyelv kiválasztása",
|
"choose_language": "Nyelv kiválasztása",
|
||||||
"content_type": "Tartalom típusa",
|
"content_type": "Tartalom típusa",
|
||||||
"content_type_titles": {
|
"content_type_titles": {
|
||||||
"others": "Others",
|
"others": "Egyebek",
|
||||||
"structured": "Structured",
|
"structured": "Szerkesztett",
|
||||||
"text": "Text"
|
"text": "Szöveg"
|
||||||
},
|
},
|
||||||
"copy_link": "Hivatkozás másolása",
|
"copy_link": "Hivatkozás másolása",
|
||||||
|
"different_collection": "Nem lehet átrendezni a különböző gyűjteményekből érkező kéréseket",
|
||||||
|
"duplicated": "Kérés megkettőzve",
|
||||||
"duration": "Időtartam",
|
"duration": "Időtartam",
|
||||||
"enter_curl": "cURL megadása",
|
"enter_curl": "cURL-parancs megadása",
|
||||||
"generate_code": "Kód előállítása",
|
"generate_code": "Kód előállítása",
|
||||||
"generated_code": "Előállított kód",
|
"generated_code": "Előállított kód",
|
||||||
"header_list": "Fejléclista",
|
"header_list": "Fejléclista",
|
||||||
"invalid_name": "Adjon nevet a kérésnek",
|
"invalid_name": "Adjon nevet a kérésnek",
|
||||||
"method": "Módszer",
|
"method": "Módszer",
|
||||||
|
"moved": "Kérés áthelyezve",
|
||||||
"name": "Kérés neve",
|
"name": "Kérés neve",
|
||||||
"new": "Új kérés",
|
"new": "Új kérés",
|
||||||
|
"order_changed": "Kérés sorrendje frissítve",
|
||||||
"override": "Felülbírálás",
|
"override": "Felülbírálás",
|
||||||
"override_help": "A <kbd>Content-Type</kbd> beállítása a fejlécekben",
|
"override_help": "<kbd>Content-Type</kbd> beállítása a fejlécekben",
|
||||||
"overriden": "Felülbírálva",
|
"overriden": "Felülbírálva",
|
||||||
"parameter_list": "Lekérdezési paraméterek",
|
"parameter_list": "Lekérdezési paraméterek",
|
||||||
"parameters": "Paraméterek",
|
"parameters": "Paraméterek",
|
||||||
@@ -418,11 +429,12 @@
|
|||||||
"type": "Kérés típusa",
|
"type": "Kérés típusa",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"variables": "Változók",
|
"variables": "Változók",
|
||||||
"view_my_links": "View my links"
|
"view_my_links": "Saját hivatkozások megtekintése"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Hang",
|
||||||
"body": "Válasz törzse",
|
"body": "Válasz törzse",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "JSON-válasz törzsének szűrése (JSONPath szintaxist használ)",
|
||||||
"headers": "Fejlécek",
|
"headers": "Fejlécek",
|
||||||
"html": "HTML",
|
"html": "HTML",
|
||||||
"image": "Kép",
|
"image": "Kép",
|
||||||
@@ -434,13 +446,14 @@
|
|||||||
"status": "Állapot",
|
"status": "Állapot",
|
||||||
"time": "Idő",
|
"time": "Idő",
|
||||||
"title": "Válasz",
|
"title": "Válasz",
|
||||||
|
"video": "Videó",
|
||||||
"waiting_for_connection": "várakozás kapcsolódásra",
|
"waiting_for_connection": "várakozás kapcsolódásra",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"accent_color": "Kiemelőszín",
|
"accent_color": "Kiemelőszín",
|
||||||
"account": "Fiók",
|
"account": "Fiók",
|
||||||
"account_deleted": "Your account has been deleted",
|
"account_deleted": "A fiókja törölve lett",
|
||||||
"account_description": "A fiókbeállítások személyre szabása.",
|
"account_description": "A fiókbeállítások személyre szabása.",
|
||||||
"account_email_description": "Az Ön elsődleges e-mail-címe.",
|
"account_email_description": "Az Ön elsődleges e-mail-címe.",
|
||||||
"account_name_description": "Ez a megjelenített neve.",
|
"account_name_description": "Ez a megjelenített neve.",
|
||||||
@@ -449,8 +462,8 @@
|
|||||||
"change_font_size": "Betűméret megváltoztatása",
|
"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": "Delete account",
|
"delete_account": "Fiók törlése",
|
||||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
"delete_account_description": "Ha törli a fiókját, akkor az összes adata véglegesen törlésre kerül. Ezt a műveletet nem lehet visszavonni.",
|
||||||
"expand_navigation": "Navigáció kinyitása",
|
"expand_navigation": "Navigáció kinyitása",
|
||||||
"experiments": "Kísérletek",
|
"experiments": "Kísérletek",
|
||||||
"experiments_notice": "Ez olyan kísérletek gyűjteménye, amelyeken dolgozunk, és amelyek hasznosak, szórakoztatóak lehetnek, mindkettő, vagy egyik sem. Ezek nem véglegesek és nem stabilak, ezért ha valami túl furcsa dolog történik, ne essen pánikba. Egyszerűen kapcsolja ki a hibás dolgot. Viccet félretéve, ",
|
"experiments_notice": "Ez olyan kísérletek gyűjteménye, amelyeken dolgozunk, és amelyek hasznosak, szórakoztatóak lehetnek, mindkettő, vagy egyik sem. Ezek nem véglegesek és nem stabilak, ezért ha valami túl furcsa dolog történik, ne essen pánikba. Egyszerűen kapcsolja ki a hibás dolgot. Viccet félretéve, ",
|
||||||
@@ -477,8 +490,8 @@
|
|||||||
"proxy_use_toggle": "A proxy középprogram használata a kérések küldéséhez",
|
"proxy_use_toggle": "A proxy középprogram használata a kérések küldéséhez",
|
||||||
"read_the": "Olvassa el:",
|
"read_the": "Olvassa el:",
|
||||||
"reset_default": "Visszaállítás az alapértelmezettre",
|
"reset_default": "Visszaállítás az alapértelmezettre",
|
||||||
"short_codes": "Short codes",
|
"short_codes": "Rövid kódok",
|
||||||
"short_codes_description": "Short codes which were created by you.",
|
"short_codes_description": "Az Ön által létrehozott rövid kódok.",
|
||||||
"sidebar_on_left": "Oldalsáv a bal oldalon",
|
"sidebar_on_left": "Oldalsáv a bal oldalon",
|
||||||
"sync": "Szinkronizálás",
|
"sync": "Szinkronizálás",
|
||||||
"sync_collections": "Gyűjtemények",
|
"sync_collections": "Gyűjtemények",
|
||||||
@@ -492,16 +505,16 @@
|
|||||||
"theme_description": "Az alkalmazás témájának személyre szabása.",
|
"theme_description": "Az alkalmazás témájának személyre szabása.",
|
||||||
"use_experimental_url_bar": "Kísérleti URL-sáv használata a környezet kiemelésével",
|
"use_experimental_url_bar": "Kísérleti URL-sáv használata a környezet kiemelésével",
|
||||||
"user": "Felhasználó",
|
"user": "Felhasználó",
|
||||||
"verified_email": "Verified email",
|
"verified_email": "Ellenőrzött e-mail-cím",
|
||||||
"verify_email": "E-mail-cím ellenőrzése"
|
"verify_email": "E-mail-cím ellenőrzése"
|
||||||
},
|
},
|
||||||
"shortcodes": {
|
"shortcodes": {
|
||||||
"actions": "Actions",
|
"actions": "Műveletek",
|
||||||
"created_on": "Created on",
|
"created_on": "Létrehozva",
|
||||||
"deleted": "Shortcode deleted",
|
"deleted": "Rövid kód törölve",
|
||||||
"method": "Method",
|
"method": "Módszer",
|
||||||
"not_found": "Shortcode not found",
|
"not_found": "A rövid kód nem található",
|
||||||
"short_code": "Short code",
|
"short_code": "Rövid kód",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
},
|
},
|
||||||
"shortcut": {
|
"shortcut": {
|
||||||
@@ -543,9 +556,9 @@
|
|||||||
"title": "Kérés"
|
"title": "Kérés"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
"copy": "Copy response to clipboard",
|
"copy": "Válasz másolása a vágólapra",
|
||||||
"download": "Download response as file",
|
"download": "Válasz letöltés fájlként",
|
||||||
"title": "Response"
|
"title": "Válasz"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"black": "Téma átváltása fekete módra",
|
"black": "Téma átváltása fekete módra",
|
||||||
@@ -563,8 +576,8 @@
|
|||||||
},
|
},
|
||||||
"socketio": {
|
"socketio": {
|
||||||
"communication": "Kommunikáció",
|
"communication": "Kommunikáció",
|
||||||
"connection_not_authorized": "This SocketIO connection does not use any authentication.",
|
"connection_not_authorized": "Ez a SocketIO-kapcsolat nem használ semmilyen hitelesítést.",
|
||||||
"event_name": "Esemény neve",
|
"event_name": "Esemény vagy téma neve",
|
||||||
"events": "Események",
|
"events": "Események",
|
||||||
"log": "Napló",
|
"log": "Napló",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
@@ -581,9 +594,9 @@
|
|||||||
"connected": "Kapcsolódva",
|
"connected": "Kapcsolódva",
|
||||||
"connected_to": "Kapcsolódva ehhez: {name}",
|
"connected_to": "Kapcsolódva ehhez: {name}",
|
||||||
"connecting_to": "Kapcsolódás ehhez: {name}…",
|
"connecting_to": "Kapcsolódás ehhez: {name}…",
|
||||||
"connection_error": "Failed to connect",
|
"connection_error": "Nem sikerült kapcsolódni",
|
||||||
"connection_failed": "Connection failed",
|
"connection_failed": "A kapcsolódás sikertelen",
|
||||||
"connection_lost": "Connection lost",
|
"connection_lost": "A kapcsolat elveszett",
|
||||||
"copied_to_clipboard": "Vágólapra másolva",
|
"copied_to_clipboard": "Vágólapra másolva",
|
||||||
"deleted": "Törölve",
|
"deleted": "Törölve",
|
||||||
"deprecated": "ELAVULT",
|
"deprecated": "ELAVULT",
|
||||||
@@ -598,17 +611,17 @@
|
|||||||
"history_deleted": "Előzmények törölve",
|
"history_deleted": "Előzmények törölve",
|
||||||
"linewrap": "Sorok tördelése",
|
"linewrap": "Sorok tördelése",
|
||||||
"loading": "Betöltés…",
|
"loading": "Betöltés…",
|
||||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
"message_received": "Üzenet: {message} érkezett ehhez a témához: {topic}",
|
||||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
"mqtt_subscription_failed": "Valami elromlott a következő témára való feliratkozás során: {topic}",
|
||||||
"none": "Nincs",
|
"none": "Nincs",
|
||||||
"nothing_found": "Semmi sem található ehhez:",
|
"nothing_found": "Semmi sem található ehhez:",
|
||||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
"published_error": "Valami elromlott a következő üzenet közzététele során: {topic}, ehhez a témához: {message}",
|
||||||
"published_message": "Published message: {message} to topic: {topic}",
|
"published_message": "Közzétett üzenet: {message}, ehhez a témához: {topic}",
|
||||||
"reconnection_error": "Failed to reconnect",
|
"reconnection_error": "Nem sikerült újrakapcsolódni",
|
||||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
"subscribed_failed": "Nem sikerült feliratkozni erre a témára: {topic}",
|
||||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
"subscribed_success": "Sikeresen feliratkozott erre a témára: {topic}",
|
||||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
"unsubscribed_failed": "Nem sikerült leiratkozni erről a témáról: {topic}",
|
||||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
"unsubscribed_success": "Sikeresen leiratkozott erről a témáról: {topic}",
|
||||||
"waiting_send_request": "Várakozás a kérés elküldésére"
|
"waiting_send_request": "Várakozás a kérés elküldésére"
|
||||||
},
|
},
|
||||||
"support": {
|
"support": {
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Törzs",
|
"body": "Törzs",
|
||||||
"collections": "Gyűjtemények",
|
"collections": "Gyűjtemények",
|
||||||
"documentation": "Dokumentáció",
|
"documentation": "Dokumentáció",
|
||||||
|
"environments": "Környezetek",
|
||||||
"headers": "Fejlécek",
|
"headers": "Fejlécek",
|
||||||
"history": "Előzmények",
|
"history": "Előzmények",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Az e-mail-cím nem egyezik a fiókja részleteivel. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
"email_do_not_match": "Az e-mail-cím nem egyezik a fiókja részleteivel. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
||||||
"exit": "Kilépés a csapatból",
|
"exit": "Kilépés a csapatból",
|
||||||
"exit_disabled": "Csak a tulajdonos nem léphet ki a csapatból",
|
"exit_disabled": "Csak a tulajdonos nem léphet ki a csapatból",
|
||||||
|
"invalid_coll_id": "Érvénytelen gyűjteményazonosító",
|
||||||
"invalid_email_format": "Az e-mail formátuma érvénytelen",
|
"invalid_email_format": "Az e-mail formátuma érvénytelen",
|
||||||
"invalid_id": "Érvénytelen csapatazonosító. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
"invalid_id": "Érvénytelen csapatazonosító. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
||||||
"invalid_invite_link": "Érvénytelen meghívási hivatkozás",
|
"invalid_invite_link": "Érvénytelen meghívási hivatkozás",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Felhasználó eltávolítva",
|
"member_removed": "Felhasználó eltávolítva",
|
||||||
"member_role_updated": "Felhasználói szerepek frissítve",
|
"member_role_updated": "Felhasználói szerepek frissítve",
|
||||||
"members": "Tagok",
|
"members": "Tagok",
|
||||||
|
"more_members": "+{count} további",
|
||||||
"name_length_insufficient": "A csapat nevének legalább 6 karakter hosszúságúnak kell lennie",
|
"name_length_insufficient": "A csapat nevének legalább 6 karakter hosszúságúnak kell lennie",
|
||||||
"name_updated": "Csapatnév frissítve",
|
"name_updated": "Csapatnév frissítve",
|
||||||
"new": "Új csapat",
|
"new": "Új csapat",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Saját új csapat",
|
"new_name": "Saját új csapat",
|
||||||
"no_access": "Nincs szerkesztési jogosultsága ezekhez a gyűjteményekhez",
|
"no_access": "Nincs szerkesztési jogosultsága ezekhez a gyűjteményekhez",
|
||||||
"no_invite_found": "A meghívás nem található. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
"no_invite_found": "A meghívás nem található. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
||||||
|
"no_request_found": "A kérés nem található.",
|
||||||
"not_found": "A csapat nem található. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
"not_found": "A csapat nem található. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
||||||
"not_valid_viewer": "Ön nem érvényes megtekintő. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
"not_valid_viewer": "Ön nem érvényes megtekintő. Vegye fel a kapcsolatot a csapat tulajdonosával.",
|
||||||
|
"parent_coll_move": "Nem lehet áthelyezni a gyűjteményt egy gyermekgyűjteménybe",
|
||||||
"pending_invites": "Függőben lévő meghívások",
|
"pending_invites": "Függőben lévő meghívások",
|
||||||
"permissions": "Jogosultságok",
|
"permissions": "Jogosultságok",
|
||||||
|
"same_target_destination": "Ugyanaz a cél és célhely",
|
||||||
"saved": "Csapat elmentve",
|
"saved": "Csapat elmentve",
|
||||||
"select_a_team": "Csapat kiválasztása",
|
"select_a_team": "Csapat kiválasztása",
|
||||||
"title": "Csapatok",
|
"title": "Csapatok",
|
||||||
@@ -693,9 +712,9 @@
|
|||||||
"we_sent_invite_link_description": "Kérje meg az összes meghívottat, hogy nézzék meg a beérkező leveleiket. Kattintsanak a hivatkozásra a csapathoz való csatlakozáshoz."
|
"we_sent_invite_link_description": "Kérje meg az összes meghívottat, hogy nézzék meg a beérkező leveleiket. Kattintsanak a hivatkozásra a csapathoz való csatlakozáshoz."
|
||||||
},
|
},
|
||||||
"team_environment": {
|
"team_environment": {
|
||||||
"deleted": "Environment Deleted",
|
"deleted": "Környezet törölve",
|
||||||
"duplicate": "Environment Duplicated",
|
"duplicate": "Környezet megkettőzve",
|
||||||
"not_found": "Environment not found."
|
"not_found": "A környezet nem található."
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"failed": "teszt sikertelen",
|
"failed": "teszt sikertelen",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Üzenet",
|
"message": "Üzenet",
|
||||||
"protocols": "Protokollok",
|
"protocols": "Protokollok",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Munkaterület váltása",
|
||||||
|
"personal": "Saját munkaterület",
|
||||||
|
"team": "Csapat-munkaterület",
|
||||||
|
"title": "Munkaterületek"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"filter": "Tanggapan filter",
|
"filter": "Tanggapan filter",
|
||||||
"go_back": "Kembali",
|
"go_back": "Kembali",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Label",
|
"label": "Label",
|
||||||
"learn_more": "Pelajari lebih lanjut",
|
"learn_more": "Pelajari lebih lanjut",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Koleksi dibuat",
|
"created": "Koleksi dibuat",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"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",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"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",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"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?",
|
||||||
"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."
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen mode"
|
"zen_mode": "Zen mode"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Koleksi",
|
"collections": "Koleksi",
|
||||||
"confirm": "Mengonfirmasi",
|
"confirm": "Mengonfirmasi",
|
||||||
"edit_request": "Edit Request",
|
"edit_request": "Edit Request",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Salin tautan",
|
"copy_link": "Salin tautan",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Durasi",
|
"duration": "Durasi",
|
||||||
"enter_curl": "Masukkan cURL",
|
"enter_curl": "Masukkan cURL",
|
||||||
"generate_code": "Generate code",
|
"generate_code": "Generate code",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"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",
|
||||||
"name": "Request nama",
|
"name": "Request nama",
|
||||||
"new": "Request baru",
|
"new": "Request baru",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"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",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "Lihat tautan saya"
|
"view_my_links": "Lihat tautan saya"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Response Body",
|
"body": "Response Body",
|
||||||
"filter_response_body": "Filter body respons JSON (menggunakan sintaks JSONPath)",
|
"filter_response_body": "Filter body respons JSON (menggunakan sintaks JSONPath)",
|
||||||
"headers": "Headers",
|
"headers": "Headers",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Waktu",
|
"time": "Waktu",
|
||||||
"title": "Response",
|
"title": "Response",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "Menunggu koneksi",
|
"waiting_for_connection": "Menunggu koneksi",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Body",
|
"body": "Body",
|
||||||
"collections": "Collections",
|
"collections": "Collections",
|
||||||
"documentation": "Dokumentasi",
|
"documentation": "Dokumentasi",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Headers",
|
"headers": "Headers",
|
||||||
"history": "Riwayat",
|
"history": "Riwayat",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,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_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",
|
||||||
@@ -675,6 +690,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",
|
||||||
"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",
|
||||||
@@ -682,10 +698,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.",
|
||||||
"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",
|
||||||
"pending_invites": "Undangan tertunda",
|
"pending_invites": "Undangan tertunda",
|
||||||
"permissions": "Izin",
|
"permissions": "Izin",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Tim disimpan",
|
"saved": "Tim disimpan",
|
||||||
"select_a_team": "Pilih tim",
|
"select_a_team": "Pilih tim",
|
||||||
"title": "tim",
|
"title": "tim",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Pesan",
|
"message": "Pesan",
|
||||||
"protocols": "Protokol",
|
"protocols": "Protokol",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Modifica",
|
"edit": "Modifica",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Torna indietro",
|
"go_back": "Torna indietro",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etichetta",
|
"label": "Etichetta",
|
||||||
"learn_more": "Per saperne di più",
|
"learn_more": "Per saperne di più",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Raccolta creata",
|
"created": "Raccolta creata",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Modifica raccolta",
|
"edit": "Modifica raccolta",
|
||||||
"invalid_name": "Si prega di fornire un nome valido per la raccolta",
|
"invalid_name": "Si prega di fornire un nome valido per la raccolta",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Le Mie Raccolte",
|
"my_collections": "Le Mie Raccolte",
|
||||||
"name": "La mia nuova raccolta",
|
"name": "La mia nuova raccolta",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Nuova raccolta",
|
"new": "Nuova raccolta",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Sei sicuro di voler eliminare questo team?",
|
"remove_team": "Sei sicuro di voler eliminare questo team?",
|
||||||
"remove_telemetry": "Sei sicuro di voler disattivare la telemetria?",
|
"remove_telemetry": "Sei sicuro di voler disattivare la telemetria?",
|
||||||
"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?",
|
||||||
"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."
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Modalità zen"
|
"zen_mode": "Modalità zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Raccolte",
|
"collections": "Raccolte",
|
||||||
"confirm": "Conferma",
|
"confirm": "Conferma",
|
||||||
"edit_request": "Modifica richiesta",
|
"edit_request": "Modifica richiesta",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Copia collegamento",
|
"copy_link": "Copia collegamento",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Durata",
|
"duration": "Durata",
|
||||||
"enter_curl": "Inserisci cURL",
|
"enter_curl": "Inserisci cURL",
|
||||||
"generate_code": "Genera codice",
|
"generate_code": "Genera codice",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Elenco intestazioni",
|
"header_list": "Elenco intestazioni",
|
||||||
"invalid_name": "Si prega di fornire un nome per la richiesta",
|
"invalid_name": "Si prega di fornire un nome per la richiesta",
|
||||||
"method": "Metodo",
|
"method": "Metodo",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Nome richiesta",
|
"name": "Nome richiesta",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Corpo della risposta",
|
"body": "Corpo della risposta",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Intestazioni",
|
"headers": "Intestazioni",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Stato",
|
"status": "Stato",
|
||||||
"time": "Tempo impiegato",
|
"time": "Tempo impiegato",
|
||||||
"title": "Risposta",
|
"title": "Risposta",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "In attesa di connessione",
|
"waiting_for_connection": "In attesa di connessione",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Corpo",
|
"body": "Corpo",
|
||||||
"collections": "Raccolte",
|
"collections": "Raccolte",
|
||||||
"documentation": "Documentazione",
|
"documentation": "Documentazione",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Intestazioni",
|
"headers": "Intestazioni",
|
||||||
"history": "Cronologia",
|
"history": "Cronologia",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "L'indirizzo email non corrisponde a quella del tuo account. Contatta il proprietario del team.",
|
"email_do_not_match": "L'indirizzo email non corrisponde a quella del tuo account. Contatta il proprietario del team.",
|
||||||
"exit": "Lascia il team",
|
"exit": "Lascia il team",
|
||||||
"exit_disabled": "Solo il proprietario non può lasciare il team",
|
"exit_disabled": "Solo il proprietario non può lasciare il team",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Il formato dell'email non è valido",
|
"invalid_email_format": "Il formato dell'email non è valido",
|
||||||
"invalid_id": "L'ID del team non è valido. Contatta il proprietario del team.",
|
"invalid_id": "L'ID del team non è valido. Contatta il proprietario del team.",
|
||||||
"invalid_invite_link": "Il link di invito non è valido",
|
"invalid_invite_link": "Il link di invito non è valido",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Utente rimosso",
|
"member_removed": "Utente rimosso",
|
||||||
"member_role_updated": "Ruoli dell'utente aggiornati",
|
"member_role_updated": "Ruoli dell'utente aggiornati",
|
||||||
"members": "Membri",
|
"members": "Membri",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Il nome del team deve essere lungo almeno 6 caratteri",
|
"name_length_insufficient": "Il nome del team deve essere lungo almeno 6 caratteri",
|
||||||
"name_updated": "Nome del team aggiornato",
|
"name_updated": "Nome del team aggiornato",
|
||||||
"new": "Nuovo team",
|
"new": "Nuovo team",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Il mio nuovo team",
|
"new_name": "Il mio nuovo team",
|
||||||
"no_access": "Non sei autorizzato a modificare queste raccolte",
|
"no_access": "Non sei autorizzato a modificare queste raccolte",
|
||||||
"no_invite_found": "Invito non trovato. Contatta il proprietario del team.",
|
"no_invite_found": "Invito non trovato. Contatta il proprietario del team.",
|
||||||
|
"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": "Non sei autorizzato a visualizzare. Contatta il proprietario del team.",
|
"not_valid_viewer": "Non sei autorizzato a visualizzare. Contatta il proprietario del team.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Inviti pendenti",
|
"pending_invites": "Inviti pendenti",
|
||||||
"permissions": "Permessi",
|
"permissions": "Permessi",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Team salvato",
|
"saved": "Team salvato",
|
||||||
"select_a_team": "Seleziona un team",
|
"select_a_team": "Seleziona un team",
|
||||||
"title": "Team",
|
"title": "Team",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Messaggio",
|
"message": "Messaggio",
|
||||||
"protocols": "Protocolli",
|
"protocols": "Protocolli",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "編集",
|
"edit": "編集",
|
||||||
"filter": "フィルター",
|
"filter": "フィルター",
|
||||||
"go_back": "戻る",
|
"go_back": "戻る",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "グループ化",
|
"group_by": "グループ化",
|
||||||
"label": "ラベル",
|
"label": "ラベル",
|
||||||
"learn_more": "もっと詳しく",
|
"learn_more": "もっと詳しく",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "コレクションが作成されました",
|
"created": "コレクションが作成されました",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "コレクションの編集",
|
"edit": "コレクションの編集",
|
||||||
"invalid_name": "コレクション名を入力してください",
|
"invalid_name": "コレクション名を入力してください",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "マイコレクション",
|
"my_collections": "マイコレクション",
|
||||||
"name": "新しいマイコレクション",
|
"name": "新しいマイコレクション",
|
||||||
"name_length_insufficient": "コレクション名は3文字以上である必要があります",
|
"name_length_insufficient": "コレクション名は3文字以上である必要があります",
|
||||||
"new": "新しいコレクション",
|
"new": "新しいコレクション",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "コレクション名が変更されました",
|
"renamed": "コレクション名が変更されました",
|
||||||
"request_in_use": "使用中のリクエスト",
|
"request_in_use": "使用中のリクエスト",
|
||||||
"save_as": "名前を付けて保存",
|
"save_as": "名前を付けて保存",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "このチームを削除してもよろしいですか?",
|
"remove_team": "このチームを削除してもよろしいですか?",
|
||||||
"remove_telemetry": "テレメトリをオプトアウトしてもよろしいですか?",
|
"remove_telemetry": "テレメトリをオプトアウトしてもよろしいですか?",
|
||||||
"request_change": "現在のリクエストを削除してもよろしいですか?保存されていない変更は削除されます。",
|
"request_change": "現在のリクエストを削除してもよろしいですか?保存されていない変更は削除されます。",
|
||||||
|
"save_unsaved_tab": "Do you want to save changes made in this tab?",
|
||||||
"sync": "クラウドからワークスペースを復元しますか?この場合、ローカルの進行状況は破棄されます。"
|
"sync": "クラウドからワークスペースを復元しますか?この場合、ローカルの進行状況は破棄されます。"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "禅モード"
|
"zen_mode": "禅モード"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "コレクション",
|
"collections": "コレクション",
|
||||||
"confirm": "確認",
|
"confirm": "確認",
|
||||||
"edit_request": "リクエストの編集",
|
"edit_request": "リクエストの編集",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "テキスト"
|
"text": "テキスト"
|
||||||
},
|
},
|
||||||
"copy_link": "リンクをコピー",
|
"copy_link": "リンクをコピー",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "間隔",
|
"duration": "間隔",
|
||||||
"enter_curl": "cURLコマンドを入力してください",
|
"enter_curl": "cURLコマンドを入力してください",
|
||||||
"generate_code": "コードを生成",
|
"generate_code": "コードを生成",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "ヘッダーリスト",
|
"header_list": "ヘッダーリスト",
|
||||||
"invalid_name": "リクエスト名を入力してください",
|
"invalid_name": "リクエスト名を入力してください",
|
||||||
"method": "メソッド",
|
"method": "メソッド",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "リクエスト名",
|
"name": "リクエスト名",
|
||||||
"new": "新しいリクエスト",
|
"new": "新しいリクエスト",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "上書き",
|
"override": "上書き",
|
||||||
"override_help": "リクエストの <kbd>Content-Type</kbd> ヘッダを上書き",
|
"override_help": "リクエストの <kbd>Content-Type</kbd> ヘッダを上書き",
|
||||||
"overriden": "上書きされました",
|
"overriden": "上書きされました",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "自分のリンクを見る"
|
"view_my_links": "自分のリンクを見る"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "レスポンスボディ",
|
"body": "レスポンスボディ",
|
||||||
"filter_response_body": "JSONレスポンスボディをフィルタ (JSONPathシンタックスを使用)",
|
"filter_response_body": "JSONレスポンスボディをフィルタ (JSONPathシンタックスを使用)",
|
||||||
"headers": "ヘッダー",
|
"headers": "ヘッダー",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "ステータス",
|
"status": "ステータス",
|
||||||
"time": "時間",
|
"time": "時間",
|
||||||
"title": "レスポンス",
|
"title": "レスポンス",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "接続を待っています",
|
"waiting_for_connection": "接続を待っています",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -455,8 +468,8 @@
|
|||||||
"experiments": "試験的な機能",
|
"experiments": "試験的な機能",
|
||||||
"experiments_notice": "これらは試験的に実装している機能で、役に立つかもしれないし、楽しいかもしれないし、両方かもしれないし、はたまたどちらでもないかもしれません。これらは未完成で、安定したものではありません。何か問題がありましたら、こちらより報告をお願いします。→",
|
"experiments_notice": "これらは試験的に実装している機能で、役に立つかもしれないし、楽しいかもしれないし、両方かもしれないし、はたまたどちらでもないかもしれません。これらは未完成で、安定したものではありません。何か問題がありましたら、こちらより報告をお願いします。→",
|
||||||
"extension_ver_not_reported": "未報告",
|
"extension_ver_not_reported": "未報告",
|
||||||
"extensions": "拡張機能",
|
|
||||||
"extension_version": "ブラウザ拡張機能のバージョン",
|
"extension_version": "ブラウザ拡張機能のバージョン",
|
||||||
|
"extensions": "拡張機能",
|
||||||
"extensions_use_toggle": "ブラウザ拡張機能を使用してリクエストを送信する(利用可能な場合)",
|
"extensions_use_toggle": "ブラウザ拡張機能を使用してリクエストを送信する(利用可能な場合)",
|
||||||
"follow": "フォローする",
|
"follow": "フォローする",
|
||||||
"font_size": "フォントサイズ",
|
"font_size": "フォントサイズ",
|
||||||
@@ -581,6 +594,9 @@
|
|||||||
"connected": "接続済み",
|
"connected": "接続済み",
|
||||||
"connected_to": "{名前}に接続しました",
|
"connected_to": "{名前}に接続しました",
|
||||||
"connecting_to": "{名前}に接続しています...",
|
"connecting_to": "{名前}に接続しています...",
|
||||||
|
"connection_error": "Failed to connect",
|
||||||
|
"connection_failed": "Connection failed",
|
||||||
|
"connection_lost": "Connection lost",
|
||||||
"copied_to_clipboard": "クリップボードにコピーしました",
|
"copied_to_clipboard": "クリップボードにコピーしました",
|
||||||
"deleted": "削除されました",
|
"deleted": "削除されました",
|
||||||
"deprecated": "非推奨",
|
"deprecated": "非推奨",
|
||||||
@@ -625,6 +641,7 @@
|
|||||||
"body": "ボディ",
|
"body": "ボディ",
|
||||||
"collections": "コレクション",
|
"collections": "コレクション",
|
||||||
"documentation": "ドキュメント",
|
"documentation": "ドキュメント",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "ヘッダー",
|
"headers": "ヘッダー",
|
||||||
"history": "履歴",
|
"history": "履歴",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -649,6 +666,7 @@
|
|||||||
"email_do_not_match": "メールアドレスがアカウント情報と一致しません。チームの管理者に連絡してください。",
|
"email_do_not_match": "メールアドレスがアカウント情報と一致しません。チームの管理者に連絡してください。",
|
||||||
"exit": "チームから退出",
|
"exit": "チームから退出",
|
||||||
"exit_disabled": "管理者はチームから退出できません",
|
"exit_disabled": "管理者はチームから退出できません",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "メールアドレスの形式が無効です",
|
"invalid_email_format": "メールアドレスの形式が無効です",
|
||||||
"invalid_id": "チームIDが無効です。チームの管理者に連絡してください。",
|
"invalid_id": "チームIDが無効です。チームの管理者に連絡してください。",
|
||||||
"invalid_invite_link": "招待リンクが無効です",
|
"invalid_invite_link": "招待リンクが無効です",
|
||||||
@@ -672,6 +690,7 @@
|
|||||||
"member_removed": "ユーザーが削除されました",
|
"member_removed": "ユーザーが削除されました",
|
||||||
"member_role_updated": "ユーザーロールが更新されました",
|
"member_role_updated": "ユーザーロールが更新されました",
|
||||||
"members": "メンバー",
|
"members": "メンバー",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "チーム名は6文字以上である必要があります",
|
"name_length_insufficient": "チーム名は6文字以上である必要があります",
|
||||||
"name_updated": "チーム名が更新されました",
|
"name_updated": "チーム名が更新されました",
|
||||||
"new": "新しいチーム",
|
"new": "新しいチーム",
|
||||||
@@ -679,10 +698,13 @@
|
|||||||
"new_name": "私の新しいチーム",
|
"new_name": "私の新しいチーム",
|
||||||
"no_access": "これらのコレクションを編集することはできません",
|
"no_access": "これらのコレクションを編集することはできません",
|
||||||
"no_invite_found": "招待が見つかりません。チームの管理者に連絡してください。",
|
"no_invite_found": "招待が見つかりません。チームの管理者に連絡してください。",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "チームが見つかりません。チームの管理者に連絡してください。",
|
"not_found": "チームが見つかりません。チームの管理者に連絡してください。",
|
||||||
"not_valid_viewer": "あなたは有効な閲覧者ではありません。チームの管理者に連絡してください。",
|
"not_valid_viewer": "あなたは有効な閲覧者ではありません。チームの管理者に連絡してください。",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "招待の保留",
|
"pending_invites": "招待の保留",
|
||||||
"permissions": "権限",
|
"permissions": "権限",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "チームが保存されました",
|
"saved": "チームが保存されました",
|
||||||
"select_a_team": "チームを選択",
|
"select_a_team": "チームを選択",
|
||||||
"title": "チーム",
|
"title": "チーム",
|
||||||
@@ -710,5 +732,11 @@
|
|||||||
"message": "メッセージ",
|
"message": "メッセージ",
|
||||||
"protocols": "プロトコル",
|
"protocols": "プロトコル",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "편집",
|
"edit": "편집",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "돌아가기",
|
"go_back": "돌아가기",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "이름",
|
"label": "이름",
|
||||||
"learn_more": "더 알아보기",
|
"learn_more": "더 알아보기",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "모음집 생성됨",
|
"created": "모음집 생성됨",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "모음집 편집",
|
"edit": "모음집 편집",
|
||||||
"invalid_name": "모음집 이름을 바르게 입력하세요.",
|
"invalid_name": "모음집 이름을 바르게 입력하세요.",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "내 모음집",
|
"my_collections": "내 모음집",
|
||||||
"name": "내 새 모음집",
|
"name": "내 새 모음집",
|
||||||
"name_length_insufficient": "모음집 이름은 최소 세 글자 이상이어야 합니다.",
|
"name_length_insufficient": "모음집 이름은 최소 세 글자 이상이어야 합니다.",
|
||||||
"new": "새 모음집",
|
"new": "새 모음집",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "모음집 이름이 변경됨",
|
"renamed": "모음집 이름이 변경됨",
|
||||||
"request_in_use": "사용 중인 요청",
|
"request_in_use": "사용 중인 요청",
|
||||||
"save_as": "다른 이름으로 저장",
|
"save_as": "다른 이름으로 저장",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "이 팀을 삭제하겠습니까?",
|
"remove_team": "이 팀을 삭제하겠습니까?",
|
||||||
"remove_telemetry": "진단 데이터를 보내지 않겠습니까?",
|
"remove_telemetry": "진단 데이터를 보내지 않겠습니까?",
|
||||||
"request_change": "현재 요청을 취소하시겠습니까? 저장되지 않은 변경사항은 삭제됩니다.",
|
"request_change": "현재 요청을 취소하시겠습니까? 저장되지 않은 변경사항은 삭제됩니다.",
|
||||||
|
"save_unsaved_tab": "Do you want to save changes made in this tab?",
|
||||||
"sync": "이 작업 공간을 동기화하겠습니까?"
|
"sync": "이 작업 공간을 동기화하겠습니까?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "전체화면"
|
"zen_mode": "전체화면"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "모음집",
|
"collections": "모음집",
|
||||||
"confirm": "확인",
|
"confirm": "확인",
|
||||||
"edit_request": "요청 수정",
|
"edit_request": "요청 수정",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "링크 복사",
|
"copy_link": "링크 복사",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "소요 시간",
|
"duration": "소요 시간",
|
||||||
"enter_curl": "cURL 입력",
|
"enter_curl": "cURL 입력",
|
||||||
"generate_code": "코드 생성",
|
"generate_code": "코드 생성",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "헤더 목록",
|
"header_list": "헤더 목록",
|
||||||
"invalid_name": "요청 이름을 바르게 입력하세요.",
|
"invalid_name": "요청 이름을 바르게 입력하세요.",
|
||||||
"method": "메서드",
|
"method": "메서드",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "요청 이름",
|
"name": "요청 이름",
|
||||||
"new": "새로운 요청",
|
"new": "새로운 요청",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "덮어쓰기",
|
"override": "덮어쓰기",
|
||||||
"override_help": "헤더에 <kbd>Content-Type</kbd>를 설정해주세요.",
|
"override_help": "헤더에 <kbd>Content-Type</kbd>를 설정해주세요.",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "내 링크 보기"
|
"view_my_links": "내 링크 보기"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "응답 본문",
|
"body": "응답 본문",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "헤더",
|
"headers": "헤더",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "상태",
|
"status": "상태",
|
||||||
"time": "시간",
|
"time": "시간",
|
||||||
"title": "제목",
|
"title": "제목",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "연결 대기 중",
|
"waiting_for_connection": "연결 대기 중",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "본문",
|
"body": "본문",
|
||||||
"collections": "모음집",
|
"collections": "모음집",
|
||||||
"documentation": "문서",
|
"documentation": "문서",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "헤더",
|
"headers": "헤더",
|
||||||
"history": "이력",
|
"history": "이력",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "이 계정의 이메일이 일치하지 않습니다. 팀 소유자에게 문의하세요.",
|
"email_do_not_match": "이 계정의 이메일이 일치하지 않습니다. 팀 소유자에게 문의하세요.",
|
||||||
"exit": "팀 나가기",
|
"exit": "팀 나가기",
|
||||||
"exit_disabled": "소유자는 팀을 나갈 수 없습니다.",
|
"exit_disabled": "소유자는 팀을 나갈 수 없습니다.",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "이메일을 바르게 입력하세요.",
|
"invalid_email_format": "이메일을 바르게 입력하세요.",
|
||||||
"invalid_id": "팀 아이디가 올바르지 않습니다. 팀 소유자에게 문의하세요.",
|
"invalid_id": "팀 아이디가 올바르지 않습니다. 팀 소유자에게 문의하세요.",
|
||||||
"invalid_invite_link": "초대 링크가 올바르지 않습니다.",
|
"invalid_invite_link": "초대 링크가 올바르지 않습니다.",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "사용자가 삭제됨",
|
"member_removed": "사용자가 삭제됨",
|
||||||
"member_role_updated": "사용자 역할 업데이트됨",
|
"member_role_updated": "사용자 역할 업데이트됨",
|
||||||
"members": "구성원",
|
"members": "구성원",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "팀 이름은 여섯 글자 이상이어야 합니다.",
|
"name_length_insufficient": "팀 이름은 여섯 글자 이상이어야 합니다.",
|
||||||
"name_updated": "팀 이름 업데이트됨",
|
"name_updated": "팀 이름 업데이트됨",
|
||||||
"new": "새 팀",
|
"new": "새 팀",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "새 팀",
|
"new_name": "새 팀",
|
||||||
"no_access": "이 모음집을 수정할 권한이 없습니다.",
|
"no_access": "이 모음집을 수정할 권한이 없습니다.",
|
||||||
"no_invite_found": "초대 내역을 찾을 수 없습니다. 팀 소유자에게 문의하세요.",
|
"no_invite_found": "초대 내역을 찾을 수 없습니다. 팀 소유자에게 문의하세요.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "팀을 찾을 수 없습니다. 팀 소유자에게 문의하세요.",
|
"not_found": "팀을 찾을 수 없습니다. 팀 소유자에게 문의하세요.",
|
||||||
"not_valid_viewer": "뷰어 권한이 없습니다. 팀 소유자에게 문의하세요.",
|
"not_valid_viewer": "뷰어 권한이 없습니다. 팀 소유자에게 문의하세요.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "응답을 기다리는 초대",
|
"pending_invites": "응답을 기다리는 초대",
|
||||||
"permissions": "권한",
|
"permissions": "권한",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "팀이 저장됨",
|
"saved": "팀이 저장됨",
|
||||||
"select_a_team": "팀을 선택하세요.",
|
"select_a_team": "팀을 선택하세요.",
|
||||||
"title": "팀",
|
"title": "팀",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "메시지",
|
"message": "메시지",
|
||||||
"protocols": "프로토콜",
|
"protocols": "프로토콜",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Bewerking",
|
"edit": "Bewerking",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Ga terug",
|
"go_back": "Ga terug",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Label",
|
"label": "Label",
|
||||||
"learn_more": "Leer meer",
|
"learn_more": "Leer meer",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Collectie gemaakt",
|
"created": "Collectie gemaakt",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Verzameling bewerken",
|
"edit": "Verzameling bewerken",
|
||||||
"invalid_name": "Geef een geldige naam op voor de collectie",
|
"invalid_name": "Geef een geldige naam op voor de collectie",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Mijn collecties",
|
"my_collections": "Mijn collecties",
|
||||||
"name": "Mijn nieuwe collectie",
|
"name": "Mijn nieuwe collectie",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Nieuwe collectie",
|
"new": "Nieuwe collectie",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Weet je zeker dat je dit team wilt verwijderen?",
|
"remove_team": "Weet je zeker dat je dit team wilt verwijderen?",
|
||||||
"remove_telemetry": "Weet u zeker dat u zich wilt afmelden voor telemetrie?",
|
"remove_telemetry": "Weet u zeker dat u zich wilt afmelden voor telemetrie?",
|
||||||
"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?",
|
||||||
"sync": "Weet u zeker dat u deze werkruimte wilt synchroniseren?"
|
"sync": "Weet u zeker dat u deze werkruimte wilt synchroniseren?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen-modus"
|
"zen_mode": "Zen-modus"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Collecties",
|
"collections": "Collecties",
|
||||||
"confirm": "Bevestigen",
|
"confirm": "Bevestigen",
|
||||||
"edit_request": "Verzoek bewerken",
|
"edit_request": "Verzoek bewerken",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopieer link",
|
"copy_link": "Kopieer link",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Duur",
|
"duration": "Duur",
|
||||||
"enter_curl": "Voer cURL . in",
|
"enter_curl": "Voer cURL . in",
|
||||||
"generate_code": "Genereer code",
|
"generate_code": "Genereer code",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Koplijst",
|
"header_list": "Koplijst",
|
||||||
"invalid_name": "Geef een naam op voor het verzoek",
|
"invalid_name": "Geef een naam op voor het verzoek",
|
||||||
"method": "Methode",
|
"method": "Methode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Naam aanvragen",
|
"name": "Naam aanvragen",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Reactie inhoud",
|
"body": "Reactie inhoud",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Headers",
|
"headers": "Headers",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tijd",
|
"time": "Tijd",
|
||||||
"title": "Antwoord",
|
"title": "Antwoord",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "wachten op verbinding",
|
"waiting_for_connection": "wachten op verbinding",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Inhoud",
|
"body": "Inhoud",
|
||||||
"collections": "Collecties",
|
"collections": "Collecties",
|
||||||
"documentation": "Documentatie",
|
"documentation": "Documentatie",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Headers",
|
"headers": "Headers",
|
||||||
"history": "Geschiedenis",
|
"history": "Geschiedenis",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Team verlaten",
|
"exit": "Team verlaten",
|
||||||
"exit_disabled": "Alleen de eigenaar kan het team niet verlaten",
|
"exit_disabled": "Alleen de eigenaar kan het team niet verlaten",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "E-mailindeling is ongeldig",
|
"invalid_email_format": "E-mailindeling is ongeldig",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Gebruiker verwijderd",
|
"member_removed": "Gebruiker verwijderd",
|
||||||
"member_role_updated": "Gebruikersrollen bijgewerkt",
|
"member_role_updated": "Gebruikersrollen bijgewerkt",
|
||||||
"members": "Leden",
|
"members": "Leden",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Teamnaam moet minimaal 6 tekens lang zijn",
|
"name_length_insufficient": "Teamnaam moet minimaal 6 tekens lang zijn",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nieuw team",
|
"new": "Nieuw team",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Mijn nieuwe team",
|
"new_name": "Mijn nieuwe team",
|
||||||
"no_access": "U heeft geen bewerkingsrechten voor deze collecties",
|
"no_access": "U heeft geen bewerkingsrechten voor deze collecties",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Rechten",
|
"permissions": "Rechten",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Team gered",
|
"saved": "Team gered",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "teams",
|
"title": "teams",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Bericht",
|
"message": "Bericht",
|
||||||
"protocols": "Protocollen",
|
"protocols": "Protocollen",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Rediger",
|
"edit": "Rediger",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Gå tilbake",
|
"go_back": "Gå tilbake",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Merkelapp",
|
"label": "Merkelapp",
|
||||||
"learn_more": "Lær mer",
|
"learn_more": "Lær mer",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Samlingen er opprettet",
|
"created": "Samlingen er opprettet",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Rediger samling",
|
"edit": "Rediger samling",
|
||||||
"invalid_name": "Oppgi et gyldig navn på samlingen",
|
"invalid_name": "Oppgi et gyldig navn på samlingen",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Mine samlinger",
|
"my_collections": "Mine samlinger",
|
||||||
"name": "Min nye samling",
|
"name": "Min nye samling",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Ny kolleksjon",
|
"new": "Ny kolleksjon",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Er du sikker på at du vil slette dette laget?",
|
"remove_team": "Er du sikker på at du vil slette dette laget?",
|
||||||
"remove_telemetry": "Er du sikker på at du vil velge bort telemetri?",
|
"remove_telemetry": "Er du sikker på at du vil velge bort telemetri?",
|
||||||
"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?",
|
||||||
"sync": "Er du sikker på at du vil synkronisere dette arbeidsområdet?"
|
"sync": "Er du sikker på at du vil synkronisere dette arbeidsområdet?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen-modus"
|
"zen_mode": "Zen-modus"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Samlinger",
|
"collections": "Samlinger",
|
||||||
"confirm": "Bekrefte",
|
"confirm": "Bekrefte",
|
||||||
"edit_request": "Rediger forespørsel",
|
"edit_request": "Rediger forespørsel",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopier link",
|
"copy_link": "Kopier link",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Varighet",
|
"duration": "Varighet",
|
||||||
"enter_curl": "Skriv inn cURL",
|
"enter_curl": "Skriv inn cURL",
|
||||||
"generate_code": "Generer kode",
|
"generate_code": "Generer kode",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Toppliste",
|
"header_list": "Toppliste",
|
||||||
"invalid_name": "Oppgi et navn på forespørselen",
|
"invalid_name": "Oppgi et navn på forespørselen",
|
||||||
"method": "Metode",
|
"method": "Metode",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Forespørselsnavn",
|
"name": "Forespørselsnavn",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Svarkropp",
|
"body": "Svarkropp",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Overskrifter",
|
"headers": "Overskrifter",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tid",
|
"time": "Tid",
|
||||||
"title": "Respons",
|
"title": "Respons",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "venter på tilkobling",
|
"waiting_for_connection": "venter på tilkobling",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Kropp",
|
"body": "Kropp",
|
||||||
"collections": "Samlinger",
|
"collections": "Samlinger",
|
||||||
"documentation": "Dokumentasjon",
|
"documentation": "Dokumentasjon",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Overskrifter",
|
"headers": "Overskrifter",
|
||||||
"history": "Historie",
|
"history": "Historie",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Avslutt Team",
|
"exit": "Avslutt Team",
|
||||||
"exit_disabled": "Bare eieren kan ikke gå ut av teamet",
|
"exit_disabled": "Bare eieren kan ikke gå ut av teamet",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "E -postformatet er ugyldig",
|
"invalid_email_format": "E -postformatet er ugyldig",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Bruker fjernet",
|
"member_removed": "Bruker fjernet",
|
||||||
"member_role_updated": "Brukerroller er oppdatert",
|
"member_role_updated": "Brukerroller er oppdatert",
|
||||||
"members": "Medlemmer",
|
"members": "Medlemmer",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Lagnavnet bør være minst 6 tegn langt",
|
"name_length_insufficient": "Lagnavnet bør være minst 6 tegn langt",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nytt lag",
|
"new": "Nytt lag",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Mitt nye lag",
|
"new_name": "Mitt nye lag",
|
||||||
"no_access": "Du har ikke redigeringstilgang til disse samlingene",
|
"no_access": "Du har ikke redigeringstilgang til disse samlingene",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Tillatelser",
|
"permissions": "Tillatelser",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Lag reddet",
|
"saved": "Lag reddet",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Lag",
|
"title": "Lag",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Beskjed",
|
"message": "Beskjed",
|
||||||
"protocols": "Protokoller",
|
"protocols": "Protokoller",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Edytuj",
|
"edit": "Edytuj",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Wróć",
|
"go_back": "Wróć",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etykieta",
|
"label": "Etykieta",
|
||||||
"learn_more": "Dowiedz się więcej",
|
"learn_more": "Dowiedz się więcej",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Utworzono kolekcję",
|
"created": "Utworzono kolekcję",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Edytuj kolekcję",
|
"edit": "Edytuj kolekcję",
|
||||||
"invalid_name": "Podaj prawidłową nazwę kolekcji",
|
"invalid_name": "Podaj prawidłową nazwę kolekcji",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Moje kolekcje",
|
"my_collections": "Moje kolekcje",
|
||||||
"name": "Moja nowa kolekcja",
|
"name": "Moja nowa kolekcja",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Nowa kolekcja",
|
"new": "Nowa kolekcja",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Czy na pewno chcesz usunąć ten zespół?",
|
"remove_team": "Czy na pewno chcesz usunąć ten zespół?",
|
||||||
"remove_telemetry": "Czy na pewno chcesz zrezygnować z telemetrii?",
|
"remove_telemetry": "Czy na pewno chcesz zrezygnować z telemetrii?",
|
||||||
"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?",
|
||||||
"sync": "Czy na pewno chcesz zsynchronizować ten obszar roboczy?"
|
"sync": "Czy na pewno chcesz zsynchronizować ten obszar roboczy?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Tryb Zen"
|
"zen_mode": "Tryb Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Kolekcje",
|
"collections": "Kolekcje",
|
||||||
"confirm": "Potwierdź",
|
"confirm": "Potwierdź",
|
||||||
"edit_request": "Edytuj żądanie",
|
"edit_request": "Edytuj żądanie",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Skopiuj link",
|
"copy_link": "Skopiuj link",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Czas trwania",
|
"duration": "Czas trwania",
|
||||||
"enter_curl": "Wpisz cURL",
|
"enter_curl": "Wpisz cURL",
|
||||||
"generate_code": "Wygeneruj kod",
|
"generate_code": "Wygeneruj kod",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Lista nagłówków",
|
"header_list": "Lista nagłówków",
|
||||||
"invalid_name": "Podaj nazwę żądania",
|
"invalid_name": "Podaj nazwę żądania",
|
||||||
"method": "metoda",
|
"method": "metoda",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Nazwa",
|
"name": "Nazwa",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Ciało odpowiedzi",
|
"body": "Ciało odpowiedzi",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Nagłówki",
|
"headers": "Nagłówki",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Czas",
|
"time": "Czas",
|
||||||
"title": "Odpowiedź",
|
"title": "Odpowiedź",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "oczekiwanie na połączenie",
|
"waiting_for_connection": "oczekiwanie na połączenie",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Ciało",
|
"body": "Ciało",
|
||||||
"collections": "Kolekcje",
|
"collections": "Kolekcje",
|
||||||
"documentation": "Dokumentacja",
|
"documentation": "Dokumentacja",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Nagłówki",
|
"headers": "Nagłówki",
|
||||||
"history": "Historia",
|
"history": "Historia",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Opóść zespół",
|
"exit": "Opóść zespół",
|
||||||
"exit_disabled": "Tylko właściciel nie może opuścić zespołu",
|
"exit_disabled": "Tylko właściciel nie może opuścić zespołu",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Format e-maila jest nieprawidłowy",
|
"invalid_email_format": "Format e-maila jest nieprawidłowy",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Użytkownik usunięty",
|
"member_removed": "Użytkownik usunięty",
|
||||||
"member_role_updated": "Zaktualizowano role użytkowników",
|
"member_role_updated": "Zaktualizowano role użytkowników",
|
||||||
"members": "Członkowie",
|
"members": "Członkowie",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Nazwa zespołu powinna mieć co najmniej 6 znaków",
|
"name_length_insufficient": "Nazwa zespołu powinna mieć co najmniej 6 znaków",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nowy zespół",
|
"new": "Nowy zespół",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Mój nowy zespół",
|
"new_name": "Mój nowy zespół",
|
||||||
"no_access": "Nie masz uprawnień do edycji tych kolekcji",
|
"no_access": "Nie masz uprawnień do edycji tych kolekcji",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Uprawnienia",
|
"permissions": "Uprawnienia",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Zespół zapisany",
|
"saved": "Zespół zapisany",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Zespoły",
|
"title": "Zespoły",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Wiadomość",
|
"message": "Wiadomość",
|
||||||
"protocols": "Protokoły",
|
"protocols": "Protokoły",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Voltar",
|
"go_back": "Voltar",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiqueta",
|
"label": "Etiqueta",
|
||||||
"learn_more": "Saber mais",
|
"learn_more": "Saber mais",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Coleção criada",
|
"created": "Coleção criada",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Editar coleção",
|
"edit": "Editar coleção",
|
||||||
"invalid_name": "Forneça um nome válido para a coleção",
|
"invalid_name": "Forneça um nome válido para a coleção",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Minhas coleções",
|
"my_collections": "Minhas coleções",
|
||||||
"name": "Minha nova coleção",
|
"name": "Minha nova coleção",
|
||||||
"name_length_insufficient": "O nome da coleção deve ter pelo menos 3 caracteres",
|
"name_length_insufficient": "O nome da coleção deve ter pelo menos 3 caracteres",
|
||||||
"new": "Nova coleção",
|
"new": "Nova coleção",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Tem certeza que deseja excluir esta equipe?",
|
"remove_team": "Tem certeza que deseja excluir esta equipe?",
|
||||||
"remove_telemetry": "Tem certeza de que deseja cancelar a telemetria?",
|
"remove_telemetry": "Tem certeza de que deseja cancelar a telemetria?",
|
||||||
"request_change": "Tem certeza que deseja descartar a requisição atual? Alterações não salvas serão perdidas.",
|
"request_change": "Tem certeza que deseja descartar a requisição atual? Alterações não salvas serão perdidas.",
|
||||||
|
"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?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Modo zen"
|
"zen_mode": "Modo zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Coleções",
|
"collections": "Coleções",
|
||||||
"confirm": "confirme",
|
"confirm": "confirme",
|
||||||
"edit_request": "Editar pedido",
|
"edit_request": "Editar pedido",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Link de cópia",
|
"copy_link": "Link de cópia",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Duração",
|
"duration": "Duração",
|
||||||
"enter_curl": "Digite cURL",
|
"enter_curl": "Digite cURL",
|
||||||
"generate_code": "Gerar código",
|
"generate_code": "Gerar código",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Lista de Cabeçalhos",
|
"header_list": "Lista de Cabeçalhos",
|
||||||
"invalid_name": "Forneça um nome para a requisição",
|
"invalid_name": "Forneça um nome para a requisição",
|
||||||
"method": "Método",
|
"method": "Método",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Nome da requisição",
|
"name": "Nome da requisição",
|
||||||
"new": "Nova requisição",
|
"new": "Nova requisição",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Substituir",
|
"override": "Substituir",
|
||||||
"override_help": "Substituir <kbd>Content-Type</kbd> em Headers",
|
"override_help": "Substituir <kbd>Content-Type</kbd> em Headers",
|
||||||
"overriden": "Substituído",
|
"overriden": "Substituído",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Corpo de Resposta",
|
"body": "Corpo de Resposta",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Cabeçalhos",
|
"headers": "Cabeçalhos",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tempo",
|
"time": "Tempo",
|
||||||
"title": "Resposta",
|
"title": "Resposta",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "aguardando conexão",
|
"waiting_for_connection": "aguardando conexão",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Corpo",
|
"body": "Corpo",
|
||||||
"collections": "Coleções",
|
"collections": "Coleções",
|
||||||
"documentation": "Documentação",
|
"documentation": "Documentação",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Cabeçalhos",
|
"headers": "Cabeçalhos",
|
||||||
"history": "História",
|
"history": "História",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "O e-mail não corresponde aos detalhes da sua conta. Contate o dono da sua equipe.",
|
"email_do_not_match": "O e-mail não corresponde aos detalhes da sua conta. Contate o dono da sua equipe.",
|
||||||
"exit": "Sair da equipe",
|
"exit": "Sair da equipe",
|
||||||
"exit_disabled": "Apenas o dono não pode sair da equipe",
|
"exit_disabled": "Apenas o dono não pode sair da equipe",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "O formato do email é inválido",
|
"invalid_email_format": "O formato do email é inválido",
|
||||||
"invalid_id": "ID de time inválido. Contate o dono da sua equipe.",
|
"invalid_id": "ID de time inválido. Contate o dono da sua equipe.",
|
||||||
"invalid_invite_link": "Link de convite inválido",
|
"invalid_invite_link": "Link de convite inválido",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Usuário removido",
|
"member_removed": "Usuário removido",
|
||||||
"member_role_updated": "Funções de usuário atualizadas",
|
"member_role_updated": "Funções de usuário atualizadas",
|
||||||
"members": "Membros",
|
"members": "Membros",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "O nome da equipe deve ter pelo menos 6 caracteres",
|
"name_length_insufficient": "O nome da equipe deve ter pelo menos 6 caracteres",
|
||||||
"name_updated": "Nome do time atualizado",
|
"name_updated": "Nome do time atualizado",
|
||||||
"new": "Novo time",
|
"new": "Novo time",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Minha Nova Equipe",
|
"new_name": "Minha Nova Equipe",
|
||||||
"no_access": "Você não tem acesso de edição a essas coleções",
|
"no_access": "Você não tem acesso de edição a essas coleções",
|
||||||
"no_invite_found": "Convite não encontrado. Contate o dono da sua equipe.",
|
"no_invite_found": "Convite não encontrado. Contate o dono da sua equipe.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Equipe não encontrada. Contate o dono da sua equipe",
|
"not_found": "Equipe não encontrada. Contate o dono da sua equipe",
|
||||||
"not_valid_viewer": "Você não é um visualizado válido. Contate o dono da sua equipe.",
|
"not_valid_viewer": "Você não é um visualizado válido. Contate o dono da sua equipe.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Convites pendentes",
|
"pending_invites": "Convites pendentes",
|
||||||
"permissions": "Permissões",
|
"permissions": "Permissões",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Equipe salva",
|
"saved": "Equipe salva",
|
||||||
"select_a_team": "Selecione uma equipe",
|
"select_a_team": "Selecione uma equipe",
|
||||||
"title": "Equipes",
|
"title": "Equipes",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Mensagem",
|
"message": "Mensagem",
|
||||||
"protocols": "Protocolos",
|
"protocols": "Protocolos",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Volte",
|
"go_back": "Volte",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiqueta",
|
"label": "Etiqueta",
|
||||||
"learn_more": "Saber mais",
|
"learn_more": "Saber mais",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Coleção criada",
|
"created": "Coleção criada",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Editar coleção",
|
"edit": "Editar coleção",
|
||||||
"invalid_name": "Forneça um nome válido para a coleção",
|
"invalid_name": "Forneça um nome válido para a coleção",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Minhas coleções",
|
"my_collections": "Minhas coleções",
|
||||||
"name": "Minha nova coleção",
|
"name": "Minha nova coleção",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Nova coleção",
|
"new": "Nova coleção",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"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",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Tem certeza que deseja excluir esta equipe?",
|
"remove_team": "Tem certeza que deseja excluir esta equipe?",
|
||||||
"remove_telemetry": "Tem certeza de que deseja cancelar a telemetria?",
|
"remove_telemetry": "Tem certeza de que deseja cancelar a telemetria?",
|
||||||
"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?",
|
||||||
"sync": "Tem certeza de que deseja sincronizar este espaço de trabalho?"
|
"sync": "Tem certeza de que deseja sincronizar este espaço de trabalho?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Modo zen"
|
"zen_mode": "Modo zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Coleções",
|
"collections": "Coleções",
|
||||||
"confirm": "confirme",
|
"confirm": "confirme",
|
||||||
"edit_request": "Editar pedido",
|
"edit_request": "Editar pedido",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Link de cópia",
|
"copy_link": "Link de cópia",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Duração",
|
"duration": "Duração",
|
||||||
"enter_curl": "Digite cURL",
|
"enter_curl": "Digite cURL",
|
||||||
"generate_code": "Gerar código",
|
"generate_code": "Gerar código",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Lista de Cabeçalhos",
|
"header_list": "Lista de Cabeçalhos",
|
||||||
"invalid_name": "Forneça um nome para o pedido",
|
"invalid_name": "Forneça um nome para o pedido",
|
||||||
"method": "Método",
|
"method": "Método",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Nome do pedido",
|
"name": "Nome do pedido",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Corpo de Resposta",
|
"body": "Corpo de Resposta",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Cabeçalhos",
|
"headers": "Cabeçalhos",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tempo",
|
"time": "Tempo",
|
||||||
"title": "Resposta",
|
"title": "Resposta",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "aguardando conexão",
|
"waiting_for_connection": "aguardando conexão",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Corpo",
|
"body": "Corpo",
|
||||||
"collections": "Coleções",
|
"collections": "Coleções",
|
||||||
"documentation": "Documentação",
|
"documentation": "Documentação",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Cabeçalhos",
|
"headers": "Cabeçalhos",
|
||||||
"history": "História",
|
"history": "História",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Sair da equipe",
|
"exit": "Sair da equipe",
|
||||||
"exit_disabled": "Apenas o dono não pode sair da equipe",
|
"exit_disabled": "Apenas o dono não pode sair da equipe",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "O formato do email é inválido",
|
"invalid_email_format": "O formato do email é inválido",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Usuário removido",
|
"member_removed": "Usuário removido",
|
||||||
"member_role_updated": "Funções de usuário atualizadas",
|
"member_role_updated": "Funções de usuário atualizadas",
|
||||||
"members": "Membros",
|
"members": "Membros",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "O nome da equipe deve ter pelo menos 6 caracteres",
|
"name_length_insufficient": "O nome da equipe deve ter pelo menos 6 caracteres",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Novo time",
|
"new": "Novo time",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Minha Nova Equipe",
|
"new_name": "Minha Nova Equipe",
|
||||||
"no_access": "Você não tem acesso de edição a essas coleções",
|
"no_access": "Você não tem acesso de edição a essas coleções",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Permissões",
|
"permissions": "Permissões",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Equipe salva",
|
"saved": "Equipe salva",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Times",
|
"title": "Times",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Mensagem",
|
"message": "Mensagem",
|
||||||
"protocols": "Protocolos",
|
"protocols": "Protocolos",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Editare",
|
"edit": "Editare",
|
||||||
"filter": "Filtrare răspuns",
|
"filter": "Filtrare răspuns",
|
||||||
"go_back": "Înapoi",
|
"go_back": "Înapoi",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etichetă",
|
"label": "Etichetă",
|
||||||
"learn_more": "Află mai multe",
|
"learn_more": "Află mai multe",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Colecție creată",
|
"created": "Colecție creată",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Editați colecția",
|
"edit": "Editați colecția",
|
||||||
"invalid_name": "Vă rugăm să furnizați un nume valid pentru colecție",
|
"invalid_name": "Vă rugăm să furnizați un nume valid pentru colecție",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Colecțiile mele",
|
"my_collections": "Colecțiile mele",
|
||||||
"name": "Noua mea colecție",
|
"name": "Noua mea colecție",
|
||||||
"name_length_insufficient": "Numele colecției trebuie să aibă minim 3 caractere lungime",
|
"name_length_insufficient": "Numele colecției trebuie să aibă minim 3 caractere lungime",
|
||||||
"new": "Colecție nouă",
|
"new": "Colecție nouă",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Colecția redenumită",
|
"renamed": "Colecția redenumită",
|
||||||
"request_in_use": "Cerere în executare",
|
"request_in_use": "Cerere în executare",
|
||||||
"save_as": "Salvează ca",
|
"save_as": "Salvează ca",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Sigur doriți să ștergeți această echipă?",
|
"remove_team": "Sigur doriți să ștergeți această echipă?",
|
||||||
"remove_telemetry": "Sigur doriți să renunțați la telemetrie?",
|
"remove_telemetry": "Sigur doriți să renunțați la telemetrie?",
|
||||||
"request_change": "Sigur doriți să renunțați la cererea curentă? Modificările nesalvate se vor pierde.",
|
"request_change": "Sigur doriți să renunțați la cererea curentă? Modificările nesalvate se vor pierde.",
|
||||||
|
"save_unsaved_tab": "Do you want to save changes made in this tab?",
|
||||||
"sync": "Sigur doriți să sincronizați acest spațiu de lucru?"
|
"sync": "Sigur doriți să sincronizați acest spațiu de lucru?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Modul Zen"
|
"zen_mode": "Modul Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Colecții",
|
"collections": "Colecții",
|
||||||
"confirm": "Confirmă",
|
"confirm": "Confirmă",
|
||||||
"edit_request": "Solicită editare",
|
"edit_request": "Solicită editare",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Copiază legătură",
|
"copy_link": "Copiază legătură",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Durată",
|
"duration": "Durată",
|
||||||
"enter_curl": "Introduceți cURL",
|
"enter_curl": "Introduceți cURL",
|
||||||
"generate_code": "Generați cod",
|
"generate_code": "Generați cod",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Lista anteturilor",
|
"header_list": "Lista anteturilor",
|
||||||
"invalid_name": "Vă rugăm să furnizați un nume pentru cerere",
|
"invalid_name": "Vă rugăm să furnizați un nume pentru cerere",
|
||||||
"method": "Metodă",
|
"method": "Metodă",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Solicitați numele",
|
"name": "Solicitați numele",
|
||||||
"new": "Cerere nouă",
|
"new": "Cerere nouă",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Suprascriere",
|
"override": "Suprascriere",
|
||||||
"override_help": "Setează <kbd>Content-Type</kbd> în antet",
|
"override_help": "Setează <kbd>Content-Type</kbd> în antet",
|
||||||
"overriden": "Suprascris",
|
"overriden": "Suprascris",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "Vizualizare link-uri"
|
"view_my_links": "Vizualizare link-uri"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Corpul de răspuns",
|
"body": "Corpul de răspuns",
|
||||||
"filter_response_body": "Filtrează corpul răspunsului JSON (folosește sintaxa JSONPath)",
|
"filter_response_body": "Filtrează corpul răspunsului JSON (folosește sintaxa JSONPath)",
|
||||||
"headers": "Anteturi",
|
"headers": "Anteturi",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"time": "Timp",
|
"time": "Timp",
|
||||||
"title": "Raspuns",
|
"title": "Raspuns",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "Așteptând conexiunea",
|
"waiting_for_connection": "Așteptând conexiunea",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Corp",
|
"body": "Corp",
|
||||||
"collections": "Colecții",
|
"collections": "Colecții",
|
||||||
"documentation": "Documentație",
|
"documentation": "Documentație",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Anteturi",
|
"headers": "Anteturi",
|
||||||
"history": "Istorie",
|
"history": "Istorie",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email-ul nu se potrivește cu detaliile contului dumneavoastră. Contactați proprietarul echipei.",
|
"email_do_not_match": "Email-ul nu se potrivește cu detaliile contului dumneavoastră. Contactați proprietarul echipei.",
|
||||||
"exit": "Ieșiți din echipă",
|
"exit": "Ieșiți din echipă",
|
||||||
"exit_disabled": "Numai proprietarul nu poate ieși din echipă",
|
"exit_disabled": "Numai proprietarul nu poate ieși din echipă",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Formatul de e-mail nu este valid",
|
"invalid_email_format": "Formatul de e-mail nu este valid",
|
||||||
"invalid_id": "ID-ul echipei nu este valid. Contactați proprietarul echipei.",
|
"invalid_id": "ID-ul echipei nu este valid. Contactați proprietarul echipei.",
|
||||||
"invalid_invite_link": "Link de invitație invalid",
|
"invalid_invite_link": "Link de invitație invalid",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Utilizatorul a fost eliminat",
|
"member_removed": "Utilizatorul a fost eliminat",
|
||||||
"member_role_updated": "Rolurile utilizatorului au fost actualizate",
|
"member_role_updated": "Rolurile utilizatorului au fost actualizate",
|
||||||
"members": "Membri",
|
"members": "Membri",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Numele echipei trebuie să aibă cel puțin 6 caractere",
|
"name_length_insufficient": "Numele echipei trebuie să aibă cel puțin 6 caractere",
|
||||||
"name_updated": "Numele echipei a fost actualizat",
|
"name_updated": "Numele echipei a fost actualizat",
|
||||||
"new": "Echipă nouă",
|
"new": "Echipă nouă",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Noua mea echipă",
|
"new_name": "Noua mea echipă",
|
||||||
"no_access": "Nu aveți acces de editare la aceste colecții",
|
"no_access": "Nu aveți acces de editare la aceste colecții",
|
||||||
"no_invite_found": "Invitația nu a fost găsită. Contactați proprietarul echipei.",
|
"no_invite_found": "Invitația nu a fost găsită. Contactați proprietarul echipei.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Echipa nu a fost găsită. Contactați proprietarul echipei.",
|
"not_found": "Echipa nu a fost găsită. Contactați proprietarul echipei.",
|
||||||
"not_valid_viewer": "Nu sunteți un vizualizator valid. Contactați proprietarul echipei.",
|
"not_valid_viewer": "Nu sunteți un vizualizator valid. Contactați proprietarul echipei.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Invitații în așteptare",
|
"pending_invites": "Invitații în așteptare",
|
||||||
"permissions": "Permisiuni",
|
"permissions": "Permisiuni",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Echipă salvată",
|
"saved": "Echipă salvată",
|
||||||
"select_a_team": "Selectați o echipă",
|
"select_a_team": "Selectați o echipă",
|
||||||
"title": "Echipe",
|
"title": "Echipe",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Mesaj",
|
"message": "Mesaj",
|
||||||
"protocols": "Protocoale",
|
"protocols": "Protocoale",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Редактировать",
|
"edit": "Редактировать",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Вернуться",
|
"go_back": "Вернуться",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Название",
|
"label": "Название",
|
||||||
"learn_more": "Узнать больше",
|
"learn_more": "Узнать больше",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Коллекция создана",
|
"created": "Коллекция создана",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Редактировать коллекцию",
|
"edit": "Редактировать коллекцию",
|
||||||
"invalid_name": "Укажите допустимое название коллекции",
|
"invalid_name": "Укажите допустимое название коллекции",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Мои коллекции",
|
"my_collections": "Мои коллекции",
|
||||||
"name": "Новая коллекция",
|
"name": "Новая коллекция",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Создать коллекцию",
|
"new": "Создать коллекцию",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Коллекция переименована",
|
"renamed": "Коллекция переименована",
|
||||||
"request_in_use": "Запрос обрабатывается",
|
"request_in_use": "Запрос обрабатывается",
|
||||||
"save_as": "Сохранить как",
|
"save_as": "Сохранить как",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Вы уверены, что хотите удалить эту команду?",
|
"remove_team": "Вы уверены, что хотите удалить эту команду?",
|
||||||
"remove_telemetry": "Вы действительно хотите отказаться от телеметрии?",
|
"remove_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?",
|
||||||
"sync": "Вы уверены, что хотите синхронизировать это рабочее пространство?"
|
"sync": "Вы уверены, что хотите синхронизировать это рабочее пространство?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Спокойный режим"
|
"zen_mode": "Спокойный режим"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Коллекции",
|
"collections": "Коллекции",
|
||||||
"confirm": "Подтверждать",
|
"confirm": "Подтверждать",
|
||||||
"edit_request": "Изменить запрос",
|
"edit_request": "Изменить запрос",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Копировать ссылку",
|
"copy_link": "Копировать ссылку",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Продолжительность",
|
"duration": "Продолжительность",
|
||||||
"enter_curl": "Введите cURL",
|
"enter_curl": "Введите cURL",
|
||||||
"generate_code": "Сгенерировать код",
|
"generate_code": "Сгенерировать код",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Список заголовков",
|
"header_list": "Список заголовков",
|
||||||
"invalid_name": "Укажите имя для запроса",
|
"invalid_name": "Укажите имя для запроса",
|
||||||
"method": "Методика",
|
"method": "Методика",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Имя запроса",
|
"name": "Имя запроса",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Тело ответа",
|
"body": "Тело ответа",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Заголовки",
|
"headers": "Заголовки",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"time": "Время",
|
"time": "Время",
|
||||||
"title": "Ответ",
|
"title": "Ответ",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "Ожидание соединения",
|
"waiting_for_connection": "Ожидание соединения",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Тело",
|
"body": "Тело",
|
||||||
"collections": "Коллекции",
|
"collections": "Коллекции",
|
||||||
"documentation": "Документация",
|
"documentation": "Документация",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Заголовки",
|
"headers": "Заголовки",
|
||||||
"history": "История",
|
"history": "История",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Электронная почта, которой Вы воспользовались не соответсвует указанной в данных Вашей учетной записи.",
|
"email_do_not_match": "Электронная почта, которой Вы воспользовались не соответсвует указанной в данных Вашей учетной записи.",
|
||||||
"exit": "Выйти из команды",
|
"exit": "Выйти из команды",
|
||||||
"exit_disabled": "Только владелец не может выйти из команды",
|
"exit_disabled": "Только владелец не может выйти из команды",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Формат электронной почты недействителен",
|
"invalid_email_format": "Формат электронной почты недействителен",
|
||||||
"invalid_id": "Некорректный ID команды. Свяжитесь с руководителем команды.",
|
"invalid_id": "Некорректный ID команды. Свяжитесь с руководителем команды.",
|
||||||
"invalid_invite_link": "Ссылка недействительна",
|
"invalid_invite_link": "Ссылка недействительна",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Пользователь удален",
|
"member_removed": "Пользователь удален",
|
||||||
"member_role_updated": "Роли пользователей обновлены",
|
"member_role_updated": "Роли пользователей обновлены",
|
||||||
"members": "Участники",
|
"members": "Участники",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Название команды должно быть не менее 6 символов.",
|
"name_length_insufficient": "Название команды должно быть не менее 6 символов.",
|
||||||
"name_updated": "Название команды обновлено",
|
"name_updated": "Название команды обновлено",
|
||||||
"new": "Новая команда",
|
"new": "Новая команда",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Моя новая команда",
|
"new_name": "Моя новая команда",
|
||||||
"no_access": "У вас нет прав на редактирование этих коллекций",
|
"no_access": "У вас нет прав на редактирование этих коллекций",
|
||||||
"no_invite_found": "Такое приглашение мы не смогли найти. Свяжитесь с руководителем команды.",
|
"no_invite_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": "У Вас нет прав просматривать это. Свяжитесь с руководителем команды.",
|
"not_valid_viewer": "У Вас нет прав просматривать это. Свяжитесь с руководителем команды.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Ожидающие приглашения",
|
"pending_invites": "Ожидающие приглашения",
|
||||||
"permissions": "Разрешения",
|
"permissions": "Разрешения",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Команда сохранена",
|
"saved": "Команда сохранена",
|
||||||
"select_a_team": "Выбрать команду",
|
"select_a_team": "Выбрать команду",
|
||||||
"title": "Команды",
|
"title": "Команды",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Сообщение",
|
"message": "Сообщение",
|
||||||
"protocols": "Протоколы",
|
"protocols": "Протоколы",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Уредити",
|
"edit": "Уредити",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Вратити се",
|
"go_back": "Вратити се",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Ознака",
|
"label": "Ознака",
|
||||||
"learn_more": "Сазнајте више",
|
"learn_more": "Сазнајте више",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Колекција је направљена",
|
"created": "Колекција је направљена",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Измени збирку",
|
"edit": "Измени збирку",
|
||||||
"invalid_name": "Наведите важећи назив збирке",
|
"invalid_name": "Наведите важећи назив збирке",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Моје колекције",
|
"my_collections": "Моје колекције",
|
||||||
"name": "Моја нова колекција",
|
"name": "Моја нова колекција",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Нова колекција",
|
"new": "Нова колекција",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Збирка је преименована",
|
"renamed": "Збирка је преименована",
|
||||||
"request_in_use": "Request in use",
|
"request_in_use": "Request in use",
|
||||||
"save_as": "Сачувај као",
|
"save_as": "Сачувај као",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Јесте ли сигурни да желите да избришете овај тим?",
|
"remove_team": "Јесте ли сигурни да желите да избришете овај тим?",
|
||||||
"remove_telemetry": "Јесте ли сигурни да желите да искључите Телеметрију?",
|
"remove_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?",
|
||||||
"sync": "Јесте ли сигурни да желите да синхронизујете овај радни простор?"
|
"sync": "Јесте ли сигурни да желите да синхронизујете овај радни простор?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Зен режим"
|
"zen_mode": "Зен режим"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Збирке",
|
"collections": "Збирке",
|
||||||
"confirm": "Потврди",
|
"confirm": "Потврди",
|
||||||
"edit_request": "Измените захтев",
|
"edit_request": "Измените захтев",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Копирај везу",
|
"copy_link": "Копирај везу",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Трајање",
|
"duration": "Трајање",
|
||||||
"enter_curl": "Унесите цУРЛ",
|
"enter_curl": "Унесите цУРЛ",
|
||||||
"generate_code": "Генериши код",
|
"generate_code": "Генериши код",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Листа заглавља",
|
"header_list": "Листа заглавља",
|
||||||
"invalid_name": "Наведите назив захтева",
|
"invalid_name": "Наведите назив захтева",
|
||||||
"method": "Метод",
|
"method": "Метод",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Назив захтева",
|
"name": "Назив захтева",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Тело за одговор",
|
"body": "Тело за одговор",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Заглавља",
|
"headers": "Заглавља",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"time": "време",
|
"time": "време",
|
||||||
"title": "Одговор",
|
"title": "Одговор",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "чека везу",
|
"waiting_for_connection": "чека везу",
|
||||||
"xml": "КСМЛ"
|
"xml": "КСМЛ"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Боди",
|
"body": "Боди",
|
||||||
"collections": "Збирке",
|
"collections": "Збирке",
|
||||||
"documentation": "Документација",
|
"documentation": "Документација",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Заглавља",
|
"headers": "Заглавља",
|
||||||
"history": "Историја",
|
"history": "Историја",
|
||||||
"mqtt": "МКТТ",
|
"mqtt": "МКТТ",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Екит Теам",
|
"exit": "Екит Теам",
|
||||||
"exit_disabled": "Само власник не може изаћи из тима",
|
"exit_disabled": "Само власник не може изаћи из тима",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Формат е -поште је неважећи",
|
"invalid_email_format": "Формат е -поште је неважећи",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Корисник је уклоњен",
|
"member_removed": "Корисник је уклоњен",
|
||||||
"member_role_updated": "Ажуриране су улоге корисника",
|
"member_role_updated": "Ажуриране су улоге корисника",
|
||||||
"members": "Чланови",
|
"members": "Чланови",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Име тима треба да има најмање 6 знакова",
|
"name_length_insufficient": "Име тима треба да има најмање 6 знакова",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Нев Теам",
|
"new": "Нев Теам",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Мој нови тим",
|
"new_name": "Мој нови тим",
|
||||||
"no_access": "Немате приступ за уређивање ових колекција",
|
"no_access": "Немате приступ за уређивање ових колекција",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Дозволе",
|
"permissions": "Дозволе",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Тим је сачуван",
|
"saved": "Тим је сачуван",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Тимови",
|
"title": "Тимови",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Порука",
|
"message": "Порука",
|
||||||
"protocols": "Протоколи",
|
"protocols": "Протоколи",
|
||||||
"url": "УРЛ"
|
"url": "УРЛ"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Redigera",
|
"edit": "Redigera",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Gå tillbaka",
|
"go_back": "Gå tillbaka",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Märka",
|
"label": "Märka",
|
||||||
"learn_more": "Läs mer",
|
"learn_more": "Läs mer",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Samlingen skapad",
|
"created": "Samlingen skapad",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Redigera samling",
|
"edit": "Redigera samling",
|
||||||
"invalid_name": "Ange ett giltigt namn för samlingen",
|
"invalid_name": "Ange ett giltigt namn för samlingen",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Mina samlingar",
|
"my_collections": "Mina samlingar",
|
||||||
"name": "Min nya samling",
|
"name": "Min nya samling",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Ny kollektion",
|
"new": "Ny kollektion",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Samling bytt namn",
|
"renamed": "Samling bytt namn",
|
||||||
"request_in_use": "Request in use",
|
"request_in_use": "Request in use",
|
||||||
"save_as": "Spara som",
|
"save_as": "Spara som",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Är du säker på att du vill ta bort det här laget?",
|
"remove_team": "Är du säker på att du vill ta bort det här laget?",
|
||||||
"remove_telemetry": "Är du säker på att du vill välja bort telemetri?",
|
"remove_telemetry": "Är du säker på att du vill välja bort telemetri?",
|
||||||
"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?",
|
||||||
"sync": "Är du säker på att du vill synkronisera den här arbetsytan?"
|
"sync": "Är du säker på att du vill synkronisera den här arbetsytan?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen -läge"
|
"zen_mode": "Zen -läge"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Samlingar",
|
"collections": "Samlingar",
|
||||||
"confirm": "Bekräfta",
|
"confirm": "Bekräfta",
|
||||||
"edit_request": "Redigera begäran",
|
"edit_request": "Redigera begäran",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Kopiera länk",
|
"copy_link": "Kopiera länk",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Varaktighet",
|
"duration": "Varaktighet",
|
||||||
"enter_curl": "Ange cURL",
|
"enter_curl": "Ange cURL",
|
||||||
"generate_code": "Generera kod",
|
"generate_code": "Generera kod",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Rubriklista",
|
"header_list": "Rubriklista",
|
||||||
"invalid_name": "Ange ett namn på begäran",
|
"invalid_name": "Ange ett namn på begäran",
|
||||||
"method": "Metod",
|
"method": "Metod",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Begär namn",
|
"name": "Begär namn",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Svarskommitté",
|
"body": "Svarskommitté",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Rubriker",
|
"headers": "Rubriker",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Status",
|
"status": "Status",
|
||||||
"time": "Tid",
|
"time": "Tid",
|
||||||
"title": "Svar",
|
"title": "Svar",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "väntar på anslutning",
|
"waiting_for_connection": "väntar på anslutning",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Kropp",
|
"body": "Kropp",
|
||||||
"collections": "Samlingar",
|
"collections": "Samlingar",
|
||||||
"documentation": "Dokumentation",
|
"documentation": "Dokumentation",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Rubriker",
|
"headers": "Rubriker",
|
||||||
"history": "Historia",
|
"history": "Historia",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Avsluta Team",
|
"exit": "Avsluta Team",
|
||||||
"exit_disabled": "Endast ägaren kan inte lämna laget",
|
"exit_disabled": "Endast ägaren kan inte lämna laget",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "E -postformatet är ogiltigt",
|
"invalid_email_format": "E -postformatet är ogiltigt",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Användaren har tagits bort",
|
"member_removed": "Användaren har tagits bort",
|
||||||
"member_role_updated": "Användarroller uppdaterade",
|
"member_role_updated": "Användarroller uppdaterade",
|
||||||
"members": "Medlemmar",
|
"members": "Medlemmar",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Lagets namn bör vara minst 6 tecken långt",
|
"name_length_insufficient": "Lagets namn bör vara minst 6 tecken långt",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Nytt lag",
|
"new": "Nytt lag",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Mitt nya team",
|
"new_name": "Mitt nya team",
|
||||||
"no_access": "Du har inte redigeringsåtkomst till dessa samlingar",
|
"no_access": "Du har inte redigeringsåtkomst till dessa samlingar",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Behörigheter",
|
"permissions": "Behörigheter",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Lag räddade",
|
"saved": "Lag räddade",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Lag",
|
"title": "Lag",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Meddelande",
|
"message": "Meddelande",
|
||||||
"protocols": "Protokoll",
|
"protocols": "Protokoll",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Düzenle",
|
"edit": "Düzenle",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Geri git",
|
"go_back": "Geri git",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Etiket",
|
"label": "Etiket",
|
||||||
"learn_more": "Daha fazla bilgi edin",
|
"learn_more": "Daha fazla bilgi edin",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Koleksiyon oluşturuldu",
|
"created": "Koleksiyon oluşturuldu",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Koleksiyonu düzenle",
|
"edit": "Koleksiyonu düzenle",
|
||||||
"invalid_name": "Lütfen koleksiyon için geçerli bir ad girin",
|
"invalid_name": "Lütfen koleksiyon için geçerli bir ad girin",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Başarıyla taşındı",
|
||||||
"my_collections": "Koleksiyonlarım",
|
"my_collections": "Koleksiyonlarım",
|
||||||
"name": "Yeni Koleksiyonum",
|
"name": "Yeni Koleksiyonum",
|
||||||
"name_length_insufficient": "Koleksiyon adı en az 3 karakter uzunluğunda olmalıdır",
|
"name_length_insufficient": "Koleksiyon adı en az 3 karakter uzunluğunda olmalıdır",
|
||||||
"new": "Yeni koleksiyon",
|
"new": "Yeni koleksiyon",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Koleksiyon yeniden adlandırıldı",
|
"renamed": "Koleksiyon yeniden adlandırıldı",
|
||||||
"request_in_use": "Kullanımda istek",
|
"request_in_use": "Kullanımda istek",
|
||||||
"save_as": "Farklı kaydet",
|
"save_as": "Farklı kaydet",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Bu takımı silmek istediğinizden emin misiniz?",
|
"remove_team": "Bu takımı silmek istediğinizden emin misiniz?",
|
||||||
"remove_telemetry": "Telemetriden çıkmak istediğinizden emin misiniz?",
|
"remove_telemetry": "Telemetriden çıkmak istediğinizden emin misiniz?",
|
||||||
"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": "Bu sekmede yapılan değişiklikleri kaydetmek istiyor musunuz?",
|
||||||
"sync": "Bu çalışma alanını senkronize etmek istediğinizden emin misiniz?"
|
"sync": "Bu çalışma alanını senkronize etmek istediğinizden emin misiniz?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Zen modu"
|
"zen_mode": "Zen modu"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Koleksiyonlar",
|
"collections": "Koleksiyonlar",
|
||||||
"confirm": "Onayla",
|
"confirm": "Onayla",
|
||||||
"edit_request": "İsteği düzenle",
|
"edit_request": "İsteği düzenle",
|
||||||
@@ -361,9 +368,9 @@
|
|||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"app_settings": "Uygulama ayarları",
|
"app_settings": "Uygulama ayarları",
|
||||||
"default_hopp_displayname": "Unnamed User",
|
"default_hopp_displayname": "Adsız Kullanıcı",
|
||||||
"editor": "Düzenleyici",
|
"editor": "Editör",
|
||||||
"editor_description": "Editors can add, edit, and delete requests.",
|
"editor_description": "Editörler istekleri ekleyebilir, düzenleyebilir ve silebilir.",
|
||||||
"email_verification_mail": "Doğrulama bağlantısı e-postanıza gönderildi. E-postanızı doğrulamak için gelen bağlantıya tıklayınız.",
|
"email_verification_mail": "Doğrulama bağlantısı e-postanıza gönderildi. E-postanızı doğrulamak için gelen bağlantıya tıklayınız.",
|
||||||
"no_permission": "Bu eylemi gerçekleştirmek için gerekli yetkiniz yok.",
|
"no_permission": "Bu eylemi gerçekleştirmek için gerekli yetkiniz yok.",
|
||||||
"owner": "Kurucu",
|
"owner": "Kurucu",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Bağlantıyı kopyala",
|
"copy_link": "Bağlantıyı kopyala",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Süre",
|
"duration": "Süre",
|
||||||
"enter_curl": "cURL'yi girin",
|
"enter_curl": "cURL'yi girin",
|
||||||
"generate_code": "Kodunu oluşturun",
|
"generate_code": "Kodunu oluşturun",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Başlık Listesi",
|
"header_list": "Başlık Listesi",
|
||||||
"invalid_name": "Lütfen istek için bir ad girin",
|
"invalid_name": "Lütfen istek için bir ad girin",
|
||||||
"method": "Yöntem",
|
"method": "Yöntem",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "İstek adı",
|
"name": "İstek adı",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Yanıt gövdesi",
|
"body": "Yanıt gövdesi",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Başlıklar",
|
"headers": "Başlıklar",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
"time": "Zaman",
|
"time": "Zaman",
|
||||||
"title": "Cevap",
|
"title": "Cevap",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "Bağlantı için bekleniyor",
|
"waiting_for_connection": "Bağlantı için bekleniyor",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Gövde",
|
"body": "Gövde",
|
||||||
"collections": "Koleksiyonlar",
|
"collections": "Koleksiyonlar",
|
||||||
"documentation": "Belgeler",
|
"documentation": "Belgeler",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Başlıklar",
|
"headers": "Başlıklar",
|
||||||
"history": "Geçmiş",
|
"history": "Geçmiş",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "E-posta, hesap ayrıntılarınızla eşleşmiyor. Takım sahibinizle iletişime geçin.",
|
"email_do_not_match": "E-posta, hesap ayrıntılarınızla eşleşmiyor. Takım sahibinizle iletişime geçin.",
|
||||||
"exit": "Takımdan Çık",
|
"exit": "Takımdan Çık",
|
||||||
"exit_disabled": "Takımın kurucusu çıkamaz.",
|
"exit_disabled": "Takımın kurucusu çıkamaz.",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "E-posta biçimi geçersiz",
|
"invalid_email_format": "E-posta biçimi geçersiz",
|
||||||
"invalid_id": "Geçersiz ekip kimliği. Takım sahibinizle iletişime geçin.",
|
"invalid_id": "Geçersiz ekip kimliği. Takım sahibinizle iletişime geçin.",
|
||||||
"invalid_invite_link": "Geçersiz davet bağlantısı",
|
"invalid_invite_link": "Geçersiz davet bağlantısı",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Kullanıcı kaldırıldı",
|
"member_removed": "Kullanıcı kaldırıldı",
|
||||||
"member_role_updated": "Kullanıcı rolleri güncellendi",
|
"member_role_updated": "Kullanıcı rolleri güncellendi",
|
||||||
"members": "Üyeler",
|
"members": "Üyeler",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Takım adı en az 6 karakter uzunluğunda olmalıdır",
|
"name_length_insufficient": "Takım adı en az 6 karakter uzunluğunda olmalıdır",
|
||||||
"name_updated": "Takım ismi güncellendi",
|
"name_updated": "Takım ismi güncellendi",
|
||||||
"new": "Yeni takım",
|
"new": "Yeni takım",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Yeni Takımım",
|
"new_name": "Yeni Takımım",
|
||||||
"no_access": "Bu koleksiyonlar için düzenleme erişiminiz yok",
|
"no_access": "Bu koleksiyonlar için düzenleme erişiminiz yok",
|
||||||
"no_invite_found": "Davetiye bulunamadı. Takım sahibinizle iletişime geçin.",
|
"no_invite_found": "Davetiye bulunamadı. Takım sahibinizle iletişime geçin.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Takım bulunamadı. Takım sahibinizle iletişime geçin.",
|
"not_found": "Takım bulunamadı. Takım sahibinizle iletişime geçin.",
|
||||||
"not_valid_viewer": "Geçerli bir misafir değilsiniz. Takım sahibinizle iletişime geçin.",
|
"not_valid_viewer": "Geçerli bir misafir değilsiniz. Takım sahibinizle iletişime geçin.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Bekleyen davetler",
|
"pending_invites": "Bekleyen davetler",
|
||||||
"permissions": "İzinler",
|
"permissions": "İzinler",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Takım kaydedildi",
|
"saved": "Takım kaydedildi",
|
||||||
"select_a_team": "Takım seç",
|
"select_a_team": "Takım seç",
|
||||||
"title": "Başlık",
|
"title": "Başlık",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Mesaj",
|
"message": "Mesaj",
|
||||||
"protocols": "Protokoller",
|
"protocols": "Protokoller",
|
||||||
"url": "Bağlantı"
|
"url": "Bağlantı"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "編輯",
|
"edit": "編輯",
|
||||||
"filter": "篩選回應",
|
"filter": "篩選回應",
|
||||||
"go_back": "返回",
|
"go_back": "返回",
|
||||||
|
"go_forward": "向前",
|
||||||
"group_by": "分組方式",
|
"group_by": "分組方式",
|
||||||
"label": "標籤",
|
"label": "標籤",
|
||||||
"learn_more": "瞭解更多",
|
"learn_more": "瞭解更多",
|
||||||
@@ -116,32 +117,37 @@
|
|||||||
"username": "使用者名稱"
|
"username": "使用者名稱"
|
||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "組合已建立",
|
"created": "集合已建立",
|
||||||
"edit": "編輯組合",
|
"different_parent": "無法為父集合不同的集合重新排序",
|
||||||
"invalid_name": "請提供有效的組合名稱",
|
"edit": "編輯集合",
|
||||||
"my_collections": "我的組合",
|
"invalid_name": "請提供有效的集合名稱",
|
||||||
"name": "我的新組合",
|
"invalid_root_move": "集合已在根目錄",
|
||||||
"name_length_insufficient": "組合名稱至少要有 3 個字元。",
|
"moved": "移動成功",
|
||||||
"new": "建立組合",
|
"my_collections": "我的集合",
|
||||||
"renamed": "組合已重新命名",
|
"name": "我的新集合",
|
||||||
|
"name_length_insufficient": "集合名稱至少要有 3 個字元。",
|
||||||
|
"new": "建立集合",
|
||||||
|
"order_changed": "集合順序已更新",
|
||||||
|
"renamed": "集合已重新命名",
|
||||||
"request_in_use": "請求正在使用中",
|
"request_in_use": "請求正在使用中",
|
||||||
"save_as": "另存為",
|
"save_as": "另存為",
|
||||||
"select": "選擇一個組合",
|
"select": "選擇一個集合",
|
||||||
"select_location": "選擇位置",
|
"select_location": "選擇位置",
|
||||||
"select_team": "選擇一個團隊",
|
"select_team": "選擇一個團隊",
|
||||||
"team_collections": "團隊組合"
|
"team_collections": "團隊集合"
|
||||||
},
|
},
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"exit_team": "您確定要離開此團隊嗎?",
|
"exit_team": "您確定要離開此團隊嗎?",
|
||||||
"logout": "您確定要登出嗎?",
|
"logout": "您確定要登出嗎?",
|
||||||
"remove_collection": "您確定要永久刪除該組合嗎?",
|
"remove_collection": "您確定要永久刪除該集合嗎?",
|
||||||
"remove_environment": "您確定要永久刪除該環境嗎?",
|
"remove_environment": "您確定要永久刪除該環境嗎?",
|
||||||
"remove_folder": "您確定要永久刪除該資料夾嗎?",
|
"remove_folder": "您確定要永久刪除該資料夾嗎?",
|
||||||
"remove_history": "您確定要永久刪除全部歷史記錄嗎?",
|
"remove_history": "您確定要永久刪除全部歷史記錄嗎?",
|
||||||
"remove_request": "您確定要永久刪除該請求嗎?",
|
"remove_request": "您確定要永久刪除該請求嗎?",
|
||||||
"remove_team": "您確定要刪除該團隊嗎?",
|
"remove_team": "您確定要刪除該團隊嗎?",
|
||||||
"remove_telemetry": "您確定要退出遙測服務嗎?",
|
"remove_telemetry": "您確定要退出遙測服務嗎?",
|
||||||
"request_change": "您確定要捨棄當前請求嗎?未儲存的變更將遺失。",
|
"request_change": "您確定要捨棄目前的請求嗎?未儲存的變更將遺失。",
|
||||||
|
"save_unsaved_tab": "您要儲存在此分頁做出的改動嗎?",
|
||||||
"sync": "您想從雲端恢復您的工作區嗎?這將丟棄您的本地進度。"
|
"sync": "您想從雲端恢復您的工作區嗎?這將丟棄您的本地進度。"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -154,13 +160,13 @@
|
|||||||
},
|
},
|
||||||
"documentation": {
|
"documentation": {
|
||||||
"generate": "產生文件",
|
"generate": "產生文件",
|
||||||
"generate_message": "匯入 Hoppscotch 組合以隨時隨地產生 API 文件。"
|
"generate_message": "匯入 Hoppscotch 集合以隨時隨地產生 API 文件。"
|
||||||
},
|
},
|
||||||
"empty": {
|
"empty": {
|
||||||
"authorization": "該請求沒有使用任何授權",
|
"authorization": "該請求沒有使用任何授權",
|
||||||
"body": "該請求沒有任何請求主體",
|
"body": "該請求沒有任何請求主體",
|
||||||
"collection": "組合為空",
|
"collection": "集合為空",
|
||||||
"collections": "組合為空",
|
"collections": "集合為空",
|
||||||
"documentation": "連線到 GraphQL 端點以檢視文件",
|
"documentation": "連線到 GraphQL 端點以檢視文件",
|
||||||
"endpoint": "端點不能留空",
|
"endpoint": "端點不能留空",
|
||||||
"environments": "環境為空",
|
"environments": "環境為空",
|
||||||
@@ -203,7 +209,7 @@
|
|||||||
"browser_support_sse": "此瀏覽器似乎不支援 SSE。",
|
"browser_support_sse": "此瀏覽器似乎不支援 SSE。",
|
||||||
"check_console_details": "檢查控制台日誌以獲悉詳情",
|
"check_console_details": "檢查控制台日誌以獲悉詳情",
|
||||||
"curl_invalid_format": "cURL 格式不正確",
|
"curl_invalid_format": "cURL 格式不正確",
|
||||||
"danger_zone": "Danger zone",
|
"danger_zone": "危險地帶",
|
||||||
"delete_account": "您的帳號目前為這些團隊的擁有者:",
|
"delete_account": "您的帳號目前為這些團隊的擁有者:",
|
||||||
"delete_account_description": "您在刪除帳號前必須先將您自己從團隊中移除、轉移擁有權,或是刪除團隊。",
|
"delete_account_description": "您在刪除帳號前必須先將您自己從團隊中移除、轉移擁有權,或是刪除團隊。",
|
||||||
"empty_req_name": "空請求名稱",
|
"empty_req_name": "空請求名稱",
|
||||||
@@ -271,38 +277,38 @@
|
|||||||
"tests": "編寫測試指令碼以自動除錯。"
|
"tests": "編寫測試指令碼以自動除錯。"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"collection": "隱藏組合面板",
|
"collection": "隱藏集合面板",
|
||||||
"more": "隱藏更多",
|
"more": "隱藏更多",
|
||||||
"preview": "隱藏預覽",
|
"preview": "隱藏預覽",
|
||||||
"sidebar": "隱藏側邊欄"
|
"sidebar": "隱藏側邊欄"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"collections": "匯入組合",
|
"collections": "匯入集合",
|
||||||
"curl": "匯入 cURL",
|
"curl": "匯入 cURL",
|
||||||
"failed": "匯入失敗",
|
"failed": "匯入失敗",
|
||||||
"from_gist": "從 Gist 匯入",
|
"from_gist": "從 Gist 匯入",
|
||||||
"from_gist_description": "從 Gist 網址匯入",
|
"from_gist_description": "從 Gist 網址匯入",
|
||||||
"from_insomnia": "從 Insomnia 匯入",
|
"from_insomnia": "從 Insomnia 匯入",
|
||||||
"from_insomnia_description": "從 Insomnia 組合匯入",
|
"from_insomnia_description": "從 Insomnia 集合匯入",
|
||||||
"from_json": "從 Hoppscotch 匯入",
|
"from_json": "從 Hoppscotch 匯入",
|
||||||
"from_json_description": "從 Hoppscotch 組合檔匯入",
|
"from_json_description": "從 Hoppscotch 集合檔匯入",
|
||||||
"from_my_collections": "從我的組合匯入",
|
"from_my_collections": "從我的集合匯入",
|
||||||
"from_my_collections_description": "從我的組合檔匯入",
|
"from_my_collections_description": "從我的集合檔匯入",
|
||||||
"from_openapi": "從 OpenAPI 匯入",
|
"from_openapi": "從 OpenAPI 匯入",
|
||||||
"from_openapi_description": "從 OpenAPI 規格檔 (YML/JSON) 匯入",
|
"from_openapi_description": "從 OpenAPI 規格檔 (YML/JSON) 匯入",
|
||||||
"from_postman": "從 Postman 匯入",
|
"from_postman": "從 Postman 匯入",
|
||||||
"from_postman_description": "從 Postman 組合匯入",
|
"from_postman_description": "從 Postman 集合匯入",
|
||||||
"from_url": "從網址匯入",
|
"from_url": "從網址匯入",
|
||||||
"gist_url": "輸入 Gist 網址",
|
"gist_url": "輸入 Gist 網址",
|
||||||
"import_from_url_invalid_fetch": "無法從網址取得資料",
|
"import_from_url_invalid_fetch": "無法從網址取得資料",
|
||||||
"import_from_url_invalid_file_format": "匯入組合時發生錯誤",
|
"import_from_url_invalid_file_format": "匯入集合時發生錯誤",
|
||||||
"import_from_url_invalid_type": "不支援此類型。可接受的值為 'hoppscotch'、'openapi'、'postman'、'insomnia'",
|
"import_from_url_invalid_type": "不支援此類型。可接受的值為 'hoppscotch'、'openapi'、'postman'、'insomnia'",
|
||||||
"import_from_url_success": "已匯入組合",
|
"import_from_url_success": "已匯入集合",
|
||||||
"json_description": "從 Hoppscotch 組合 JSON 檔匯入組合",
|
"json_description": "從 Hoppscotch 集合 JSON 檔匯入集合",
|
||||||
"title": "匯入"
|
"title": "匯入"
|
||||||
},
|
},
|
||||||
"layout": {
|
"layout": {
|
||||||
"collapse_collection": "隱藏或顯示組合",
|
"collapse_collection": "隱藏或顯示集合",
|
||||||
"collapse_sidebar": "隱藏或顯示側邊欄",
|
"collapse_sidebar": "隱藏或顯示側邊欄",
|
||||||
"column": "垂直版面",
|
"column": "垂直版面",
|
||||||
"name": "配置",
|
"name": "配置",
|
||||||
@@ -310,7 +316,8 @@
|
|||||||
"zen_mode": "專注模式"
|
"zen_mode": "專注模式"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
"collections": "組合",
|
"close_unsaved_tab": "您有未儲存的改動",
|
||||||
|
"collections": "集合",
|
||||||
"confirm": "確認",
|
"confirm": "確認",
|
||||||
"edit_request": "編輯請求",
|
"edit_request": "編輯請求",
|
||||||
"import_export": "匯入/匯出"
|
"import_export": "匯入/匯出"
|
||||||
@@ -367,9 +374,9 @@
|
|||||||
"email_verification_mail": "已將驗證信寄送至您的電子郵件地址。請點擊信中連結以驗證您的電子郵件地址。",
|
"email_verification_mail": "已將驗證信寄送至您的電子郵件地址。請點擊信中連結以驗證您的電子郵件地址。",
|
||||||
"no_permission": "您沒有權限執行此操作。",
|
"no_permission": "您沒有權限執行此操作。",
|
||||||
"owner": "擁有者",
|
"owner": "擁有者",
|
||||||
"owner_description": "擁有者可以新增、編輯和刪除請求、組合和團隊成員。",
|
"owner_description": "擁有者可以新增、編輯和刪除請求、集合和團隊成員。",
|
||||||
"roles": "角色",
|
"roles": "角色",
|
||||||
"roles_description": "角色用來控制對共用組合的存取權。",
|
"roles_description": "角色用來控制對共用集合的存取權。",
|
||||||
"updated": "已更新個人檔案",
|
"updated": "已更新個人檔案",
|
||||||
"viewer": "檢視者",
|
"viewer": "檢視者",
|
||||||
"viewer_description": "檢視者只能檢視和使用請求。"
|
"viewer_description": "檢視者只能檢視和使用請求。"
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "文字"
|
"text": "文字"
|
||||||
},
|
},
|
||||||
"copy_link": "複製連結",
|
"copy_link": "複製連結",
|
||||||
|
"different_collection": "無法重新排列來自不同集合的請求",
|
||||||
|
"duplicated": "已複製請求",
|
||||||
"duration": "持續時間",
|
"duration": "持續時間",
|
||||||
"enter_curl": "輸入 cURL",
|
"enter_curl": "輸入 cURL",
|
||||||
"generate_code": "產生程式碼",
|
"generate_code": "產生程式碼",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "請求標頭列表",
|
"header_list": "請求標頭列表",
|
||||||
"invalid_name": "請提供請求名稱",
|
"invalid_name": "請提供請求名稱",
|
||||||
"method": "方法",
|
"method": "方法",
|
||||||
|
"moved": "已移動請求",
|
||||||
"name": "請求名稱",
|
"name": "請求名稱",
|
||||||
"new": "新請求",
|
"new": "新請求",
|
||||||
|
"order_changed": "已更新請求順序",
|
||||||
"override": "覆寫",
|
"override": "覆寫",
|
||||||
"override_help": "在標頭設置 <kbd>Content-Type</kbd>",
|
"override_help": "在標頭設置 <kbd>Content-Type</kbd>",
|
||||||
"overriden": "已覆寫",
|
"overriden": "已覆寫",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "檢視我的連結"
|
"view_my_links": "檢視我的連結"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "音訊",
|
||||||
"body": "回應本體",
|
"body": "回應本體",
|
||||||
"filter_response_body": "篩選 JSON 回應本體 (使用 JSONPath 語法)",
|
"filter_response_body": "篩選 JSON 回應本體 (使用 JSONPath 語法)",
|
||||||
"headers": "回應標頭",
|
"headers": "回應標頭",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "狀態",
|
"status": "狀態",
|
||||||
"time": "時間",
|
"time": "時間",
|
||||||
"title": "回應",
|
"title": "回應",
|
||||||
|
"video": "視訊",
|
||||||
"waiting_for_connection": "等待連線",
|
"waiting_for_connection": "等待連線",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -481,7 +494,7 @@
|
|||||||
"short_codes_description": "我們為您打造的快捷碼。",
|
"short_codes_description": "我們為您打造的快捷碼。",
|
||||||
"sidebar_on_left": "左側邊欄",
|
"sidebar_on_left": "左側邊欄",
|
||||||
"sync": "同步",
|
"sync": "同步",
|
||||||
"sync_collections": "組合",
|
"sync_collections": "集合",
|
||||||
"sync_description": "這些設定會同步到雲端。",
|
"sync_description": "這些設定會同步到雲端。",
|
||||||
"sync_environments": "環境",
|
"sync_environments": "環境",
|
||||||
"sync_history": "歷史",
|
"sync_history": "歷史",
|
||||||
@@ -538,7 +551,7 @@
|
|||||||
"previous_method": "選擇上一個方法",
|
"previous_method": "選擇上一個方法",
|
||||||
"put_method": "選擇 PUT 方法",
|
"put_method": "選擇 PUT 方法",
|
||||||
"reset_request": "重置請求",
|
"reset_request": "重置請求",
|
||||||
"save_to_collections": "儲存到組合",
|
"save_to_collections": "儲存到集合",
|
||||||
"send_request": "傳送請求",
|
"send_request": "傳送請求",
|
||||||
"title": "請求"
|
"title": "請求"
|
||||||
},
|
},
|
||||||
@@ -557,7 +570,7 @@
|
|||||||
},
|
},
|
||||||
"show": {
|
"show": {
|
||||||
"code": "顯示程式碼",
|
"code": "顯示程式碼",
|
||||||
"collection": "顯示組合面板",
|
"collection": "顯示集合面板",
|
||||||
"more": "顯示更多",
|
"more": "顯示更多",
|
||||||
"sidebar": "顯示側邊欄"
|
"sidebar": "顯示側邊欄"
|
||||||
},
|
},
|
||||||
@@ -626,8 +639,9 @@
|
|||||||
"tab": {
|
"tab": {
|
||||||
"authorization": "授權",
|
"authorization": "授權",
|
||||||
"body": "請求本體",
|
"body": "請求本體",
|
||||||
"collections": "組合",
|
"collections": "集合",
|
||||||
"documentation": "幫助文件",
|
"documentation": "幫助文件",
|
||||||
|
"environments": "環境",
|
||||||
"headers": "請求標頭",
|
"headers": "請求標頭",
|
||||||
"history": "歷史記錄",
|
"history": "歷史記錄",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "電子信箱與您的帳號資料不一致。請聯絡您的團隊擁有者。",
|
"email_do_not_match": "電子信箱與您的帳號資料不一致。請聯絡您的團隊擁有者。",
|
||||||
"exit": "退出團隊",
|
"exit": "退出團隊",
|
||||||
"exit_disabled": "團隊擁有者無法退出團隊",
|
"exit_disabled": "團隊擁有者無法退出團隊",
|
||||||
|
"invalid_coll_id": "集合 ID 無效",
|
||||||
"invalid_email_format": "電子信箱格式無效",
|
"invalid_email_format": "電子信箱格式無效",
|
||||||
"invalid_id": "團隊 ID 無效。請聯絡您的團隊擁有者。",
|
"invalid_id": "團隊 ID 無效。請聯絡您的團隊擁有者。",
|
||||||
"invalid_invite_link": "邀請連結無效",
|
"invalid_invite_link": "邀請連結無效",
|
||||||
@@ -675,17 +690,21 @@
|
|||||||
"member_removed": "使用者已移除",
|
"member_removed": "使用者已移除",
|
||||||
"member_role_updated": "使用者角色已更新",
|
"member_role_updated": "使用者角色已更新",
|
||||||
"members": "成員",
|
"members": "成員",
|
||||||
|
"more_members": "還有 {count} 位",
|
||||||
"name_length_insufficient": "團隊名稱至少為 6 個字元",
|
"name_length_insufficient": "團隊名稱至少為 6 個字元",
|
||||||
"name_updated": "團隊名稱已更新",
|
"name_updated": "團隊名稱已更新",
|
||||||
"new": "新團隊",
|
"new": "新團隊",
|
||||||
"new_created": "已建立新團隊",
|
"new_created": "已建立新團隊",
|
||||||
"new_name": "我的新團隊",
|
"new_name": "我的新團隊",
|
||||||
"no_access": "您沒有編輯組合的許可權",
|
"no_access": "您沒有編輯集合的許可權",
|
||||||
"no_invite_found": "未找到邀請。請聯絡您的團隊擁有者。",
|
"no_invite_found": "未找到邀請。請聯絡您的團隊擁有者。",
|
||||||
|
"no_request_found": "找不到請求。",
|
||||||
"not_found": "找不到團隊。請聯絡您的團隊擁有者。",
|
"not_found": "找不到團隊。請聯絡您的團隊擁有者。",
|
||||||
"not_valid_viewer": "您不是一個有效的檢視者。請聯絡您的團隊擁有者。",
|
"not_valid_viewer": "您不是一個有效的檢視者。請聯絡您的團隊擁有者。",
|
||||||
|
"parent_coll_move": "無法將集合移動至子集合",
|
||||||
"pending_invites": "待定邀請",
|
"pending_invites": "待定邀請",
|
||||||
"permissions": "許可權",
|
"permissions": "許可權",
|
||||||
|
"same_target_destination": "目標和目的地相同",
|
||||||
"saved": "團隊已儲存",
|
"saved": "團隊已儲存",
|
||||||
"select_a_team": "選擇團隊",
|
"select_a_team": "選擇團隊",
|
||||||
"title": "團隊",
|
"title": "團隊",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "資訊",
|
"message": "資訊",
|
||||||
"protocols": "協定",
|
"protocols": "協定",
|
||||||
"url": "網址"
|
"url": "網址"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "切換工作區",
|
||||||
|
"personal": "我的工作區",
|
||||||
|
"team": "團隊工作區",
|
||||||
|
"title": "工作區"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Редагувати",
|
"edit": "Редагувати",
|
||||||
"filter": "Фільтрувати відповіді",
|
"filter": "Фільтрувати відповіді",
|
||||||
"go_back": "Повернутись",
|
"go_back": "Повернутись",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Групувати за",
|
"group_by": "Групувати за",
|
||||||
"label": "Мітка",
|
"label": "Мітка",
|
||||||
"learn_more": "Дізнатись більше",
|
"learn_more": "Дізнатись більше",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Колекція створена",
|
"created": "Колекція створена",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Редагувати колекцію",
|
"edit": "Редагувати колекцію",
|
||||||
"invalid_name": "Укажіть дійсну назву колекції",
|
"invalid_name": "Укажіть дійсну назву колекції",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Мої колекції",
|
"my_collections": "Мої колекції",
|
||||||
"name": "Моя нова колекція",
|
"name": "Моя нова колекція",
|
||||||
"name_length_insufficient": "Назва колекції має містити принаймні 3 символи",
|
"name_length_insufficient": "Назва колекції має містити принаймні 3 символи",
|
||||||
"new": "Нова колекція",
|
"new": "Нова колекція",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Колекція перейменована",
|
"renamed": "Колекція перейменована",
|
||||||
"request_in_use": "Запит використовується",
|
"request_in_use": "Запит використовується",
|
||||||
"save_as": "Зберегти як",
|
"save_as": "Зберегти як",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Ви впевнені, що хочете видалити цю команду?",
|
"remove_team": "Ви впевнені, що хочете видалити цю команду?",
|
||||||
"remove_telemetry": "Ви впевнені, що хочете відмовитися від телеметрії?",
|
"remove_telemetry": "Ви впевнені, що хочете відмовитися від телеметрії?",
|
||||||
"request_change": "Ви дійсно бажаєте скасувати поточний запит? Незбережені зміни будуть втрачені.",
|
"request_change": "Ви дійсно бажаєте скасувати поточний запит? Незбережені зміни будуть втрачені.",
|
||||||
|
"save_unsaved_tab": "Do you want to save changes made in this tab?",
|
||||||
"sync": "Ви впевнені, що хочете синхронізувати цю робочу область?"
|
"sync": "Ви впевнені, що хочете синхронізувати цю робочу область?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Режим дзен"
|
"zen_mode": "Режим дзен"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Колекції",
|
"collections": "Колекції",
|
||||||
"confirm": "Підтвердити",
|
"confirm": "Підтвердити",
|
||||||
"edit_request": "Редагувати запит",
|
"edit_request": "Редагувати запит",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Текст"
|
"text": "Текст"
|
||||||
},
|
},
|
||||||
"copy_link": "Скопіювати посилання",
|
"copy_link": "Скопіювати посилання",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Тривалість",
|
"duration": "Тривалість",
|
||||||
"enter_curl": "Введіть cURL",
|
"enter_curl": "Введіть cURL",
|
||||||
"generate_code": "Сформувати код",
|
"generate_code": "Сформувати код",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Список заголовків",
|
"header_list": "Список заголовків",
|
||||||
"invalid_name": "Будь ласка, вкажіть назву запиту",
|
"invalid_name": "Будь ласка, вкажіть назву запиту",
|
||||||
"method": "Метод",
|
"method": "Метод",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Назва запиту",
|
"name": "Назва запиту",
|
||||||
"new": "Новий запит",
|
"new": "Новий запит",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Перевизначити",
|
"override": "Перевизначити",
|
||||||
"override_help": "Встановити <kbd>тип вмісту</kbd> в заголовках",
|
"override_help": "Встановити <kbd>тип вмісту</kbd> в заголовках",
|
||||||
"overriden": "Перевизначений",
|
"overriden": "Перевизначений",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "Переглянути мої посилання"
|
"view_my_links": "Переглянути мої посилання"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Орган реагування",
|
"body": "Орган реагування",
|
||||||
"filter_response_body": "Фільтр тіла відповідей JSON (використовує синтаксис JSONPath)",
|
"filter_response_body": "Фільтр тіла відповідей JSON (використовує синтаксис JSONPath)",
|
||||||
"headers": "Заголовки",
|
"headers": "Заголовки",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"time": "Час",
|
"time": "Час",
|
||||||
"title": "Відповідь",
|
"title": "Відповідь",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "очікування підключення",
|
"waiting_for_connection": "очікування підключення",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Тіло",
|
"body": "Тіло",
|
||||||
"collections": "Колекції",
|
"collections": "Колекції",
|
||||||
"documentation": "Документація",
|
"documentation": "Документація",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Заголовки",
|
"headers": "Заголовки",
|
||||||
"history": "Історія",
|
"history": "Історія",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Електронна пошта не відповідає відомостям вашого облікового запису. Зверніться до свого власника команди.",
|
"email_do_not_match": "Електронна пошта не відповідає відомостям вашого облікового запису. Зверніться до свого власника команди.",
|
||||||
"exit": "Вийти з команди",
|
"exit": "Вийти з команди",
|
||||||
"exit_disabled": "Вийти з команди не може тільки власник",
|
"exit_disabled": "Вийти з команди не може тільки власник",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Формат електронної пошти недійсний",
|
"invalid_email_format": "Формат електронної пошти недійсний",
|
||||||
"invalid_id": "Недійсний ID команди. Зв'яжіться з власником вашої команди.",
|
"invalid_id": "Недійсний ID команди. Зв'яжіться з власником вашої команди.",
|
||||||
"invalid_invite_link": "Неправильне посилання для запрошення",
|
"invalid_invite_link": "Неправильне посилання для запрошення",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Користувача видалено",
|
"member_removed": "Користувача видалено",
|
||||||
"member_role_updated": "Оновлено ролі користувачів",
|
"member_role_updated": "Оновлено ролі користувачів",
|
||||||
"members": "Члени",
|
"members": "Члени",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Назва команди має містити щонайменше 6 символів",
|
"name_length_insufficient": "Назва команди має містити щонайменше 6 символів",
|
||||||
"name_updated": "Назва команди оновлено",
|
"name_updated": "Назва команди оновлено",
|
||||||
"new": "Нова команда",
|
"new": "Нова команда",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Моя нова команда",
|
"new_name": "Моя нова команда",
|
||||||
"no_access": "Ви не маєте доступу до редагування цих колекцій",
|
"no_access": "Ви не маєте доступу до редагування цих колекцій",
|
||||||
"no_invite_found": "Запрошення не знайдено. Зв’яжіться з власником команди.",
|
"no_invite_found": "Запрошення не знайдено. Зв’яжіться з власником команди.",
|
||||||
|
"no_request_found": "Request not found.",
|
||||||
"not_found": "Команда не знайдена. Зв'яжіться з власником команди.",
|
"not_found": "Команда не знайдена. Зв'яжіться з власником команди.",
|
||||||
"not_valid_viewer": "Ви не є дійсним глядачем. Зв'яжіться з власником команди.",
|
"not_valid_viewer": "Ви не є дійсним глядачем. Зв'яжіться з власником команди.",
|
||||||
|
"parent_coll_move": "Cannot move collection to a child collection",
|
||||||
"pending_invites": "Очікувані запрошення",
|
"pending_invites": "Очікувані запрошення",
|
||||||
"permissions": "Дозволи",
|
"permissions": "Дозволи",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Команда збережена",
|
"saved": "Команда збережена",
|
||||||
"select_a_team": "Виберіть команду",
|
"select_a_team": "Виберіть команду",
|
||||||
"title": "Команди",
|
"title": "Команди",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "повідомлення",
|
"message": "повідомлення",
|
||||||
"protocols": "Протоколи",
|
"protocols": "Протоколи",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"cancel": "Hủy bỏ",
|
"cancel": "Hủy bỏ",
|
||||||
"choose_file": "Chọn một tệp",
|
"choose_file": "Chọn một tệp",
|
||||||
"clear": "Thông thoáng",
|
"clear": "Thông thoáng",
|
||||||
"clear_all": "Quet sạch tât cả",
|
"clear_all": "Quet sạch tất cả",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
"connect": "Liên kết",
|
"connect": "Liên kết",
|
||||||
"connecting": "Connecting",
|
"connecting": "Connecting",
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
"edit": "Chỉnh sửa",
|
"edit": "Chỉnh sửa",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"go_back": "Quay lại",
|
"go_back": "Quay lại",
|
||||||
|
"go_forward": "Go forward",
|
||||||
"group_by": "Group by",
|
"group_by": "Group by",
|
||||||
"label": "Nhãn",
|
"label": "Nhãn",
|
||||||
"learn_more": "Tìm hiểu thêm",
|
"learn_more": "Tìm hiểu thêm",
|
||||||
@@ -117,12 +118,16 @@
|
|||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
"created": "Bộ sưu tập đã được tạo",
|
"created": "Bộ sưu tập đã được tạo",
|
||||||
|
"different_parent": "Cannot reorder collection with different parent",
|
||||||
"edit": "Chỉnh sửa bộ sưu tập",
|
"edit": "Chỉnh sửa bộ sưu tập",
|
||||||
"invalid_name": "Vui lòng cung cấp tên hợp lệ cho bộ sưu tập",
|
"invalid_name": "Vui lòng cung cấp tên hợp lệ cho bộ sưu tập",
|
||||||
|
"invalid_root_move": "Collection already in the root",
|
||||||
|
"moved": "Moved Successfully",
|
||||||
"my_collections": "Bộ sưu tập của tôi",
|
"my_collections": "Bộ sưu tập của tôi",
|
||||||
"name": "Bộ sưu tập mới của tôi",
|
"name": "Bộ sưu tập mới của tôi",
|
||||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||||
"new": "Bộ sưu tập mới",
|
"new": "Bộ sưu tập mới",
|
||||||
|
"order_changed": "Collection Order Updated",
|
||||||
"renamed": "Bộ sưu tập đã được đổi tên",
|
"renamed": "Bộ sưu tập đã được đổi tên",
|
||||||
"request_in_use": "Request in use",
|
"request_in_use": "Request in use",
|
||||||
"save_as": "Lưu thành",
|
"save_as": "Lưu thành",
|
||||||
@@ -142,6 +147,7 @@
|
|||||||
"remove_team": "Bạn có chắc chắn muốn xóa nhóm này không?",
|
"remove_team": "Bạn có chắc chắn muốn xóa nhóm này không?",
|
||||||
"remove_telemetry": "Bạn có chắc chắn muốn chọn không tham gia Đo lường từ xa không?",
|
"remove_telemetry": "Bạn có chắc chắn muốn chọn không tham gia Đo lường từ xa không?",
|
||||||
"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?",
|
||||||
"sync": "Bạn có chắc chắn muốn đồng bộ hóa không gian làm việc này không?"
|
"sync": "Bạn có chắc chắn muốn đồng bộ hóa không gian làm việc này không?"
|
||||||
},
|
},
|
||||||
"count": {
|
"count": {
|
||||||
@@ -310,6 +316,7 @@
|
|||||||
"zen_mode": "Chế độ Zen"
|
"zen_mode": "Chế độ Zen"
|
||||||
},
|
},
|
||||||
"modal": {
|
"modal": {
|
||||||
|
"close_unsaved_tab": "You have unsaved changes",
|
||||||
"collections": "Bộ sưu tập",
|
"collections": "Bộ sưu tập",
|
||||||
"confirm": "Xác nhận",
|
"confirm": "Xác nhận",
|
||||||
"edit_request": "Chỉnh sửa Yêu cầu",
|
"edit_request": "Chỉnh sửa Yêu cầu",
|
||||||
@@ -389,6 +396,8 @@
|
|||||||
"text": "Text"
|
"text": "Text"
|
||||||
},
|
},
|
||||||
"copy_link": "Sao chép đường dẫn",
|
"copy_link": "Sao chép đường dẫn",
|
||||||
|
"different_collection": "Cannot reorder requests from different collections",
|
||||||
|
"duplicated": "Request duplicated",
|
||||||
"duration": "Khoảng thời gian",
|
"duration": "Khoảng thời gian",
|
||||||
"enter_curl": "Nhập cURL",
|
"enter_curl": "Nhập cURL",
|
||||||
"generate_code": "Tạo mã",
|
"generate_code": "Tạo mã",
|
||||||
@@ -396,8 +405,10 @@
|
|||||||
"header_list": "Danh sách tiêu đề",
|
"header_list": "Danh sách tiêu đề",
|
||||||
"invalid_name": "Vui lòng cung cấp tên cho yêu cầu",
|
"invalid_name": "Vui lòng cung cấp tên cho yêu cầu",
|
||||||
"method": "Phương pháp",
|
"method": "Phương pháp",
|
||||||
|
"moved": "Request moved",
|
||||||
"name": "Yêu cầu tên",
|
"name": "Yêu cầu tên",
|
||||||
"new": "New Request",
|
"new": "New Request",
|
||||||
|
"order_changed": "Request Order Updated",
|
||||||
"override": "Override",
|
"override": "Override",
|
||||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||||
"overriden": "Overridden",
|
"overriden": "Overridden",
|
||||||
@@ -421,6 +432,7 @@
|
|||||||
"view_my_links": "View my links"
|
"view_my_links": "View my links"
|
||||||
},
|
},
|
||||||
"response": {
|
"response": {
|
||||||
|
"audio": "Audio",
|
||||||
"body": "Cơ quan phản hồi",
|
"body": "Cơ quan phản hồi",
|
||||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||||
"headers": "Tiêu đề",
|
"headers": "Tiêu đề",
|
||||||
@@ -434,6 +446,7 @@
|
|||||||
"status": "Tình trạng",
|
"status": "Tình trạng",
|
||||||
"time": "Thời gian",
|
"time": "Thời gian",
|
||||||
"title": "Phản ứng",
|
"title": "Phản ứng",
|
||||||
|
"video": "Video",
|
||||||
"waiting_for_connection": "Đang đợi kết nối",
|
"waiting_for_connection": "Đang đợi kết nối",
|
||||||
"xml": "XML"
|
"xml": "XML"
|
||||||
},
|
},
|
||||||
@@ -628,6 +641,7 @@
|
|||||||
"body": "Thân hình",
|
"body": "Thân hình",
|
||||||
"collections": "Bộ sưu tập",
|
"collections": "Bộ sưu tập",
|
||||||
"documentation": "Tài liệu",
|
"documentation": "Tài liệu",
|
||||||
|
"environments": "Environments",
|
||||||
"headers": "Tiêu đề",
|
"headers": "Tiêu đề",
|
||||||
"history": "Môn lịch sử",
|
"history": "Môn lịch sử",
|
||||||
"mqtt": "MQTT",
|
"mqtt": "MQTT",
|
||||||
@@ -652,6 +666,7 @@
|
|||||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||||
"exit": "Nhóm thoát",
|
"exit": "Nhóm thoát",
|
||||||
"exit_disabled": "Chỉ chủ sở hữu không thể thoát khỏi nhóm",
|
"exit_disabled": "Chỉ chủ sở hữu không thể thoát khỏi nhóm",
|
||||||
|
"invalid_coll_id": "Invalid collection ID",
|
||||||
"invalid_email_format": "Định dạng email không hợp lệ",
|
"invalid_email_format": "Định dạng email không hợp lệ",
|
||||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||||
"invalid_invite_link": "Invalid invite link",
|
"invalid_invite_link": "Invalid invite link",
|
||||||
@@ -675,6 +690,7 @@
|
|||||||
"member_removed": "Người dùng đã bị xóa",
|
"member_removed": "Người dùng đã bị xóa",
|
||||||
"member_role_updated": "Đã cập nhật vai trò người dùng",
|
"member_role_updated": "Đã cập nhật vai trò người dùng",
|
||||||
"members": "Các thành viên",
|
"members": "Các thành viên",
|
||||||
|
"more_members": "+{count} more",
|
||||||
"name_length_insufficient": "Tên nhóm phải dài ít nhất 6 ký tự",
|
"name_length_insufficient": "Tên nhóm phải dài ít nhất 6 ký tự",
|
||||||
"name_updated": "Team name updated",
|
"name_updated": "Team name updated",
|
||||||
"new": "Đội mới",
|
"new": "Đội mới",
|
||||||
@@ -682,10 +698,13 @@
|
|||||||
"new_name": "Nhóm mới của tôi",
|
"new_name": "Nhóm mới của tôi",
|
||||||
"no_access": "Bạn không có quyền truy cập chỉnh sửa vào các bộ sưu tập này",
|
"no_access": "Bạn không có quyền truy cập chỉnh sửa vào các bộ sưu tập này",
|
||||||
"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.",
|
||||||
"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",
|
||||||
"pending_invites": "Pending invites",
|
"pending_invites": "Pending invites",
|
||||||
"permissions": "Quyền",
|
"permissions": "Quyền",
|
||||||
|
"same_target_destination": "Same target and destination",
|
||||||
"saved": "Đội đã được lưu",
|
"saved": "Đội đã được lưu",
|
||||||
"select_a_team": "Select a team",
|
"select_a_team": "Select a team",
|
||||||
"title": "Đội",
|
"title": "Đội",
|
||||||
@@ -713,5 +732,11 @@
|
|||||||
"message": "Thông điệp",
|
"message": "Thông điệp",
|
||||||
"protocols": "Các giao thức",
|
"protocols": "Các giao thức",
|
||||||
"url": "URL"
|
"url": "URL"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"change": "Change workspace",
|
||||||
|
"personal": "My Workspace",
|
||||||
|
"team": "Team Workspace",
|
||||||
|
"title": "Workspaces"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ export const APP_INFO = {
|
|||||||
keywords:
|
keywords:
|
||||||
"hoppscotch, hopp scotch, hoppscotch online, hoppscotch app, postwoman, postwoman chrome, postwoman online, postwoman for mac, postwoman app, postwoman for windows, postwoman google chrome, postwoman chrome app, get postwoman, postwoman web, postwoman android, postwoman app for chrome, postwoman mobile app, postwoman web app, api, request, testing, tool, rest, websocket, sse, graphql, socketio",
|
"hoppscotch, hopp scotch, hoppscotch online, hoppscotch app, postwoman, postwoman chrome, postwoman online, postwoman for mac, postwoman app, postwoman for windows, postwoman google chrome, postwoman chrome app, get postwoman, postwoman web, postwoman android, postwoman app for chrome, postwoman mobile app, postwoman web app, api, request, testing, tool, rest, websocket, sse, graphql, socketio",
|
||||||
app: {
|
app: {
|
||||||
background: "#202124",
|
background: "#181818",
|
||||||
|
lightThemeColor: "#ffffff",
|
||||||
|
darkThemeColor: "#181818",
|
||||||
},
|
},
|
||||||
social: {
|
social: {
|
||||||
twitter: "@hoppscotch_io",
|
twitter: "@hoppscotch_io",
|
||||||
@@ -108,7 +110,17 @@ export const META_TAGS = (env: Record<string, string>): IHTMLTag[] => [
|
|||||||
// PWA
|
// PWA
|
||||||
{
|
{
|
||||||
name: "theme-color",
|
name: "theme-color",
|
||||||
content: APP_INFO.app.background,
|
content: APP_INFO.app.darkThemeColor,
|
||||||
|
media: "(prefers-color-scheme: dark)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "theme-color",
|
||||||
|
content: APP_INFO.app.lightThemeColor,
|
||||||
|
media: "(prefers-color-scheme: light)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "supported-color-schemes",
|
||||||
|
content: "light dark",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "mask-icon",
|
name: "mask-icon",
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "@hoppscotch/common",
|
"name": "@hoppscotch/common",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2023.4.0",
|
"version": "2023.4.8",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "pnpm exec npm-run-all -p -l dev:*",
|
"dev": "pnpm exec npm-run-all -p -l dev:*",
|
||||||
|
"test": "vitest --run",
|
||||||
|
"test:watch": "vitest",
|
||||||
"dev:vite": "vite",
|
"dev:vite": "vite",
|
||||||
"dev:gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml --watch dotenv_config_path=\"../../.env\"",
|
"dev:gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml --watch dotenv_config_path=\"../../.env\"",
|
||||||
"lint": "eslint src --ext .ts,.js,.vue --ignore-path .gitignore .",
|
"lint": "eslint src --ext .ts,.js,.vue --ignore-path .gitignore .",
|
||||||
@@ -13,6 +15,7 @@
|
|||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml dotenv_config_path=\"../../.env\"",
|
"gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml dotenv_config_path=\"../../.env\"",
|
||||||
"postinstall": "pnpm run gql-codegen",
|
"postinstall": "pnpm run gql-codegen",
|
||||||
|
"do-test": "pnpm run test",
|
||||||
"do-lint": "pnpm run prod-lint",
|
"do-lint": "pnpm run prod-lint",
|
||||||
"do-typecheck": "pnpm run lint",
|
"do-typecheck": "pnpm run lint",
|
||||||
"do-lintfix": "pnpm run lintfix"
|
"do-lintfix": "pnpm run lintfix"
|
||||||
@@ -43,11 +46,12 @@
|
|||||||
"@urql/exchange-auth": "^0.1.7",
|
"@urql/exchange-auth": "^0.1.7",
|
||||||
"@urql/exchange-graphcache": "^4.4.3",
|
"@urql/exchange-graphcache": "^4.4.3",
|
||||||
"@vitejs/plugin-legacy": "^2.3.0",
|
"@vitejs/plugin-legacy": "^2.3.0",
|
||||||
"@vueuse/core": "^8.7.5",
|
"@vueuse/core": "^8.9.4",
|
||||||
"@vueuse/head": "^0.7.9",
|
"@vueuse/head": "^0.7.9",
|
||||||
"acorn-walk": "^8.2.0",
|
"acorn-walk": "^8.2.0",
|
||||||
"axios": "^0.21.4",
|
"axios": "^0.21.4",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
|
"dioc": "workspace:^",
|
||||||
"esprima": "^4.0.1",
|
"esprima": "^4.0.1",
|
||||||
"events": "^3.3.0",
|
"events": "^3.3.0",
|
||||||
"fp-ts": "^2.12.1",
|
"fp-ts": "^2.12.1",
|
||||||
@@ -62,7 +66,8 @@
|
|||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"jsonpath-plus": "^7.0.0",
|
"jsonpath-plus": "^7.0.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"lossless-json": "^1.0.5",
|
"lossless-json": "^2.0.8",
|
||||||
|
"minisearch": "^6.1.0",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"paho-mqtt": "^1.1.0",
|
"paho-mqtt": "^1.1.0",
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
@@ -84,7 +89,6 @@
|
|||||||
"util": "^0.12.4",
|
"util": "^0.12.4",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"vue": "^3.2.25",
|
"vue": "^3.2.25",
|
||||||
"vue-github-button": "^3.0.3",
|
|
||||||
"vue-i18n": "^9.2.2",
|
"vue-i18n": "^9.2.2",
|
||||||
"vue-pdf-embed": "^1.1.4",
|
"vue-pdf-embed": "^1.1.4",
|
||||||
"vue-router": "^4.0.16",
|
"vue-router": "^4.0.16",
|
||||||
@@ -92,6 +96,7 @@
|
|||||||
"vuedraggable-es": "^4.1.1",
|
"vuedraggable-es": "^4.1.1",
|
||||||
"wonka": "^4.0.15",
|
"wonka": "^4.0.15",
|
||||||
"workbox-window": "^6.5.4",
|
"workbox-window": "^6.5.4",
|
||||||
|
"xml-formatter": "^3.4.1",
|
||||||
"yargs-parser": "^21.1.1"
|
"yargs-parser": "^21.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -105,8 +110,9 @@
|
|||||||
"@graphql-codegen/typescript-urql-graphcache": "^2.3.1",
|
"@graphql-codegen/typescript-urql-graphcache": "^2.3.1",
|
||||||
"@graphql-codegen/urql-introspection": "^2.2.0",
|
"@graphql-codegen/urql-introspection": "^2.2.0",
|
||||||
"@graphql-typed-document-node/core": "^3.1.1",
|
"@graphql-typed-document-node/core": "^3.1.1",
|
||||||
"@iconify-json/lucide": "^1.1.40",
|
"@iconify-json/lucide": "^1.1.109",
|
||||||
"@intlify/vite-plugin-vue-i18n": "^6.0.1",
|
"@intlify/vite-plugin-vue-i18n": "^7.0.0",
|
||||||
|
"@relmify/jest-fp-ts": "^2.1.1",
|
||||||
"@rushstack/eslint-patch": "^1.1.4",
|
"@rushstack/eslint-patch": "^1.1.4",
|
||||||
"@types/js-yaml": "^4.0.5",
|
"@types/js-yaml": "^4.0.5",
|
||||||
"@types/lodash-es": "^4.17.6",
|
"@types/lodash-es": "^4.17.6",
|
||||||
@@ -141,10 +147,11 @@
|
|||||||
"vite-plugin-html-config": "^1.0.10",
|
"vite-plugin-html-config": "^1.0.10",
|
||||||
"vite-plugin-inspect": "^0.7.4",
|
"vite-plugin-inspect": "^0.7.4",
|
||||||
"vite-plugin-pages": "^0.26.0",
|
"vite-plugin-pages": "^0.26.0",
|
||||||
"vite-plugin-pages-sitemap": "^1.4.0",
|
"vite-plugin-pages-sitemap": "^1.4.5",
|
||||||
"vite-plugin-pwa": "^0.13.1",
|
"vite-plugin-pwa": "^0.13.1",
|
||||||
"vite-plugin-vue-layouts": "^0.7.0",
|
"vite-plugin-vue-layouts": "^0.7.0",
|
||||||
"vite-plugin-windicss": "^1.8.8",
|
"vite-plugin-windicss": "^1.8.8",
|
||||||
|
"vitest": "^0.32.2",
|
||||||
"vue-tsc": "^0.38.2",
|
"vue-tsc": "^0.38.2",
|
||||||
"windicss": "^3.5.6"
|
"windicss": "^3.5.6"
|
||||||
}
|
}
|
||||||
|
|||||||
1
packages/hoppscotch-common/public/badge.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="156" height="32" fill="none"><rect width="156" height="32" fill="#6366f1" rx="4"/><text xmlns="http://www.w3.org/2000/svg" x="50%" y="50%" fill="#fff" dominant-baseline="central" font-family="Helvetica,sans-serif" font-size="12" font-weight="bold" text-anchor="middle" text-rendering="geometricPrecision">▶ Run in Hoppscotch</text></svg>
|
||||||
|
After Width: | Height: | Size: 389 B |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 666 KiB |
BIN
packages/hoppscotch-common/public/icons/pwa-1024x1024.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
packages/hoppscotch-common/public/icons/pwa-128x128.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
packages/hoppscotch-common/public/icons/pwa-16x16.png
Normal file
|
After Width: | Height: | Size: 400 B |
BIN
packages/hoppscotch-common/public/icons/pwa-192x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
packages/hoppscotch-common/public/icons/pwa-256x256.png
Normal file
|
After Width: | Height: | Size: 11 KiB |