Compare commits
127 Commits
v3.0.0
...
revert/aut
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20c8973f5d | ||
|
|
461d67ce90 | ||
|
|
492c3a0902 | ||
|
|
d5d516ce18 | ||
|
|
f676f94278 | ||
|
|
cd6e40f01c | ||
|
|
59a8a22e8a | ||
|
|
2910164d5a | ||
|
|
b95e2b365a | ||
|
|
73e788b513 | ||
|
|
15d135c11b | ||
|
|
0fcda0be1a | ||
|
|
9d7052c626 | ||
|
|
5841d2eb66 | ||
|
|
ee07a90b5e | ||
|
|
70d2f1e3d9 | ||
|
|
acafc072db | ||
|
|
51e40581b0 | ||
|
|
1e5dd1cc53 | ||
|
|
3d7b057026 | ||
|
|
d36ab337d7 | ||
|
|
012f9b5314 | ||
|
|
ba6069324f | ||
|
|
0d26d4cdbd | ||
|
|
4b920feffa | ||
|
|
830373efb3 | ||
|
|
c3f18671ec | ||
|
|
0d33758ba4 | ||
|
|
e7e8c397ef | ||
|
|
b04b12c7a0 | ||
|
|
a1d69b3210 | ||
|
|
dcbc2f1145 | ||
|
|
36903b338a | ||
|
|
9d8d6832af | ||
|
|
3d004f2322 | ||
|
|
fb827e3586 | ||
|
|
ccca183e08 | ||
|
|
237455ab21 | ||
|
|
6141073137 | ||
|
|
740691417f | ||
|
|
2ed709796a | ||
|
|
75c0350584 | ||
|
|
17d72b9922 | ||
|
|
1796fae3d1 | ||
|
|
1ecd22204d | ||
|
|
356fe4591f | ||
|
|
0230942a3d | ||
|
|
325793eebc | ||
|
|
39d1256f68 | ||
|
|
fd2472d34b | ||
|
|
5e8fbc6552 | ||
|
|
3084a40729 | ||
|
|
0069f51ea4 | ||
|
|
696c612489 | ||
|
|
4a5a4077af | ||
|
|
28bcb899e7 | ||
|
|
4062a7089a | ||
|
|
ad86221c7d | ||
|
|
53938248de | ||
|
|
c018b639ad | ||
|
|
eb2145c7da | ||
|
|
2f4c39d310 | ||
|
|
79ada82223 | ||
|
|
c67463fb3b | ||
|
|
d162471555 | ||
|
|
c99797bcef | ||
|
|
9739cdbbaa | ||
|
|
7f6db561f5 | ||
|
|
9eac00b303 | ||
|
|
b61df04c1b | ||
|
|
b587e21c90 | ||
|
|
02d66ee9fd | ||
|
|
a950e08ef1 | ||
|
|
6e7d28db7b | ||
|
|
a0ea00d0a3 | ||
|
|
beb5606862 | ||
|
|
44f11f93a4 | ||
|
|
7b61f267dd | ||
|
|
971238cedb | ||
|
|
4d19b9249b | ||
|
|
4046b91609 | ||
|
|
e6652109c5 | ||
|
|
e9cfc066a5 | ||
|
|
9ce078c1d3 | ||
|
|
2bcc1675e8 | ||
|
|
a87c2347c9 | ||
|
|
8f2810db30 | ||
|
|
528d0b0429 | ||
|
|
f759014315 | ||
|
|
a568610c28 | ||
|
|
c35a85db12 | ||
|
|
fcd61436c8 | ||
|
|
0798063213 | ||
|
|
80de63323d | ||
|
|
7d0219b11d | ||
|
|
d42434ddc0 | ||
|
|
cbf6d23c24 | ||
|
|
568c05b4b0 | ||
|
|
59ee4babeb | ||
|
|
604ef4d004 | ||
|
|
dc80cc80e6 | ||
|
|
f5a0c3cfca | ||
|
|
f8e9563392 | ||
|
|
3c17a14bd3 | ||
|
|
3140859993 | ||
|
|
3c35bb6091 | ||
|
|
355e37a27d | ||
|
|
ca71ffe3c2 | ||
|
|
4bcc703444 | ||
|
|
f01e0b888d | ||
|
|
5701454c02 | ||
|
|
0584f781c4 | ||
|
|
fd7d096a77 | ||
|
|
6330548cc0 | ||
|
|
048ac5f7a5 | ||
|
|
bac38688f9 | ||
|
|
1f29ff24d7 | ||
|
|
1006617e99 | ||
|
|
99e7e73965 | ||
|
|
a6b91c435c | ||
|
|
938f940f90 | ||
|
|
06a8d62dfe | ||
|
|
44c439d7a9 | ||
|
|
fd11ea8143 | ||
|
|
fb65e0e23d | ||
|
|
1b23c5ea4a | ||
|
|
045dc10a0d |
9
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "Hoppscotch",
|
||||
"image": "mcr.microsoft.com/devcontainers/typescript-node:18",
|
||||
"forwardPorts": [3000],
|
||||
"features": {
|
||||
"ghcr.io/NicoVIII/devcontainer-features/pnpm:1": {}
|
||||
},
|
||||
"postCreateCommand": "mv .env.example .env && pnpm i"
|
||||
}
|
||||
@@ -14,8 +14,9 @@ VITE_MESSAGING_SENDER_ID=421993993223
|
||||
VITE_APP_ID=1:421993993223:web:ec0baa8ee8c02ffa1fc6a2
|
||||
VITE_MEASUREMENT_ID=G-BBJ3R80PJT
|
||||
|
||||
# Base URL
|
||||
# Base URLs
|
||||
VITE_BASE_URL=https://hoppscotch.io
|
||||
VITE_SHORTCODE_BASE_URL=https://hopp.sh
|
||||
|
||||
# Backend URLs
|
||||
VITE_BACKEND_GQL_URL=https://api.hoppscotch.io/graphql
|
||||
@@ -24,3 +25,7 @@ VITE_BACKEND_WS_URL=wss://api.hoppscotch.io/graphql
|
||||
# Sentry (Optional)
|
||||
# VITE_SENTRY_DSN: <Sentry DSN here>
|
||||
# VITE_SENTRY_ENVIRONMENT: <Sentry environment value here>
|
||||
# VITE_SENTRY_RELEASE_TAG: <Sentry release tag here (for release monitoring)>
|
||||
|
||||
# Proxyscotch Access Token (Optional)
|
||||
# VITE_PROXYSCOTCH_ACCESS_TOKEN: <Token Set In Proxyscotch Server>
|
||||
2
.github/dependabot.yml
vendored
@@ -5,6 +5,6 @@ updates:
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: '00:00'
|
||||
open-pull-requests-limit: 10
|
||||
open-pull-requests-limit: 0
|
||||
reviewers:
|
||||
- liyasthomas
|
||||
|
||||
2
.github/pull_request_template.md
vendored
@@ -23,4 +23,4 @@ Closes # <!-- Issue # here -->
|
||||
- [ ] All the tests have passed
|
||||
|
||||
### Additional Information
|
||||
<!-- Any additional information like breaking changes, dependencies added, screenshots, comparisons between new and old behavior, etc. -->
|
||||
<!-- Any additional information like breaking changes, dependencies added, screenshots, comparisons between new and old behaviour, etc. -->
|
||||
|
||||
93
.github/workflows/codeql-analysis.yml
vendored
@@ -1,72 +1,63 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
name: "CodeQL analysis"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
branches: [main]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ main ]
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: '39 7 * * 2'
|
||||
# ┌───────────── minute (0 - 59)
|
||||
# │ ┌───────────── hour (0 - 23)
|
||||
# │ │ ┌───────────── day of the month (1 - 31)
|
||||
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
|
||||
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
|
||||
# │ │ │ │ │
|
||||
# │ │ │ │ │
|
||||
# │ │ │ │ │
|
||||
# * * * * *
|
||||
- cron: '30 1 * * 0'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
# required for all workflows
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||
# only required for workflows in private repositories
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
# Run extended queries including queries using machine learning
|
||||
queries: security-extended
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
# Run extended queries including queries using machine learning
|
||||
queries: security-extended
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below).
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following
|
||||
# three lines and modify them (or add more) to build your code if your
|
||||
# project uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
name: Deploy to Live Channel
|
||||
name: Deploy to Firebase (production)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
deploy_live_website:
|
||||
deploy:
|
||||
name: Deploy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: FirebaseExtended/action-hosting-deploy@v0
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Deploy to Firebase (production)
|
||||
uses: FirebaseExtended/action-hosting-deploy@v0
|
||||
with:
|
||||
repoToken: '${{ secrets.GITHUB_TOKEN }}'
|
||||
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_POSTWOMAN_API }}'
|
||||
54
.github/workflows/deploy-netlify-production.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
name: Deploy to Netlify (production)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
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: 7
|
||||
run_install: true
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
cache: pnpm
|
||||
|
||||
- name: Build site
|
||||
env:
|
||||
VITE_SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
||||
VITE_SENTRY_ENVIRONMENT: production
|
||||
VITE_SENTRY_RELEASE_TAG: ${{ github.sha }}
|
||||
run: pnpm run generate
|
||||
|
||||
# Deploy the production site with netlify-cli
|
||||
- name: Deploy to Netlify (production)
|
||||
run: npx netlify-cli deploy --dir=packages/hoppscotch-web/dist --prod
|
||||
env:
|
||||
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_PRODUCTION_SITE_ID }}
|
||||
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
|
||||
- name: Create Sentry release
|
||||
uses: getsentry/action-release@v1
|
||||
env:
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
||||
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
||||
with:
|
||||
environment: production
|
||||
ignore_missing: true
|
||||
ignore_empty: true
|
||||
version: ${{ github.sha }}
|
||||
@@ -1,25 +1,34 @@
|
||||
name: Deploy to Staging Netlify
|
||||
name: Deploy to Netlify (staging)
|
||||
|
||||
on:
|
||||
push:
|
||||
# TODO: Migrate to staging branch only
|
||||
branches: [main]
|
||||
branches: [staging]
|
||||
pull_request:
|
||||
branches: [staging]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Push build files to Netlify
|
||||
deploy:
|
||||
name: Deploy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup and run pnpm install
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v2.2.4
|
||||
env:
|
||||
VITE_BACKEND_GQL_URL: ${{ secrets.STAGING_BACKEND_GQL_URL }}
|
||||
with:
|
||||
version: 7
|
||||
run_install: true
|
||||
|
||||
- name: Build Site
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
cache: pnpm
|
||||
|
||||
- name: Build site
|
||||
env:
|
||||
VITE_GA_ID: ${{ secrets.STAGING_GA_ID }}
|
||||
VITE_GTM_ID: ${{ secrets.STAGING_GTM_ID }}
|
||||
@@ -34,12 +43,25 @@ jobs:
|
||||
VITE_BACKEND_GQL_URL: ${{ secrets.STAGING_BACKEND_GQL_URL }}
|
||||
VITE_BACKEND_WS_URL: ${{ secrets.STAGING_BACKEND_WS_URL }}
|
||||
VITE_SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
||||
VITE_SENTRY_RELEASE_TAG: ${{ github.sha }}
|
||||
VITE_SENTRY_ENVIRONMENT: staging
|
||||
run: pnpm run generate
|
||||
|
||||
# Deploy the staging site with netlify-cli
|
||||
- name: Deploy to Netlify (staging)
|
||||
run: npx netlify-cli deploy --dir=packages/hoppscotch-app/dist --prod
|
||||
run: npx netlify-cli deploy --dir=packages/hoppscotch-web/dist --prod
|
||||
env:
|
||||
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_STAGING_SITE_ID }}
|
||||
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
|
||||
- name: Create Sentry release
|
||||
uses: getsentry/action-release@v1
|
||||
env:
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
||||
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
||||
with:
|
||||
environment: staging
|
||||
ignore_missing: true
|
||||
ignore_empty: true
|
||||
version: ${{ github.sha }}
|
||||
41
.github/workflows/deploy-netlify-ui.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
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/**"
|
||||
|
||||
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: 7
|
||||
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 }}
|
||||
35
.github/workflows/deploy-netlify.yml
vendored
@@ -1,35 +0,0 @@
|
||||
name: Deploy to Netlify
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Push build files to Netlify
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Setup and run pnpm install
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
with:
|
||||
version: 7
|
||||
run_install: true
|
||||
|
||||
- name: Setup Environment
|
||||
run: mv packages/hoppscotch-app/.env.example packages/hoppscotch-app/.env
|
||||
|
||||
- name: Build Site
|
||||
env:
|
||||
VITE_SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
||||
VITE_SENTRY_ENVIRONMENT: production
|
||||
run: pnpm run generate
|
||||
|
||||
# Deploy the production site with netlify-cli
|
||||
- name: Deploy to Netlify (production)
|
||||
run: npx netlify-cli deploy --dir=packages/hoppscotch-app/dist --prod
|
||||
env:
|
||||
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_PRODUCTION_SITE_ID }}
|
||||
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
30
.github/workflows/publish-docker.yml
vendored
@@ -7,22 +7,37 @@ on:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
push_to_registry:
|
||||
name: Push Docker image to Docker Hub
|
||||
publish:
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out the repo
|
||||
uses: actions/checkout@v2
|
||||
- name: Maximize build space
|
||||
uses: easimon/maximize-build-space@master
|
||||
with:
|
||||
root-reserve-mb: 8192
|
||||
swap-size-mb: 18432
|
||||
remove-dotnet: 'true'
|
||||
remove-android: 'true'
|
||||
remove-haskell: 'true'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Log in to Docker Hub
|
||||
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: hoppscotch/hoppscotch
|
||||
flavor: |
|
||||
@@ -31,9 +46,10 @@ jobs:
|
||||
suffix=
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
|
||||
27
.github/workflows/tests.yml
vendored
@@ -2,12 +2,13 @@ name: Node.js CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [main, staging]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [main, staging]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
test:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
@@ -15,17 +16,23 @@ jobs:
|
||||
node-version: ["lts/*"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- name: Setup and run pnpm install
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
- 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: 7
|
||||
run_install: true
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
node-version: ${{ matrix.node }}
|
||||
cache: pnpm
|
||||
|
||||
- name: Run tests
|
||||
run: pnpm test
|
||||
|
||||
82
.gitignore
vendored
@@ -1,15 +1,18 @@
|
||||
# Created by .ignore support plugin (hsz.mobi)
|
||||
|
||||
# Firebase
|
||||
.firebase
|
||||
|
||||
### Node template
|
||||
### Node ###
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
@@ -22,6 +25,7 @@ lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
@@ -45,12 +49,27 @@ jspm_packages/
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
@@ -60,26 +79,68 @@ typings/
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# next.js build output
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# nuxt.js build output
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
|
||||
# Nuxt generate
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
### Node Patch ###
|
||||
# Serverless Webpack directories
|
||||
.webpack/
|
||||
|
||||
# SvelteKit build / generate output
|
||||
.svelte-kit
|
||||
|
||||
# IDE / Editor
|
||||
.idea
|
||||
@@ -107,3 +168,6 @@ tests/*/videos
|
||||
|
||||
# Local Netlify folder
|
||||
.netlify
|
||||
|
||||
# PNPM
|
||||
.pnpm-store
|
||||
|
||||
1
.vscode/extensions.json
vendored
@@ -6,6 +6,7 @@
|
||||
"dbaeumer.vscode-eslint",
|
||||
"editorconfig.editorconfig",
|
||||
"csstools.postcss",
|
||||
"folke.vscode-monorepo-workspace"
|
||||
],
|
||||
"unwantedRecommendations": [
|
||||
"octref.vetur"
|
||||
|
||||
27
CODEOWNERS
Normal file
@@ -0,0 +1,27 @@
|
||||
# CODEOWNERS is prioritized from bottom to top
|
||||
|
||||
# If none of the below matched
|
||||
* @AndrewBastin @liyasthomas
|
||||
|
||||
# Packages
|
||||
/packages/codemirror-lang-graphql/ @AndrewBastin
|
||||
/packages/hoppscotch-cli/ @aitchnyu
|
||||
/packages/hoppscotch-common/ @amk-dev @AndrewBastin
|
||||
/packages/hoppscotch-data/ @AndrewBastin
|
||||
/packages/hoppscotch-js-sandbox/ @aitchnyu
|
||||
/packages/hoppscotch-ui/ @anwarulislam
|
||||
/packages/hoppscotch-web/ @amk-dev @AndrewBastin
|
||||
|
||||
# Sections within Hoppscotch Common
|
||||
/packages/hoppscotch-common/src/components @anwarulislam
|
||||
/packages/hoppscotch-common/src/components/collections @nivedin @amk-dev
|
||||
/packages/hoppscotch-common/src/components/environments @nivedin @amk-dev
|
||||
/packages/hoppscotch-common/src/composables @amk-dev
|
||||
/packages/hoppscotch-common/src/modules @AndrewBastin @amk-dev
|
||||
/packages/hoppscotch-common/src/pages @AndrewBastin @amk-dev
|
||||
/packages/hoppscotch-common/src/newstore @AndrewBastin @amk-dev
|
||||
|
||||
README.md @liyasthomas
|
||||
|
||||
# The lockfile has no owner
|
||||
pnpm-lock.yaml
|
||||
@@ -17,13 +17,13 @@ COPY . .
|
||||
|
||||
RUN npm install -g pnpm
|
||||
|
||||
RUN mv .env.example .env
|
||||
|
||||
RUN pnpm i --unsafe-perm=true
|
||||
|
||||
ENV HOST 0.0.0.0
|
||||
EXPOSE 3000
|
||||
|
||||
RUN mv packages/hoppscotch-app/.env.example packages/hoppscotch-app/.env
|
||||
|
||||
RUN pnpm run generate
|
||||
|
||||
CMD ["pnpm", "run", "start"]
|
||||
|
||||
12
README.md
@@ -36,14 +36,14 @@
|
||||
<p>
|
||||
<a href="https://hoppscotch.io/#gh-light-mode-only" target="_blank">
|
||||
<img
|
||||
src="./packages/hoppscotch-app/static/images/banner-light.png"
|
||||
src="./packages/hoppscotch-common/public/images/banner-light.png"
|
||||
alt="Hoppscotch"
|
||||
width="100%"
|
||||
/>
|
||||
</a>
|
||||
<a href="https://hoppscotch.io/#gh-dark-mode-only" target="_blank">
|
||||
<img
|
||||
src="./packages/hoppscotch-app/static/images/banner-dark.png"
|
||||
src="./packages/hoppscotch-common/public/images/banner-dark.png"
|
||||
alt="Hoppscotch"
|
||||
width="100%"
|
||||
/>
|
||||
@@ -275,11 +275,11 @@ _Add-ons are developed and maintained under **[Hoppscotch Organization](https://
|
||||
- [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
|
||||
- [TypeScript](https://www.typescriptlang.org)
|
||||
- [Vue](https://vuejs.org)
|
||||
- [Nuxt](https://nuxtjs.org)
|
||||
- [Vite](https://vitejs.dev)
|
||||
|
||||
## **Developing**
|
||||
|
||||
0. Update [`.env.example`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-app/.env.example) file found in `packages/hoppscotch-app` with your own keys and rename it to `.env`.
|
||||
0. Update [`.env.example`](https://github.com/hoppscotch/hoppscotch/blob/main/.env.example) file found in the root of repository with your own keys and rename it to `.env`.
|
||||
|
||||
_Sample keys only work with the [production build](https://hoppscotch.io)._
|
||||
|
||||
@@ -315,9 +315,9 @@ docker run --rm --name hoppscotch -p 3000:3000 hoppscotch/hoppscotch:latest
|
||||
1. [Clone this repo](https://help.github.com/en/articles/cloning-a-repository) with git.
|
||||
2. Install pnpm using npm by running `npm install -g pnpm`.
|
||||
3. Install dependencies by running `pnpm install` within the directory that you cloned (probably `hoppscotch`).
|
||||
4. Update [`.env.example`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-app/.env.example) file found in `packages/hoppscotch-app` with your own keys and rename it to `.env`.
|
||||
4. Update [`.env.example`](https://github.com/hoppscotch/hoppscotch/blob/main/.env.example) file found in the root of repository with your own keys and rename it to `.env`.
|
||||
5. Build the release files with `pnpm run generate`.
|
||||
6. Find the built project in `packages/hoppscotch-app/dist`. Host these files on any [static hosting servers](https://www.pluralsight.com/blog/software-development/where-to-host-your-jamstack-site).
|
||||
6. Find the built project in `packages/hoppscotch-web/dist`. Host these files on any [static hosting servers](https://www.pluralsight.com/blog/software-development/where-to-host-your-jamstack-site).
|
||||
|
||||
## **Contributing**
|
||||
|
||||
|
||||
@@ -11,10 +11,10 @@ if there is no existing translation, you can create a new one by following these
|
||||
1. **[Fork the repository](https://github.com/hoppscotch/hoppscotch/fork).**
|
||||
2. **Checkout the `i18n` branch for latest translations.**
|
||||
3. **Create a new branch for your translation with base branch `i18n`.**
|
||||
4. **Create target language file in the [`locales`](https://github.com/hoppscotch/hoppscotch/tree/main/packages/hoppscotch-app/locales) directory.**
|
||||
5. **Copy the contents of the source file [`locales/en.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-app/locales/en.json) to the target language file.**
|
||||
4. **Create target language file in the [`/packages/hoppscotch-common/locales`](https://github.com/hoppscotch/hoppscotch/tree/main/packages/hoppscotch-common/locales) directory.**
|
||||
5. **Copy the contents of the source file [`/packages/hoppscotch-common/locales/en.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-common/locales/en.json) to the target language file.**
|
||||
6. **Translate the strings in the target language file.**
|
||||
7. **Add your language entry to [`languages.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-app/languages.json).**
|
||||
7. **Add your language entry to [`/packages/hoppscotch-common/languages.json`](https://github.com/hoppscotch/hoppscotch/blob/main/packages/hoppscotch-common/languages.json).**
|
||||
8. **Save & commit changes.**
|
||||
9. **Send a pull request.**
|
||||
|
||||
|
||||
@@ -20,4 +20,4 @@ services:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
HOST: 0.0.0.0
|
||||
command: "npm run dev"
|
||||
command: "pnpm run dev"
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
},
|
||||
"hosting": {
|
||||
"predeploy": [
|
||||
"cd packages/hoppscotch-app && mv .env.example .env && cd ../.. && npm install -g pnpm && pnpm i && pnpm run generate"
|
||||
"mv .env.example .env && npm install -g pnpm && pnpm i && pnpm run generate"
|
||||
],
|
||||
"public": "packages/hoppscotch-app/dist",
|
||||
"public": "packages/hoppscotch-web/dist",
|
||||
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
|
||||
"rewrites": [
|
||||
{
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
[build]
|
||||
base = "/"
|
||||
publish = "packages/hoppscotch-app/dist"
|
||||
publish = "packages/hoppscotch-web/dist"
|
||||
command = "npx pnpm i --store=node_modules/.pnpm-store && npx pnpm run generate"
|
||||
|
||||
[[headers]]
|
||||
for = "/*"
|
||||
[headers.values]
|
||||
X-Frame-Options = "DENY"
|
||||
X-Frame-Options = "SAMEORIGIN"
|
||||
X-XSS-Protection = "1; mode=block"
|
||||
|
||||
[[redirects]]
|
||||
|
||||
10
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hoppscotch-app",
|
||||
"version": "3.0.0",
|
||||
"version": "3.0.1",
|
||||
"description": "Open source API development ecosystem",
|
||||
"author": "Hoppscotch (support@hoppscotch.io)",
|
||||
"private": true,
|
||||
@@ -10,12 +10,13 @@
|
||||
"prepare": "husky install",
|
||||
"dev": "pnpm -r do-dev",
|
||||
"generate": "pnpm -r do-build-prod",
|
||||
"start": "pnpm -r do-prod-start",
|
||||
"start": "http-server packages/hoppscotch-web/dist -p 3000",
|
||||
"lint": "pnpm -r do-lint",
|
||||
"typecheck": "pnpm -r do-typecheck",
|
||||
"lintfix": "pnpm -r do-lintfix",
|
||||
"pre-commit": "pnpm -r do-lint && pnpm -r do-typecheck",
|
||||
"test": "pnpm -r do-test"
|
||||
"test": "pnpm -r do-test",
|
||||
"generate-ui": "pnpm -r do-build-ui"
|
||||
},
|
||||
"workspaces": [
|
||||
"./packages/*"
|
||||
@@ -27,6 +28,7 @@
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^16.2.3",
|
||||
"@commitlint/config-conventional": "^16.2.1",
|
||||
"@types/node": "^17.0.24"
|
||||
"@types/node": "^17.0.24",
|
||||
"http-server": "^14.1.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Vue 3 + TypeScript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)
|
||||
|
||||
## Type Support For `.vue` Imports in TS
|
||||
|
||||
Since TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates. However, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using manual `h(...)` calls), you can enable Volar's Take Over mode by following these steps:
|
||||
|
||||
1. Run `Extensions: Show Built-in Extensions` from VS Code's command palette, look for `TypeScript and JavaScript Language Features`, then right click and select `Disable (Workspace)`. By default, Take Over mode will enable itself if the default TypeScript extension is disabled.
|
||||
2. Reload the VS Code window by running `Developer: Reload Window` from the command palette.
|
||||
|
||||
You can learn more about Take Over mode [here](https://github.com/johnsoncodehk/volar/discussions/471).
|
||||
@@ -1,667 +0,0 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "Autoscroll",
|
||||
"cancel": "Cancel · lar",
|
||||
"choose_file": "Trieu un fitxer",
|
||||
"clear": "Clar",
|
||||
"clear_all": "Esborra-ho tot",
|
||||
"close": "Close",
|
||||
"connect": "Connecteu",
|
||||
"copy": "Copia",
|
||||
"delete": "Suprimeix",
|
||||
"disconnect": "Desconnecta",
|
||||
"dismiss": "Destitueix",
|
||||
"dont_save": "Don't save",
|
||||
"download_file": "Descarrega l'arxiu",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Edita",
|
||||
"filter_response": "Filter response",
|
||||
"go_back": "Torna",
|
||||
"label": "Etiqueta",
|
||||
"learn_more": "Aprèn més",
|
||||
"less": "Less",
|
||||
"more": "Més",
|
||||
"new": "Novetat",
|
||||
"no": "No",
|
||||
"open_workspace": "Open workspace",
|
||||
"paste": "Paste",
|
||||
"prettify": "Prettify",
|
||||
"remove": "Elimina",
|
||||
"restore": "Restaura",
|
||||
"save": "Desa",
|
||||
"scroll_to_bottom": "Scroll to bottom",
|
||||
"scroll_to_top": "Scroll to top",
|
||||
"search": "Cerca",
|
||||
"send": "Envia",
|
||||
"start": "Començar",
|
||||
"stop": "Atura",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
"to_select": "to select",
|
||||
"turn_off": "Tanca",
|
||||
"turn_on": "Encendre",
|
||||
"undo": "Desfés",
|
||||
"yes": "Sí"
|
||||
},
|
||||
"add": {
|
||||
"new": "Afegir nou",
|
||||
"star": "Afegeix una estrella"
|
||||
},
|
||||
"app": {
|
||||
"chat_with_us": "Xateja amb nosaltres",
|
||||
"contact_us": "Poseu-vos en contacte amb nosaltres",
|
||||
"copy": "Copia",
|
||||
"copy_user_id": "Copy User Auth Token",
|
||||
"developer_option": "Developer options",
|
||||
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Documentació",
|
||||
"github": "GitHub",
|
||||
"help": "Ajuda, comentaris i documentació",
|
||||
"home": "Inici",
|
||||
"invite": "Convidar",
|
||||
"invite_description": "A Hoppscotch, hem dissenyat una interfície senzilla i intuïtiva per crear i gestionar les vostres API. Hoppscotch és una eina que us ajuda a construir, provar, documentar i compartir les vostres API.",
|
||||
"invite_your_friends": "Convida els teus amics",
|
||||
"join_discord_community": "Uniu-vos a la nostra comunitat Discord",
|
||||
"keyboard_shortcuts": "Dreceres de teclat",
|
||||
"name": "Hoppscotch",
|
||||
"new_version_found": "S'ha trobat una nova versió. Actualitzeu per actualitzar.",
|
||||
"options": "Options",
|
||||
"proxy_privacy_policy": "Política de privadesa del servidor intermediari",
|
||||
"reload": "Recarregar",
|
||||
"search": "Cerca",
|
||||
"share": "Compartir",
|
||||
"shortcuts": "Dreceres",
|
||||
"spotlight": "Destac",
|
||||
"status": "Estat",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "Condicions i privadesa",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Escriviu una ordre o cerqueu ...",
|
||||
"we_use_cookies": "Utilitzem cookies",
|
||||
"whats_new": "Que hi ha de nou?",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "El compte existeix amb credencials diferents: inicieu la sessió per enllaçar els dos comptes",
|
||||
"all_sign_in_options": "Totes les opcions d'inici de sessió",
|
||||
"continue_with_email": "Continueu amb el correu electrònic",
|
||||
"continue_with_github": "Continueu amb GitHub",
|
||||
"continue_with_google": "Continueu amb Google",
|
||||
"continue_with_microsoft": "Continue with Microsoft",
|
||||
"email": "Correu electrònic",
|
||||
"logged_out": "Desconnectat",
|
||||
"login": "iniciar Sessió",
|
||||
"login_success": "S'ha iniciat la sessió correctament",
|
||||
"login_to_hoppscotch": "Inicieu la sessió a Hoppscotch",
|
||||
"logout": "Tancar sessió",
|
||||
"re_enter_email": "Re-escriu el teu correu",
|
||||
"send_magic_link": "Envia un enllaç màgic",
|
||||
"sync": "Sincronitzar",
|
||||
"we_sent_magic_link": "Us hem enviat un enllaç màgic!",
|
||||
"we_sent_magic_link_description": "Comproveu la vostra safata d'entrada: hem enviat un correu electrònic a {email}. Conté un enllaç màgic que us permetrà iniciar la sessió."
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "Generar testimoni",
|
||||
"include_in_url": "Inclou a l'URL",
|
||||
"learn": "Aprèn com",
|
||||
"pass_key_by": "Pass by",
|
||||
"password": "Contrasenya",
|
||||
"token": "Testimoni",
|
||||
"type": "Tipus d'autorització",
|
||||
"username": "Nom d'usuari"
|
||||
},
|
||||
"collection": {
|
||||
"created": "S'ha creat la col·lecció",
|
||||
"edit": "Edita la col·lecció",
|
||||
"invalid_name": "Proporcioneu un nom vàlid per a la col·lecció",
|
||||
"my_collections": "Les meves col·leccions",
|
||||
"name": "La meva nova col·lecció",
|
||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||
"new": "Nova col · lecció",
|
||||
"renamed": "S'ha canviat el nom de la col·lecció",
|
||||
"request_in_use": "Request in use",
|
||||
"save_as": "Guardar com",
|
||||
"select": "Seleccioneu una col·lecció",
|
||||
"select_location": "Seleccioneu la ubicació",
|
||||
"select_team": "Selecciona un equip",
|
||||
"team_collections": "Col·leccions per equips"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "Are you sure you want to leave this team?",
|
||||
"logout": "Esteu segur que voleu tancar la sessió?",
|
||||
"remove_collection": "Esteu segur que voleu suprimir permanentment aquesta col·lecció?",
|
||||
"remove_environment": "Esteu segur que voleu suprimir permanentment aquest entorn?",
|
||||
"remove_folder": "Esteu segur que voleu suprimir definitivament aquesta carpeta?",
|
||||
"remove_history": "Esteu segur que voleu suprimir definitivament tot l'historial?",
|
||||
"remove_request": "Esteu segur que voleu suprimir definitivament aquesta sol·licitud?",
|
||||
"remove_team": "Esteu segur que voleu suprimir aquest equip?",
|
||||
"remove_telemetry": "Esteu segur que voleu desactivar Telemetry?",
|
||||
"request_change": "Are you sure you want to discard current request, unsaved changes will be lost.",
|
||||
"sync": "Esteu segur que voleu sincronitzar aquest espai de treball?"
|
||||
},
|
||||
"count": {
|
||||
"header": "Capçalera {count}",
|
||||
"message": "{Compte} de missatges",
|
||||
"parameter": "Paràmetre {count}",
|
||||
"protocol": "Protocol {count}",
|
||||
"value": "Valor {count}",
|
||||
"variable": "Variable {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "Generar documentació",
|
||||
"generate_message": "Importeu qualsevol col·lecció Hoppscotch per generar documentació de l'API sobre la marxa."
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "Aquesta sol·licitud no utilitza cap autorització",
|
||||
"body": "Aquesta sol·licitud no té cap cos",
|
||||
"collection": "La col·lecció està buida",
|
||||
"collections": "Les col·leccions estan buides",
|
||||
"documentation": "Connect to a GraphQL endpoint to view documentation",
|
||||
"endpoint": "Endpoint cannot be empty",
|
||||
"environments": "Els entorns estan buits",
|
||||
"folder": "La carpeta està buida",
|
||||
"headers": "Aquesta sol·licitud no té cap capçalera",
|
||||
"history": "La història és buida",
|
||||
"invites": "Invite list is empty",
|
||||
"members": "L'equip està buit",
|
||||
"parameters": "Aquesta sol·licitud no té cap paràmetre",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"protocols": "Els protocols estan buits",
|
||||
"schema": "Connecteu-vos a un punt final GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"team_name": "El nom de l'equip és buit",
|
||||
"teams": "Els equips estan buits",
|
||||
"tests": "No hi ha proves per a aquesta sol·licitud"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "Add to Global",
|
||||
"added": "Environment addition",
|
||||
"create_new": "Crea un entorn nou",
|
||||
"created": "Environment created",
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Edita l'entorn",
|
||||
"invalid_name": "Proporcioneu un nom vàlid per a l'entorn",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Nou entorn",
|
||||
"no_environment": "Sense entorn",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Seleccioneu un entorn",
|
||||
"title": "Entorns",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Llista de variables"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "Sembla que aquest navegador no és compatible amb els esdeveniments enviats per servidor.",
|
||||
"check_console_details": "Consulteu el registre de la consola per obtenir més informació.",
|
||||
"curl_invalid_format": "cURL no està formatat correctament",
|
||||
"empty_req_name": "Nom de la sol·licitud buida",
|
||||
"f12_details": "(F12 per obtenir més informació)",
|
||||
"gql_prettify_invalid_query": "No s'ha pogut definir una consulta no vàlida, resoldre els errors de sintaxi de la consulta i tornar-ho a provar",
|
||||
"incomplete_config_urls": "Incomplete configuration URLs",
|
||||
"incorrect_email": "Incorrect email",
|
||||
"invalid_link": "Invalid link",
|
||||
"invalid_link_description": "The link you clicked is invalid or expired.",
|
||||
"json_parsing_failed": "Invalid JSON",
|
||||
"json_prettify_invalid_body": "No s'ha pogut personalitzar un cos no vàlid, resoldre errors de sintaxi json i tornar-ho a provar",
|
||||
"network_error": "There seems to be a network error. Please try again.",
|
||||
"network_fail": "No s'ha pogut enviar la sol·licitud",
|
||||
"no_duration": "Sense durada",
|
||||
"no_results_found": "No matches found",
|
||||
"page_not_found": "This page could not be found",
|
||||
"script_fail": "No s'ha pogut executar l'script de sol·licitud prèvia",
|
||||
"something_went_wrong": "Alguna cosa ha anat malament",
|
||||
"test_script_fail": "Could not execute post-request script"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "Exporta com a JSON",
|
||||
"create_secret_gist": "Crea un resum secret",
|
||||
"gist_created": "Gist creat",
|
||||
"require_github": "Inicieu la sessió amb GitHub per crear un resum secret",
|
||||
"title": "Export"
|
||||
},
|
||||
"folder": {
|
||||
"created": "S'ha creat la carpeta",
|
||||
"edit": "Edita la carpeta",
|
||||
"invalid_name": "Proporcioneu un nom per a la carpeta",
|
||||
"name_length_insufficient": "Folder name should be at least 3 characters long",
|
||||
"new": "Carpeta nova",
|
||||
"renamed": "S'ha canviat el nom de la carpeta"
|
||||
},
|
||||
"graphql": {
|
||||
"mutations": "Mutacions",
|
||||
"schema": "Esquema",
|
||||
"subscriptions": "Subscripcions"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Instal·la l'aplicació",
|
||||
"login": "iniciar Sessió",
|
||||
"save_workspace": "Desa el meu espai de treball"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": "La capçalera de l'autorització es generarà automàticament quan envieu la sol·licitud.",
|
||||
"generate_documentation_first": "Genereu documentació primer",
|
||||
"network_fail": "No es pot arribar al punt final de l'API. Comproveu la connexió de xarxa i torneu-ho a provar.",
|
||||
"offline": "Sembla que estàs fora de línia. És possible que les dades d'aquest espai de treball no estiguin actualitzades.",
|
||||
"offline_short": "Sembla que estàs fora de línia.",
|
||||
"post_request_tests": "Els scripts de prova s'escriuen en JavaScript i s'executen després de rebre la resposta.",
|
||||
"pre_request_script": "Els scripts de sol·licitud prèvia s'escriuen en JavaScript i s'executen abans que s'enviï la sol·licitud.",
|
||||
"script_fail": "Sembla que hi ha un error a l'script de sol·licitud prèvia. Comproveu l'error a continuació i solucioneu l'script en conseqüència.",
|
||||
"test_script_fail": "There seems to be an error with test script. Please fix the errors and run tests again",
|
||||
"tests": "Escriviu un script de prova per automatitzar la depuració."
|
||||
},
|
||||
"hide": {
|
||||
"collection": "Collapse Collection Panel",
|
||||
"more": "Amaga més",
|
||||
"preview": "Amaga la previsualització",
|
||||
"sidebar": "Amaga la barra lateral"
|
||||
},
|
||||
"import": {
|
||||
"collections": "Importar col·leccions",
|
||||
"curl": "Importa cURL",
|
||||
"failed": "La importació ha fallat",
|
||||
"from_gist": "Importa de Gist",
|
||||
"from_gist_description": "Import from Gist URL",
|
||||
"from_insomnia": "Import from Insomnia",
|
||||
"from_insomnia_description": "Import from Insomnia collection",
|
||||
"from_json": "Import from Hoppscotch",
|
||||
"from_json_description": "Import from Hoppscotch collection file",
|
||||
"from_my_collections": "Importa de Les meves col·leccions",
|
||||
"from_my_collections_description": "Import from My Collections file",
|
||||
"from_openapi": "Import from OpenAPI",
|
||||
"from_openapi_description": "Import from OpenAPI specification file (YML/JSON)",
|
||||
"from_postman": "Import from Postman",
|
||||
"from_postman_description": "Import from Postman collection",
|
||||
"from_url": "Import from URL",
|
||||
"gist_url": "Introduïu l'URL Gist",
|
||||
"import_from_url_invalid_fetch": "Couldn't get data from the url",
|
||||
"import_from_url_invalid_file_format": "Error while importing collections",
|
||||
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Collections Imported",
|
||||
"json_description": "Import collections from a Hoppscotch Collections JSON file",
|
||||
"title": "Importació"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Collapse or Expand Collections",
|
||||
"collapse_sidebar": "Collapse or Expand the sidebar",
|
||||
"column": "Vertical layout",
|
||||
"name": "Layout",
|
||||
"row": "Horizontal layout",
|
||||
"zen_mode": "Mode Zen"
|
||||
},
|
||||
"modal": {
|
||||
"collections": "Col·leccions",
|
||||
"confirm": "Confirmeu",
|
||||
"edit_request": "Sol·licitud d'edició",
|
||||
"import_export": "Importació-exportació"
|
||||
},
|
||||
"mqtt": {
|
||||
"communication": "Comunicació",
|
||||
"log": "Registre",
|
||||
"message": "Missatge",
|
||||
"publish": "Publica",
|
||||
"subscribe": "Subscriu-te",
|
||||
"topic": "Tema",
|
||||
"topic_name": "Nom del tema",
|
||||
"topic_title": "Publicar / subscriure el tema",
|
||||
"unsubscribe": "Cancel·lar la subscripció",
|
||||
"url": "URL"
|
||||
},
|
||||
"navigation": {
|
||||
"doc": "Documents",
|
||||
"graphql": "GraphQL",
|
||||
"profile": "Profile",
|
||||
"realtime": "Temps real",
|
||||
"rest": "REST",
|
||||
"settings": "Configuració"
|
||||
},
|
||||
"preRequest": {
|
||||
"javascript_code": "Codi JavaScript",
|
||||
"learn": "Llegiu la documentació",
|
||||
"script": "Script de sol·licitud prèvia",
|
||||
"snippets": "Fragments"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
"no_permission": "You do not have permission to perform this action.",
|
||||
"owner": "Owner",
|
||||
"owner_description": "Owners can add, edit, and delete requests, collections and team members.",
|
||||
"roles": "Roles",
|
||||
"roles_description": "Roles are used to control access to the shared collections.",
|
||||
"updated": "Profile updated",
|
||||
"viewer": "Viewer",
|
||||
"viewer_description": "Viewers can only view and use requests."
|
||||
},
|
||||
"remove": {
|
||||
"star": "Elimina l'estrella"
|
||||
},
|
||||
"request": {
|
||||
"added": "S'ha afegit la sol·licitud",
|
||||
"authorization": "Autorització",
|
||||
"body": "Organisme de sol·licitud",
|
||||
"choose_language": "Tria l'idioma",
|
||||
"content_type": "Tipus de contingut",
|
||||
"content_type_titles": {
|
||||
"others": "Others",
|
||||
"structured": "Structured",
|
||||
"text": "Text"
|
||||
},
|
||||
"copy_link": "Copia l'enllaç",
|
||||
"duration": "Durada",
|
||||
"enter_curl": "Introduïu cURL",
|
||||
"generate_code": "Generar codi",
|
||||
"generated_code": "Codi generat",
|
||||
"header_list": "Llista de capçaleres",
|
||||
"invalid_name": "Proporcioneu un nom per a la sol·licitud",
|
||||
"method": "Mètode",
|
||||
"name": "Sol·licita el nom",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Paràmetres de consulta",
|
||||
"parameters": "Paràmetres",
|
||||
"path": "Camí",
|
||||
"payload": "Càrrega útil",
|
||||
"query": "Consulta",
|
||||
"raw_body": "Cos de sol·licitud en brut",
|
||||
"renamed": "S'ha canviat el nom de la sol·licitud",
|
||||
"run": "Correr",
|
||||
"save": "Desa",
|
||||
"save_as": "Guardar com",
|
||||
"saved": "S'ha desat la sol·licitud",
|
||||
"share": "Compartir",
|
||||
"share_description": "Share Hoppscotch with your friends",
|
||||
"title": "Sol·licitud",
|
||||
"type": "Tipus de sol·licitud",
|
||||
"url": "URL",
|
||||
"variables": "Les variables",
|
||||
"view_my_links": "View my links"
|
||||
},
|
||||
"response": {
|
||||
"body": "Cos de resposta",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"headers": "Capçaleres",
|
||||
"html": "HTML",
|
||||
"image": "Imatge",
|
||||
"json": "JSON",
|
||||
"pdf": "PDF",
|
||||
"preview_html": "Previsualitza HTML",
|
||||
"raw": "Raw",
|
||||
"size": "Mida",
|
||||
"status": "Estat",
|
||||
"time": "Temps",
|
||||
"title": "Resposta",
|
||||
"waiting_for_connection": "esperant la connexió",
|
||||
"xml": "XML"
|
||||
},
|
||||
"settings": {
|
||||
"accent_color": "Color d'accent",
|
||||
"account": "Compte",
|
||||
"account_description": "Personalitzeu la configuració del compte.",
|
||||
"account_email_description": "La vostra adreça de correu electrònic principal.",
|
||||
"account_name_description": "Aquest és el vostre nom visible.",
|
||||
"background": "Antecedents",
|
||||
"black_mode": "Negre",
|
||||
"change_font_size": "Canvia la mida de la lletra",
|
||||
"choose_language": "Tria l'idioma",
|
||||
"dark_mode": "Fosc",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Experiments",
|
||||
"experiments_notice": "Es tracta d'una col·lecció d'experiments en què estem treballant que poden resultar útils, divertits, o ambdós. No són finals i potser no són estables, de manera que si passa alguna cosa massa estrany, no us espanteu. Només cal que apagueu la cosa dang. Bromes a part,",
|
||||
"extension_ver_not_reported": "No s'ha informat",
|
||||
"extension_version": "Versió d'extensió",
|
||||
"extensions": "Extensions",
|
||||
"extensions_use_toggle": "Utilitzeu l'extensió del navegador per enviar sol·licituds (si n'hi ha)",
|
||||
"follow": "Follow Us",
|
||||
"font_size": "Mida de la font",
|
||||
"font_size_large": "Gran",
|
||||
"font_size_medium": "Mitjà",
|
||||
"font_size_small": "Petit",
|
||||
"interceptor": "Interceptor",
|
||||
"interceptor_description": "Middleware entre aplicació i API.",
|
||||
"language": "Llenguatge",
|
||||
"light_mode": "Llum",
|
||||
"official_proxy_hosting": "El servidor intermediari oficial està allotjat per Hoppscotch.",
|
||||
"profile": "Profile",
|
||||
"profile_description": "Update your profile details",
|
||||
"profile_email": "Email address",
|
||||
"profile_name": "Profile name",
|
||||
"proxy": "Servidor intermediari",
|
||||
"proxy_url": "URL del servidor intermediari",
|
||||
"proxy_use_toggle": "Utilitzeu el middleware del servidor intermediari per enviar sol·licituds",
|
||||
"read_the": "Llegir el",
|
||||
"reset_default": "Restableix el valor predeterminat",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes which were created by you.",
|
||||
"sidebar_on_left": "Sidebar on left",
|
||||
"sync": "Sincronitza",
|
||||
"sync_collections": "Col·leccions",
|
||||
"sync_description": "Aquesta configuració se sincronitza amb el núvol.",
|
||||
"sync_environments": "Entorns",
|
||||
"sync_history": "Història",
|
||||
"system_mode": "Sistema",
|
||||
"telemetry": "Telemetria",
|
||||
"telemetry_helps_us": "La telemetria ens ajuda a personalitzar les nostres operacions i oferir-vos la millor experiència.",
|
||||
"theme": "Tema",
|
||||
"theme_description": "Personalitzeu el tema de l'aplicació.",
|
||||
"use_experimental_url_bar": "Utilitzeu la barra d'URL experimental amb ressaltat de l'entorn",
|
||||
"user": "Usuari",
|
||||
"verified_email": "Verified email",
|
||||
"verify_email": "Verify email"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Actions",
|
||||
"created_on": "Created on",
|
||||
"deleted": "Shortcode deleted",
|
||||
"method": "Method",
|
||||
"not_found": "Shortcode not found",
|
||||
"short_code": "Short code",
|
||||
"url": "URL"
|
||||
},
|
||||
"shortcut": {
|
||||
"general": {
|
||||
"close_current_menu": "Tanca el menú actual",
|
||||
"command_menu": "Menú de cerca i ordres",
|
||||
"help_menu": "Menú d'ajuda",
|
||||
"show_all": "Dreceres de teclat",
|
||||
"title": "General"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "Convidar gent a Hoppscotch",
|
||||
"title": "Divers"
|
||||
},
|
||||
"navigation": {
|
||||
"back": "Torneu a la pàgina anterior",
|
||||
"documentation": "Aneu a la pàgina Documentació",
|
||||
"forward": "Aneu a la pàgina següent",
|
||||
"graphql": "Aneu a la pàgina GraphQL",
|
||||
"profile": "Go to Profile page",
|
||||
"realtime": "Aneu a la pàgina en temps real",
|
||||
"rest": "Aneu a la pàgina REST",
|
||||
"settings": "Aneu a la pàgina Configuració",
|
||||
"title": "Navegació"
|
||||
},
|
||||
"request": {
|
||||
"copy_request_link": "Copia l'enllaç de la sol·licitud",
|
||||
"delete_method": "Seleccioneu el mètode DELETE",
|
||||
"get_method": "Seleccioneu el mètode GET",
|
||||
"head_method": "Seleccioneu el mètode HEAD",
|
||||
"method": "Mètode",
|
||||
"next_method": "Seleccioneu Mètode següent",
|
||||
"post_method": "Seleccioneu el mètode POST",
|
||||
"previous_method": "Seleccioneu el mètode anterior",
|
||||
"put_method": "Seleccioneu el mètode PUT",
|
||||
"reset_request": "Sol·licitud de restabliment",
|
||||
"save_to_collections": "Desa a les col·leccions",
|
||||
"send_request": "Enviar sol.licitud",
|
||||
"title": "Sol·licitud"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
"light": "Switch theme to light mode",
|
||||
"system": "Switch theme to system mode",
|
||||
"title": "Theme"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "Mostra el codi",
|
||||
"collection": "Expand Collection Panel",
|
||||
"more": "Mostra més",
|
||||
"sidebar": "Mostra la barra lateral"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "Comunicació",
|
||||
"connection_not_authorized": "This SocketIO connection does not use any authentication.",
|
||||
"event_name": "Nom de l'esdeveniment",
|
||||
"events": "Esdeveniments",
|
||||
"log": "Registre",
|
||||
"url": "URL"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "Tipus d'esdeveniment",
|
||||
"log": "Registre",
|
||||
"url": "URL"
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "Edició massiva",
|
||||
"bulk_mode_placeholder": "Les entrades estan separades per una nova línia\nLes claus i els valors estan separats per:\nPrepara # a qualsevol fila que vulguis afegir, però continua desactivat",
|
||||
"cleared": "Esborrat",
|
||||
"connected": "Connectat",
|
||||
"connected_to": "Connectat a {name}",
|
||||
"connecting_to": "S'està connectant a {name} ...",
|
||||
"connection_error": "Failed to connect",
|
||||
"connection_failed": "Connection failed",
|
||||
"connection_lost": "Connection lost",
|
||||
"copied_to_clipboard": "Copiat al porta-retalls",
|
||||
"deleted": "Suprimit",
|
||||
"deprecated": "DEPRECAT",
|
||||
"disabled": "Desactivat",
|
||||
"disconnected": "Desconnectat",
|
||||
"disconnected_from": "Desconnectat de {name}",
|
||||
"docs_generated": "Documentació generada",
|
||||
"download_started": "S'ha iniciat la baixada",
|
||||
"enabled": "Activat",
|
||||
"file_imported": "Fitxer importat",
|
||||
"finished_in": "Acabat en {duration} ms",
|
||||
"history_deleted": "S'ha suprimit l'historial",
|
||||
"linewrap": "Línies d'embolcall",
|
||||
"loading": "S'està carregant ...",
|
||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
||||
"none": "Cap",
|
||||
"nothing_found": "No s'ha trobat res",
|
||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
||||
"published_message": "Published message: {message} to topic: {topic}",
|
||||
"reconnection_error": "Failed to reconnect",
|
||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
||||
"waiting_send_request": "S'està esperant l'enviament de la sol·licitud"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "Llegiu més sobre les darreres versions",
|
||||
"chat": "Tens preguntes? Xateja amb nosaltres!",
|
||||
"community": "Feu preguntes i ajudeu els altres",
|
||||
"documentation": "Llegiu més sobre Hoppscotch",
|
||||
"forum": "Feu preguntes i obteniu respostes",
|
||||
"github": "Follow us on Github",
|
||||
"shortcuts": "Navega per l'aplicació més ràpidament",
|
||||
"team": "Poseu-vos en contacte amb l'equip",
|
||||
"title": "Suport",
|
||||
"twitter": "segueix-nos a Twitter"
|
||||
},
|
||||
"tab": {
|
||||
"authorization": "Autorització",
|
||||
"body": "Cos",
|
||||
"collections": "Col·leccions",
|
||||
"documentation": "Documentació",
|
||||
"headers": "Capçaleres",
|
||||
"history": "Història",
|
||||
"mqtt": "MQTT",
|
||||
"parameters": "Paràmetres",
|
||||
"pre_request_script": "Script de sol·licitud prèvia",
|
||||
"queries": "Consultes",
|
||||
"query": "Consulta",
|
||||
"schema": "Schema",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "SSE",
|
||||
"tests": "Proves",
|
||||
"types": "Tipus",
|
||||
"variables": "Les variables",
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "You are already a member of this team. Contact your team owner.",
|
||||
"create_new": "Crea un equip nou",
|
||||
"deleted": "L'equip s'ha suprimit",
|
||||
"edit": "Edita l'equip",
|
||||
"email": "Correu electrònic",
|
||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||
"exit": "Sortiu de l'equip",
|
||||
"exit_disabled": "L'únic propietari no pot sortir de l'equip",
|
||||
"invalid_email_format": "El format del correu electrònic no és vàlid",
|
||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||
"invalid_invite_link": "Invalid invite link",
|
||||
"invalid_invite_link_description": "The link you followed is invalid. Contact your team owner.",
|
||||
"invalid_member_permission": "Proporcioneu un permís vàlid al membre de l'equip",
|
||||
"invite": "Invite",
|
||||
"invite_more": "Invite more",
|
||||
"invite_tooltip": "Invite people to this workspace",
|
||||
"invited_to_team": "{owner} invited you to join {team}",
|
||||
"join": "Invitation accepted",
|
||||
"join_beta": "Uniu-vos al programa beta per accedir als equips.",
|
||||
"join_team": "Join {team}",
|
||||
"joined_team": "You have joined {team}",
|
||||
"joined_team_description": "You are now a member of this team",
|
||||
"left": "Vas deixar l'equip",
|
||||
"login_to_continue": "Login to continue",
|
||||
"login_to_continue_description": "You need to be logged in to join a team.",
|
||||
"logout_and_try_again": "Logout and sign in with another account",
|
||||
"member_has_invite": "This email ID already has an invite. Contact your team owner.",
|
||||
"member_not_found": "Member not found. Contact your team owner.",
|
||||
"member_removed": "S'ha eliminat l'usuari",
|
||||
"member_role_updated": "Rols d'usuari actualitzats",
|
||||
"members": "Membres",
|
||||
"name_length_insufficient": "El nom de l'equip ha de tenir com a mínim 6 caràcters",
|
||||
"name_updated": "Team name updated",
|
||||
"new": "Nou equip",
|
||||
"new_created": "S'ha creat un nou equip",
|
||||
"new_name": "El meu nou equip",
|
||||
"no_access": "No teniu accés d'edició a aquestes col·leccions",
|
||||
"no_invite_found": "Invitation 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.",
|
||||
"pending_invites": "Pending invites",
|
||||
"permissions": "Permisos",
|
||||
"saved": "L'equip s'ha desat",
|
||||
"select_a_team": "Select a team",
|
||||
"title": "Equips",
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "Codi JavaScript",
|
||||
"learn": "Llegiu la documentació",
|
||||
"passed": "test passed",
|
||||
"report": "Informe de prova",
|
||||
"results": "Resultats de l'exàmen",
|
||||
"script": "Guió",
|
||||
"snippets": "Fragments"
|
||||
},
|
||||
"websocket": {
|
||||
"communication": "Comunicació",
|
||||
"log": "Registre",
|
||||
"message": "Missatge",
|
||||
"protocols": "Protocols",
|
||||
"url": "URL"
|
||||
}
|
||||
}
|
||||
@@ -1,667 +0,0 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "Autoscroll",
|
||||
"cancel": "Cancel",
|
||||
"choose_file": "Choose a file",
|
||||
"clear": "Clear",
|
||||
"clear_all": "Clear all",
|
||||
"close": "Close",
|
||||
"connect": "Connect",
|
||||
"copy": "Copy",
|
||||
"delete": "Delete",
|
||||
"disconnect": "Disconnect",
|
||||
"dismiss": "Dismiss",
|
||||
"dont_save": "Don't save",
|
||||
"download_file": "Download file",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Edit",
|
||||
"filter_response": "Filter response",
|
||||
"go_back": "Go back",
|
||||
"label": "Label",
|
||||
"learn_more": "Learn more",
|
||||
"less": "Less",
|
||||
"more": "More",
|
||||
"new": "New",
|
||||
"no": "No",
|
||||
"open_workspace": "Open workspace",
|
||||
"paste": "Paste",
|
||||
"prettify": "Prettify",
|
||||
"remove": "Remove",
|
||||
"restore": "Restore",
|
||||
"save": "Save",
|
||||
"scroll_to_bottom": "Scroll to bottom",
|
||||
"scroll_to_top": "Scroll to top",
|
||||
"search": "Search",
|
||||
"send": "Send",
|
||||
"start": "Start",
|
||||
"stop": "Stop",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
"to_select": "to select",
|
||||
"turn_off": "Turn off",
|
||||
"turn_on": "Turn on",
|
||||
"undo": "Undo",
|
||||
"yes": "Yes"
|
||||
},
|
||||
"add": {
|
||||
"new": "Add new",
|
||||
"star": "Add star"
|
||||
},
|
||||
"app": {
|
||||
"chat_with_us": "Chat with us",
|
||||
"contact_us": "Contact us",
|
||||
"copy": "Copy",
|
||||
"copy_user_id": "Copy User Auth Token",
|
||||
"developer_option": "Developer options",
|
||||
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Documentation",
|
||||
"github": "GitHub",
|
||||
"help": "Help & feedback",
|
||||
"home": "Home",
|
||||
"invite": "Invite",
|
||||
"invite_description": "Hoppscotch is an open source API development ecosystem. We designed a simple and intuitive interface for creating and managing your APIs. Hoppscotch is a tool that helps you build, test, document and share your APIs.",
|
||||
"invite_your_friends": "Invite your friends",
|
||||
"join_discord_community": "Join our Discord community",
|
||||
"keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"name": "Hoppscotch",
|
||||
"new_version_found": "New version found. Refresh to update.",
|
||||
"options": "Options",
|
||||
"proxy_privacy_policy": "Proxy privacy policy",
|
||||
"reload": "Reload",
|
||||
"search": "Search",
|
||||
"share": "Share",
|
||||
"shortcuts": "Shortcuts",
|
||||
"spotlight": "Spotlight",
|
||||
"status": "Status",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "Terms and privacy",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Type a command or search…",
|
||||
"we_use_cookies": "We use cookies",
|
||||
"whats_new": "What's new?",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "Account exists with different credential - Login to link both accounts",
|
||||
"all_sign_in_options": "All sign in options",
|
||||
"continue_with_email": "Continue with Email",
|
||||
"continue_with_github": "Continue with GitHub",
|
||||
"continue_with_google": "Continue with Google",
|
||||
"continue_with_microsoft": "Continue with Microsoft",
|
||||
"email": "Email",
|
||||
"logged_out": "Logged out",
|
||||
"login": "Login",
|
||||
"login_success": "Successfully logged in",
|
||||
"login_to_hoppscotch": "Login to Hoppscotch",
|
||||
"logout": "Logout",
|
||||
"re_enter_email": "Re-enter email",
|
||||
"send_magic_link": "Send a magic link",
|
||||
"sync": "Sync",
|
||||
"we_sent_magic_link": "We sent you a magic link!",
|
||||
"we_sent_magic_link_description": "Check your inbox - we sent an email to {email}. It contains a magic link that will log you in."
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "Generate Token",
|
||||
"include_in_url": "Include in URL",
|
||||
"learn": "Learn how",
|
||||
"pass_key_by": "Pass by",
|
||||
"password": "Password",
|
||||
"token": "Token",
|
||||
"type": "Authorization Type",
|
||||
"username": "Username"
|
||||
},
|
||||
"collection": {
|
||||
"created": "Collection created",
|
||||
"edit": "Edit Collection",
|
||||
"invalid_name": "Please provide a name for the collection",
|
||||
"my_collections": "My Collections",
|
||||
"name": "My New Collection",
|
||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||
"new": "New Collection",
|
||||
"renamed": "Collection renamed",
|
||||
"request_in_use": "Request in use",
|
||||
"save_as": "Save as",
|
||||
"select": "Select a Collection",
|
||||
"select_location": "Select location",
|
||||
"select_team": "Select a team",
|
||||
"team_collections": "Team Collections"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "Are you sure you want to leave this team?",
|
||||
"logout": "Are you sure you want to logout?",
|
||||
"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_folder": "Are you sure you want to permanently delete this folder?",
|
||||
"remove_history": "Are you sure you want to permanently delete all history?",
|
||||
"remove_request": "Are you sure you want to permanently delete this request?",
|
||||
"remove_team": "Are you sure you want to delete this team?",
|
||||
"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.",
|
||||
"sync": "Would you like to restore your workspace from cloud? This will discard your local progress."
|
||||
},
|
||||
"count": {
|
||||
"header": "Header {count}",
|
||||
"message": "Message {count}",
|
||||
"parameter": "Parameter {count}",
|
||||
"protocol": "Protocol {count}",
|
||||
"value": "Value {count}",
|
||||
"variable": "Variable {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "Generate documentation",
|
||||
"generate_message": "Import any Hoppscotch collection to generate API documentation on-the-go."
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "This request does not use any authorization",
|
||||
"body": "This request does not have a body",
|
||||
"collection": "Collection is empty",
|
||||
"collections": "Collections are empty",
|
||||
"documentation": "Connect to a GraphQL endpoint to view documentation",
|
||||
"endpoint": "Endpoint cannot be empty",
|
||||
"environments": "Environments are empty",
|
||||
"folder": "Folder is empty",
|
||||
"headers": "This request does not have any headers",
|
||||
"history": "History is empty",
|
||||
"invites": "Invite list is empty",
|
||||
"members": "Team is empty",
|
||||
"parameters": "This request does not have any parameters",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"protocols": "Protocols are empty",
|
||||
"schema": "Connect to a GraphQL endpoint to view schema",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"team_name": "Team name empty",
|
||||
"teams": "You don't belong to any teams",
|
||||
"tests": "There are no tests for this request"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "Add to Global",
|
||||
"added": "Environment addition",
|
||||
"create_new": "Create new environment",
|
||||
"created": "Environment created",
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Edit Environment",
|
||||
"invalid_name": "Please provide a name for the environment",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "New Environment",
|
||||
"no_environment": "No environment",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Select environment",
|
||||
"title": "Environments",
|
||||
"updated": "Environment updated",
|
||||
"variable_list": "Variable List"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "This browser doesn't seems to have Server Sent Events support.",
|
||||
"check_console_details": "Check console log for details.",
|
||||
"curl_invalid_format": "cURL is not formatted properly",
|
||||
"empty_req_name": "Empty Request Name",
|
||||
"f12_details": "(F12 for details)",
|
||||
"gql_prettify_invalid_query": "Couldn't prettify an invalid query, solve query syntax errors and try again",
|
||||
"incomplete_config_urls": "Incomplete configuration URLs",
|
||||
"incorrect_email": "Incorrect email",
|
||||
"invalid_link": "Invalid link",
|
||||
"invalid_link_description": "The link you clicked is invalid or expired.",
|
||||
"json_parsing_failed": "Invalid JSON",
|
||||
"json_prettify_invalid_body": "Couldn't prettify an invalid body, solve json syntax errors and try again",
|
||||
"network_error": "There seems to be a network error. Please try again.",
|
||||
"network_fail": "Could not send request",
|
||||
"no_duration": "No duration",
|
||||
"no_results_found": "No matches found",
|
||||
"page_not_found": "This page could not be found",
|
||||
"script_fail": "Could not execute pre-request script",
|
||||
"something_went_wrong": "Something went wrong",
|
||||
"test_script_fail": "Could not execute post-request script"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "Export as JSON",
|
||||
"create_secret_gist": "Create secret Gist",
|
||||
"gist_created": "Gist created",
|
||||
"require_github": "Login with GitHub to create secret gist",
|
||||
"title": "Export"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Folder created",
|
||||
"edit": "Edit Folder",
|
||||
"invalid_name": "Please provide a name for the folder",
|
||||
"name_length_insufficient": "Folder name should be at least 3 characters long",
|
||||
"new": "New Folder",
|
||||
"renamed": "Folder renamed"
|
||||
},
|
||||
"graphql": {
|
||||
"mutations": "Mutations",
|
||||
"schema": "Schema",
|
||||
"subscriptions": "Subscriptions"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Install app",
|
||||
"login": "Login",
|
||||
"save_workspace": "Save My Workspace"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": "The authorization header will be automatically generated when you send the request.",
|
||||
"generate_documentation_first": "Generate documentation first",
|
||||
"network_fail": "Unable to reach the API endpoint. Check your network connection or select a different Interceptor and try again.",
|
||||
"offline": "You seem to be offline. Data in this workspace might not be up to date.",
|
||||
"offline_short": "You seem to be offline.",
|
||||
"post_request_tests": "Test scripts are written in JavaScript, and are run after the response is received.",
|
||||
"pre_request_script": "Pre-request scripts are written in JavaScript, and are run before the request is sent.",
|
||||
"script_fail": "It seems there is a glitch in the pre-request script. Check the error below and fix the script accordingly.",
|
||||
"test_script_fail": "There seems to be an error with test script. Please fix the errors and run tests again",
|
||||
"tests": "Write a test script to automate debugging."
|
||||
},
|
||||
"hide": {
|
||||
"collection": "Collapse Collection Panel",
|
||||
"more": "Hide more",
|
||||
"preview": "Hide Preview",
|
||||
"sidebar": "Collapse sidebar"
|
||||
},
|
||||
"import": {
|
||||
"collections": "Import collections",
|
||||
"curl": "Import cURL",
|
||||
"failed": "Error while importing: format not recognized",
|
||||
"from_gist": "Import from Gist",
|
||||
"from_gist_description": "Import from Gist URL",
|
||||
"from_insomnia": "Import from Insomnia",
|
||||
"from_insomnia_description": "Import from Insomnia collection",
|
||||
"from_json": "Import from Hoppscotch",
|
||||
"from_json_description": "Import from Hoppscotch collection file",
|
||||
"from_my_collections": "Import from My Collections",
|
||||
"from_my_collections_description": "Import from My Collections file",
|
||||
"from_openapi": "Import from OpenAPI",
|
||||
"from_openapi_description": "Import from OpenAPI specification file (YML/JSON)",
|
||||
"from_postman": "Import from Postman",
|
||||
"from_postman_description": "Import from Postman collection",
|
||||
"from_url": "Import from URL",
|
||||
"gist_url": "Enter Gist URL",
|
||||
"import_from_url_invalid_fetch": "Couldn't get data from the url",
|
||||
"import_from_url_invalid_file_format": "Error while importing collections",
|
||||
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Collections Imported",
|
||||
"json_description": "Import collections from a Hoppscotch Collections JSON file",
|
||||
"title": "Import"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Collapse or Expand Collections",
|
||||
"collapse_sidebar": "Collapse or Expand the sidebar",
|
||||
"column": "Vertical layout",
|
||||
"name": "Layout",
|
||||
"row": "Horizontal layout",
|
||||
"zen_mode": "Zen mode"
|
||||
},
|
||||
"modal": {
|
||||
"collections": "Collections",
|
||||
"confirm": "Confirm",
|
||||
"edit_request": "Edit Request",
|
||||
"import_export": "Import / Export"
|
||||
},
|
||||
"mqtt": {
|
||||
"communication": "Communication",
|
||||
"log": "Log",
|
||||
"message": "Message",
|
||||
"publish": "Publish",
|
||||
"subscribe": "Subscribe",
|
||||
"topic": "Topic",
|
||||
"topic_name": "Topic Name",
|
||||
"topic_title": "Publish / Subscribe topic",
|
||||
"unsubscribe": "Unsubscribe",
|
||||
"url": "URL"
|
||||
},
|
||||
"navigation": {
|
||||
"doc": "Docs",
|
||||
"graphql": "GraphQL",
|
||||
"profile": "Profile",
|
||||
"realtime": "Realtime",
|
||||
"rest": "REST",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"preRequest": {
|
||||
"javascript_code": "JavaScript Code",
|
||||
"learn": "Read documentation",
|
||||
"script": "Pre-Request Script",
|
||||
"snippets": "Snippets"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
"no_permission": "You do not have permission to perform this action.",
|
||||
"owner": "Owner",
|
||||
"owner_description": "Owners can add, edit, and delete requests, collections and team members.",
|
||||
"roles": "Roles",
|
||||
"roles_description": "Roles are used to control access to the shared collections.",
|
||||
"updated": "Profile updated",
|
||||
"viewer": "Viewer",
|
||||
"viewer_description": "Viewers can only view and use requests."
|
||||
},
|
||||
"remove": {
|
||||
"star": "Remove star"
|
||||
},
|
||||
"request": {
|
||||
"added": "Request added",
|
||||
"authorization": "Authorization",
|
||||
"body": "Request Body",
|
||||
"choose_language": "Choose language",
|
||||
"content_type": "Content Type",
|
||||
"content_type_titles": {
|
||||
"others": "Others",
|
||||
"structured": "Structured",
|
||||
"text": "Text"
|
||||
},
|
||||
"copy_link": "Copy link",
|
||||
"duration": "Duration",
|
||||
"enter_curl": "Enter cURL",
|
||||
"generate_code": "Generate code",
|
||||
"generated_code": "Generated code",
|
||||
"header_list": "Header List",
|
||||
"invalid_name": "Please provide a name for the request",
|
||||
"method": "Method",
|
||||
"name": "Request name",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Query Parameters",
|
||||
"parameters": "Parameters",
|
||||
"path": "Path",
|
||||
"payload": "Payload",
|
||||
"query": "Query",
|
||||
"raw_body": "Raw Request Body",
|
||||
"renamed": "Request renamed",
|
||||
"run": "Run",
|
||||
"save": "Save",
|
||||
"save_as": "Save as",
|
||||
"saved": "Request saved",
|
||||
"share": "Share",
|
||||
"share_description": "Share Hoppscotch with your friends",
|
||||
"title": "Request",
|
||||
"type": "Request type",
|
||||
"url": "URL",
|
||||
"variables": "Variables",
|
||||
"view_my_links": "View my links"
|
||||
},
|
||||
"response": {
|
||||
"body": "Response Body",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "Image",
|
||||
"json": "JSON",
|
||||
"pdf": "PDF",
|
||||
"preview_html": "Preview HTML",
|
||||
"raw": "Raw",
|
||||
"size": "Size",
|
||||
"status": "Status",
|
||||
"time": "Time",
|
||||
"title": "Response",
|
||||
"waiting_for_connection": "waiting for connection",
|
||||
"xml": "XML"
|
||||
},
|
||||
"settings": {
|
||||
"accent_color": "Accent color",
|
||||
"account": "アカウント",
|
||||
"account_description": "Customize your account settings.",
|
||||
"account_email_description": "Your primary email address.",
|
||||
"account_name_description": "This is your display name.",
|
||||
"background": "Background",
|
||||
"black_mode": "Black",
|
||||
"change_font_size": "Change font size",
|
||||
"choose_language": "Choose language",
|
||||
"dark_mode": "Dark",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Experiments",
|
||||
"experiments_notice": "This is a collection of experiments we're working on that might turn out to be useful, fun, both, or neither. They're not final and may not be stable, so if something overly weird happens, don't panic. Just turn the dang thing off. Jokes aside, ",
|
||||
"extension_ver_not_reported": "Not Reported",
|
||||
"extension_version": "Extension Version",
|
||||
"extensions": "Browser extension",
|
||||
"extensions_use_toggle": "Use the browser extension to send requests (if present)",
|
||||
"follow": "Follow Us",
|
||||
"font_size": "Font size",
|
||||
"font_size_large": "Large",
|
||||
"font_size_medium": "Medium",
|
||||
"font_size_small": "Small",
|
||||
"interceptor": "Interceptor",
|
||||
"interceptor_description": "Middleware between application and APIs.",
|
||||
"language": "Language",
|
||||
"light_mode": "Light",
|
||||
"official_proxy_hosting": "Official Proxy is hosted by Hoppscotch.",
|
||||
"profile": "Profile",
|
||||
"profile_description": "Update your profile details",
|
||||
"profile_email": "Email address",
|
||||
"profile_name": "Profile name",
|
||||
"proxy": "Proxy",
|
||||
"proxy_url": "Proxy URL",
|
||||
"proxy_use_toggle": "Use the proxy middleware to send requests",
|
||||
"read_the": "Read the",
|
||||
"reset_default": "Reset to default",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes which were created by you.",
|
||||
"sidebar_on_left": "Sidebar on left",
|
||||
"sync": "Synchronise",
|
||||
"sync_collections": "Collections",
|
||||
"sync_description": "These settings are synced to cloud.",
|
||||
"sync_environments": "Environments",
|
||||
"sync_history": "History",
|
||||
"system_mode": "System",
|
||||
"telemetry": "Telemetry",
|
||||
"telemetry_helps_us": "Telemetry helps us to personalize our operations and deliver the best experience to you.",
|
||||
"theme": "Theme",
|
||||
"theme_description": "Customize your application theme.",
|
||||
"use_experimental_url_bar": "Use experimental URL bar with environment highlighting",
|
||||
"user": "User",
|
||||
"verified_email": "Verified email",
|
||||
"verify_email": "Verify email"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Actions",
|
||||
"created_on": "Created on",
|
||||
"deleted": "Shortcode deleted",
|
||||
"method": "Method",
|
||||
"not_found": "Shortcode not found",
|
||||
"short_code": "Short code",
|
||||
"url": "URL"
|
||||
},
|
||||
"shortcut": {
|
||||
"general": {
|
||||
"close_current_menu": "Close current menu",
|
||||
"command_menu": "Search & command menu",
|
||||
"help_menu": "Help menu",
|
||||
"show_all": "Keyboard shortcuts",
|
||||
"title": "General"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "Invite people to Hoppscotch",
|
||||
"title": "Miscellaneous"
|
||||
},
|
||||
"navigation": {
|
||||
"back": "Go back to previous page",
|
||||
"documentation": "Go to Documentation page",
|
||||
"forward": "Go forward to next page",
|
||||
"graphql": "Go to GraphQL page",
|
||||
"profile": "Go to Profile page",
|
||||
"realtime": "Go to Realtime page",
|
||||
"rest": "Go to REST page",
|
||||
"settings": "Go to Settings page",
|
||||
"title": "Navigation"
|
||||
},
|
||||
"request": {
|
||||
"copy_request_link": "Copy Request Link",
|
||||
"delete_method": "Select DELETE method",
|
||||
"get_method": "Select GET method",
|
||||
"head_method": "Select HEAD method",
|
||||
"method": "Method",
|
||||
"next_method": "Select Next method",
|
||||
"post_method": "Select POST method",
|
||||
"previous_method": "Select Previous method",
|
||||
"put_method": "Select PUT method",
|
||||
"reset_request": "Reset Request",
|
||||
"save_to_collections": "Save to Collections",
|
||||
"send_request": "Send Request",
|
||||
"title": "Request"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
"light": "Switch theme to light mode",
|
||||
"system": "Switch theme to system mode",
|
||||
"title": "Theme"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "Show code",
|
||||
"collection": "Expand Collection Panel",
|
||||
"more": "Show more",
|
||||
"sidebar": "Expand sidebar"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "Communication",
|
||||
"connection_not_authorized": "This SocketIO connection does not use any authentication.",
|
||||
"event_name": "Event Name",
|
||||
"events": "Events",
|
||||
"log": "Log",
|
||||
"url": "URL"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "Event type",
|
||||
"log": "Log",
|
||||
"url": "URL"
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "Bulk edit",
|
||||
"bulk_mode_placeholder": "Entries are separated by newline\nKeys and values are separated by :\nPrepend # to any row you want to add but keep disabled",
|
||||
"cleared": "Cleared",
|
||||
"connected": "Connected",
|
||||
"connected_to": "Connected to {name}",
|
||||
"connecting_to": "Connecting to {name}...",
|
||||
"connection_error": "Failed to connect",
|
||||
"connection_failed": "Connection failed",
|
||||
"connection_lost": "Connection lost",
|
||||
"copied_to_clipboard": "Copied to clipboard",
|
||||
"deleted": "Deleted",
|
||||
"deprecated": "DEPRECATED",
|
||||
"disabled": "Disabled",
|
||||
"disconnected": "Disconnected",
|
||||
"disconnected_from": "Disconnected from {name}",
|
||||
"docs_generated": "Documentation generated",
|
||||
"download_started": "Download started",
|
||||
"enabled": "Enabled",
|
||||
"file_imported": "File imported",
|
||||
"finished_in": "Finished in {duration} ms",
|
||||
"history_deleted": "History deleted",
|
||||
"linewrap": "Wrap lines",
|
||||
"loading": "Loading...",
|
||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
||||
"none": "None",
|
||||
"nothing_found": "Nothing found for",
|
||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
||||
"published_message": "Published message: {message} to topic: {topic}",
|
||||
"reconnection_error": "Failed to reconnect",
|
||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
||||
"waiting_send_request": "Waiting to send request"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "Read more about latest releases",
|
||||
"chat": "Questions? Chat with us!",
|
||||
"community": "Ask questions and help others",
|
||||
"documentation": "Read more about Hoppscotch",
|
||||
"forum": "Ask questions and get answers",
|
||||
"github": "Follow us on Github",
|
||||
"shortcuts": "Browse app faster",
|
||||
"team": "Get in touch with the team",
|
||||
"title": "Support",
|
||||
"twitter": "Follow us on Twitter"
|
||||
},
|
||||
"tab": {
|
||||
"authorization": "Authorization",
|
||||
"body": "Body",
|
||||
"collections": "Collections",
|
||||
"documentation": "Documentation",
|
||||
"headers": "Headers",
|
||||
"history": "History",
|
||||
"mqtt": "MQTT",
|
||||
"parameters": "Parameters",
|
||||
"pre_request_script": "Pre-request Script",
|
||||
"queries": "Queries",
|
||||
"query": "Query",
|
||||
"schema": "Schema",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "SSE",
|
||||
"tests": "Tests",
|
||||
"types": "Types",
|
||||
"variables": "Variables",
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "You are already a member of this team. Contact your team owner.",
|
||||
"create_new": "Create new team",
|
||||
"deleted": "Team deleted",
|
||||
"edit": "Edit Team",
|
||||
"email": "E-mail",
|
||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||
"exit": "Exit Team",
|
||||
"exit_disabled": "Only owner cannot exit the team",
|
||||
"invalid_email_format": "Email format is invalid",
|
||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||
"invalid_invite_link": "Invalid invite link",
|
||||
"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",
|
||||
"invite": "Invite",
|
||||
"invite_more": "Invite more",
|
||||
"invite_tooltip": "Invite people to this workspace",
|
||||
"invited_to_team": "{owner} invited you to join {team}",
|
||||
"join": "Invitation accepted",
|
||||
"join_beta": "Join the beta program to access teams.",
|
||||
"join_team": "Join {team}",
|
||||
"joined_team": "You have joined {team}",
|
||||
"joined_team_description": "You are now a member of this team",
|
||||
"left": "You left the team",
|
||||
"login_to_continue": "Login to continue",
|
||||
"login_to_continue_description": "You need to be logged in to join a team.",
|
||||
"logout_and_try_again": "Logout and sign in with another account",
|
||||
"member_has_invite": "This email ID already has an invite. Contact your team owner.",
|
||||
"member_not_found": "Member not found. Contact your team owner.",
|
||||
"member_removed": "User removed",
|
||||
"member_role_updated": "User roles updated",
|
||||
"members": "Members",
|
||||
"name_length_insufficient": "Team name should be at least 6 characters long",
|
||||
"name_updated": "Team name updated",
|
||||
"new": "New Team",
|
||||
"new_created": "New team created",
|
||||
"new_name": "My New Team",
|
||||
"no_access": "You do not have edit access to these collections",
|
||||
"no_invite_found": "Invitation 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.",
|
||||
"pending_invites": "Pending invites",
|
||||
"permissions": "Permissions",
|
||||
"saved": "Team saved",
|
||||
"select_a_team": "Select a team",
|
||||
"title": "Teams",
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScript Code",
|
||||
"learn": "Read documentation",
|
||||
"passed": "test passed",
|
||||
"report": "Test Report",
|
||||
"results": "Test Results",
|
||||
"script": "Script",
|
||||
"snippets": "Snippets"
|
||||
},
|
||||
"websocket": {
|
||||
"communication": "Communication",
|
||||
"log": "Log",
|
||||
"message": "Message",
|
||||
"protocols": "Protocols",
|
||||
"url": "URL"
|
||||
}
|
||||
}
|
||||
272
packages/hoppscotch-app/shims-volar.d.ts
vendored
@@ -1,272 +0,0 @@
|
||||
import AppAnnouncement from "./components/app/Announcement.vue";
|
||||
import AppDeveloperOptions from "./components/app/DeveloperOptions.vue";
|
||||
import AppFooter from "./components/app/Footer.vue";
|
||||
import AppFuse from "./components/app/Fuse.vue";
|
||||
import AppGitHubStarButton from "./components/app/GitHubStarButton.vue";
|
||||
import AppHeader from "./components/app/Header.vue";
|
||||
import AppInterceptor from "./components/app/Interceptor.vue";
|
||||
import AppLogo from "./components/app/Logo.vue";
|
||||
import AppOptions from "./components/app/Options.vue";
|
||||
import AppPaneLayout from "./components/app/PaneLayout.vue";
|
||||
import AppPowerSearch from "./components/app/PowerSearch.vue";
|
||||
import AppPowerSearchEntry from "./components/app/PowerSearchEntry.vue";
|
||||
import AppShare from "./components/app/Share.vue";
|
||||
import AppShortcuts from "./components/app/Shortcuts.vue";
|
||||
import AppShortcutsEntry from "./components/app/ShortcutsEntry.vue";
|
||||
import AppSidenav from "./components/app/Sidenav.vue";
|
||||
import AppSlideOver from "./components/app/SlideOver.vue";
|
||||
import AppSupport from "./components/app/Support.vue";
|
||||
import ButtonPrimary from "./components/button/Primary.vue";
|
||||
import ButtonSecondary from "./components/button/Secondary.vue";
|
||||
import CollectionsAdd from "./components/collections/Add.vue";
|
||||
import CollectionsAddFolder from "./components/collections/AddFolder.vue";
|
||||
import CollectionsAddRequest from "./components/collections/AddRequest.vue";
|
||||
import CollectionsChooseType from "./components/collections/ChooseType.vue";
|
||||
import CollectionsEdit from "./components/collections/Edit.vue";
|
||||
import CollectionsEditFolder from "./components/collections/EditFolder.vue";
|
||||
import CollectionsEditRequest from "./components/collections/EditRequest.vue";
|
||||
import CollectionsImportExport from "./components/collections/ImportExport.vue";
|
||||
import CollectionsSaveRequest from "./components/collections/SaveRequest.vue";
|
||||
import CollectionsGraphqlAdd from "./components/collections/graphql/Add.vue";
|
||||
import CollectionsGraphqlAddFolder from "./components/collections/graphql/AddFolder.vue";
|
||||
import CollectionsGraphqlAddRequest from "./components/collections/graphql/AddRequest.vue";
|
||||
import CollectionsGraphqlCollection from "./components/collections/graphql/Collection.vue";
|
||||
import CollectionsGraphqlEdit from "./components/collections/graphql/Edit.vue";
|
||||
import CollectionsGraphqlEditFolder from "./components/collections/graphql/EditFolder.vue";
|
||||
import CollectionsGraphqlEditRequest from "./components/collections/graphql/EditRequest.vue";
|
||||
import CollectionsGraphqlFolder from "./components/collections/graphql/Folder.vue";
|
||||
import CollectionsGraphqlImportExport from "./components/collections/graphql/ImportExport.vue";
|
||||
import CollectionsGraphqlRequest from "./components/collections/graphql/Request.vue";
|
||||
import CollectionsGraphql from "./components/collections/graphql/index.vue";
|
||||
import Collections from "./components/collections/index.vue";
|
||||
import CollectionsMyCollection from "./components/collections/my/Collection.vue";
|
||||
import CollectionsMyFolder from "./components/collections/my/Folder.vue";
|
||||
import CollectionsMyRequest from "./components/collections/my/Request.vue";
|
||||
import CollectionsTeamsCollection from "./components/collections/teams/Collection.vue";
|
||||
import CollectionsTeamsFolder from "./components/collections/teams/Folder.vue";
|
||||
import CollectionsTeamsRequest from "./components/collections/teams/Request.vue";
|
||||
import DocsCollection from "./components/docs/Collection.vue";
|
||||
import DocsFolder from "./components/docs/Folder.vue";
|
||||
import DocsRequest from "./components/docs/Request.vue";
|
||||
import EnvironmentsDetails from "./components/environments/Details.vue";
|
||||
import EnvironmentsEnvironment from "./components/environments/Environment.vue";
|
||||
import EnvironmentsImportExport from "./components/environments/ImportExport.vue";
|
||||
import Environments from "./components/environments/index.vue";
|
||||
import FirebaseLogin from "./components/firebase/Login.vue";
|
||||
import FirebaseLogout from "./components/firebase/Logout.vue";
|
||||
import GraphqlAuthorization from "./components/graphql/Authorization.vue";
|
||||
import GraphqlField from "./components/graphql/Field.vue";
|
||||
import GraphqlRequest from "./components/graphql/Request.vue";
|
||||
import GraphqlRequestOptions from "./components/graphql/RequestOptions.vue";
|
||||
import GraphqlResponse from "./components/graphql/Response.vue";
|
||||
import GraphqlSidebar from "./components/graphql/Sidebar.vue";
|
||||
import GraphqlType from "./components/graphql/Type.vue";
|
||||
import GraphqlTypeLink from "./components/graphql/TypeLink.vue";
|
||||
import HistoryGraphqlCard from "./components/history/graphql/Card.vue";
|
||||
import History from "./components/history/index.vue";
|
||||
import HistoryRestCard from "./components/history/rest/Card.vue";
|
||||
import HttpAuthorization from "./components/http/Authorization.vue";
|
||||
import HttpBody from "./components/http/Body.vue";
|
||||
import HttpBodyParameters from "./components/http/BodyParameters.vue";
|
||||
import HttpCodegenModal from "./components/http/CodegenModal.vue";
|
||||
import HttpHeaders from "./components/http/Headers.vue";
|
||||
import HttpImportCurl from "./components/http/ImportCurl.vue";
|
||||
import HttpOAuth2Authorization from "./components/http/OAuth2Authorization.vue";
|
||||
import HttpParameters from "./components/http/Parameters.vue";
|
||||
import HttpPreRequestScript from "./components/http/PreRequestScript.vue";
|
||||
import HttpRawBody from "./components/http/RawBody.vue";
|
||||
import HttpReqChangeConfirmModal from "./components/http/ReqChangeConfirmModal.vue";
|
||||
import HttpRequest from "./components/http/Request.vue";
|
||||
import HttpRequestOptions from "./components/http/RequestOptions.vue";
|
||||
import HttpResponse from "./components/http/Response.vue";
|
||||
import HttpResponseMeta from "./components/http/ResponseMeta.vue";
|
||||
import HttpSidebar from "./components/http/Sidebar.vue";
|
||||
import HttpTestResult from "./components/http/TestResult.vue";
|
||||
import HttpTestResultEntry from "./components/http/TestResultEntry.vue";
|
||||
import HttpTestResultEnv from "./components/http/TestResultEnv.vue";
|
||||
import HttpTestResultReport from "./components/http/TestResultReport.vue";
|
||||
import HttpTests from "./components/http/Tests.vue";
|
||||
import HttpURLEncodedParams from "./components/http/URLEncodedParams.vue";
|
||||
import LensesHeadersRenderer from "./components/lenses/HeadersRenderer.vue";
|
||||
import LensesHeadersRendererEntry from "./components/lenses/HeadersRendererEntry.vue";
|
||||
import LensesResponseBodyRenderer from "./components/lenses/ResponseBodyRenderer.vue";
|
||||
import LensesRenderersHTMLLensRenderer from "./components/lenses/renderers/HTMLLensRenderer.vue";
|
||||
import LensesRenderersImageLensRenderer from "./components/lenses/renderers/ImageLensRenderer.vue";
|
||||
import LensesRenderersJSONLensRenderer from "./components/lenses/renderers/JSONLensRenderer.vue";
|
||||
import LensesRenderersPDFLensRenderer from "./components/lenses/renderers/PDFLensRenderer.vue";
|
||||
import LensesRenderersRawLensRenderer from "./components/lenses/renderers/RawLensRenderer.vue";
|
||||
import LensesRenderersXMLLensRenderer from "./components/lenses/renderers/XMLLensRenderer.vue";
|
||||
import ProfilePicture from "./components/profile/Picture.vue";
|
||||
import ProfileShortcode from "./components/profile/Shortcode.vue";
|
||||
import RealtimeCommunication from "./components/realtime/Communication.vue";
|
||||
import RealtimeLog from "./components/realtime/Log.vue";
|
||||
import RealtimeLogEntry from "./components/realtime/LogEntry.vue";
|
||||
import SmartAccentModePicker from "./components/smart/AccentModePicker.vue";
|
||||
import SmartAnchor from "./components/smart/Anchor.vue";
|
||||
import SmartAutoComplete from "./components/smart/AutoComplete.vue";
|
||||
import SmartChangeLanguage from "./components/smart/ChangeLanguage.vue";
|
||||
import SmartCheckbox from "./components/smart/Checkbox.vue";
|
||||
import SmartColorModePicker from "./components/smart/ColorModePicker.vue";
|
||||
import SmartConfirmModal from "./components/smart/ConfirmModal.vue";
|
||||
import SmartEnvInput from "./components/smart/EnvInput.vue";
|
||||
import SmartExpand from "./components/smart/Expand.vue";
|
||||
import SmartFileChip from "./components/smart/FileChip.vue";
|
||||
import SmartFontSizePicker from "./components/smart/FontSizePicker.vue";
|
||||
import SmartIcon from "./components/smart/Icon.vue";
|
||||
import SmartIntersection from "./components/smart/Intersection.vue";
|
||||
import SmartItem from "./components/smart/Item.vue";
|
||||
import SmartLoadingIndicator from "./components/smart/LoadingIndicator.vue";
|
||||
import SmartModal from "./components/smart/Modal.vue";
|
||||
import SmartProgressRing from "./components/smart/ProgressRing.vue";
|
||||
import SmartRadio from "./components/smart/Radio.vue";
|
||||
import SmartRadioGroup from "./components/smart/RadioGroup.vue";
|
||||
import SmartSpinner from "./components/smart/Spinner.vue";
|
||||
import SmartTab from "./components/smart/Tab.vue";
|
||||
import SmartTabs from "./components/smart/Tabs.vue";
|
||||
import SmartToggle from "./components/smart/Toggle.vue";
|
||||
import TabPrimary from "./components/tab/Primary.vue";
|
||||
import TabSecondary from "./components/tab/Secondary.vue";
|
||||
import TeamsAdd from "./components/teams/Add.vue";
|
||||
import TeamsEdit from "./components/teams/Edit.vue";
|
||||
import TeamsInvite from "./components/teams/Invite.vue";
|
||||
import TeamsModal from "./components/teams/Modal.vue";
|
||||
import TeamsTeam from "./components/teams/Team.vue";
|
||||
import Teams from "./components/teams/index.vue";
|
||||
declare global {
|
||||
interface __VLS_GlobalComponents {
|
||||
AppAnnouncement: typeof AppAnnouncement;
|
||||
AppDeveloperOptions: typeof AppDeveloperOptions;
|
||||
AppFooter: typeof AppFooter;
|
||||
AppFuse: typeof AppFuse;
|
||||
AppGitHubStarButton: typeof AppGitHubStarButton;
|
||||
AppHeader: typeof AppHeader;
|
||||
AppInterceptor: typeof AppInterceptor;
|
||||
AppLogo: typeof AppLogo;
|
||||
AppOptions: typeof AppOptions;
|
||||
AppPaneLayout: typeof AppPaneLayout;
|
||||
AppPowerSearch: typeof AppPowerSearch;
|
||||
AppPowerSearchEntry: typeof AppPowerSearchEntry;
|
||||
AppShare: typeof AppShare;
|
||||
AppShortcuts: typeof AppShortcuts;
|
||||
AppShortcutsEntry: typeof AppShortcutsEntry;
|
||||
AppSidenav: typeof AppSidenav;
|
||||
AppSlideOver: typeof AppSlideOver;
|
||||
AppSupport: typeof AppSupport;
|
||||
ButtonPrimary: typeof ButtonPrimary;
|
||||
ButtonSecondary: typeof ButtonSecondary;
|
||||
CollectionsAdd: typeof CollectionsAdd;
|
||||
CollectionsAddFolder: typeof CollectionsAddFolder;
|
||||
CollectionsAddRequest: typeof CollectionsAddRequest;
|
||||
CollectionsChooseType: typeof CollectionsChooseType;
|
||||
CollectionsEdit: typeof CollectionsEdit;
|
||||
CollectionsEditFolder: typeof CollectionsEditFolder;
|
||||
CollectionsEditRequest: typeof CollectionsEditRequest;
|
||||
CollectionsImportExport: typeof CollectionsImportExport;
|
||||
CollectionsSaveRequest: typeof CollectionsSaveRequest;
|
||||
CollectionsGraphqlAdd: typeof CollectionsGraphqlAdd;
|
||||
CollectionsGraphqlAddFolder: typeof CollectionsGraphqlAddFolder;
|
||||
CollectionsGraphqlAddRequest: typeof CollectionsGraphqlAddRequest;
|
||||
CollectionsGraphqlCollection: typeof CollectionsGraphqlCollection;
|
||||
CollectionsGraphqlEdit: typeof CollectionsGraphqlEdit;
|
||||
CollectionsGraphqlEditFolder: typeof CollectionsGraphqlEditFolder;
|
||||
CollectionsGraphqlEditRequest: typeof CollectionsGraphqlEditRequest;
|
||||
CollectionsGraphqlFolder: typeof CollectionsGraphqlFolder;
|
||||
CollectionsGraphqlImportExport: typeof CollectionsGraphqlImportExport;
|
||||
CollectionsGraphqlRequest: typeof CollectionsGraphqlRequest;
|
||||
CollectionsGraphql: typeof CollectionsGraphql;
|
||||
Collections: typeof Collections;
|
||||
CollectionsMyCollection: typeof CollectionsMyCollection;
|
||||
CollectionsMyFolder: typeof CollectionsMyFolder;
|
||||
CollectionsMyRequest: typeof CollectionsMyRequest;
|
||||
CollectionsTeamsCollection: typeof CollectionsTeamsCollection;
|
||||
CollectionsTeamsFolder: typeof CollectionsTeamsFolder;
|
||||
CollectionsTeamsRequest: typeof CollectionsTeamsRequest;
|
||||
DocsCollection: typeof DocsCollection;
|
||||
DocsFolder: typeof DocsFolder;
|
||||
DocsRequest: typeof DocsRequest;
|
||||
EnvironmentsDetails: typeof EnvironmentsDetails;
|
||||
EnvironmentsEnvironment: typeof EnvironmentsEnvironment;
|
||||
EnvironmentsImportExport: typeof EnvironmentsImportExport;
|
||||
Environments: typeof Environments;
|
||||
FirebaseLogin: typeof FirebaseLogin;
|
||||
FirebaseLogout: typeof FirebaseLogout;
|
||||
GraphqlAuthorization: typeof GraphqlAuthorization;
|
||||
GraphqlField: typeof GraphqlField;
|
||||
GraphqlRequest: typeof GraphqlRequest;
|
||||
GraphqlRequestOptions: typeof GraphqlRequestOptions;
|
||||
GraphqlResponse: typeof GraphqlResponse;
|
||||
GraphqlSidebar: typeof GraphqlSidebar;
|
||||
GraphqlType: typeof GraphqlType;
|
||||
GraphqlTypeLink: typeof GraphqlTypeLink;
|
||||
HistoryGraphqlCard: typeof HistoryGraphqlCard;
|
||||
History: typeof History;
|
||||
HistoryRestCard: typeof HistoryRestCard;
|
||||
HttpAuthorization: typeof HttpAuthorization;
|
||||
HttpBody: typeof HttpBody;
|
||||
HttpBodyParameters: typeof HttpBodyParameters;
|
||||
HttpCodegenModal: typeof HttpCodegenModal;
|
||||
HttpHeaders: typeof HttpHeaders;
|
||||
HttpImportCurl: typeof HttpImportCurl;
|
||||
HttpOAuth2Authorization: typeof HttpOAuth2Authorization;
|
||||
HttpParameters: typeof HttpParameters;
|
||||
HttpPreRequestScript: typeof HttpPreRequestScript;
|
||||
HttpRawBody: typeof HttpRawBody;
|
||||
HttpReqChangeConfirmModal: typeof HttpReqChangeConfirmModal;
|
||||
HttpRequest: typeof HttpRequest;
|
||||
HttpRequestOptions: typeof HttpRequestOptions;
|
||||
HttpResponse: typeof HttpResponse;
|
||||
HttpResponseMeta: typeof HttpResponseMeta;
|
||||
HttpSidebar: typeof HttpSidebar;
|
||||
HttpTestResult: typeof HttpTestResult;
|
||||
HttpTestResultEntry: typeof HttpTestResultEntry;
|
||||
HttpTestResultEnv: typeof HttpTestResultEnv;
|
||||
HttpTestResultReport: typeof HttpTestResultReport;
|
||||
HttpTests: typeof HttpTests;
|
||||
HttpURLEncodedParams: typeof HttpURLEncodedParams;
|
||||
LensesHeadersRenderer: typeof LensesHeadersRenderer;
|
||||
LensesHeadersRendererEntry: typeof LensesHeadersRendererEntry;
|
||||
LensesResponseBodyRenderer: typeof LensesResponseBodyRenderer;
|
||||
LensesRenderersHTMLLensRenderer: typeof LensesRenderersHTMLLensRenderer;
|
||||
LensesRenderersImageLensRenderer: typeof LensesRenderersImageLensRenderer;
|
||||
LensesRenderersJSONLensRenderer: typeof LensesRenderersJSONLensRenderer;
|
||||
LensesRenderersPDFLensRenderer: typeof LensesRenderersPDFLensRenderer;
|
||||
LensesRenderersRawLensRenderer: typeof LensesRenderersRawLensRenderer;
|
||||
LensesRenderersXMLLensRenderer: typeof LensesRenderersXMLLensRenderer;
|
||||
ProfilePicture: typeof ProfilePicture;
|
||||
ProfileShortcode: typeof ProfileShortcode;
|
||||
RealtimeCommunication: typeof RealtimeCommunication;
|
||||
RealtimeLog: typeof RealtimeLog;
|
||||
RealtimeLogEntry: typeof RealtimeLogEntry;
|
||||
SmartAccentModePicker: typeof SmartAccentModePicker;
|
||||
SmartAnchor: typeof SmartAnchor;
|
||||
SmartAutoComplete: typeof SmartAutoComplete;
|
||||
SmartChangeLanguage: typeof SmartChangeLanguage;
|
||||
SmartCheckbox: typeof SmartCheckbox;
|
||||
SmartColorModePicker: typeof SmartColorModePicker;
|
||||
SmartConfirmModal: typeof SmartConfirmModal;
|
||||
SmartEnvInput: typeof SmartEnvInput;
|
||||
SmartExpand: typeof SmartExpand;
|
||||
SmartFileChip: typeof SmartFileChip;
|
||||
SmartFontSizePicker: typeof SmartFontSizePicker;
|
||||
SmartIcon: typeof SmartIcon;
|
||||
SmartIntersection: typeof SmartIntersection;
|
||||
SmartItem: typeof SmartItem;
|
||||
SmartLoadingIndicator: typeof SmartLoadingIndicator;
|
||||
SmartModal: typeof SmartModal;
|
||||
SmartProgressRing: typeof SmartProgressRing;
|
||||
SmartRadio: typeof SmartRadio;
|
||||
SmartRadioGroup: typeof SmartRadioGroup;
|
||||
SmartSpinner: typeof SmartSpinner;
|
||||
SmartTab: typeof SmartTab;
|
||||
SmartTabs: typeof SmartTabs;
|
||||
SmartToggle: typeof SmartToggle;
|
||||
TabPrimary: typeof TabPrimary;
|
||||
TabSecondary: typeof TabSecondary;
|
||||
TeamsAdd: typeof TeamsAdd;
|
||||
TeamsEdit: typeof TeamsEdit;
|
||||
TeamsInvite: typeof TeamsInvite;
|
||||
TeamsModal: typeof TeamsModal;
|
||||
TeamsTeam: typeof TeamsTeam;
|
||||
Teams: typeof Teams;
|
||||
}
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
<template>
|
||||
<AppSlideOver :show="show" @close="close()">
|
||||
<template #content>
|
||||
<div class="sticky top-0 z-10 flex flex-col bg-primary">
|
||||
<div
|
||||
class="flex items-center justify-between p-2 border-b border-dividerLight"
|
||||
>
|
||||
<h3 class="ml-4 heading">{{ t("app.shortcuts") }}</h3>
|
||||
<ButtonSecondary :icon="IconX" @click="close()" />
|
||||
</div>
|
||||
<div class="flex flex-col px-6 py-4 border-b border-dividerLight">
|
||||
<input
|
||||
v-model="filterText"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
class="flex px-4 py-2 border rounded bg-primaryLight border-dividerLight focus-visible:border-divider"
|
||||
:placeholder="`${t('action.search')}`"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="filterText" class="flex flex-col divide-y divide-dividerLight">
|
||||
<div
|
||||
v-for="(map, mapIndex) in searchResults"
|
||||
:key="`map-${mapIndex}`"
|
||||
class="px-6 py-4 space-y-4"
|
||||
>
|
||||
<h1 class="font-semibold text-secondaryDark">
|
||||
{{ t(map.item.section) }}
|
||||
</h1>
|
||||
<AppShortcutsEntry
|
||||
v-for="(shortcut, index) in map.item.shortcuts"
|
||||
:key="`shortcut-${index}`"
|
||||
:shortcut="shortcut"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="searchResults.length === 0"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<icon-lucide-search class="pb-2 opacity-75 svg-icons" />
|
||||
<span class="my-2 text-center">
|
||||
{{ t("state.nothing_found") }} "{{ filterText }}"
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="flex flex-col divide-y divide-dividerLight">
|
||||
<div
|
||||
v-for="(map, mapIndex) in mappings"
|
||||
:key="`map-${mapIndex}`"
|
||||
class="px-6 py-4 space-y-4"
|
||||
>
|
||||
<h1 class="font-semibold text-secondaryDark">
|
||||
{{ t(map.section) }}
|
||||
</h1>
|
||||
<AppShortcutsEntry
|
||||
v-for="(shortcut, shortcutIndex) in map.shortcuts"
|
||||
:key="`map-${mapIndex}-shortcut-${shortcutIndex}`"
|
||||
:shortcut="shortcut"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</AppSlideOver>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import IconX from "~icons/lucide/x"
|
||||
import { computed, ref } from "vue"
|
||||
import Fuse from "fuse.js"
|
||||
import mappings from "~/helpers/shortcuts"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
|
||||
const t = useI18n()
|
||||
|
||||
defineProps<{
|
||||
show: boolean
|
||||
}>()
|
||||
|
||||
const options = {
|
||||
keys: ["shortcuts.label"],
|
||||
}
|
||||
|
||||
const fuse = new Fuse(mappings, options)
|
||||
|
||||
const filterText = ref("")
|
||||
|
||||
const searchResults = computed(() => fuse.search(filterText.value))
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: "close"): void
|
||||
}>()
|
||||
|
||||
const close = () => {
|
||||
filterText.value = ""
|
||||
emit("close")
|
||||
}
|
||||
</script>
|
||||
@@ -1,86 +0,0 @@
|
||||
<template>
|
||||
<SmartModal
|
||||
v-if="show"
|
||||
dialog
|
||||
:title="t('folder.new')"
|
||||
@close="$emit('hide-modal')"
|
||||
>
|
||||
<template #body>
|
||||
<div class="flex flex-col">
|
||||
<input
|
||||
id="selectLabelAddFolder"
|
||||
v-model="name"
|
||||
v-focus
|
||||
class="input floating-input"
|
||||
placeholder=" "
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
@keyup.enter="addFolder"
|
||||
/>
|
||||
<label for="selectLabelAddFolder">
|
||||
{{ t("action.label") }}
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<span class="flex">
|
||||
<ButtonPrimary
|
||||
:label="t('action.save')"
|
||||
:loading="loadingState"
|
||||
@click="addFolder"
|
||||
/>
|
||||
<ButtonSecondary :label="t('action.cancel')" @click="hideModal" />
|
||||
</span>
|
||||
</template>
|
||||
</SmartModal>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from "vue"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
show: Boolean,
|
||||
folder: { type: Object, default: () => ({}) },
|
||||
folderPath: { type: String, default: null },
|
||||
collectionIndex: { type: Number, default: null },
|
||||
loadingState: Boolean,
|
||||
},
|
||||
emits: ["hide-modal", "add-folder"],
|
||||
setup() {
|
||||
return {
|
||||
toast: useToast(),
|
||||
t: useI18n(),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
name: null,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show(isShowing: boolean) {
|
||||
if (!isShowing) this.name = null
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
addFolder() {
|
||||
if (!this.name) {
|
||||
this.toast.error(this.t("folder.invalid_name"))
|
||||
return
|
||||
}
|
||||
this.$emit("add-folder", {
|
||||
name: this.name,
|
||||
folder: this.folder,
|
||||
path: this.folderPath || `${this.collectionIndex}`,
|
||||
})
|
||||
},
|
||||
hideModal() {
|
||||
this.name = null
|
||||
this.$emit("hide-modal")
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,80 +0,0 @@
|
||||
<template>
|
||||
<SmartModal
|
||||
v-if="show"
|
||||
dialog
|
||||
:title="t('collection.edit')"
|
||||
@close="hideModal"
|
||||
>
|
||||
<template #body>
|
||||
<div class="flex flex-col">
|
||||
<input
|
||||
id="selectLabelEdit"
|
||||
v-model="name"
|
||||
v-focus
|
||||
class="input floating-input"
|
||||
placeholder=" "
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
@keyup.enter="saveCollection"
|
||||
/>
|
||||
<label for="selectLabelEdit">
|
||||
{{ t("action.label") }}
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<span class="flex">
|
||||
<ButtonPrimary
|
||||
:label="t('action.save')"
|
||||
:loading="loadingState"
|
||||
@click="saveCollection"
|
||||
/>
|
||||
<ButtonSecondary :label="t('action.cancel')" @click="hideModal" />
|
||||
</span>
|
||||
</template>
|
||||
</SmartModal>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from "vue"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
show: Boolean,
|
||||
editingCollectionName: { type: String, default: null },
|
||||
loadingState: Boolean,
|
||||
},
|
||||
emits: ["submit", "hide-modal"],
|
||||
setup() {
|
||||
return {
|
||||
toast: useToast(),
|
||||
t: useI18n(),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
name: null,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
editingCollectionName(val) {
|
||||
this.name = val
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
saveCollection() {
|
||||
if (!this.name) {
|
||||
this.toast.error(this.t("collection.invalid_name"))
|
||||
return
|
||||
}
|
||||
this.$emit("submit", this.name)
|
||||
},
|
||||
hideModal() {
|
||||
this.name = null
|
||||
this.$emit("hide-modal")
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,80 +0,0 @@
|
||||
<template>
|
||||
<SmartModal
|
||||
v-if="show"
|
||||
dialog
|
||||
:title="t('folder.edit')"
|
||||
@close="$emit('hide-modal')"
|
||||
>
|
||||
<template #body>
|
||||
<div class="flex flex-col">
|
||||
<input
|
||||
id="selectLabelEditFolder"
|
||||
v-model="name"
|
||||
v-focus
|
||||
class="input floating-input"
|
||||
placeholder=" "
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
@keyup.enter="editFolder"
|
||||
/>
|
||||
<label for="selectLabelEditFolder">
|
||||
{{ t("action.label") }}
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<span class="flex">
|
||||
<ButtonPrimary
|
||||
:label="t('action.save')"
|
||||
:loading="loadingState"
|
||||
@click="editFolder"
|
||||
/>
|
||||
<ButtonSecondary :label="t('action.cancel')" @click="hideModal" />
|
||||
</span>
|
||||
</template>
|
||||
</SmartModal>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from "vue"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
show: Boolean,
|
||||
editingFolderName: { type: String, default: null },
|
||||
loadingState: Boolean,
|
||||
},
|
||||
emits: ["submit", "hide-modal"],
|
||||
setup() {
|
||||
return {
|
||||
t: useI18n(),
|
||||
toast: useToast(),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
name: null,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
editingFolderName(val) {
|
||||
this.name = val
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
editFolder() {
|
||||
if (!this.name) {
|
||||
this.toast.error(this.t("folder.invalid_name"))
|
||||
return
|
||||
}
|
||||
this.$emit("submit", this.name)
|
||||
},
|
||||
hideModal() {
|
||||
this.name = null
|
||||
this.$emit("hide-modal")
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,82 +0,0 @@
|
||||
<template>
|
||||
<SmartModal
|
||||
v-if="show"
|
||||
dialog
|
||||
:title="t('modal.edit_request')"
|
||||
@close="hideModal"
|
||||
>
|
||||
<template #body>
|
||||
<div class="flex flex-col">
|
||||
<input
|
||||
id="selectLabelEditReq"
|
||||
v-model="requestUpdateData.name"
|
||||
v-focus
|
||||
class="input floating-input"
|
||||
placeholder=" "
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
@keyup.enter="saveRequest"
|
||||
/>
|
||||
<label for="selectLabelEditReq">
|
||||
{{ t("action.label") }}
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<span class="flex">
|
||||
<ButtonPrimary
|
||||
:label="t('action.save')"
|
||||
:loading="loadingState"
|
||||
@click="saveRequest"
|
||||
/>
|
||||
<ButtonSecondary :label="t('action.cancel')" @click="hideModal" />
|
||||
</span>
|
||||
</template>
|
||||
</SmartModal>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from "vue"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
show: Boolean,
|
||||
editingRequestName: { type: String, default: null },
|
||||
loadingState: Boolean,
|
||||
},
|
||||
emits: ["submit", "hide-modal"],
|
||||
setup() {
|
||||
return {
|
||||
t: useI18n(),
|
||||
toast: useToast(),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
requestUpdateData: {
|
||||
name: null,
|
||||
},
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
editingRequestName(val) {
|
||||
this.requestUpdateData.name = val
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
saveRequest() {
|
||||
if (!this.requestUpdateData.name) {
|
||||
this.toast.error(this.t("request.invalid_name"))
|
||||
return
|
||||
}
|
||||
this.$emit("submit", this.requestUpdateData)
|
||||
},
|
||||
hideModal() {
|
||||
this.requestUpdateData = { name: null }
|
||||
this.$emit("hide-modal")
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,959 +0,0 @@
|
||||
<template>
|
||||
<div :class="{ 'rounded border border-divider': saveRequest }">
|
||||
<div
|
||||
class="sticky z-10 flex flex-col border-b rounded-t bg-primary border-dividerLight"
|
||||
:style="
|
||||
saveRequest ? 'top: calc(-1.35 * var(--font-size-body))' : 'top: 0'
|
||||
"
|
||||
>
|
||||
<div class="flex flex-col border-b border-dividerLight">
|
||||
<input
|
||||
v-model="filterText"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
:placeholder="t('action.search')"
|
||||
class="py-2 pl-4 pr-2 bg-transparent"
|
||||
:disabled="collectionsType.type == 'team-collections'"
|
||||
/>
|
||||
</div>
|
||||
<CollectionsChooseType
|
||||
:collections-type="collectionsType"
|
||||
:show="showTeamCollections"
|
||||
@update-collection-type="updateCollectionType"
|
||||
@update-selected-team="updateSelectedTeam"
|
||||
/>
|
||||
<div class="flex justify-between flex-1">
|
||||
<ButtonSecondary
|
||||
v-if="
|
||||
collectionsType.type == 'team-collections' &&
|
||||
(collectionsType.selectedTeam == undefined ||
|
||||
collectionsType.selectedTeam.myRole == 'VIEWER')
|
||||
"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
disabled
|
||||
class="!rounded-none"
|
||||
:icon="IconPlus"
|
||||
:title="t('team.no_access')"
|
||||
:label="t('action.new')"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-else
|
||||
:icon="IconPlus"
|
||||
:label="t('action.new')"
|
||||
class="!rounded-none"
|
||||
@click="displayModalAdd(true)"
|
||||
/>
|
||||
<span class="flex">
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
to="https://docs.hoppscotch.io/features/collections"
|
||||
blank
|
||||
:title="t('app.wiki')"
|
||||
:icon="IconHelpCircle"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-if="!saveRequest"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:disabled="
|
||||
collectionsType.type == 'team-collections' &&
|
||||
collectionsType.selectedTeam == undefined
|
||||
"
|
||||
:icon="IconArchive"
|
||||
:title="t('modal.import_export')"
|
||||
@click="displayModalImportExport(true)"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col flex-1">
|
||||
<component
|
||||
:is="
|
||||
collectionsType.type == 'my-collections'
|
||||
? 'CollectionsMyCollection'
|
||||
: 'CollectionsTeamsCollection'
|
||||
"
|
||||
v-for="(collection, index) in filteredCollections"
|
||||
:key="`collection-${index}`"
|
||||
:collection-index="parseInt(index)"
|
||||
:collection="collection"
|
||||
:is-filtered="filterText.length > 0"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:picked="picked"
|
||||
:loading-collection-i-ds="loadingCollectionIDs"
|
||||
@edit-collection="editCollection(collection, index)"
|
||||
@add-request="addRequest($event)"
|
||||
@add-folder="addFolder($event)"
|
||||
@edit-folder="editFolder($event)"
|
||||
@edit-request="editRequest($event)"
|
||||
@duplicate-request="duplicateRequest($event)"
|
||||
@update-team-collections="updateTeamCollections"
|
||||
@select-collection="$emit('use-collection', collection)"
|
||||
@unselect-collection="$emit('remove-collection', collection)"
|
||||
@select="$emit('select', $event)"
|
||||
@expand-collection="expandCollection"
|
||||
@remove-collection="removeCollection"
|
||||
@remove-request="removeRequest"
|
||||
@remove-folder="removeFolder"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="loadingCollectionIDs.includes('root')"
|
||||
class="flex flex-col items-center justify-center p-4"
|
||||
>
|
||||
<SmartSpinner class="my-4" />
|
||||
<span class="text-secondaryLight">{{ t("state.loading") }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="filteredCollections.length === 0 && filterText.length === 0"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<img
|
||||
:src="`/images/states/${colorMode.value}/pack.svg`"
|
||||
loading="lazy"
|
||||
class="inline-flex flex-col object-contain object-center w-16 h-16 my-4"
|
||||
:alt="t('empty.collections')"
|
||||
/>
|
||||
<span class="pb-4 text-center">
|
||||
{{ t("empty.collections") }}
|
||||
</span>
|
||||
<ButtonSecondary
|
||||
v-if="
|
||||
collectionsType.type == 'team-collections' &&
|
||||
(collectionsType.selectedTeam == undefined ||
|
||||
collectionsType.selectedTeam.myRole == 'VIEWER')
|
||||
"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('team.no_access')"
|
||||
:label="t('add.new')"
|
||||
class="mb-4"
|
||||
filled
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-else
|
||||
:label="t('add.new')"
|
||||
filled
|
||||
class="mb-4"
|
||||
@click="displayModalAdd(true)"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="filterText.length !== 0 && filteredCollections.length === 0"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<icon-lucide-search class="pb-2 opacity-75 svg-icons" />
|
||||
<span class="my-2 text-center">
|
||||
{{ t("state.nothing_found") }} "{{ filterText }}"
|
||||
</span>
|
||||
</div>
|
||||
<CollectionsAdd
|
||||
:show="showModalAdd"
|
||||
:loading-state="modalLoadingState"
|
||||
@submit="addNewRootCollection"
|
||||
@hide-modal="displayModalAdd(false)"
|
||||
/>
|
||||
<CollectionsEdit
|
||||
:show="showModalEdit"
|
||||
:editing-collection-name="
|
||||
editingCollection
|
||||
? editingCollection.name || editingCollection.title
|
||||
: ''
|
||||
"
|
||||
:loading-state="modalLoadingState"
|
||||
@hide-modal="displayModalEdit(false)"
|
||||
@submit="updateEditingCollection"
|
||||
/>
|
||||
<CollectionsAddRequest
|
||||
:show="showModalAddRequest"
|
||||
:folder="editingFolder"
|
||||
:folder-path="editingFolderPath"
|
||||
:loading-state="modalLoadingState"
|
||||
@add-request="onAddRequest($event)"
|
||||
@hide-modal="displayModalAddRequest(false)"
|
||||
/>
|
||||
<CollectionsAddFolder
|
||||
:show="showModalAddFolder"
|
||||
:folder="editingFolder"
|
||||
:folder-path="editingFolderPath"
|
||||
:loading-state="modalLoadingState"
|
||||
@add-folder="onAddFolder($event)"
|
||||
@hide-modal="displayModalAddFolder(false)"
|
||||
/>
|
||||
<CollectionsEditFolder
|
||||
:show="showModalEditFolder"
|
||||
:editing-folder-name="
|
||||
editingFolder ? editingFolder.name || editingFolder.title : ''
|
||||
"
|
||||
:loading-state="modalLoadingState"
|
||||
@submit="updateEditingFolder"
|
||||
@hide-modal="displayModalEditFolder(false)"
|
||||
/>
|
||||
<CollectionsEditRequest
|
||||
:show="showModalEditRequest"
|
||||
:editing-request-name="editingRequest ? editingRequest.name : ''"
|
||||
:loading-state="modalLoadingState"
|
||||
@submit="updateEditingRequest"
|
||||
@hide-modal="displayModalEditRequest(false)"
|
||||
/>
|
||||
<CollectionsImportExport
|
||||
:show="showModalImportExport"
|
||||
:collections-type="collectionsType"
|
||||
@hide-modal="displayModalImportExport(false)"
|
||||
@update-team-collections="updateTeamCollections"
|
||||
/>
|
||||
<SmartConfirmModal
|
||||
:show="showConfirmModal"
|
||||
:title="confirmModalTitle"
|
||||
:loading-state="modalLoadingState"
|
||||
@hide-modal="showConfirmModal = false"
|
||||
@resolve="resolveConfirmModal"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import IconArchive from "~icons/lucide/archive"
|
||||
import IconPlus from "~icons/lucide/plus"
|
||||
import IconHelpCircle from "~icons/lucide/help-circle"
|
||||
import { cloneDeep } from "lodash-es"
|
||||
import { defineComponent, markRaw } from "vue"
|
||||
import { makeCollection } from "@hoppscotch/data"
|
||||
import { useColorMode } from "@composables/theming"
|
||||
import * as E from "fp-ts/Either"
|
||||
import CollectionsMyCollection from "./my/Collection.vue"
|
||||
import CollectionsTeamsCollection from "./teams/Collection.vue"
|
||||
import { currentUser$ } from "~/helpers/fb/auth"
|
||||
import TeamCollectionAdapter from "~/helpers/teams/TeamCollectionAdapter"
|
||||
import {
|
||||
restCollections$,
|
||||
addRESTCollection,
|
||||
editRESTCollection,
|
||||
addRESTFolder,
|
||||
removeRESTCollection,
|
||||
removeRESTFolder,
|
||||
editRESTFolder,
|
||||
removeRESTRequest,
|
||||
editRESTRequest,
|
||||
saveRESTRequestAs,
|
||||
} from "~/newstore/collections"
|
||||
import {
|
||||
setRESTRequest,
|
||||
getRESTRequest,
|
||||
getRESTSaveContext,
|
||||
} from "~/newstore/RESTSession"
|
||||
import { useReadonlyStream, useStreamSubscriber } from "@composables/stream"
|
||||
import { runMutation } from "~/helpers/backend/GQLClient"
|
||||
import {
|
||||
CreateChildCollectionDocument,
|
||||
CreateNewRootCollectionDocument,
|
||||
CreateRequestInCollectionDocument,
|
||||
DeleteCollectionDocument,
|
||||
DeleteRequestDocument,
|
||||
RenameCollectionDocument,
|
||||
UpdateRequestDocument,
|
||||
} from "~/helpers/backend/graphql"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { useI18n } from "~/composables/i18n"
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
CollectionsMyCollection,
|
||||
CollectionsTeamsCollection,
|
||||
},
|
||||
props: {
|
||||
saveRequest: Boolean,
|
||||
picked: { type: Object, default: () => ({}) },
|
||||
},
|
||||
emits: [
|
||||
"update-collection",
|
||||
"update-coll-type",
|
||||
"update-team-collections",
|
||||
"select-request",
|
||||
"select",
|
||||
"use-collection",
|
||||
"remove-collection",
|
||||
],
|
||||
setup() {
|
||||
const { subscribeToStream } = useStreamSubscriber()
|
||||
|
||||
return {
|
||||
subscribeTo: subscribeToStream,
|
||||
|
||||
collections: useReadonlyStream(restCollections$, [], "deep"),
|
||||
currentUser: useReadonlyStream(currentUser$, null),
|
||||
colorMode: useColorMode(),
|
||||
toast: useToast(),
|
||||
t: useI18n(),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
IconArchive: markRaw(IconArchive),
|
||||
IconHelpCircle: markRaw(IconHelpCircle),
|
||||
IconPlus: markRaw(IconPlus),
|
||||
showModalAdd: false,
|
||||
showModalEdit: false,
|
||||
showModalImportExport: false,
|
||||
showModalAddRequest: false,
|
||||
showModalAddFolder: false,
|
||||
showModalEditFolder: false,
|
||||
showModalEditRequest: false,
|
||||
showConfirmModal: false,
|
||||
modalLoadingState: false,
|
||||
editingCollection: undefined,
|
||||
editingCollectionIndex: undefined,
|
||||
editingCollectionID: undefined,
|
||||
editingFolder: undefined,
|
||||
editingFolderName: undefined,
|
||||
editingFolderIndex: undefined,
|
||||
editingFolderPath: undefined,
|
||||
editingRequest: undefined,
|
||||
editingRequestIndex: undefined,
|
||||
confirmModalTitle: undefined,
|
||||
filterText: "",
|
||||
collectionsType: {
|
||||
type: "my-collections",
|
||||
selectedTeam: undefined,
|
||||
},
|
||||
teamCollectionAdapter: new TeamCollectionAdapter(null),
|
||||
teamCollectionsNew: [],
|
||||
loadingCollectionIDs: [],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
showTeamCollections() {
|
||||
if (this.currentUser == null) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
filteredCollections() {
|
||||
const collections =
|
||||
this.collectionsType.type === "my-collections"
|
||||
? this.collections
|
||||
: this.teamCollectionsNew
|
||||
|
||||
if (!this.filterText) {
|
||||
return collections
|
||||
}
|
||||
|
||||
if (this.collectionsType.type === "team-collections") {
|
||||
return []
|
||||
}
|
||||
|
||||
const filterText = this.filterText.toLowerCase()
|
||||
const filteredCollections = []
|
||||
|
||||
for (const collection of collections) {
|
||||
const filteredRequests = []
|
||||
const filteredFolders = []
|
||||
for (const request of collection.requests) {
|
||||
if (request.name.toLowerCase().includes(filterText))
|
||||
filteredRequests.push(request)
|
||||
}
|
||||
for (const folder of this.collectionsType.type === "team-collections"
|
||||
? collection.children
|
||||
: collection.folders) {
|
||||
const filteredFolderRequests = []
|
||||
for (const request of folder.requests) {
|
||||
if (request.name.toLowerCase().includes(filterText))
|
||||
filteredFolderRequests.push(request)
|
||||
}
|
||||
if (filteredFolderRequests.length > 0) {
|
||||
const filteredFolder = Object.assign({}, folder)
|
||||
filteredFolder.requests = filteredFolderRequests
|
||||
filteredFolders.push(filteredFolder)
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
filteredRequests.length + filteredFolders.length > 0 ||
|
||||
collection.name.toLowerCase().includes(filterText)
|
||||
) {
|
||||
const filteredCollection = Object.assign({}, collection)
|
||||
filteredCollection.requests = filteredRequests
|
||||
filteredCollection.folders = filteredFolders
|
||||
filteredCollections.push(filteredCollection)
|
||||
}
|
||||
}
|
||||
|
||||
return filteredCollections
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
"collectionsType.type": function emitstuff() {
|
||||
this.$emit("update-collection", this.$data.collectionsType.type)
|
||||
},
|
||||
"collectionsType.selectedTeam"(value) {
|
||||
if (value?.id) this.teamCollectionAdapter.changeTeamID(value.id)
|
||||
},
|
||||
currentUser(newValue) {
|
||||
if (!newValue) this.updateCollectionType("my-collections")
|
||||
},
|
||||
},
|
||||
beforeUnmount() {
|
||||
this.teamCollectionAdapter.unsubscribeSubscriptions()
|
||||
},
|
||||
mounted() {
|
||||
this.subscribeTo(this.teamCollectionAdapter.collections$, (colls) => {
|
||||
this.teamCollectionsNew = cloneDeep(colls)
|
||||
})
|
||||
this.subscribeTo(
|
||||
this.teamCollectionAdapter.loadingCollections$,
|
||||
(collectionsIDs) => {
|
||||
this.loadingCollectionIDs = collectionsIDs
|
||||
}
|
||||
)
|
||||
},
|
||||
methods: {
|
||||
updateTeamCollections() {
|
||||
// TODO: Remove this at some point
|
||||
},
|
||||
updateSelectedTeam(newSelectedTeam) {
|
||||
this.collectionsType.selectedTeam = newSelectedTeam
|
||||
this.$emit("update-coll-type", this.collectionsType)
|
||||
},
|
||||
updateCollectionType(newCollectionType) {
|
||||
this.collectionsType.type = newCollectionType
|
||||
this.$emit("update-coll-type", this.collectionsType)
|
||||
},
|
||||
// Intented to be called by the CollectionAdd modal submit event
|
||||
addNewRootCollection(name) {
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
addRESTCollection(
|
||||
makeCollection({
|
||||
name,
|
||||
folders: [],
|
||||
requests: [],
|
||||
})
|
||||
)
|
||||
|
||||
this.displayModalAdd(false)
|
||||
} else if (
|
||||
this.collectionsType.type === "team-collections" &&
|
||||
this.collectionsType.selectedTeam.myRole !== "VIEWER"
|
||||
) {
|
||||
this.modalLoadingState = true
|
||||
runMutation(CreateNewRootCollectionDocument, {
|
||||
title: name,
|
||||
teamID: this.collectionsType.selectedTeam.id,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
if (E.isLeft(result)) {
|
||||
if (result.left.error === "team_coll/short_title")
|
||||
this.toast.error(this.t("collection.name_length_insufficient"))
|
||||
else this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("collection.created"))
|
||||
this.displayModalAdd(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// Intented to be called by CollectionEdit modal submit event
|
||||
updateEditingCollection(newName) {
|
||||
if (!newName) {
|
||||
this.toast.error(this.t("collection.invalid_name"))
|
||||
return
|
||||
}
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
const collectionUpdated = {
|
||||
...this.editingCollection,
|
||||
name: newName,
|
||||
}
|
||||
|
||||
editRESTCollection(this.editingCollectionIndex, collectionUpdated)
|
||||
this.displayModalEdit(false)
|
||||
} else if (
|
||||
this.collectionsType.type === "team-collections" &&
|
||||
this.collectionsType.selectedTeam.myRole !== "VIEWER"
|
||||
) {
|
||||
this.modalLoadingState = true
|
||||
|
||||
runMutation(RenameCollectionDocument, {
|
||||
collectionID: this.editingCollection.id,
|
||||
newTitle: newName,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("collection.renamed"))
|
||||
this.displayModalEdit(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// Intended to be called by CollectionEditFolder modal submit event
|
||||
updateEditingFolder(name) {
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
editRESTFolder(this.editingFolderPath, { ...this.editingFolder, name })
|
||||
this.displayModalEditFolder(false)
|
||||
} else if (
|
||||
this.collectionsType.type === "team-collections" &&
|
||||
this.collectionsType.selectedTeam.myRole !== "VIEWER"
|
||||
) {
|
||||
this.modalLoadingState = true
|
||||
|
||||
runMutation(RenameCollectionDocument, {
|
||||
collectionID: this.editingFolder.id,
|
||||
newTitle: name,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
|
||||
if (E.isLeft(result)) {
|
||||
if (result.left.error === "team_coll/short_title")
|
||||
this.toast.error(this.t("folder.name_length_insufficient"))
|
||||
else this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("folder.renamed"))
|
||||
this.displayModalEditFolder(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// Intented to by called by CollectionsEditRequest modal submit event
|
||||
updateEditingRequest(requestUpdateData) {
|
||||
const saveCtx = getRESTSaveContext()
|
||||
|
||||
const requestUpdated = {
|
||||
...this.editingRequest,
|
||||
name: requestUpdateData.name || this.editingRequest.name,
|
||||
}
|
||||
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
// Update REST Session with the updated state
|
||||
if (
|
||||
saveCtx &&
|
||||
saveCtx.originLocation === "user-collection" &&
|
||||
saveCtx.requestIndex === this.editingRequestIndex &&
|
||||
saveCtx.folderPath === this.editingFolderPath
|
||||
) {
|
||||
setRESTRequest({
|
||||
...getRESTRequest(),
|
||||
name: requestUpdateData.name,
|
||||
})
|
||||
}
|
||||
|
||||
editRESTRequest(
|
||||
this.editingFolderPath,
|
||||
this.editingRequestIndex,
|
||||
requestUpdated
|
||||
)
|
||||
this.displayModalEditRequest(false)
|
||||
} else if (
|
||||
this.collectionsType.type === "team-collections" &&
|
||||
this.collectionsType.selectedTeam.myRole !== "VIEWER"
|
||||
) {
|
||||
this.modalLoadingState = true
|
||||
|
||||
const requestName = requestUpdateData.name || this.editingRequest.name
|
||||
|
||||
// Update REST Session with the updated state
|
||||
if (
|
||||
saveCtx &&
|
||||
saveCtx.originLocation === "team-collection" &&
|
||||
saveCtx.requestID === this.editingRequestIndex
|
||||
) {
|
||||
setRESTRequest({
|
||||
...getRESTRequest(),
|
||||
name: requestUpdateData.name,
|
||||
})
|
||||
}
|
||||
|
||||
runMutation(UpdateRequestDocument, {
|
||||
data: {
|
||||
request: JSON.stringify(requestUpdated),
|
||||
title: requestName,
|
||||
},
|
||||
requestID: this.editingRequestIndex,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("request.renamed"))
|
||||
this.$emit("update-team-collections")
|
||||
this.displayModalEditRequest(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
displayModalAdd(shouldDisplay) {
|
||||
this.showModalAdd = shouldDisplay
|
||||
},
|
||||
displayModalEdit(shouldDisplay) {
|
||||
this.showModalEdit = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) this.resetSelectedData()
|
||||
},
|
||||
displayModalImportExport(shouldDisplay) {
|
||||
this.showModalImportExport = shouldDisplay
|
||||
},
|
||||
displayModalAddRequest(shouldDisplay) {
|
||||
this.showModalAddRequest = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) this.resetSelectedData()
|
||||
},
|
||||
displayModalAddFolder(shouldDisplay) {
|
||||
this.showModalAddFolder = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) this.resetSelectedData()
|
||||
},
|
||||
displayModalEditFolder(shouldDisplay) {
|
||||
this.showModalEditFolder = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) this.resetSelectedData()
|
||||
},
|
||||
displayModalEditRequest(shouldDisplay) {
|
||||
this.showModalEditRequest = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) this.resetSelectedData()
|
||||
},
|
||||
displayConfirmModal(shouldDisplay) {
|
||||
this.showConfirmModal = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) this.resetSelectedData()
|
||||
},
|
||||
editCollection(collection, collectionIndex) {
|
||||
this.$data.editingCollection = collection
|
||||
this.$data.editingCollectionIndex = collectionIndex
|
||||
this.displayModalEdit(true)
|
||||
},
|
||||
onAddFolder({ name, folder, path }) {
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
addRESTFolder(name, path)
|
||||
this.displayModalAddFolder(false)
|
||||
} else if (
|
||||
this.collectionsType.type === "team-collections" &&
|
||||
this.collectionsType.selectedTeam.myRole !== "VIEWER"
|
||||
) {
|
||||
this.modalLoadingState = true
|
||||
runMutation(CreateChildCollectionDocument, {
|
||||
childTitle: name,
|
||||
collectionID: folder.id,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
if (E.isLeft(result)) {
|
||||
if (result.left.error === "team_coll/short_title")
|
||||
this.toast.error(this.t("folder.name_length_insufficient"))
|
||||
else this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("folder.created"))
|
||||
this.displayModalAddFolder(false)
|
||||
this.$emit("update-team-collections")
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
addFolder(payload) {
|
||||
const { folder, path } = payload
|
||||
this.$data.editingFolder = folder
|
||||
this.$data.editingFolderPath = path
|
||||
this.displayModalAddFolder(true)
|
||||
},
|
||||
editFolder(payload) {
|
||||
const { collectionIndex, folder, folderIndex, folderPath } = payload
|
||||
this.$data.editingCollectionIndex = collectionIndex
|
||||
this.$data.editingFolder = folder
|
||||
this.$data.editingFolderIndex = folderIndex
|
||||
this.$data.editingFolderPath = folderPath
|
||||
this.$data.collectionsType = this.collectionsType
|
||||
this.displayModalEditFolder(true)
|
||||
},
|
||||
editRequest(payload) {
|
||||
const {
|
||||
collectionIndex,
|
||||
folderIndex,
|
||||
folderName,
|
||||
request,
|
||||
requestIndex,
|
||||
folderPath,
|
||||
} = payload
|
||||
this.$data.editingCollectionIndex = collectionIndex
|
||||
this.$data.editingFolderIndex = folderIndex
|
||||
this.$data.editingFolderName = folderName
|
||||
this.$data.editingRequest = request
|
||||
this.$data.editingRequestIndex = requestIndex
|
||||
this.editingFolderPath = folderPath
|
||||
this.$emit("select-request", requestIndex)
|
||||
this.displayModalEditRequest(true)
|
||||
},
|
||||
resetSelectedData() {
|
||||
this.$data.editingCollection = undefined
|
||||
this.$data.editingCollectionIndex = undefined
|
||||
this.$data.editingCollectionID = undefined
|
||||
this.$data.editingFolder = undefined
|
||||
this.$data.editingFolderPath = undefined
|
||||
this.$data.editingFolderIndex = undefined
|
||||
this.$data.editingRequest = undefined
|
||||
this.$data.editingRequestIndex = undefined
|
||||
|
||||
this.$data.confirmModalTitle = undefined
|
||||
},
|
||||
expandCollection(collectionID) {
|
||||
this.teamCollectionAdapter.expandCollection(collectionID)
|
||||
},
|
||||
removeCollection({ collectionIndex, collectionID }) {
|
||||
this.$data.editingCollectionIndex = collectionIndex
|
||||
this.$data.editingCollectionID = collectionID
|
||||
this.confirmModalTitle = `${this.t("confirm.remove_collection")}`
|
||||
|
||||
this.displayConfirmModal(true)
|
||||
},
|
||||
onRemoveCollection() {
|
||||
const collectionIndex = this.$data.editingCollectionIndex
|
||||
const collectionID = this.$data.editingCollectionID
|
||||
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
// Cancel pick if picked collection is deleted
|
||||
if (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "my-collection" &&
|
||||
this.picked.collectionIndex === collectionIndex
|
||||
) {
|
||||
this.$emit("select", { picked: null })
|
||||
}
|
||||
|
||||
removeRESTCollection(collectionIndex)
|
||||
|
||||
this.toast.success(this.t("state.deleted"))
|
||||
this.displayConfirmModal(false)
|
||||
} else if (this.collectionsType.type === "team-collections") {
|
||||
this.modalLoadingState = true
|
||||
|
||||
// Cancel pick if picked collection is deleted
|
||||
if (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "teams-collection" &&
|
||||
this.picked.collectionID === collectionID
|
||||
) {
|
||||
this.$emit("select", { picked: null })
|
||||
}
|
||||
|
||||
if (this.collectionsType.selectedTeam.myRole !== "VIEWER") {
|
||||
runMutation(DeleteCollectionDocument, {
|
||||
collectionID,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("state.deleted"))
|
||||
this.displayConfirmModal(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
removeFolder({ collectionID, folder, folderPath }) {
|
||||
this.$data.editingCollectionID = collectionID
|
||||
this.$data.editingFolder = folder
|
||||
this.$data.editingFolderPath = folderPath
|
||||
this.confirmModalTitle = `${this.t("confirm.remove_folder")}`
|
||||
|
||||
this.displayConfirmModal(true)
|
||||
},
|
||||
onRemoveFolder() {
|
||||
const folder = this.$data.editingFolder
|
||||
const folderPath = this.$data.editingFolderPath
|
||||
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
// Cancel pick if picked folder was deleted
|
||||
if (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "my-folder" &&
|
||||
this.picked.folderPath === folderPath
|
||||
) {
|
||||
this.$emit("select", { picked: null })
|
||||
}
|
||||
removeRESTFolder(folderPath)
|
||||
|
||||
this.toast.success(this.t("state.deleted"))
|
||||
this.displayConfirmModal(false)
|
||||
} else if (this.collectionsType.type === "team-collections") {
|
||||
this.modalLoadingState = true
|
||||
|
||||
// Cancel pick if picked collection folder was deleted
|
||||
if (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "teams-folder" &&
|
||||
this.picked.folderID === folder.id
|
||||
) {
|
||||
this.$emit("select", { picked: null })
|
||||
}
|
||||
|
||||
if (this.collectionsType.selectedTeam.myRole !== "VIEWER") {
|
||||
runMutation(DeleteCollectionDocument, {
|
||||
collectionID: folder.id,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(`${this.t("error.something_went_wrong")}`)
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(`${this.t("state.deleted")}`)
|
||||
this.displayConfirmModal(false)
|
||||
|
||||
this.updateTeamCollections()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
removeRequest({ requestIndex, folderPath }) {
|
||||
this.$data.editingRequestIndex = requestIndex
|
||||
this.$data.editingFolderPath = folderPath
|
||||
this.confirmModalTitle = `${this.t("confirm.remove_request")}`
|
||||
|
||||
this.displayConfirmModal(true)
|
||||
},
|
||||
onRemoveRequest() {
|
||||
const requestIndex = this.$data.editingRequestIndex
|
||||
const folderPath = this.$data.editingFolderPath
|
||||
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
// Cancel pick if the picked item is being deleted
|
||||
if (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "my-request" &&
|
||||
this.picked.folderPath === folderPath &&
|
||||
this.picked.requestIndex === requestIndex
|
||||
) {
|
||||
this.$emit("select", { picked: null })
|
||||
}
|
||||
removeRESTRequest(folderPath, requestIndex)
|
||||
|
||||
this.toast.success(this.t("state.deleted"))
|
||||
this.displayConfirmModal(false)
|
||||
} else if (this.collectionsType.type === "team-collections") {
|
||||
this.modalLoadingState = true
|
||||
// Cancel pick if the picked item is being deleted
|
||||
if (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "teams-request" &&
|
||||
this.picked.requestID === requestIndex
|
||||
) {
|
||||
this.$emit("select", { picked: null })
|
||||
}
|
||||
|
||||
runMutation(DeleteRequestDocument, {
|
||||
requestID: requestIndex,
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
this.toast.success(this.t("state.deleted"))
|
||||
this.displayConfirmModal(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
addRequest(payload) {
|
||||
// TODO: check if the request being worked on
|
||||
// is being overwritten (selected or not)
|
||||
const { folder, path } = payload
|
||||
this.$data.editingFolder = folder
|
||||
this.$data.editingFolderPath = path
|
||||
this.displayModalAddRequest(true)
|
||||
},
|
||||
onAddRequest({ name, folder, path }) {
|
||||
const newRequest = {
|
||||
...cloneDeep(getRESTRequest()),
|
||||
name,
|
||||
}
|
||||
|
||||
if (this.collectionsType.type === "my-collections") {
|
||||
const insertionIndex = saveRESTRequestAs(path, newRequest)
|
||||
// point to it
|
||||
setRESTRequest(newRequest, {
|
||||
originLocation: "user-collection",
|
||||
folderPath: path,
|
||||
requestIndex: insertionIndex,
|
||||
})
|
||||
|
||||
this.displayModalAddRequest(false)
|
||||
} else if (
|
||||
this.collectionsType.type === "team-collections" &&
|
||||
this.collectionsType.selectedTeam.myRole !== "VIEWER"
|
||||
) {
|
||||
this.modalLoadingState = true
|
||||
runMutation(CreateRequestInCollectionDocument, {
|
||||
collectionID: folder.id,
|
||||
data: {
|
||||
request: JSON.stringify(newRequest),
|
||||
teamID: this.collectionsType.selectedTeam.id,
|
||||
title: name,
|
||||
},
|
||||
})().then((result) => {
|
||||
this.modalLoadingState = false
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong"))
|
||||
console.error(result.left.error)
|
||||
} else {
|
||||
const { createRequestInCollection } = result.right
|
||||
// point to it
|
||||
setRESTRequest(newRequest, {
|
||||
originLocation: "team-collection",
|
||||
requestID: createRequestInCollection.id,
|
||||
collectionID: createRequestInCollection.collection.id,
|
||||
teamID: createRequestInCollection.collection.team.id,
|
||||
})
|
||||
this.displayModalAddRequest(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
duplicateRequest({ folderPath, request, collectionID }) {
|
||||
if (this.collectionsType.type === "team-collections") {
|
||||
const newReq = {
|
||||
...cloneDeep(request),
|
||||
name: `${request.name} - ${this.t("action.duplicate")}`,
|
||||
}
|
||||
|
||||
// Error handling ?
|
||||
runMutation(CreateRequestInCollectionDocument, {
|
||||
collectionID,
|
||||
data: {
|
||||
request: JSON.stringify(newReq),
|
||||
teamID: this.collectionsType.selectedTeam.id,
|
||||
title: `${request.name} - ${this.t("action.duplicate")}`,
|
||||
},
|
||||
})()
|
||||
} else if (this.collectionsType.type === "my-collections") {
|
||||
saveRESTRequestAs(folderPath, {
|
||||
...cloneDeep(request),
|
||||
name: `${request.name} - ${this.t("action.duplicate")}`,
|
||||
})
|
||||
}
|
||||
},
|
||||
resolveConfirmModal(title) {
|
||||
if (title === `${this.t("confirm.remove_collection")}`)
|
||||
this.onRemoveCollection()
|
||||
else if (title === `${this.t("confirm.remove_request")}`)
|
||||
this.onRemoveRequest()
|
||||
else if (title === `${this.t("confirm.remove_folder")}`)
|
||||
this.onRemoveFolder()
|
||||
else {
|
||||
console.error(
|
||||
`Confirm modal title ${title} is not handled by the component`
|
||||
)
|
||||
this.toast.error(this.t("error.something_went_wrong"))
|
||||
this.displayConfirmModal(false)
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
// request inside folder is not being deleted, you dumb fuck
|
||||
</script>
|
||||
@@ -1,355 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col" :class="[{ 'bg-primaryLight': dragging }]">
|
||||
<div
|
||||
class="flex items-stretch group"
|
||||
@dragover.prevent
|
||||
@drop.prevent="dropEvent"
|
||||
@dragover="dragging = true"
|
||||
@drop="dragging = false"
|
||||
@dragleave="dragging = false"
|
||||
@dragend="dragging = false"
|
||||
@contextmenu.prevent="options.tippy.show()"
|
||||
>
|
||||
<span
|
||||
class="flex items-center justify-center px-4 cursor-pointer"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<component
|
||||
:is="getCollectionIcon"
|
||||
class="svg-icons"
|
||||
:class="{ 'text-accent': isSelected }"
|
||||
/>
|
||||
</span>
|
||||
<span
|
||||
class="flex flex-1 min-w-0 py-2 pr-2 cursor-pointer transition group-hover:text-secondaryDark"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<span class="truncate" :class="{ 'text-accent': isSelected }">
|
||||
{{ collection.name }}
|
||||
</span>
|
||||
</span>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFilePlus"
|
||||
:title="t('request.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="
|
||||
$emit('add-request', {
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFolderPlus"
|
||||
:title="t('folder.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="
|
||||
$emit('add-folder', {
|
||||
folder: collection,
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
"
|
||||
/>
|
||||
<span>
|
||||
<tippy
|
||||
ref="options"
|
||||
interactive
|
||||
trigger="click"
|
||||
theme="popover"
|
||||
arrow
|
||||
:on-shown="() => tippyActions.focus()"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.more')"
|
||||
:icon="IconMoreVertical"
|
||||
/>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
ref="tippyActions"
|
||||
class="flex flex-col focus:outline-none"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.r="requestAction.$el.click()"
|
||||
@keyup.n="folderAction.$el.click()"
|
||||
@keyup.e="edit.$el.click()"
|
||||
@keyup.delete="deleteAction.$el.click()"
|
||||
@keyup.x="exportAction.$el.click()"
|
||||
@keyup.escape="options.tippy().hide()"
|
||||
>
|
||||
<SmartItem
|
||||
ref="requestAction"
|
||||
:icon="IconFilePlus"
|
||||
:label="t('request.new')"
|
||||
:shortcut="['R']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-request', {
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="folderAction"
|
||||
:icon="IconFolderPlus"
|
||||
:label="t('folder.new')"
|
||||
:shortcut="['N']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-folder', {
|
||||
folder: collection,
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="edit"
|
||||
:icon="IconEdit"
|
||||
:label="t('action.edit')"
|
||||
:shortcut="['E']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('edit-collection')
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="exportAction"
|
||||
:icon="IconDownload"
|
||||
:label="t('export.title')"
|
||||
:shortcut="['X']"
|
||||
@click="
|
||||
() => {
|
||||
exportCollection()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="deleteAction"
|
||||
:icon="IconTrash2"
|
||||
:label="t('action.delete')"
|
||||
:shortcut="['⌫']"
|
||||
@click="
|
||||
() => {
|
||||
removeCollection()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showChildren || isFiltered" class="flex">
|
||||
<div
|
||||
class="bg-dividerLight cursor-nsResize flex ml-5.5 transform transition w-1 hover:bg-dividerDark hover:scale-x-125"
|
||||
@click="toggleShowChildren()"
|
||||
></div>
|
||||
<div class="flex flex-col flex-1 truncate">
|
||||
<CollectionsMyFolder
|
||||
v-for="(folder, index) in collection.folders"
|
||||
:key="`folder-${index}`"
|
||||
:folder="folder"
|
||||
:folder-index="index"
|
||||
:folder-path="`${collectionIndex}/${index}`"
|
||||
:collection-index="collectionIndex"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:is-filtered="isFiltered"
|
||||
:picked="picked"
|
||||
@add-request="$emit('add-request', $event)"
|
||||
@add-folder="$emit('add-folder', $event)"
|
||||
@edit-folder="$emit('edit-folder', $event)"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
@select="$emit('select', $event)"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
@remove-folder="$emit('remove-folder', $event)"
|
||||
/>
|
||||
<CollectionsMyRequest
|
||||
v-for="(request, index) in collection.requests"
|
||||
:key="`request-${index}`"
|
||||
:request="request"
|
||||
:collection-index="collectionIndex"
|
||||
:folder-index="-1"
|
||||
:folder-name="collection.name"
|
||||
:folder-path="`${collectionIndex}`"
|
||||
:request-index="index"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:picked="picked"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
@select="$emit('select', $event)"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
/>
|
||||
<div
|
||||
v-if="
|
||||
(collection.folders == undefined ||
|
||||
collection.folders.length === 0) &&
|
||||
(collection.requests == undefined ||
|
||||
collection.requests.length === 0)
|
||||
"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<img
|
||||
:src="`/images/states/${colorMode.value}/pack.svg`"
|
||||
loading="lazy"
|
||||
class="inline-flex flex-col object-contain object-center w-16 h-16 mb-4"
|
||||
:alt="`${t('empty.collection')}`"
|
||||
/>
|
||||
<span class="text-center">
|
||||
{{ t("empty.collection") }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import IconCircle from "~icons/lucide/circle"
|
||||
import IconCheckCircle from "~icons/lucide/check-circle"
|
||||
import IconFolderPlus from "~icons/lucide/folder-plus"
|
||||
import IconFilePlus from "~icons/lucide/file-plus"
|
||||
import IconMoreVertical from "~icons/lucide/more-vertical"
|
||||
import IconDownload from "~icons/lucide/download"
|
||||
import IconTrash2 from "~icons/lucide/trash-2"
|
||||
import IconEdit from "~icons/lucide/edit"
|
||||
import IconFolder from "~icons/lucide/folder"
|
||||
import IconFolderOpen from "~icons/lucide/folder-open"
|
||||
import { useColorMode } from "@composables/theming"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { defineComponent, ref, markRaw } from "vue"
|
||||
import { moveRESTRequest } from "~/newstore/collections"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
collectionIndex: { type: Number, default: null },
|
||||
collection: { type: Object, default: () => ({}) },
|
||||
isFiltered: Boolean,
|
||||
saveRequest: Boolean,
|
||||
collectionsType: { type: Object, default: () => ({}) },
|
||||
picked: { type: Object, default: () => ({}) },
|
||||
},
|
||||
emits: [
|
||||
"select",
|
||||
"expand-collection",
|
||||
"add-collection",
|
||||
"remove-collection",
|
||||
"add-folder",
|
||||
"add-request",
|
||||
"edit-folder",
|
||||
"edit-request",
|
||||
"duplicate-request",
|
||||
"remove-folder",
|
||||
"remove-request",
|
||||
"select-collection",
|
||||
"unselect-collection",
|
||||
"edit-collection",
|
||||
],
|
||||
setup() {
|
||||
return {
|
||||
colorMode: useColorMode(),
|
||||
toast: useToast(),
|
||||
t: useI18n(),
|
||||
|
||||
tippyActions: ref<any | null>(null),
|
||||
options: ref<any | null>(null),
|
||||
requestAction: ref<any | null>(null),
|
||||
folderAction: ref<any | null>(null),
|
||||
edit: ref<any | null>(null),
|
||||
deleteAction: ref<any | null>(null),
|
||||
exportAction: ref<any | null>(null),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
IconCircle: markRaw(IconCircle),
|
||||
IconCheckCircle: markRaw(IconCheckCircle),
|
||||
IconFilePlus: markRaw(IconFilePlus),
|
||||
IconFolderPlus: markRaw(IconFolderPlus),
|
||||
IconMoreVertical: markRaw(IconMoreVertical),
|
||||
IconEdit: markRaw(IconEdit),
|
||||
IconDownload: markRaw(IconDownload),
|
||||
IconTrash2: markRaw(IconTrash2),
|
||||
|
||||
showChildren: false,
|
||||
dragging: false,
|
||||
selectedFolder: {},
|
||||
prevCursor: "",
|
||||
cursor: "",
|
||||
pageNo: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isSelected(): boolean {
|
||||
return (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "my-collection" &&
|
||||
this.picked.collectionIndex === this.collectionIndex
|
||||
)
|
||||
},
|
||||
getCollectionIcon() {
|
||||
if (this.isSelected) return IconCheckCircle
|
||||
else if (!this.showChildren && !this.isFiltered) return IconFolder
|
||||
else if (this.showChildren || this.isFiltered) return IconFolderOpen
|
||||
else return IconFolder
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
exportCollection() {
|
||||
const collectionJSON = JSON.stringify(this.collection)
|
||||
|
||||
const file = new Blob([collectionJSON], { type: "application/json" })
|
||||
const a = document.createElement("a")
|
||||
const url = URL.createObjectURL(file)
|
||||
a.href = url
|
||||
|
||||
a.download = `${this.collection.name}.json`
|
||||
document.body.appendChild(a)
|
||||
a.click()
|
||||
this.toast.success(this.t("state.download_started").toString())
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a)
|
||||
URL.revokeObjectURL(url)
|
||||
}, 1000)
|
||||
},
|
||||
toggleShowChildren() {
|
||||
if (this.$props.saveRequest)
|
||||
this.$emit("select", {
|
||||
picked: {
|
||||
pickedType: "my-collection",
|
||||
collectionIndex: this.collectionIndex,
|
||||
},
|
||||
})
|
||||
|
||||
this.$emit("expand-collection", this.collection.id)
|
||||
this.showChildren = !this.showChildren
|
||||
},
|
||||
removeCollection() {
|
||||
this.$emit("remove-collection", {
|
||||
collectionIndex: this.collectionIndex,
|
||||
collectionID: this.collection.id,
|
||||
})
|
||||
},
|
||||
dropEvent({ dataTransfer }: any) {
|
||||
this.dragging = !this.dragging
|
||||
const folderPath = dataTransfer.getData("folderPath")
|
||||
const requestIndex = dataTransfer.getData("requestIndex")
|
||||
moveRESTRequest(folderPath, requestIndex, `${this.collectionIndex}`)
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,341 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col" :class="[{ 'bg-primaryLight': dragging }]">
|
||||
<div
|
||||
class="flex items-stretch group"
|
||||
@dragover.prevent
|
||||
@drop.prevent="dropEvent"
|
||||
@dragover="dragging = true"
|
||||
@drop="dragging = false"
|
||||
@dragleave="dragging = false"
|
||||
@dragend="dragging = false"
|
||||
@contextmenu.prevent="options.tippy.show()"
|
||||
>
|
||||
<span
|
||||
class="flex items-center justify-center px-4 cursor-pointer"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<component
|
||||
:is="getCollectionIcon"
|
||||
class="svg-icons"
|
||||
:class="{ 'text-accent': isSelected }"
|
||||
/>
|
||||
</span>
|
||||
<span
|
||||
class="flex flex-1 min-w-0 py-2 pr-2 cursor-pointer transition group-hover:text-secondaryDark"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<span class="truncate" :class="{ 'text-accent': isSelected }">
|
||||
{{ folder.name ? folder.name : folder.title }}
|
||||
</span>
|
||||
</span>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFilePlus"
|
||||
:title="t('request.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="$emit('add-request', { path: folderPath })"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFolderPlus"
|
||||
:title="t('folder.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="$emit('add-folder', { folder, path: folderPath })"
|
||||
/>
|
||||
<span>
|
||||
<tippy
|
||||
ref="options"
|
||||
interactive
|
||||
trigger="click"
|
||||
theme="popover"
|
||||
arrow
|
||||
:on-shown="() => tippyActions.focus()"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.more')"
|
||||
:icon="IconMoreVertical"
|
||||
/>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
ref="tippyActions"
|
||||
class="flex flex-col focus:outline-none"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.r="requestAction.$el.click()"
|
||||
@keyup.n="folderAction.$el.click()"
|
||||
@keyup.e="edit.$el.click()"
|
||||
@keyup.delete="deleteAction.$el.click()"
|
||||
@keyup.x="exportAction.$el.click()"
|
||||
@keyup.escape="hide()"
|
||||
>
|
||||
<SmartItem
|
||||
ref="requestAction"
|
||||
:icon="IconFilePlus"
|
||||
:label="t('request.new')"
|
||||
:shortcut="['R']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-request', { path: folderPath })
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="folderAction"
|
||||
:icon="IconFolderPlus"
|
||||
:label="t('folder.new')"
|
||||
:shortcut="['N']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-folder', { folder, path: folderPath })
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="edit"
|
||||
:icon="IconEdit"
|
||||
:label="t('action.edit')"
|
||||
:shortcut="['E']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('edit-folder', {
|
||||
folder,
|
||||
folderIndex,
|
||||
collectionIndex,
|
||||
folderPath,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="exportAction"
|
||||
:icon="IconDownload"
|
||||
:label="t('export.title')"
|
||||
:shortcut="['X']"
|
||||
@click="
|
||||
() => {
|
||||
exportFolder()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="deleteAction"
|
||||
:icon="IconTrash2"
|
||||
:label="t('action.delete')"
|
||||
:shortcut="['⌫']"
|
||||
@click="
|
||||
() => {
|
||||
removeFolder()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showChildren || isFiltered" class="flex">
|
||||
<div
|
||||
class="bg-dividerLight cursor-nsResize flex ml-5.5 transform transition w-1 hover:bg-dividerDark hover:scale-x-125"
|
||||
@click="toggleShowChildren()"
|
||||
></div>
|
||||
<div class="flex flex-col flex-1 truncate">
|
||||
<!-- Referring to this component only (this is recursive) -->
|
||||
<Folder
|
||||
v-for="(subFolder, subFolderIndex) in folder.folders"
|
||||
:key="`subFolder-${subFolderIndex}`"
|
||||
:folder="subFolder"
|
||||
:folder-index="subFolderIndex"
|
||||
:collection-index="collectionIndex"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:folder-path="`${folderPath}/${subFolderIndex}`"
|
||||
:picked="picked"
|
||||
@add-request="$emit('add-request', $event)"
|
||||
@add-folder="$emit('add-folder', $event)"
|
||||
@edit-folder="$emit('edit-folder', $event)"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
@update-team-collections="$emit('update-team-collections')"
|
||||
@select="$emit('select', $event)"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
@remove-folder="$emit('remove-folder', $event)"
|
||||
/>
|
||||
<CollectionsMyRequest
|
||||
v-for="(request, index) in folder.requests"
|
||||
:key="`request-${index}`"
|
||||
:request="request"
|
||||
:collection-index="collectionIndex"
|
||||
:folder-index="folderIndex"
|
||||
:folder-name="folder.name"
|
||||
:folder-path="folderPath"
|
||||
:request-index="index"
|
||||
:picked="picked"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
@select="$emit('select', $event)"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
/>
|
||||
<div
|
||||
v-if="
|
||||
folder.folders &&
|
||||
folder.folders.length === 0 &&
|
||||
folder.requests &&
|
||||
folder.requests.length === 0
|
||||
"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<img
|
||||
:src="`/images/states/${colorMode.value}/pack.svg`"
|
||||
loading="lazy"
|
||||
class="inline-flex flex-col object-contain object-center w-16 h-16 mb-4"
|
||||
:alt="`${t('empty.folder')}`"
|
||||
/>
|
||||
<span class="text-center">
|
||||
{{ t("empty.folder") }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import IconFilePlus from "~icons/lucide/file-plus"
|
||||
import IconFolderPlus from "~icons/lucide/folder-plus"
|
||||
import IconMoreVertical from "~icons/lucide/more-vertical"
|
||||
import IconEdit from "~icons/lucide/edit"
|
||||
import IconDownload from "~icons/lucide/download"
|
||||
import IconTrash2 from "~icons/lucide/trash-2"
|
||||
import IconFolder from "~icons/lucide/folder"
|
||||
import IconCheckCircle from "~icons/lucide/check-circle"
|
||||
import IconFolderOpen from "~icons/lucide/folder-open"
|
||||
import { defineComponent, ref } from "vue"
|
||||
import { useColorMode } from "@composables/theming"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { moveRESTRequest } from "~/newstore/collections"
|
||||
|
||||
export default defineComponent({
|
||||
name: "Folder",
|
||||
props: {
|
||||
folder: { type: Object, default: () => ({}) },
|
||||
folderIndex: { type: Number, default: null },
|
||||
collectionIndex: { type: Number, default: null },
|
||||
folderPath: { type: String, default: null },
|
||||
saveRequest: Boolean,
|
||||
isFiltered: Boolean,
|
||||
collectionsType: { type: Object, default: () => ({}) },
|
||||
picked: { type: Object, default: () => ({}) },
|
||||
},
|
||||
emits: [
|
||||
"add-request",
|
||||
"add-folder",
|
||||
"edit-folder",
|
||||
"update-team",
|
||||
"remove-folder",
|
||||
"edit-request",
|
||||
"duplicate-request",
|
||||
"select",
|
||||
"remove-request",
|
||||
"update-team-collections",
|
||||
],
|
||||
setup() {
|
||||
const t = useI18n()
|
||||
|
||||
return {
|
||||
tippyActions: ref<any | null>(null),
|
||||
options: ref<any | null>(null),
|
||||
requestAction: ref<any | null>(null),
|
||||
folderAction: ref<any | null>(null),
|
||||
edit: ref<any | null>(null),
|
||||
deleteAction: ref<any | null>(null),
|
||||
exportAction: ref<any | null>(null),
|
||||
t,
|
||||
toast: useToast(),
|
||||
colorMode: useColorMode(),
|
||||
IconFilePlus,
|
||||
IconFolderPlus,
|
||||
IconMoreVertical,
|
||||
IconEdit,
|
||||
IconDownload,
|
||||
IconTrash2,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showChildren: false,
|
||||
dragging: false,
|
||||
prevCursor: "",
|
||||
cursor: "",
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isSelected(): boolean {
|
||||
return (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "my-folder" &&
|
||||
this.picked.folderPath === this.folderPath
|
||||
)
|
||||
},
|
||||
getCollectionIcon() {
|
||||
if (this.isSelected) return IconCheckCircle
|
||||
else if (!this.showChildren && !this.isFiltered) return IconFolder
|
||||
else if (this.showChildren || this.isFiltered) return IconFolderOpen
|
||||
else return IconFolder
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
exportFolder() {
|
||||
const folderJSON = JSON.stringify(this.folder)
|
||||
|
||||
const file = new Blob([folderJSON], { type: "application/json" })
|
||||
const a = document.createElement("a")
|
||||
const url = URL.createObjectURL(file)
|
||||
a.href = url
|
||||
|
||||
a.download = `${this.folder.name}.json`
|
||||
document.body.appendChild(a)
|
||||
a.click()
|
||||
this.toast.success(this.t("state.download_started").toString())
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a)
|
||||
URL.revokeObjectURL(url)
|
||||
}, 1000)
|
||||
},
|
||||
toggleShowChildren() {
|
||||
if (this.$props.saveRequest)
|
||||
this.$emit("select", {
|
||||
picked: {
|
||||
pickedType: "my-folder",
|
||||
collectionIndex: this.collectionIndex,
|
||||
folderName: this.folder.name,
|
||||
folderPath: this.folderPath,
|
||||
},
|
||||
})
|
||||
this.showChildren = !this.showChildren
|
||||
},
|
||||
removeFolder() {
|
||||
this.$emit("remove-folder", {
|
||||
folder: this.folder,
|
||||
folderPath: this.folderPath,
|
||||
})
|
||||
},
|
||||
dropEvent({ dataTransfer }) {
|
||||
this.dragging = !this.dragging
|
||||
const folderPath = dataTransfer.getData("folderPath")
|
||||
const requestIndex = dataTransfer.getData("requestIndex")
|
||||
moveRESTRequest(folderPath, requestIndex, this.folderPath)
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,435 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col" :class="[{ 'bg-primaryLight': dragging }]">
|
||||
<div
|
||||
class="flex items-stretch group"
|
||||
draggable="true"
|
||||
@dragstart="dragStart"
|
||||
@dragover.stop
|
||||
@dragleave="dragging = false"
|
||||
@dragend="dragging = false"
|
||||
@contextmenu.prevent="options.tippy.show()"
|
||||
>
|
||||
<span
|
||||
class="flex items-center justify-center w-16 px-2 truncate cursor-pointer"
|
||||
:class="getRequestLabelColor(request.method)"
|
||||
@click="selectRequest()"
|
||||
>
|
||||
<component
|
||||
:is="IconCheckCircle"
|
||||
v-if="isSelected"
|
||||
class="svg-icons"
|
||||
:class="{ 'text-accent': isSelected }"
|
||||
/>
|
||||
<span v-else class="font-semibold truncate text-tiny">
|
||||
{{ request.method }}
|
||||
</span>
|
||||
</span>
|
||||
<span
|
||||
class="flex items-center flex-1 min-w-0 py-2 pr-2 cursor-pointer transition group-hover:text-secondaryDark"
|
||||
@click="selectRequest()"
|
||||
>
|
||||
<span class="truncate" :class="{ 'text-accent': isSelected }">
|
||||
{{ request.name }}
|
||||
</span>
|
||||
<span
|
||||
v-if="isActive"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
class="relative h-1.5 w-1.5 flex flex-shrink-0 mx-3"
|
||||
:title="`${t('collection.request_in_use')}`"
|
||||
>
|
||||
<span
|
||||
class="absolute inline-flex flex-shrink-0 w-full h-full bg-green-500 rounded-full opacity-75 animate-ping"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="relative inline-flex flex-shrink-0 rounded-full h-1.5 w-1.5 bg-green-500"
|
||||
></span>
|
||||
</span>
|
||||
</span>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-if="!saveRequest"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconRotateCCW"
|
||||
:title="t('action.restore')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="selectRequest()"
|
||||
/>
|
||||
<span>
|
||||
<tippy
|
||||
ref="options"
|
||||
interactive
|
||||
trigger="click"
|
||||
theme="popover"
|
||||
arrow
|
||||
:on-shown="() => tippyActions.focus()"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.more')"
|
||||
:icon="IconMoreVertical"
|
||||
/>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
ref="tippyActions"
|
||||
class="flex flex-col focus:outline-none"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.e="edit.$el.click()"
|
||||
@keyup.d="duplicate.$el.click()"
|
||||
@keyup.delete="deleteAction.$el.click()"
|
||||
@keyup.escape="hide()"
|
||||
>
|
||||
<SmartItem
|
||||
ref="edit"
|
||||
:icon="IconEdit"
|
||||
:label="t('action.edit')"
|
||||
:shortcut="['E']"
|
||||
@click="
|
||||
() => {
|
||||
emit('edit-request', {
|
||||
collectionIndex,
|
||||
folderIndex,
|
||||
folderName,
|
||||
request,
|
||||
requestIndex,
|
||||
folderPath,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="duplicate"
|
||||
:icon="IconCopy"
|
||||
:label="t('action.duplicate')"
|
||||
:shortcut="['D']"
|
||||
@click="
|
||||
() => {
|
||||
emit('duplicate-request', {
|
||||
collectionIndex,
|
||||
folderIndex,
|
||||
folderName,
|
||||
request,
|
||||
requestIndex,
|
||||
folderPath,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="deleteAction"
|
||||
:icon="IconTrash2"
|
||||
:label="t('action.delete')"
|
||||
:shortcut="['⌫']"
|
||||
@click="
|
||||
() => {
|
||||
removeRequest()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<HttpReqChangeConfirmModal
|
||||
:show="confirmChange"
|
||||
@hide-modal="confirmChange = false"
|
||||
@save-change="saveRequestChange"
|
||||
@discard-change="discardRequestChange"
|
||||
/>
|
||||
<CollectionsSaveRequest
|
||||
mode="rest"
|
||||
:show="showSaveRequestModal"
|
||||
@hide-modal="showSaveRequestModal = false"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import IconCheckCircle from "~icons/lucide/check-circle"
|
||||
import IconMoreVertical from "~icons/lucide/more-vertical"
|
||||
import IconEdit from "~icons/lucide/edit"
|
||||
import IconCopy from "~icons/lucide/copy"
|
||||
import IconTrash2 from "~icons/lucide/trash-2"
|
||||
import IconRotateCCW from "~icons/lucide/rotate-ccw"
|
||||
import { ref, computed } from "vue"
|
||||
import {
|
||||
HoppRESTRequest,
|
||||
safelyExtractRESTRequest,
|
||||
translateToNewRequest,
|
||||
isEqualHoppRESTRequest,
|
||||
} from "@hoppscotch/data"
|
||||
import * as E from "fp-ts/Either"
|
||||
import { cloneDeep } from "lodash-es"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { useReadonlyStream } from "@composables/stream"
|
||||
import {
|
||||
getDefaultRESTRequest,
|
||||
getRESTRequest,
|
||||
restSaveContext$,
|
||||
setRESTRequest,
|
||||
setRESTSaveContext,
|
||||
getRESTSaveContext,
|
||||
} from "~/newstore/RESTSession"
|
||||
import { editRESTRequest } from "~/newstore/collections"
|
||||
import { runMutation } from "~/helpers/backend/GQLClient"
|
||||
import { UpdateRequestDocument } from "~/helpers/backend/graphql"
|
||||
import { HoppRequestSaveContext } from "~/helpers/types/HoppRequestSaveContext"
|
||||
|
||||
const props = defineProps<{
|
||||
request: HoppRESTRequest
|
||||
collectionIndex: number
|
||||
folderIndex: number
|
||||
folderName: string
|
||||
requestIndex: number
|
||||
saveRequest: boolean
|
||||
collectionsType: object
|
||||
folderPath: string
|
||||
picked?: {
|
||||
pickedType: string
|
||||
collectionIndex: number
|
||||
folderPath: string
|
||||
folderName: string
|
||||
requestIndex: number
|
||||
}
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(
|
||||
e: "select",
|
||||
data:
|
||||
| {
|
||||
picked: {
|
||||
pickedType: string
|
||||
collectionIndex: number
|
||||
folderPath: string
|
||||
folderName: string
|
||||
requestIndex: number
|
||||
}
|
||||
}
|
||||
| undefined
|
||||
): void
|
||||
|
||||
(
|
||||
e: "remove-request",
|
||||
data: {
|
||||
folderPath: string
|
||||
requestIndex: number
|
||||
}
|
||||
): void
|
||||
|
||||
(
|
||||
e: "duplicate-request",
|
||||
data: {
|
||||
collectionIndex: number
|
||||
folderIndex: number
|
||||
folderName: string
|
||||
request: HoppRESTRequest
|
||||
folderPath: string
|
||||
requestIndex: number
|
||||
}
|
||||
): void
|
||||
|
||||
(
|
||||
e: "edit-request",
|
||||
data: {
|
||||
collectionIndex: number
|
||||
folderIndex: number
|
||||
folderName: string
|
||||
request: HoppRESTRequest
|
||||
folderPath: string
|
||||
requestIndex: number
|
||||
}
|
||||
): void
|
||||
}>()
|
||||
|
||||
const t = useI18n()
|
||||
const toast = useToast()
|
||||
|
||||
const dragging = ref(false)
|
||||
const requestMethodLabels = {
|
||||
get: "text-green-500",
|
||||
post: "text-yellow-500",
|
||||
put: "text-blue-500",
|
||||
delete: "text-red-500",
|
||||
default: "text-gray-500",
|
||||
}
|
||||
const confirmChange = ref(false)
|
||||
const showSaveRequestModal = ref(false)
|
||||
|
||||
// Template refs
|
||||
const tippyActions = ref<any | null>(null)
|
||||
const options = ref<any | null>(null)
|
||||
const edit = ref<any | null>(null)
|
||||
const duplicate = ref<any | null>(null)
|
||||
const deleteAction = ref<any | null>(null)
|
||||
|
||||
const active = useReadonlyStream(restSaveContext$, null)
|
||||
|
||||
const isSelected = computed(
|
||||
() =>
|
||||
props.picked &&
|
||||
props.picked.pickedType === "my-request" &&
|
||||
props.picked.folderPath === props.folderPath &&
|
||||
props.picked.requestIndex === props.requestIndex
|
||||
)
|
||||
|
||||
const isActive = computed(
|
||||
() =>
|
||||
active.value &&
|
||||
active.value.originLocation === "user-collection" &&
|
||||
active.value.folderPath === props.folderPath &&
|
||||
active.value.requestIndex === props.requestIndex
|
||||
)
|
||||
|
||||
const dragStart = ({ dataTransfer }: DragEvent) => {
|
||||
if (dataTransfer) {
|
||||
dragging.value = !dragging.value
|
||||
dataTransfer.setData("folderPath", props.folderPath)
|
||||
dataTransfer.setData("requestIndex", props.requestIndex.toString())
|
||||
}
|
||||
}
|
||||
|
||||
const removeRequest = () => {
|
||||
emit("remove-request", {
|
||||
folderPath: props.folderPath,
|
||||
requestIndex: props.requestIndex,
|
||||
})
|
||||
}
|
||||
|
||||
const getRequestLabelColor = (method: string) =>
|
||||
requestMethodLabels[
|
||||
method.toLowerCase() as keyof typeof requestMethodLabels
|
||||
] || requestMethodLabels.default
|
||||
|
||||
const setRestReq = (request: any) => {
|
||||
setRESTRequest(
|
||||
cloneDeep(
|
||||
safelyExtractRESTRequest(
|
||||
translateToNewRequest(request),
|
||||
getDefaultRESTRequest()
|
||||
)
|
||||
),
|
||||
{
|
||||
originLocation: "user-collection",
|
||||
folderPath: props.folderPath,
|
||||
requestIndex: props.requestIndex,
|
||||
req: cloneDeep(request),
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/** Loads request from the save once, checks for unsaved changes, but ignores default values */
|
||||
const selectRequest = () => {
|
||||
// Check if this is a save as request popup, if so we don't need to prompt the confirm change popup.
|
||||
if (props.saveRequest) {
|
||||
emit("select", {
|
||||
picked: {
|
||||
pickedType: "my-request",
|
||||
collectionIndex: props.collectionIndex,
|
||||
folderPath: props.folderPath,
|
||||
folderName: props.folderName,
|
||||
requestIndex: props.requestIndex,
|
||||
},
|
||||
})
|
||||
} else if (isEqualHoppRESTRequest(props.request, getDefaultRESTRequest())) {
|
||||
confirmChange.value = false
|
||||
setRestReq(props.request)
|
||||
} else if (!active.value) {
|
||||
// If the current request is the same as the request to be loaded in, there is no data loss
|
||||
const currentReq = getRESTRequest()
|
||||
|
||||
if (isEqualHoppRESTRequest(currentReq, props.request)) {
|
||||
setRestReq(props.request)
|
||||
} else {
|
||||
confirmChange.value = true
|
||||
}
|
||||
} else {
|
||||
const currentReqWithNoChange = active.value.req
|
||||
const currentFullReq = getRESTRequest()
|
||||
|
||||
// Check if whether user clicked the same request or not
|
||||
if (!isActive.value && currentReqWithNoChange !== undefined) {
|
||||
// Check if there is any changes done on the current request
|
||||
if (isEqualHoppRESTRequest(currentReqWithNoChange, currentFullReq)) {
|
||||
setRestReq(props.request)
|
||||
} else {
|
||||
confirmChange.value = true
|
||||
}
|
||||
} else {
|
||||
setRESTSaveContext(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Save current request to the collection */
|
||||
const saveRequestChange = () => {
|
||||
const saveCtx = getRESTSaveContext()
|
||||
saveCurrentRequest(saveCtx)
|
||||
confirmChange.value = false
|
||||
}
|
||||
|
||||
/** Discard changes and change the current request and context */
|
||||
const discardRequestChange = () => {
|
||||
setRestReq(props.request)
|
||||
if (!isActive.value) {
|
||||
setRESTSaveContext({
|
||||
originLocation: "user-collection",
|
||||
folderPath: props.folderPath,
|
||||
requestIndex: props.requestIndex,
|
||||
req: cloneDeep(props.request),
|
||||
})
|
||||
}
|
||||
|
||||
confirmChange.value = false
|
||||
}
|
||||
|
||||
const saveCurrentRequest = (saveCtx: HoppRequestSaveContext | null) => {
|
||||
if (!saveCtx) {
|
||||
showSaveRequestModal.value = true
|
||||
return
|
||||
}
|
||||
if (saveCtx.originLocation === "user-collection") {
|
||||
try {
|
||||
editRESTRequest(
|
||||
saveCtx.folderPath,
|
||||
saveCtx.requestIndex,
|
||||
getRESTRequest()
|
||||
)
|
||||
setRestReq(props.request)
|
||||
toast.success(`${t("request.saved")}`)
|
||||
} catch (e) {
|
||||
setRESTSaveContext(null)
|
||||
saveCurrentRequest(saveCtx)
|
||||
}
|
||||
} else if (saveCtx.originLocation === "team-collection") {
|
||||
const req = getRESTRequest()
|
||||
try {
|
||||
runMutation(UpdateRequestDocument, {
|
||||
requestID: saveCtx.requestID,
|
||||
data: {
|
||||
title: req.name,
|
||||
request: JSON.stringify(req),
|
||||
},
|
||||
})().then((result) => {
|
||||
if (E.isLeft(result)) {
|
||||
toast.error(`${t("profile.no_permission")}`)
|
||||
} else {
|
||||
toast.success(`${t("request.saved")}`)
|
||||
}
|
||||
})
|
||||
setRestReq(props.request)
|
||||
} catch (error) {
|
||||
showSaveRequestModal.value = true
|
||||
toast.error(`${t("error.something_went_wrong")}`)
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,407 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col">
|
||||
<div
|
||||
class="flex items-stretch group"
|
||||
@dragover.prevent
|
||||
@drop.prevent="dropEvent"
|
||||
@dragover="dragging = true"
|
||||
@drop="dragging = false"
|
||||
@dragleave="dragging = false"
|
||||
@dragend="dragging = false"
|
||||
@contextmenu.prevent="options.tippy.show()"
|
||||
>
|
||||
<span
|
||||
class="flex items-center justify-center px-4 cursor-pointer"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<component
|
||||
:is="getCollectionIcon"
|
||||
class="svg-icons"
|
||||
:class="{ 'text-accent': isSelected }"
|
||||
/>
|
||||
</span>
|
||||
<span
|
||||
class="flex flex-1 min-w-0 py-2 pr-2 cursor-pointer transition group-hover:text-secondaryDark"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<span class="truncate" :class="{ 'text-accent': isSelected }">
|
||||
{{ collection.title }}
|
||||
</span>
|
||||
</span>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFilePlus"
|
||||
:title="t('request.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="
|
||||
$emit('add-request', {
|
||||
folder: collection,
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFolderPlus"
|
||||
:title="t('folder.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="
|
||||
$emit('add-folder', {
|
||||
folder: collection,
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
"
|
||||
/>
|
||||
<span>
|
||||
<tippy
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
ref="options"
|
||||
interactive
|
||||
trigger="click"
|
||||
theme="popover"
|
||||
arrow
|
||||
:on-shown="() => tippyActions.focus()"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.more')"
|
||||
:icon="IconMoreVertical"
|
||||
/>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
ref="tippyActions"
|
||||
class="flex flex-col focus:outline-none"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.r="requestAction.$el.click()"
|
||||
@keyup.n="folderAction.$el.click()"
|
||||
@keyup.e="edit.$el.click()"
|
||||
@keyup.delete="deleteAction.$el.click()"
|
||||
@keyup.x="exportAction.$el.click()"
|
||||
@keyup.escape="hide()"
|
||||
>
|
||||
<SmartItem
|
||||
ref="requestAction"
|
||||
:icon="IconFilePlus"
|
||||
:label="t('request.new')"
|
||||
:shortcut="['R']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-request', {
|
||||
folder: collection,
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="folderAction"
|
||||
:icon="IconFolderPlus"
|
||||
:label="t('folder.new')"
|
||||
:shortcut="['N']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-folder', {
|
||||
folder: collection,
|
||||
path: `${collectionIndex}`,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="edit"
|
||||
:icon="IconEdit"
|
||||
:label="t('action.edit')"
|
||||
:shortcut="['E']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('edit-collection')
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="exportAction"
|
||||
:icon="IconDownload"
|
||||
:label="t('export.title')"
|
||||
:shortcut="['X']"
|
||||
:loading="exportLoading"
|
||||
@click="exportCollection"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="deleteAction"
|
||||
:icon="IconTrash2"
|
||||
:label="t('action.delete')"
|
||||
:shortcut="['⌫']"
|
||||
@click="
|
||||
() => {
|
||||
removeCollection()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showChildren || isFiltered" class="flex">
|
||||
<div
|
||||
class="bg-dividerLight cursor-nsResize flex ml-5.5 transform transition w-1 hover:bg-dividerDark hover:scale-x-125"
|
||||
@click="toggleShowChildren()"
|
||||
></div>
|
||||
<div class="flex flex-col flex-1 truncate">
|
||||
<CollectionsTeamsFolder
|
||||
v-for="(folder, index) in collection.children"
|
||||
:key="`folder-${index}`"
|
||||
:folder="folder"
|
||||
:folder-index="index"
|
||||
:folder-path="`${collectionIndex}/${index}`"
|
||||
:collection-index="collectionIndex"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:is-filtered="isFiltered"
|
||||
:picked="picked"
|
||||
:loading-collection-i-ds="loadingCollectionIDs"
|
||||
@add-request="$emit('add-request', $event)"
|
||||
@add-folder="$emit('add-folder', $event)"
|
||||
@edit-folder="$emit('edit-folder', $event)"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@select="$emit('select', $event)"
|
||||
@expand-collection="expandCollection"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
@remove-folder="$emit('remove-folder', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
/>
|
||||
<CollectionsTeamsRequest
|
||||
v-for="(request, index) in collection.requests"
|
||||
:key="`request-${index}`"
|
||||
:request="request.request"
|
||||
:collection-index="collectionIndex"
|
||||
:folder-index="-1"
|
||||
:folder-name="collection.name"
|
||||
:request-index="request.id"
|
||||
:save-request="saveRequest"
|
||||
:collection-i-d="collection.id"
|
||||
:collections-type="collectionsType"
|
||||
:picked="picked"
|
||||
@edit-request="editRequest($event)"
|
||||
@select="$emit('select', $event)"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
/>
|
||||
<div
|
||||
v-if="loadingCollectionIDs.includes(collection.id)"
|
||||
class="flex flex-col items-center justify-center p-4"
|
||||
>
|
||||
<SmartSpinner class="my-4" />
|
||||
<span class="text-secondaryLight">{{ t("state.loading") }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="
|
||||
(collection.children == undefined ||
|
||||
collection.children.length === 0) &&
|
||||
(collection.requests == undefined ||
|
||||
collection.requests.length === 0)
|
||||
"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<img
|
||||
:src="`/images/states/${colorMode.value}/pack.svg`"
|
||||
loading="lazy"
|
||||
class="inline-flex flex-col object-contain object-center w-16 h-16 mb-4"
|
||||
:alt="`${t('empty.collection')}`"
|
||||
/>
|
||||
<span class="text-center">
|
||||
{{ t("empty.collection") }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import IconMoreVertical from "~icons/lucide/more-vertical"
|
||||
import IconTrash2 from "~icons/lucide/trash-2"
|
||||
import IconDownload from "~icons/lucide/download"
|
||||
import IconEdit from "~icons/lucide/edit"
|
||||
import IconFolderPlus from "~icons/lucide/folder-plus"
|
||||
import IconFilePlus from "~icons/lucide/file-plus"
|
||||
import IconCircle from "~icons/lucide/circle"
|
||||
import IconCheckCircle from "~icons/lucide/check-circle"
|
||||
import IconFolder from "~icons/lucide/folder"
|
||||
import IconFolderOpen from "~icons/lucide/folder-open"
|
||||
import { defineComponent, ref } from "vue"
|
||||
import * as E from "fp-ts/Either"
|
||||
import {
|
||||
getCompleteCollectionTree,
|
||||
teamCollToHoppRESTColl,
|
||||
} from "~/helpers/backend/helpers"
|
||||
import { moveRESTTeamRequest } from "~/helpers/backend/mutations/TeamRequest"
|
||||
import { useColorMode } from "@composables/theming"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
collectionIndex: { type: Number, default: null },
|
||||
collection: { type: Object, default: () => ({}) },
|
||||
isFiltered: Boolean,
|
||||
saveRequest: Boolean,
|
||||
collectionsType: { type: Object, default: () => ({}) },
|
||||
picked: { type: Object, default: () => ({}) },
|
||||
loadingCollectionIDs: { type: Array, default: () => [] },
|
||||
},
|
||||
emits: [
|
||||
"edit-collection",
|
||||
"add-request",
|
||||
"add-folder",
|
||||
"edit-folder",
|
||||
"edit-request",
|
||||
"remove-folder",
|
||||
"select",
|
||||
"remove-request",
|
||||
"duplicate-request",
|
||||
"expand-collection",
|
||||
"remove-collection",
|
||||
],
|
||||
setup() {
|
||||
const t = useI18n()
|
||||
|
||||
return {
|
||||
tippyActions: ref<any | null>(null),
|
||||
options: ref<any | null>(null),
|
||||
requestAction: ref<any | null>(null),
|
||||
folderAction: ref<any | null>(null),
|
||||
edit: ref<any | null>(null),
|
||||
deleteAction: ref<any | null>(null),
|
||||
exportAction: ref<any | null>(null),
|
||||
exportLoading: ref<boolean>(false),
|
||||
t,
|
||||
toast: useToast(),
|
||||
colorMode: useColorMode(),
|
||||
|
||||
IconCheckCircle,
|
||||
IconCircle,
|
||||
IconFilePlus,
|
||||
IconFolderPlus,
|
||||
IconEdit,
|
||||
IconDownload,
|
||||
IconTrash2,
|
||||
IconMoreVertical,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showChildren: false,
|
||||
dragging: false,
|
||||
selectedFolder: {},
|
||||
prevCursor: "",
|
||||
cursor: "",
|
||||
pageNo: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isSelected(): boolean {
|
||||
return (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "teams-collection" &&
|
||||
this.picked.collectionID === this.collection.id
|
||||
)
|
||||
},
|
||||
getCollectionIcon() {
|
||||
if (this.isSelected) return IconCheckCircle
|
||||
else if (!this.showChildren && !this.isFiltered) return IconFolder
|
||||
else if (this.showChildren || this.isFiltered) return IconFolderOpen
|
||||
else return IconFolder
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async exportCollection() {
|
||||
this.exportLoading = true
|
||||
|
||||
const result = await getCompleteCollectionTree(this.collection.id)()
|
||||
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong").toString())
|
||||
console.log(result.left)
|
||||
this.exportLoading = false
|
||||
this.options.tippy().hide()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
const hoppColl = teamCollToHoppRESTColl(result.right)
|
||||
|
||||
const collectionJSON = JSON.stringify(hoppColl)
|
||||
|
||||
const file = new Blob([collectionJSON], { type: "application/json" })
|
||||
const a = document.createElement("a")
|
||||
const url = URL.createObjectURL(file)
|
||||
a.href = url
|
||||
|
||||
a.download = `${hoppColl.name}.json`
|
||||
document.body.appendChild(a)
|
||||
a.click()
|
||||
this.toast.success(this.t("state.download_started").toString())
|
||||
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a)
|
||||
URL.revokeObjectURL(url)
|
||||
}, 1000)
|
||||
|
||||
this.exportLoading = false
|
||||
|
||||
this.options.tippy().hide()
|
||||
},
|
||||
editRequest(event: any) {
|
||||
this.$emit("edit-request", event)
|
||||
if (this.$props.saveRequest)
|
||||
this.$emit("select", {
|
||||
picked: {
|
||||
pickedType: "teams-collection",
|
||||
collectionID: this.collection.id,
|
||||
},
|
||||
})
|
||||
},
|
||||
toggleShowChildren() {
|
||||
if (this.$props.saveRequest)
|
||||
this.$emit("select", {
|
||||
picked: {
|
||||
pickedType: "teams-collection",
|
||||
collectionID: this.collection.id,
|
||||
},
|
||||
})
|
||||
|
||||
this.$emit("expand-collection", this.collection.id)
|
||||
this.showChildren = !this.showChildren
|
||||
},
|
||||
removeCollection() {
|
||||
this.$emit("remove-collection", {
|
||||
collectionIndex: this.collectionIndex,
|
||||
collectionID: this.collection.id,
|
||||
})
|
||||
},
|
||||
expandCollection(collectionID: string) {
|
||||
this.$emit("expand-collection", collectionID)
|
||||
},
|
||||
async dropEvent({ dataTransfer }: any) {
|
||||
this.dragging = !this.dragging
|
||||
const requestIndex = dataTransfer.getData("requestIndex")
|
||||
const moveRequestResult = await moveRESTTeamRequest(
|
||||
requestIndex,
|
||||
this.collection.id
|
||||
)()
|
||||
if (E.isLeft(moveRequestResult))
|
||||
this.toast.error(`${this.t("error.something_went_wrong")}`)
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,382 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col" :class="[{ 'bg-primaryLight': dragging }]">
|
||||
<div
|
||||
class="flex items-stretch group"
|
||||
@dragover.prevent
|
||||
@drop.prevent="dropEvent"
|
||||
@dragover="dragging = true"
|
||||
@drop="dragging = false"
|
||||
@dragleave="dragging = false"
|
||||
@dragend="dragging = false"
|
||||
@contextmenu.prevent="options.tippy.show()"
|
||||
>
|
||||
<span
|
||||
class="flex items-center justify-center px-4 cursor-pointer"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<component
|
||||
:is="getCollectionIcon"
|
||||
class="svg-icons"
|
||||
:class="{ 'text-accent': isSelected }"
|
||||
/>
|
||||
</span>
|
||||
<span
|
||||
class="flex flex-1 min-w-0 py-2 pr-2 cursor-pointer transition group-hover:text-secondaryDark"
|
||||
@click="toggleShowChildren()"
|
||||
>
|
||||
<span class="truncate" :class="{ 'text-accent': isSelected }">
|
||||
{{ folder.name ? folder.name : folder.title }}
|
||||
</span>
|
||||
</span>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFilePlus"
|
||||
:title="t('request.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="$emit('add-request', { folder, path: folderPath })"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconFolderPlus"
|
||||
:title="t('folder.new')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="$emit('add-folder', { folder, path: folderPath })"
|
||||
/>
|
||||
<span>
|
||||
<tippy
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
ref="options"
|
||||
interactive
|
||||
trigger="click"
|
||||
theme="popover"
|
||||
arrow
|
||||
:on-shown="() => tippyActions.focus()"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.more')"
|
||||
:icon="IconMoreVertical"
|
||||
/>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
ref="tippyActions"
|
||||
class="flex flex-col focus:outline-none"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.r="requestAction.$el.click()"
|
||||
@keyup.n="folderAction.$el.click()"
|
||||
@keyup.e="edit.$el.click()"
|
||||
@keyup.delete="deleteAction.$el.click()"
|
||||
@keyup.x="exportAction.$el.click()"
|
||||
@keyup.escape="options.tippy().hide()"
|
||||
>
|
||||
<SmartItem
|
||||
ref="requestAction"
|
||||
:icon="IconFilePlus"
|
||||
:label="t('request.new')"
|
||||
:shortcut="['R']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-request', { folder, path: folderPath })
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="folderAction"
|
||||
:icon="IconFolderPlus"
|
||||
:label="t('folder.new')"
|
||||
:shortcut="['N']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('add-folder', { folder, path: folderPath })
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="edit"
|
||||
:icon="IconEdit"
|
||||
:label="t('action.edit')"
|
||||
:shortcut="['E']"
|
||||
@click="
|
||||
() => {
|
||||
$emit('edit-folder', {
|
||||
folder,
|
||||
folderIndex,
|
||||
collectionIndex,
|
||||
folderPath: '',
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="exportAction"
|
||||
:icon="IconDownload"
|
||||
:label="t('export.title')"
|
||||
:shortcut="['X']"
|
||||
:loading="exportLoading"
|
||||
@click="exportFolder"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="deleteAction"
|
||||
:icon="IconTrash2"
|
||||
:label="t('action.delete')"
|
||||
:shortcut="['⌫']"
|
||||
@click="
|
||||
() => {
|
||||
removeFolder()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showChildren || isFiltered" class="flex">
|
||||
<div
|
||||
class="bg-dividerLight cursor-nsResize flex ml-5.5 transform transition w-1 hover:bg-dividerDark hover:scale-x-125"
|
||||
@click="toggleShowChildren()"
|
||||
></div>
|
||||
<div class="flex flex-col flex-1 truncate">
|
||||
<!-- Referring to this component only (this is recursive) -->
|
||||
<Folder
|
||||
v-for="(subFolder, subFolderIndex) in folder.children"
|
||||
:key="`subFolder-${subFolderIndex}`"
|
||||
:folder="subFolder"
|
||||
:folder-index="subFolderIndex"
|
||||
:collection-index="collectionIndex"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:folder-path="`${folderPath}/${subFolderIndex}`"
|
||||
:picked="picked"
|
||||
:loading-collection-i-ds="loadingCollectionIDs"
|
||||
@add-request="$emit('add-request', $event)"
|
||||
@add-folder="$emit('add-folder', $event)"
|
||||
@edit-folder="$emit('edit-folder', $event)"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@update-team-collections="$emit('update-team-collections')"
|
||||
@select="$emit('select', $event)"
|
||||
@expand-collection="expandCollection"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
@remove-folder="$emit('remove-folder', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
/>
|
||||
<CollectionsTeamsRequest
|
||||
v-for="(request, index) in folder.requests"
|
||||
:key="`request-${index}`"
|
||||
:request="request.request"
|
||||
:collection-index="collectionIndex"
|
||||
:folder-index="folderIndex"
|
||||
:folder-name="folder.name"
|
||||
:request-index="request.id"
|
||||
:save-request="saveRequest"
|
||||
:collections-type="collectionsType"
|
||||
:picked="picked"
|
||||
:collection-i-d="folder.id"
|
||||
@edit-request="$emit('edit-request', $event)"
|
||||
@select="$emit('select', $event)"
|
||||
@remove-request="$emit('remove-request', $event)"
|
||||
@duplicate-request="$emit('duplicate-request', $event)"
|
||||
/>
|
||||
<div
|
||||
v-if="loadingCollectionIDs.includes(folder.id)"
|
||||
class="flex flex-col items-center justify-center p-4"
|
||||
>
|
||||
<SmartSpinner class="my-4" />
|
||||
<span class="text-secondaryLight">{{ t("state.loading") }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="
|
||||
(folder.children == undefined || folder.children.length === 0) &&
|
||||
(folder.requests == undefined || folder.requests.length === 0)
|
||||
"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<img
|
||||
:src="`/images/states/${colorMode.value}/pack.svg`"
|
||||
loading="lazy"
|
||||
class="inline-flex flex-col object-contain object-center w-16 h-16 mb-4"
|
||||
:alt="`${t('empty.folder')}`"
|
||||
/>
|
||||
<span class="text-center">
|
||||
{{ t("empty.folder") }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import IconMoreVertical from "~icons/lucide/more-vertical"
|
||||
import IconEdit from "~icons/lucide/edit"
|
||||
import IconDownload from "~icons/lucide/download"
|
||||
import IconTrash2 from "~icons/lucide/trash-2"
|
||||
import IconFilePlus from "~icons/lucide/file-plus"
|
||||
import IconCheckCircle from "~icons/lucide/check-circle"
|
||||
import IconFolderPlus from "~icons/lucide/folder-plus"
|
||||
import IconFolder from "~icons/lucide/folder"
|
||||
import IconFolderOpen from "~icons/lucide/folder-open"
|
||||
import { defineComponent, ref } from "vue"
|
||||
import * as E from "fp-ts/Either"
|
||||
import {
|
||||
getCompleteCollectionTree,
|
||||
teamCollToHoppRESTColl,
|
||||
} from "~/helpers/backend/helpers"
|
||||
import { moveRESTTeamRequest } from "~/helpers/backend/mutations/TeamRequest"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { useColorMode } from "@composables/theming"
|
||||
|
||||
export default defineComponent({
|
||||
name: "Folder",
|
||||
props: {
|
||||
folder: { type: Object, default: () => ({}) },
|
||||
folderIndex: { type: Number, default: null },
|
||||
collectionIndex: { type: Number, default: null },
|
||||
folderPath: { type: String, default: null },
|
||||
saveRequest: Boolean,
|
||||
isFiltered: Boolean,
|
||||
collectionsType: { type: Object, default: () => ({}) },
|
||||
picked: { type: Object, default: () => ({}) },
|
||||
loadingCollectionIDs: { type: Array, default: () => [] },
|
||||
},
|
||||
emits: [
|
||||
"add-request",
|
||||
"add-folder",
|
||||
"edit-folder",
|
||||
"update-team-collections",
|
||||
"edit-request",
|
||||
"remove-request",
|
||||
"duplicate-request",
|
||||
"select",
|
||||
"remove-folder",
|
||||
"expand-collection",
|
||||
],
|
||||
setup() {
|
||||
return {
|
||||
tippyActions: ref<any | null>(null),
|
||||
options: ref<any | null>(null),
|
||||
requestAction: ref<any | null>(null),
|
||||
folderAction: ref<any | null>(null),
|
||||
edit: ref<any | null>(null),
|
||||
deleteAction: ref<any | null>(null),
|
||||
exportAction: ref<any | null>(null),
|
||||
exportLoading: ref<boolean>(false),
|
||||
toast: useToast(),
|
||||
t: useI18n(),
|
||||
colorMode: useColorMode(),
|
||||
IconFilePlus,
|
||||
IconFolderPlus,
|
||||
IconCheckCircle,
|
||||
IconFolder,
|
||||
IconFolderOpen,
|
||||
IconMoreVertical,
|
||||
IconEdit,
|
||||
IconDownload,
|
||||
IconTrash2,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showChildren: false,
|
||||
dragging: false,
|
||||
prevCursor: "",
|
||||
cursor: "",
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isSelected(): boolean {
|
||||
return (
|
||||
this.picked &&
|
||||
this.picked.pickedType === "teams-folder" &&
|
||||
this.picked.folderID === this.folder.id
|
||||
)
|
||||
},
|
||||
getCollectionIcon() {
|
||||
if (this.isSelected) return IconCheckCircle
|
||||
else if (!this.showChildren && !this.isFiltered) return IconFolder
|
||||
else if (this.showChildren || this.isFiltered) return IconFolderOpen
|
||||
else return IconFolder
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async exportFolder() {
|
||||
this.exportLoading = true
|
||||
|
||||
const result = await getCompleteCollectionTree(this.folder.id)()
|
||||
|
||||
if (E.isLeft(result)) {
|
||||
this.toast.error(this.t("error.something_went_wrong").toString())
|
||||
console.log(result.left)
|
||||
this.exportLoading = false
|
||||
this.options.tippy().hide()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
const hoppColl = teamCollToHoppRESTColl(result.right)
|
||||
|
||||
const collectionJSON = JSON.stringify(hoppColl)
|
||||
|
||||
const file = new Blob([collectionJSON], { type: "application/json" })
|
||||
const a = document.createElement("a")
|
||||
const url = URL.createObjectURL(file)
|
||||
a.href = url
|
||||
|
||||
a.download = `${hoppColl.name}.json`
|
||||
document.body.appendChild(a)
|
||||
a.click()
|
||||
this.toast.success(this.t("state.download_started").toString())
|
||||
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a)
|
||||
URL.revokeObjectURL(url)
|
||||
}, 1000)
|
||||
|
||||
this.exportLoading = false
|
||||
|
||||
this.options.tippy().hide()
|
||||
},
|
||||
toggleShowChildren() {
|
||||
if (this.$props.saveRequest)
|
||||
this.$emit("select", {
|
||||
picked: {
|
||||
pickedType: "teams-folder",
|
||||
folderID: this.folder.id,
|
||||
},
|
||||
})
|
||||
|
||||
this.$emit("expand-collection", this.$props.folder.id)
|
||||
this.showChildren = !this.showChildren
|
||||
},
|
||||
removeFolder() {
|
||||
this.$emit("remove-folder", {
|
||||
collectionsType: this.collectionsType,
|
||||
folder: this.folder,
|
||||
})
|
||||
},
|
||||
expandCollection(collectionID: number) {
|
||||
this.$emit("expand-collection", collectionID)
|
||||
},
|
||||
async dropEvent({ dataTransfer }: any) {
|
||||
this.dragging = !this.dragging
|
||||
const requestIndex = dataTransfer.getData("requestIndex")
|
||||
const moveRequestResult = await moveRESTTeamRequest(
|
||||
requestIndex,
|
||||
this.folder.id
|
||||
)()
|
||||
if (E.isLeft(moveRequestResult))
|
||||
this.toast.error(`${this.t("error.something_went_wrong")}`)
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,407 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col" :class="[{ 'bg-primaryLight': dragging }]">
|
||||
<div
|
||||
class="flex items-stretch group"
|
||||
draggable="true"
|
||||
@dragstart="dragStart"
|
||||
@dragover.stop
|
||||
@dragleave="dragging = false"
|
||||
@dragend="dragging = false"
|
||||
@contextmenu.prevent="options.tippy.show()"
|
||||
>
|
||||
<span
|
||||
class="flex items-center justify-center w-16 px-2 truncate cursor-pointer"
|
||||
:class="getRequestLabelColor(request.method)"
|
||||
@click="selectRequest()"
|
||||
>
|
||||
<component
|
||||
:is="IconCheckCircle"
|
||||
v-if="isSelected"
|
||||
class="svg-icons"
|
||||
:class="{ 'text-accent': isSelected }"
|
||||
/>
|
||||
<span v-else class="font-semibold truncate text-tiny">
|
||||
{{ request.method }}
|
||||
</span>
|
||||
</span>
|
||||
<span
|
||||
class="flex items-center flex-1 min-w-0 py-2 pr-2 cursor-pointer transition group-hover:text-secondaryDark"
|
||||
@click="selectRequest()"
|
||||
>
|
||||
<span class="truncate" :class="{ 'text-accent': isSelected }">
|
||||
{{ request.name }}
|
||||
</span>
|
||||
<span
|
||||
v-if="isActive"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
class="relative h-1.5 w-1.5 flex flex-shrink-0 mx-3"
|
||||
:title="`${t('collection.request_in_use')}`"
|
||||
>
|
||||
<span
|
||||
class="absolute inline-flex flex-shrink-0 w-full h-full bg-green-500 rounded-full opacity-75 animate-ping"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="relative inline-flex flex-shrink-0 rounded-full h-1.5 w-1.5 bg-green-500"
|
||||
></span>
|
||||
</span>
|
||||
</span>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-if="!saveRequest"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconRotateCCW"
|
||||
:title="t('action.restore')"
|
||||
class="hidden group-hover:inline-flex"
|
||||
@click="selectRequest()"
|
||||
/>
|
||||
<span>
|
||||
<tippy
|
||||
v-if="collectionsType.selectedTeam.myRole !== 'VIEWER'"
|
||||
ref="options"
|
||||
interactive
|
||||
trigger="click"
|
||||
theme="popover"
|
||||
arrow
|
||||
:on-shown="() => tippyActions.focus()"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.more')"
|
||||
:icon="IconMoreVertical"
|
||||
/>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
ref="tippyActions"
|
||||
class="flex flex-col focus:outline-none"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.e="edit.$el.click()"
|
||||
@keyup.d="duplicate.$el.click()"
|
||||
@keyup.delete="deleteAction.$el.click()"
|
||||
@keyup.escape="hide()"
|
||||
>
|
||||
<SmartItem
|
||||
ref="edit"
|
||||
:icon="IconEdit"
|
||||
:label="t('action.edit')"
|
||||
:shortcut="['E']"
|
||||
@click="
|
||||
() => {
|
||||
emit('edit-request', {
|
||||
collectionIndex,
|
||||
folderIndex,
|
||||
folderName,
|
||||
request,
|
||||
requestIndex,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="duplicate"
|
||||
:icon="IconCopy"
|
||||
:label="t('action.duplicate')"
|
||||
:shortcut="['D']"
|
||||
@click="
|
||||
() => {
|
||||
emit('duplicate-request', {
|
||||
request,
|
||||
requestIndex,
|
||||
collectionID,
|
||||
})
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<SmartItem
|
||||
ref="deleteAction"
|
||||
:icon="IconTrash2"
|
||||
:label="t('action.delete')"
|
||||
:shortcut="['⌫']"
|
||||
@click="
|
||||
() => {
|
||||
removeRequest()
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<HttpReqChangeConfirmModal
|
||||
:show="confirmChange"
|
||||
@hide-modal="confirmChange = false"
|
||||
@save-change="saveRequestChange"
|
||||
@discard-change="discardRequestChange"
|
||||
/>
|
||||
<CollectionsSaveRequest
|
||||
mode="rest"
|
||||
:show="showSaveRequestModal"
|
||||
@hide-modal="showSaveRequestModal = false"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import IconMoreVertical from "~icons/lucide/more-vertical"
|
||||
import IconCheckCircle from "~icons/lucide/check-circle"
|
||||
import IconRotateCCW from "~icons/lucide/rotate-ccw"
|
||||
import IconEdit from "~icons/lucide/edit"
|
||||
import IconCopy from "~icons/lucide/copy"
|
||||
import IconTrash2 from "~icons/lucide/trash-2"
|
||||
import { ref, computed } from "vue"
|
||||
import {
|
||||
HoppRESTRequest,
|
||||
isEqualHoppRESTRequest,
|
||||
safelyExtractRESTRequest,
|
||||
translateToNewRequest,
|
||||
} from "@hoppscotch/data"
|
||||
import * as E from "fp-ts/Either"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { useReadonlyStream } from "@composables/stream"
|
||||
import {
|
||||
getDefaultRESTRequest,
|
||||
restSaveContext$,
|
||||
setRESTRequest,
|
||||
setRESTSaveContext,
|
||||
getRESTSaveContext,
|
||||
getRESTRequest,
|
||||
} from "~/newstore/RESTSession"
|
||||
import { editRESTRequest } from "~/newstore/collections"
|
||||
import { runMutation } from "~/helpers/backend/GQLClient"
|
||||
import { Team, UpdateRequestDocument } from "~/helpers/backend/graphql"
|
||||
import { HoppRequestSaveContext } from "~/helpers/types/HoppRequestSaveContext"
|
||||
|
||||
const props = defineProps<{
|
||||
request: HoppRESTRequest
|
||||
collectionIndex: number
|
||||
folderIndex: number
|
||||
folderName?: string
|
||||
requestIndex: string
|
||||
saveRequest: boolean
|
||||
collectionsType: {
|
||||
type: "my-collections" | "team-collections"
|
||||
selectedTeam: Team | undefined
|
||||
}
|
||||
collectionID: string
|
||||
picked?: {
|
||||
pickedType: string
|
||||
requestID: string
|
||||
}
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(
|
||||
e: "select",
|
||||
data:
|
||||
| {
|
||||
picked: {
|
||||
pickedType: string
|
||||
requestID: string
|
||||
}
|
||||
}
|
||||
| undefined
|
||||
): void
|
||||
|
||||
(
|
||||
e: "remove-request",
|
||||
data: {
|
||||
folderPath: string | undefined
|
||||
requestIndex: string
|
||||
}
|
||||
): void
|
||||
|
||||
(
|
||||
e: "edit-request",
|
||||
data: {
|
||||
collectionIndex: number
|
||||
folderIndex: number
|
||||
folderName: string | undefined
|
||||
requestIndex: string
|
||||
request: HoppRESTRequest
|
||||
}
|
||||
): void
|
||||
|
||||
(
|
||||
e: "duplicate-request",
|
||||
data: {
|
||||
collectionID: number | string
|
||||
requestIndex: string
|
||||
request: HoppRESTRequest
|
||||
}
|
||||
): void
|
||||
}>()
|
||||
|
||||
const t = useI18n()
|
||||
const toast = useToast()
|
||||
|
||||
const dragging = ref(false)
|
||||
const requestMethodLabels = {
|
||||
get: "text-green-500",
|
||||
post: "text-yellow-500",
|
||||
put: "text-blue-500",
|
||||
delete: "text-red-500",
|
||||
default: "text-gray-500",
|
||||
}
|
||||
const confirmChange = ref(false)
|
||||
const showSaveRequestModal = ref(false)
|
||||
|
||||
// Template refs
|
||||
const tippyActions = ref<any | null>(null)
|
||||
const options = ref<any | null>(null)
|
||||
const edit = ref<any | null>(null)
|
||||
const duplicate = ref<any | null>(null)
|
||||
const deleteAction = ref<any | null>(null)
|
||||
|
||||
const active = useReadonlyStream(restSaveContext$, null)
|
||||
|
||||
const isSelected = computed(
|
||||
() =>
|
||||
props.picked &&
|
||||
props.picked.pickedType === "teams-request" &&
|
||||
props.picked.requestID === props.requestIndex
|
||||
)
|
||||
|
||||
const isActive = computed(
|
||||
() =>
|
||||
active.value &&
|
||||
active.value.originLocation === "team-collection" &&
|
||||
active.value.requestID === props.requestIndex
|
||||
)
|
||||
|
||||
const dragStart = ({ dataTransfer }: DragEvent) => {
|
||||
if (dataTransfer) {
|
||||
dragging.value = !dragging.value
|
||||
dataTransfer.setData("requestIndex", props.requestIndex)
|
||||
}
|
||||
}
|
||||
|
||||
const removeRequest = () => {
|
||||
emit("remove-request", {
|
||||
folderPath: props.folderName,
|
||||
requestIndex: props.requestIndex,
|
||||
})
|
||||
}
|
||||
|
||||
const getRequestLabelColor = (method: string): string => {
|
||||
return (
|
||||
(requestMethodLabels as any)[method.toLowerCase()] ||
|
||||
requestMethodLabels.default
|
||||
)
|
||||
}
|
||||
|
||||
const setRestReq = (request: HoppRESTRequest) => {
|
||||
setRESTRequest(
|
||||
safelyExtractRESTRequest(
|
||||
translateToNewRequest(request),
|
||||
getDefaultRESTRequest()
|
||||
),
|
||||
{
|
||||
originLocation: "team-collection",
|
||||
requestID: props.requestIndex,
|
||||
req: request,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
const selectRequest = () => {
|
||||
// Check if this is a save as request popup, if so we don't need to prompt the confirm change popup.
|
||||
if (props.saveRequest) {
|
||||
emit("select", {
|
||||
picked: {
|
||||
pickedType: "teams-request",
|
||||
requestID: props.requestIndex,
|
||||
},
|
||||
})
|
||||
} else if (isEqualHoppRESTRequest(props.request, getDefaultRESTRequest())) {
|
||||
confirmChange.value = false
|
||||
setRestReq(props.request)
|
||||
} else if (!active.value) {
|
||||
confirmChange.value = true
|
||||
} else {
|
||||
const currentReqWithNoChange = active.value.req
|
||||
const currentFullReq = getRESTRequest()
|
||||
|
||||
// Check if whether user clicked the same request or not
|
||||
if (!isActive.value && currentReqWithNoChange) {
|
||||
// Check if there is any changes done on the current request
|
||||
if (isEqualHoppRESTRequest(currentReqWithNoChange, currentFullReq)) {
|
||||
setRestReq(props.request)
|
||||
} else {
|
||||
confirmChange.value = true
|
||||
}
|
||||
} else {
|
||||
setRESTSaveContext(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Save current request to the collection */
|
||||
const saveRequestChange = () => {
|
||||
const saveCtx = getRESTSaveContext()
|
||||
saveCurrentRequest(saveCtx)
|
||||
confirmChange.value = false
|
||||
}
|
||||
|
||||
/** Discard changes and change the current request and context */
|
||||
const discardRequestChange = () => {
|
||||
setRestReq(props.request)
|
||||
if (!isActive.value) {
|
||||
setRESTSaveContext({
|
||||
originLocation: "team-collection",
|
||||
requestID: props.requestIndex,
|
||||
req: props.request,
|
||||
})
|
||||
}
|
||||
confirmChange.value = false
|
||||
}
|
||||
|
||||
const saveCurrentRequest = (saveCtx: HoppRequestSaveContext | null) => {
|
||||
if (!saveCtx) {
|
||||
showSaveRequestModal.value = true
|
||||
return
|
||||
}
|
||||
if (saveCtx.originLocation === "team-collection") {
|
||||
const req = getRESTRequest()
|
||||
try {
|
||||
runMutation(UpdateRequestDocument, {
|
||||
requestID: saveCtx.requestID,
|
||||
data: {
|
||||
title: req.name,
|
||||
request: JSON.stringify(req),
|
||||
},
|
||||
})().then((result) => {
|
||||
if (E.isLeft(result)) {
|
||||
toast.error(`${t("profile.no_permission")}`)
|
||||
} else {
|
||||
toast.success(`${t("request.saved")}`)
|
||||
}
|
||||
})
|
||||
setRestReq(props.request)
|
||||
} catch (error) {
|
||||
showSaveRequestModal.value = true
|
||||
toast.error(`${t("error.something_went_wrong")}`)
|
||||
console.error(error)
|
||||
}
|
||||
} else if (saveCtx.originLocation === "user-collection") {
|
||||
try {
|
||||
editRESTRequest(
|
||||
saveCtx.folderPath,
|
||||
saveCtx.requestIndex,
|
||||
getRESTRequest()
|
||||
)
|
||||
setRestReq(props.request)
|
||||
toast.success(`${t("request.saved")}`)
|
||||
} catch (e) {
|
||||
setRESTSaveContext(null)
|
||||
saveCurrentRequest(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,191 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="sticky top-0 z-10 flex flex-col rounded-t bg-primary">
|
||||
<tippy ref="options" interactive trigger="click" theme="popover" arrow>
|
||||
<span
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="`${t('environment.select')}`"
|
||||
class="flex-1 bg-transparent border-b border-dividerLight select-wrapper"
|
||||
>
|
||||
<ButtonSecondary
|
||||
v-if="selectedEnvironmentIndex !== -1"
|
||||
:label="environments[selectedEnvironmentIndex].name"
|
||||
class="flex-1 !justify-start pr-8 rounded-none"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-else
|
||||
:label="`${t('environment.select')}`"
|
||||
class="flex-1 !justify-start pr-8 rounded-none"
|
||||
/>
|
||||
</span>
|
||||
<template #content="{ hide }">
|
||||
<div
|
||||
class="flex flex-col"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
@keyup.escape="hide()"
|
||||
>
|
||||
<SmartItem
|
||||
:label="`${t('environment.no_environment')}`"
|
||||
:info-icon="selectedEnvironmentIndex === -1 ? IconDone : null"
|
||||
:active-info-icon="selectedEnvironmentIndex === -1"
|
||||
@click="
|
||||
() => {
|
||||
selectedEnvironmentIndex = -1
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<hr v-if="environments.length > 0" />
|
||||
<SmartItem
|
||||
v-for="(gen, index) in environments"
|
||||
:key="`gen-${index}`"
|
||||
:label="gen.name"
|
||||
:info-icon="index === selectedEnvironmentIndex ? IconDone : null"
|
||||
:active-info-icon="index === selectedEnvironmentIndex"
|
||||
@click="
|
||||
() => {
|
||||
selectedEnvironmentIndex = index
|
||||
hide()
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</tippy>
|
||||
<div class="flex justify-between flex-1 border-b border-dividerLight">
|
||||
<ButtonSecondary
|
||||
:icon="IconPlus"
|
||||
:label="`${t('action.new')}`"
|
||||
class="!rounded-none"
|
||||
@click="displayModalAdd(true)"
|
||||
/>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
to="https://docs.hoppscotch.io/features/environments"
|
||||
blank
|
||||
:title="t('app.wiki')"
|
||||
:icon="IconHelpCircle"
|
||||
/>
|
||||
<ButtonSecondary
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:icon="IconArchive"
|
||||
:title="t('modal.import_export')"
|
||||
@click="displayModalImportExport(true)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<EnvironmentsEnvironment
|
||||
environment-index="Global"
|
||||
:environment="globalEnvironment"
|
||||
class="border-b border-dashed border-dividerLight"
|
||||
@edit-environment="editEnvironment('Global')"
|
||||
/>
|
||||
<EnvironmentsEnvironment
|
||||
v-for="(environment, index) in environments"
|
||||
:key="`environment-${index}`"
|
||||
:environment-index="index"
|
||||
:environment="environment"
|
||||
@edit-environment="editEnvironment(index)"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="environments.length === 0"
|
||||
class="flex flex-col items-center justify-center p-4 text-secondaryLight"
|
||||
>
|
||||
<img
|
||||
:src="`/images/states/${colorMode.value}/blockchain.svg`"
|
||||
loading="lazy"
|
||||
class="inline-flex flex-col object-contain object-center w-16 h-16 my-4"
|
||||
:alt="`${t('empty.environments')}`"
|
||||
/>
|
||||
<span class="pb-4 text-center">
|
||||
{{ t("empty.environments") }}
|
||||
</span>
|
||||
<ButtonSecondary
|
||||
:label="`${t('add.new')}`"
|
||||
filled
|
||||
class="mb-4"
|
||||
@click="displayModalAdd(true)"
|
||||
/>
|
||||
</div>
|
||||
<EnvironmentsDetails
|
||||
:show="showModalDetails"
|
||||
:action="action"
|
||||
:editing-environment-index="editingEnvironmentIndex"
|
||||
@hide-modal="displayModalEdit(false)"
|
||||
/>
|
||||
<EnvironmentsImportExport
|
||||
:show="showModalImportExport"
|
||||
@hide-modal="displayModalImportExport(false)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import IconDone from "~icons/lucide/check"
|
||||
import IconPlus from "~icons/lucide/plus"
|
||||
import IconHelpCircle from "~icons/lucide/help-circle"
|
||||
import IconArchive from "~icons/lucide/archive"
|
||||
import { computed, ref } from "vue"
|
||||
import { useReadonlyStream, useStream } from "@composables/stream"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useColorMode } from "@composables/theming"
|
||||
import {
|
||||
environments$,
|
||||
setCurrentEnvironment,
|
||||
selectedEnvIndex$,
|
||||
globalEnv$,
|
||||
} from "~/newstore/environments"
|
||||
|
||||
const t = useI18n()
|
||||
|
||||
const options = ref<any | null>(null)
|
||||
|
||||
const colorMode = useColorMode()
|
||||
|
||||
const globalEnv = useReadonlyStream(globalEnv$, [])
|
||||
|
||||
const globalEnvironment = computed(() => ({
|
||||
name: "Global",
|
||||
variables: globalEnv.value,
|
||||
}))
|
||||
|
||||
const environments = useReadonlyStream(environments$, [])
|
||||
|
||||
const selectedEnvironmentIndex = useStream(
|
||||
selectedEnvIndex$,
|
||||
-1,
|
||||
setCurrentEnvironment
|
||||
)
|
||||
|
||||
const showModalImportExport = ref(false)
|
||||
const showModalDetails = ref(false)
|
||||
const action = ref<"new" | "edit">("edit")
|
||||
const editingEnvironmentIndex = ref<number | "Global" | null>(null)
|
||||
|
||||
const displayModalAdd = (shouldDisplay: boolean) => {
|
||||
action.value = "new"
|
||||
showModalDetails.value = shouldDisplay
|
||||
}
|
||||
const displayModalEdit = (shouldDisplay: boolean) => {
|
||||
action.value = "edit"
|
||||
showModalDetails.value = shouldDisplay
|
||||
|
||||
if (!shouldDisplay) resetSelectedData()
|
||||
}
|
||||
const displayModalImportExport = (shouldDisplay: boolean) => {
|
||||
showModalImportExport.value = shouldDisplay
|
||||
}
|
||||
const editEnvironment = (environmentIndex: number | "Global") => {
|
||||
editingEnvironmentIndex.value = environmentIndex
|
||||
action.value = "edit"
|
||||
displayModalEdit(true)
|
||||
}
|
||||
const resetSelectedData = () => {
|
||||
editingEnvironmentIndex.value = null
|
||||
}
|
||||
</script>
|
||||
@@ -1,117 +0,0 @@
|
||||
<template>
|
||||
<SmartModal
|
||||
v-if="show"
|
||||
dialog
|
||||
:title="`${t('import.curl')}`"
|
||||
@close="hideModal"
|
||||
>
|
||||
<template #body>
|
||||
<div class="px-2 h-46">
|
||||
<div
|
||||
ref="curlEditor"
|
||||
class="h-full border rounded border-dividerLight"
|
||||
></div>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<span class="flex">
|
||||
<ButtonPrimary
|
||||
ref="importButton"
|
||||
:label="`${t('import.title')}`"
|
||||
@click="handleImport"
|
||||
/>
|
||||
<ButtonSecondary :label="`${t('action.cancel')}`" @click="hideModal" />
|
||||
</span>
|
||||
<span class="flex">
|
||||
<ButtonSecondary
|
||||
:icon="pasteIcon"
|
||||
:label="`${t('action.paste')}`"
|
||||
filled
|
||||
@click="handlePaste"
|
||||
/>
|
||||
</span>
|
||||
</template>
|
||||
</SmartModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, watch } from "vue"
|
||||
import { refAutoReset } from "@vueuse/core"
|
||||
import { useCodemirror } from "@composables/codemirror"
|
||||
import { setRESTRequest } from "~/newstore/RESTSession"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { parseCurlToHoppRESTReq } from "~/helpers/curl"
|
||||
|
||||
import IconClipboard from "~icons/lucide/clipboard"
|
||||
import IconCheck from "~icons/lucide/check"
|
||||
|
||||
const t = useI18n()
|
||||
|
||||
const toast = useToast()
|
||||
|
||||
const curl = ref("")
|
||||
|
||||
const curlEditor = ref<any | null>(null)
|
||||
|
||||
const props = defineProps<{ show: boolean; text: string }>()
|
||||
|
||||
useCodemirror(curlEditor, curl, {
|
||||
extendedEditorConfig: {
|
||||
mode: "application/x-sh",
|
||||
placeholder: `${t("request.enter_curl")}`,
|
||||
},
|
||||
linter: null,
|
||||
completer: null,
|
||||
environmentHighlights: false,
|
||||
})
|
||||
|
||||
watch(
|
||||
() => props.show,
|
||||
() => {
|
||||
if (props.show) {
|
||||
curl.value = props.text.toString()
|
||||
}
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: "hide-modal"): void
|
||||
}>()
|
||||
|
||||
const hideModal = () => {
|
||||
emit("hide-modal")
|
||||
}
|
||||
|
||||
const handleImport = () => {
|
||||
const text = curl.value
|
||||
try {
|
||||
const req = parseCurlToHoppRESTReq(text)
|
||||
|
||||
setRESTRequest(req)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
toast.error(`${t("error.curl_invalid_format")}`)
|
||||
}
|
||||
hideModal()
|
||||
}
|
||||
|
||||
const pasteIcon = refAutoReset<typeof IconClipboard | typeof IconCheck>(
|
||||
IconClipboard,
|
||||
1000
|
||||
)
|
||||
|
||||
const handlePaste = async () => {
|
||||
try {
|
||||
const text = await navigator.clipboard.readText()
|
||||
if (text) {
|
||||
curl.value = text
|
||||
pasteIcon.value = IconCheck
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Failed to copy: ", e)
|
||||
toast.error(t("profile.no_permission").toString())
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,116 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col flex-1">
|
||||
<div
|
||||
class="sticky z-10 flex items-center justify-between pl-4 border-b bg-primary border-dividerLight top-lowerSecondaryStickyFold"
|
||||
>
|
||||
<label class="font-semibold text-secondaryLight">
|
||||
{{ t("response.body") }}
|
||||
</label>
|
||||
<div class="flex">
|
||||
<ButtonSecondary
|
||||
v-if="response.body"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('action.download_file')"
|
||||
:icon="downloadIcon === 'download' ? IconDownload : IconCheck"
|
||||
@click="downloadResponse"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
class="flex max-w-full border-b border-dividerLight"
|
||||
:src="imageSource"
|
||||
loading="lazy"
|
||||
:alt="imageSource"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import IconDownload from "~icons/lucide/download"
|
||||
import IconCheck from "~icons/lucide/check"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import { defineComponent } from "vue"
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
response: { type: Object, default: () => ({}) },
|
||||
},
|
||||
setup() {
|
||||
return {
|
||||
t: useI18n(),
|
||||
toast: useToast(),
|
||||
IconDownload,
|
||||
IconCheck,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
imageSource: "",
|
||||
downloadIcon: "download",
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
responseType() {
|
||||
return (
|
||||
this.response.headers.find(
|
||||
(h) => h.key.toLowerCase() === "content-type"
|
||||
).value || ""
|
||||
)
|
||||
.split(";")[0]
|
||||
.toLowerCase()
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
response: {
|
||||
immediate: true,
|
||||
handler() {
|
||||
this.imageSource = ""
|
||||
|
||||
const buf = this.response.body
|
||||
const bytes = new Uint8Array(buf)
|
||||
const blob = new Blob([bytes.buffer])
|
||||
|
||||
const reader = new FileReader()
|
||||
reader.onload = ({ target }) => {
|
||||
this.imageSource = target.result
|
||||
}
|
||||
reader.readAsDataURL(blob)
|
||||
},
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.imageSource = ""
|
||||
|
||||
const buf = this.response.body
|
||||
const bytes = new Uint8Array(buf)
|
||||
const blob = new Blob([bytes.buffer])
|
||||
|
||||
const reader = new FileReader()
|
||||
reader.onload = ({ target }) => {
|
||||
this.imageSource = target.result
|
||||
}
|
||||
reader.readAsDataURL(blob)
|
||||
},
|
||||
methods: {
|
||||
downloadResponse() {
|
||||
const dataToWrite = this.response.body
|
||||
const file = new Blob([dataToWrite], { type: this.responseType })
|
||||
const a = document.createElement("a")
|
||||
const url = URL.createObjectURL(file)
|
||||
a.href = url
|
||||
// TODO get uri from meta
|
||||
a.download = `${url.split("/").pop().split("#")[0].split("?")[0]}`
|
||||
document.body.appendChild(a)
|
||||
a.click()
|
||||
this.downloadIcon = "check"
|
||||
this.toast.success(this.t("state.download_started"))
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a)
|
||||
URL.revokeObjectURL(url)
|
||||
this.downloadIcon = "download"
|
||||
}, 1000)
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,28 +0,0 @@
|
||||
<template>
|
||||
<div
|
||||
class="relative flex flex-col overflow-hidden space-y-2"
|
||||
:class="expand ? 'h-full' : 'max-h-32'"
|
||||
>
|
||||
<slot name="body"></slot>
|
||||
<div class="sticky inset-x-0 bottom-0 flex items-center justify-center">
|
||||
<ButtonSecondary
|
||||
:icon="expand ? IconChevronUp : IconChevronDown"
|
||||
:label="expand ? t('action.less') : t('action.more')"
|
||||
filled
|
||||
rounded
|
||||
@click="expand = !expand"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import IconChevronUp from "~icons/lucide/chevron-up"
|
||||
import IconChevronDown from "~icons/lucide/chevron-down"
|
||||
import { ref } from "vue"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
|
||||
const t = useI18n()
|
||||
|
||||
const expand = ref(false)
|
||||
</script>
|
||||
@@ -1,3 +0,0 @@
|
||||
<template>
|
||||
<icon-lucide-loader class="animate-spin svg-icons" />
|
||||
</template>
|
||||
@@ -1,77 +0,0 @@
|
||||
/* An `action` is a unique verb that is associated with certain thing that can be done on Hoppscotch.
|
||||
* For example, sending a request.
|
||||
*/
|
||||
|
||||
import { onBeforeUnmount, onMounted } from "vue"
|
||||
import { BehaviorSubject } from "rxjs"
|
||||
|
||||
export type HoppAction =
|
||||
| "request.send-cancel" // Send/Cancel a Hoppscotch Request
|
||||
| "request.reset" // Clear request data
|
||||
| "request.copy-link" // Copy Request Link
|
||||
| "request.save" // Save to Collections
|
||||
| "request.save-as" // Save As
|
||||
| "request.method.next" // Select Next Method
|
||||
| "request.method.prev" // Select Previous Method
|
||||
| "request.method.get" // Select GET Method
|
||||
| "request.method.head" // Select HEAD Method
|
||||
| "request.method.post" // Select POST Method
|
||||
| "request.method.put" // Select PUT Method
|
||||
| "request.method.delete" // Select DELETE Method
|
||||
| "flyouts.keybinds.toggle" // Shows the keybinds flyout
|
||||
| "modals.search.toggle" // Shows the search modal
|
||||
| "modals.support.toggle" // Shows the support modal
|
||||
| "modals.share.toggle" // Shows the share modal
|
||||
| "navigation.jump.rest" // Jump to REST page
|
||||
| "navigation.jump.graphql" // Jump to GraphQL page
|
||||
| "navigation.jump.realtime" // Jump to realtime page
|
||||
| "navigation.jump.documentation" // Jump to documentation page
|
||||
| "navigation.jump.settings" // Jump to settings page
|
||||
| "navigation.jump.profile" // Jump to profile page
|
||||
| "settings.theme.system" // Use system theme
|
||||
| "settings.theme.light" // Use light theme
|
||||
| "settings.theme.dark" // Use dark theme
|
||||
| "settings.theme.black" // Use black theme
|
||||
|
||||
type BoundActionList = {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
[_ in HoppAction]?: Array<() => void>
|
||||
}
|
||||
|
||||
const boundActions: BoundActionList = {}
|
||||
|
||||
export const activeActions$ = new BehaviorSubject<HoppAction[]>([])
|
||||
|
||||
export function bindAction(action: HoppAction, handler: () => void) {
|
||||
if (boundActions[action]) {
|
||||
boundActions[action]?.push(handler)
|
||||
} else {
|
||||
boundActions[action] = [handler]
|
||||
}
|
||||
|
||||
activeActions$.next(Object.keys(boundActions) as HoppAction[])
|
||||
}
|
||||
|
||||
export function invokeAction(action: HoppAction) {
|
||||
boundActions[action]?.forEach((handler) => handler())
|
||||
}
|
||||
|
||||
export function unbindAction(action: HoppAction, handler: () => void) {
|
||||
boundActions[action] = boundActions[action]?.filter((x) => x !== handler)
|
||||
|
||||
if (boundActions[action]?.length === 0) {
|
||||
delete boundActions[action]
|
||||
}
|
||||
|
||||
activeActions$.next(Object.keys(boundActions) as HoppAction[])
|
||||
}
|
||||
|
||||
export function defineActionHandler(action: HoppAction, handler: () => void) {
|
||||
onMounted(() => {
|
||||
bindAction(action, handler)
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
unbindAction(action, handler)
|
||||
})
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import { GraphCacheKeysConfig } from "../graphql"
|
||||
|
||||
export const keyDefs: GraphCacheKeysConfig = {
|
||||
User: (data) => data.uid!,
|
||||
TeamMember: (data) => data.membershipID!,
|
||||
Team: (data) => data.id!,
|
||||
Shortcode: (data) => data.id!,
|
||||
TeamInvitation: (data) => data.id!,
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
import { GraphCacheOptimisticUpdaters } from "../graphql"
|
||||
|
||||
export const optimisticDefs: GraphCacheOptimisticUpdaters = {}
|
||||
@@ -1,31 +0,0 @@
|
||||
import {
|
||||
GraphCacheResolvers,
|
||||
Shortcode,
|
||||
Team,
|
||||
TeamInvitation,
|
||||
WithTypename,
|
||||
} from "../graphql"
|
||||
|
||||
export const resolversDef: GraphCacheResolvers = {
|
||||
Query: {
|
||||
team: (_parent, { teamID }) =>
|
||||
<WithTypename<Team>>{
|
||||
__typename: "Team" as const,
|
||||
id: teamID,
|
||||
},
|
||||
user: (_parent, { uid }) => ({
|
||||
__typename: "User",
|
||||
uid,
|
||||
}),
|
||||
teamInvitation: (_parent, args) =>
|
||||
<WithTypename<TeamInvitation>>{
|
||||
__typename: "TeamInvitation",
|
||||
id: args.inviteID,
|
||||
},
|
||||
shortcode: (_parent, args) =>
|
||||
<WithTypename<Shortcode>>{
|
||||
__typename: "Shortcode",
|
||||
id: args.code,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
import { gql } from "@urql/core"
|
||||
import { GraphCacheUpdaters } from "../graphql"
|
||||
|
||||
export const updatesDef: GraphCacheUpdaters = {
|
||||
Subscription: {
|
||||
teamMemberAdded: (_r, { teamID }, cache) => {
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID,
|
||||
},
|
||||
"teamMembers"
|
||||
)
|
||||
},
|
||||
teamMemberUpdated: (_r, { teamID }, cache) => {
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID,
|
||||
},
|
||||
"teamMembers"
|
||||
)
|
||||
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID,
|
||||
},
|
||||
"myRole"
|
||||
)
|
||||
},
|
||||
teamMemberRemoved: (_r, { teamID }, cache) => {
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID,
|
||||
},
|
||||
"teamMembers"
|
||||
)
|
||||
},
|
||||
teamInvitationAdded: (_r, { teamID }, cache) => {
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID,
|
||||
},
|
||||
"teamInvitations"
|
||||
)
|
||||
},
|
||||
teamInvitationRemoved: (_r, { teamID }, cache) => {
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID,
|
||||
},
|
||||
"teamInvitations"
|
||||
)
|
||||
},
|
||||
},
|
||||
Mutation: {
|
||||
createTeamInvitation: (result, _args, cache) => {
|
||||
cache.invalidate(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: result.createTeamInvitation.teamID!,
|
||||
},
|
||||
"teamInvitations"
|
||||
)
|
||||
},
|
||||
acceptTeamInvitation: (_result, _args, cache) => {
|
||||
cache.invalidate({ __typename: "Query" }, "myTeams")
|
||||
},
|
||||
revokeTeamInvitation: (_result, args, cache) => {
|
||||
const targetTeamID = cache.resolve(
|
||||
{
|
||||
__typename: "TeamInvitation",
|
||||
id: args.inviteID,
|
||||
},
|
||||
"teamID"
|
||||
)
|
||||
|
||||
if (typeof targetTeamID === "string") {
|
||||
const newInvites = (
|
||||
cache.resolve(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: targetTeamID,
|
||||
},
|
||||
"teamInvitations"
|
||||
) as string[]
|
||||
).filter(
|
||||
(inviteKey) =>
|
||||
inviteKey !==
|
||||
cache.keyOfEntity({
|
||||
__typename: "TeamInvitation",
|
||||
id: args.inviteID,
|
||||
})
|
||||
)
|
||||
|
||||
cache.link(
|
||||
{ __typename: "Team", id: targetTeamID },
|
||||
"teamInvitations",
|
||||
newInvites
|
||||
)
|
||||
}
|
||||
},
|
||||
createShortcode: (result, _args, cache) => {
|
||||
cache.writeFragment(
|
||||
gql`
|
||||
fragment _ on Shortcode {
|
||||
id
|
||||
request
|
||||
}
|
||||
`,
|
||||
{
|
||||
id: result.createShortcode.id,
|
||||
request: result.createShortcode.request,
|
||||
}
|
||||
)
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
import { runMutation } from "../GQLClient"
|
||||
import {
|
||||
MoveRestTeamRequestDocument,
|
||||
MoveRestTeamRequestMutation,
|
||||
MoveRestTeamRequestMutationVariables,
|
||||
} from "../graphql"
|
||||
|
||||
type MoveRestTeamRequestErrors =
|
||||
| "team_req/not_found"
|
||||
| "team_req/invalid_target_id"
|
||||
|
||||
export const moveRESTTeamRequest = (requestID: string, collectionID: string) =>
|
||||
runMutation<
|
||||
MoveRestTeamRequestMutation,
|
||||
MoveRestTeamRequestMutationVariables,
|
||||
MoveRestTeamRequestErrors
|
||||
>(MoveRestTeamRequestDocument, {
|
||||
requestID,
|
||||
collectionID,
|
||||
})
|
||||
@@ -1,423 +0,0 @@
|
||||
import {
|
||||
User,
|
||||
getAuth,
|
||||
onAuthStateChanged,
|
||||
onIdTokenChanged,
|
||||
signInWithPopup,
|
||||
GoogleAuthProvider,
|
||||
GithubAuthProvider,
|
||||
OAuthProvider,
|
||||
signInWithEmailAndPassword as signInWithEmailAndPass,
|
||||
isSignInWithEmailLink as isSignInWithEmailLinkFB,
|
||||
fetchSignInMethodsForEmail,
|
||||
sendSignInLinkToEmail,
|
||||
signInWithEmailLink as signInWithEmailLinkFB,
|
||||
ActionCodeSettings,
|
||||
signOut,
|
||||
linkWithCredential,
|
||||
AuthCredential,
|
||||
AuthError,
|
||||
UserCredential,
|
||||
updateProfile,
|
||||
updateEmail,
|
||||
sendEmailVerification,
|
||||
reauthenticateWithCredential,
|
||||
} from "firebase/auth"
|
||||
import {
|
||||
onSnapshot,
|
||||
getFirestore,
|
||||
setDoc,
|
||||
doc,
|
||||
updateDoc,
|
||||
} from "firebase/firestore"
|
||||
import { BehaviorSubject, filter, Subject, Subscription } from "rxjs"
|
||||
import {
|
||||
setLocalConfig,
|
||||
getLocalConfig,
|
||||
removeLocalConfig,
|
||||
} from "~/newstore/localpersistence"
|
||||
|
||||
export type HoppUser = User & {
|
||||
provider?: string
|
||||
accessToken?: string
|
||||
}
|
||||
|
||||
export type AuthEvent =
|
||||
| { event: "probable_login"; user: HoppUser } // We have previous login state, but the app is waiting for authentication
|
||||
| { event: "login"; user: HoppUser } // We are authenticated
|
||||
| { event: "logout" } // No authentication and we have no previous state
|
||||
| { event: "authTokenUpdate"; user: HoppUser; newToken: string | null } // Token has been updated
|
||||
|
||||
/**
|
||||
* A BehaviorSubject emitting the currently logged in user (or null if not logged in)
|
||||
*/
|
||||
export const currentUser$ = new BehaviorSubject<HoppUser | null>(null)
|
||||
/**
|
||||
* A BehaviorSubject emitting the current idToken
|
||||
*/
|
||||
export const authIdToken$ = new BehaviorSubject<string | null>(null)
|
||||
|
||||
/**
|
||||
* A subject that emits events related to authentication flows
|
||||
*/
|
||||
export const authEvents$ = new Subject<AuthEvent>()
|
||||
|
||||
/**
|
||||
* Like currentUser$ but also gives probable user value
|
||||
*/
|
||||
export const probableUser$ = new BehaviorSubject<HoppUser | null>(null)
|
||||
|
||||
/**
|
||||
* Resolves when the probable login resolves into proper login
|
||||
*/
|
||||
export const waitProbableLoginToConfirm = () =>
|
||||
new Promise<void>((resolve, reject) => {
|
||||
if (authIdToken$.value) resolve()
|
||||
|
||||
if (!probableUser$.value) reject(new Error("no_probable_user"))
|
||||
|
||||
let sub: Subscription | null = null
|
||||
|
||||
sub = authIdToken$.pipe(filter((token) => !!token)).subscribe(() => {
|
||||
sub?.unsubscribe()
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* Initializes the firebase authentication related subjects
|
||||
*/
|
||||
export function initAuth() {
|
||||
const auth = getAuth()
|
||||
const firestore = getFirestore()
|
||||
|
||||
let extraSnapshotStop: (() => void) | null = null
|
||||
|
||||
probableUser$.next(JSON.parse(getLocalConfig("login_state") ?? "null"))
|
||||
|
||||
onAuthStateChanged(auth, (user) => {
|
||||
/** Whether the user was logged in before */
|
||||
const wasLoggedIn = currentUser$.value !== null
|
||||
|
||||
if (user) {
|
||||
probableUser$.next(user)
|
||||
} else {
|
||||
probableUser$.next(null)
|
||||
removeLocalConfig("login_state")
|
||||
}
|
||||
|
||||
if (!user && extraSnapshotStop) {
|
||||
extraSnapshotStop()
|
||||
extraSnapshotStop = null
|
||||
} else if (user) {
|
||||
// Merge all the user info from all the authenticated providers
|
||||
user.providerData.forEach((profile) => {
|
||||
if (!profile) return
|
||||
|
||||
const us = {
|
||||
updatedOn: new Date(),
|
||||
provider: profile.providerId,
|
||||
name: profile.displayName,
|
||||
email: profile.email,
|
||||
photoUrl: profile.photoURL,
|
||||
uid: profile.uid,
|
||||
}
|
||||
|
||||
setDoc(doc(firestore, "users", user.uid), us, { merge: true }).catch(
|
||||
(e) => console.error("error updating", us, e)
|
||||
)
|
||||
})
|
||||
|
||||
extraSnapshotStop = onSnapshot(
|
||||
doc(firestore, "users", user.uid),
|
||||
(doc) => {
|
||||
const data = doc.data()
|
||||
|
||||
const userUpdate: HoppUser = user
|
||||
|
||||
if (data) {
|
||||
// Write extra provider data
|
||||
userUpdate.provider = data.provider
|
||||
userUpdate.accessToken = data.accessToken
|
||||
}
|
||||
|
||||
currentUser$.next(userUpdate)
|
||||
}
|
||||
)
|
||||
}
|
||||
currentUser$.next(user)
|
||||
|
||||
// User wasn't found before, but now is there (login happened)
|
||||
if (!wasLoggedIn && user) {
|
||||
authEvents$.next({
|
||||
event: "login",
|
||||
user: currentUser$.value!,
|
||||
})
|
||||
} else if (wasLoggedIn && !user) {
|
||||
// User was found before, but now is not there (logout happened)
|
||||
authEvents$.next({
|
||||
event: "logout",
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
onIdTokenChanged(auth, async (user) => {
|
||||
if (user) {
|
||||
authIdToken$.next(await user.getIdToken())
|
||||
|
||||
authEvents$.next({
|
||||
event: "authTokenUpdate",
|
||||
newToken: authIdToken$.value,
|
||||
user: currentUser$.value!, // Force not-null because user is defined
|
||||
})
|
||||
|
||||
setLocalConfig("login_state", JSON.stringify(user))
|
||||
} else {
|
||||
authIdToken$.next(null)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function getAuthIDToken(): string | null {
|
||||
return authIdToken$.getValue()
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign user in with a popup using Google
|
||||
*/
|
||||
export async function signInUserWithGoogle() {
|
||||
return await signInWithPopup(getAuth(), new GoogleAuthProvider())
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign user in with a popup using Github
|
||||
*/
|
||||
export async function signInUserWithGithub() {
|
||||
return await signInWithPopup(
|
||||
getAuth(),
|
||||
new GithubAuthProvider().addScope("gist")
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign user in with a popup using Microsoft
|
||||
*/
|
||||
export async function signInUserWithMicrosoft() {
|
||||
return await signInWithPopup(getAuth(), new OAuthProvider("microsoft.com"))
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign user in with email and password
|
||||
*/
|
||||
export async function signInWithEmailAndPassword(
|
||||
email: string,
|
||||
password: string
|
||||
) {
|
||||
return await signInWithEmailAndPass(getAuth(), email, password)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the sign in methods for a given email address
|
||||
*
|
||||
* @param email - Email to get the methods of
|
||||
*
|
||||
* @returns Promise for string array of the auth provider methods accessible
|
||||
*/
|
||||
export async function getSignInMethodsForEmail(email: string) {
|
||||
return await fetchSignInMethodsForEmail(getAuth(), email)
|
||||
}
|
||||
|
||||
export async function linkWithFBCredential(
|
||||
user: User,
|
||||
credential: AuthCredential
|
||||
) {
|
||||
return await linkWithCredential(user, credential)
|
||||
}
|
||||
|
||||
/**
|
||||
* Links account with another account given in a auth/account-exists-with-different-credential error
|
||||
*
|
||||
* @param user - User who has the errors
|
||||
*
|
||||
* @param error - Error caught after trying to login
|
||||
*
|
||||
* @returns Promise of UserCredential
|
||||
*/
|
||||
export async function linkWithFBCredentialFromAuthError(
|
||||
user: User,
|
||||
error: unknown
|
||||
) {
|
||||
// Marked as not null since this function is supposed to be called after an auth/account-exists-with-different-credential error, ie credentials actually exist
|
||||
const credentials = OAuthProvider.credentialFromError(error as AuthError)!
|
||||
return await linkWithCredential(user, credentials)
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends an email with the signin link to the user
|
||||
*
|
||||
* @param email - Email to send the email to
|
||||
* @param actionCodeSettings - The settings to apply to the link
|
||||
*/
|
||||
export async function signInWithEmail(
|
||||
email: string,
|
||||
actionCodeSettings: ActionCodeSettings
|
||||
) {
|
||||
return await sendSignInLinkToEmail(getAuth(), email, actionCodeSettings)
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks and returns whether the sign in link is an email link
|
||||
*
|
||||
* @param url - The URL to look in
|
||||
*/
|
||||
export function isSignInWithEmailLink(url: string) {
|
||||
return isSignInWithEmailLinkFB(getAuth(), url)
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends an email with sign in with email link
|
||||
*
|
||||
* @param email - Email to log in to
|
||||
* @param url - The action URL which is used to validate login
|
||||
*/
|
||||
export async function signInWithEmailLink(email: string, url: string) {
|
||||
return await signInWithEmailLinkFB(getAuth(), email, url)
|
||||
}
|
||||
|
||||
/**
|
||||
* Signs out the user
|
||||
*/
|
||||
export async function signOutUser() {
|
||||
if (!currentUser$.value) throw new Error("No user has logged in")
|
||||
|
||||
await signOut(getAuth())
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the provider id and relevant provider auth token
|
||||
* as user metadata
|
||||
*
|
||||
* @param id - The provider ID
|
||||
* @param token - The relevant auth token for the given provider
|
||||
*/
|
||||
export async function setProviderInfo(id: string, token: string) {
|
||||
if (!currentUser$.value) throw new Error("No user has logged in")
|
||||
|
||||
const us = {
|
||||
updatedOn: new Date(),
|
||||
provider: id,
|
||||
accessToken: token,
|
||||
}
|
||||
|
||||
try {
|
||||
await updateDoc(
|
||||
doc(getFirestore(), "users", currentUser$.value.uid),
|
||||
us
|
||||
).catch((e) => console.error("error updating", us, e))
|
||||
} catch (e) {
|
||||
console.error("error updating", e)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user's display name
|
||||
*
|
||||
* @param name - The new display name
|
||||
*/
|
||||
export async function setDisplayName(name: string) {
|
||||
if (!currentUser$.value) throw new Error("No user has logged in")
|
||||
|
||||
const us = {
|
||||
displayName: name,
|
||||
}
|
||||
|
||||
try {
|
||||
await updateProfile(currentUser$.value, us)
|
||||
} catch (e) {
|
||||
console.error("error updating", e)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send user's email address verification mail
|
||||
*/
|
||||
export async function verifyEmailAddress() {
|
||||
if (!currentUser$.value) throw new Error("No user has logged in")
|
||||
|
||||
try {
|
||||
await sendEmailVerification(currentUser$.value)
|
||||
} catch (e) {
|
||||
console.error("error updating", e)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user's email address
|
||||
*
|
||||
* @param email - The new email address
|
||||
*/
|
||||
export async function setEmailAddress(email: string) {
|
||||
if (!currentUser$.value) throw new Error("No user has logged in")
|
||||
|
||||
try {
|
||||
await updateEmail(currentUser$.value, email)
|
||||
} catch (e) {
|
||||
await reauthenticateUser()
|
||||
console.error("error updating", e)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reauthenticate the user with the given credential
|
||||
*/
|
||||
async function reauthenticateUser() {
|
||||
if (!currentUser$.value) throw new Error("No user has logged in")
|
||||
const currentAuthMethod = currentUser$.value.provider
|
||||
let credential
|
||||
if (currentAuthMethod === "google.com") {
|
||||
const result = await signInUserWithGithub()
|
||||
credential = GithubAuthProvider.credentialFromResult(result)
|
||||
} else if (currentAuthMethod === "github.com") {
|
||||
const result = await signInUserWithGoogle()
|
||||
credential = GoogleAuthProvider.credentialFromResult(result)
|
||||
} else if (currentAuthMethod === "microsoft.com") {
|
||||
const result = await signInUserWithMicrosoft()
|
||||
credential = OAuthProvider.credentialFromResult(result)
|
||||
} else if (currentAuthMethod === "password") {
|
||||
const email = prompt(
|
||||
"Reauthenticate your account using your current email:"
|
||||
)
|
||||
const actionCodeSettings = {
|
||||
url: `${process.env.BASE_URL}/enter`,
|
||||
handleCodeInApp: true,
|
||||
}
|
||||
await signInWithEmail(email as string, actionCodeSettings)
|
||||
.then(() =>
|
||||
alert(
|
||||
`Check your inbox - we sent an email to ${email}. It contains a magic link that will reauthenticate your account.`
|
||||
)
|
||||
)
|
||||
.catch((e) => {
|
||||
alert(`Error: ${e.message}`)
|
||||
console.error(e)
|
||||
})
|
||||
return
|
||||
}
|
||||
try {
|
||||
await reauthenticateWithCredential(
|
||||
currentUser$.value,
|
||||
credential as AuthCredential
|
||||
)
|
||||
} catch (e) {
|
||||
console.error("error updating", e)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
export function getGithubCredentialFromResult(result: UserCredential) {
|
||||
return GithubAuthProvider.credentialFromResult(result)
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
import { pipe } from "fp-ts/function"
|
||||
import * as E from "fp-ts/Either"
|
||||
import { BehaviorSubject } from "rxjs"
|
||||
import { authIdToken$ } from "../fb/auth"
|
||||
import { runGQLQuery } from "../backend/GQLClient"
|
||||
import { GetUserInfoDocument } from "../backend/graphql"
|
||||
|
||||
/*
|
||||
* This file deals with interfacing data provided by the
|
||||
* Hoppscotch Backend server
|
||||
*/
|
||||
|
||||
/**
|
||||
* Defines the information provided about a user
|
||||
*/
|
||||
export interface UserInfo {
|
||||
/**
|
||||
* UID of the user
|
||||
*/
|
||||
uid: string
|
||||
/**
|
||||
* Displayable name of the user (or null if none available)
|
||||
*/
|
||||
displayName: string | null
|
||||
/**
|
||||
* Email of the user (or null if none available)
|
||||
*/
|
||||
email: string | null
|
||||
/**
|
||||
* URL to the profile photo of the user (or null if none available)
|
||||
*/
|
||||
photoURL: string | null
|
||||
}
|
||||
|
||||
/**
|
||||
* An observable subject onto the currently logged in user info (is null if not logged in)
|
||||
*/
|
||||
export const currentUserInfo$ = new BehaviorSubject<UserInfo | null>(null)
|
||||
|
||||
/**
|
||||
* Initializes the currenUserInfo$ view and sets up its update mechanism
|
||||
*/
|
||||
export function initUserInfo() {
|
||||
authIdToken$.subscribe((token) => {
|
||||
if (token) {
|
||||
updateUserInfo()
|
||||
} else {
|
||||
currentUserInfo$.next(null)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the actual user info fetching
|
||||
*/
|
||||
async function updateUserInfo() {
|
||||
const result = await runGQLQuery({
|
||||
query: GetUserInfoDocument,
|
||||
})
|
||||
|
||||
currentUserInfo$.next(
|
||||
pipe(
|
||||
result,
|
||||
E.matchW(
|
||||
() => null,
|
||||
(x) => ({
|
||||
uid: x.me.uid,
|
||||
displayName: x.me.displayName ?? null,
|
||||
email: x.me.email ?? null,
|
||||
photoURL: x.me.photoURL ?? null,
|
||||
})
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
import { createApp } from "vue"
|
||||
import { setupLocalPersistence } from "./newstore/localpersistence"
|
||||
import { performMigrations } from "./helpers/migrations"
|
||||
import { initializeFirebase } from "./helpers/fb"
|
||||
import { initUserInfo } from "./helpers/teams/BackendUserInfo"
|
||||
import { HOPP_MODULES } from "@modules/."
|
||||
|
||||
import "virtual:windi.css"
|
||||
import "../assets/scss/themes.scss"
|
||||
import "../assets/scss/styles.scss"
|
||||
import "nprogress/nprogress.css"
|
||||
|
||||
import App from "./App.vue"
|
||||
|
||||
const app = createApp(App)
|
||||
|
||||
// Some basic work that needs to be done before module inits even
|
||||
initializeFirebase()
|
||||
setupLocalPersistence()
|
||||
performMigrations()
|
||||
initUserInfo()
|
||||
|
||||
HOPP_MODULES.forEach((mod) => mod.onVueAppInit?.(app))
|
||||
|
||||
app.mount("#app")
|
||||
|
||||
console.info(
|
||||
"%cWe ❤︎ open source!",
|
||||
"background-color:white;padding:8px 16px;border-radius:8px;font-size:32px;color:red;"
|
||||
)
|
||||
console.info(
|
||||
"%cContribute: https://github.com/hoppscotch/hoppscotch",
|
||||
"background-color:black;padding:4px 8px;border-radius:8px;font-size:16px;color:white;"
|
||||
)
|
||||
@@ -1,91 +0,0 @@
|
||||
import { HoppModule } from "."
|
||||
import * as Sentry from "@sentry/vue"
|
||||
import { BrowserTracing } from "@sentry/tracing"
|
||||
import { Route } from "@sentry/vue/types/router"
|
||||
import { RouteLocationNormalized, Router } from "vue-router"
|
||||
import { settingsStore } from "~/newstore/settings"
|
||||
import { App } from "vue"
|
||||
import { APP_IS_IN_DEV_MODE } from "~/helpers/dev"
|
||||
|
||||
interface SentryVueRouter {
|
||||
onError: (fn: (err: Error) => void) => void
|
||||
beforeEach: (fn: (to: Route, from: Route, next: () => void) => void) => void
|
||||
}
|
||||
|
||||
function normalizedRouteToSentryRoute(route: RouteLocationNormalized): Route {
|
||||
return {
|
||||
matched: route.matched,
|
||||
// route.params' type translates just to a fancy version of this, hence assertion
|
||||
params: route.params as Route["params"],
|
||||
path: route.path,
|
||||
// route.query's type translates just to a fancy version of this, hence assertion
|
||||
query: route.query as Route["query"],
|
||||
name: route.name,
|
||||
}
|
||||
}
|
||||
|
||||
function getInstrumentationVueRouter(router: Router): SentryVueRouter {
|
||||
return <SentryVueRouter>{
|
||||
onError: router.onError,
|
||||
beforeEach(func) {
|
||||
router.beforeEach((to, from, next) => {
|
||||
func(
|
||||
normalizedRouteToSentryRoute(to),
|
||||
normalizedRouteToSentryRoute(from),
|
||||
next
|
||||
)
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
let sentryActive = false
|
||||
|
||||
function initSentry(dsn: string, router: Router, app: App) {
|
||||
Sentry.init({
|
||||
app,
|
||||
dsn: import.meta.env.VITE_SENTRY_DSN,
|
||||
environment: APP_IS_IN_DEV_MODE
|
||||
? "dev"
|
||||
: import.meta.env.VITE_SENTRY_ENVIRONMENT,
|
||||
integrations: [
|
||||
new BrowserTracing({
|
||||
routingInstrumentation: Sentry.vueRouterInstrumentation(
|
||||
getInstrumentationVueRouter(router)
|
||||
),
|
||||
// TODO: We may want to limit this later on
|
||||
tracingOrigins: [new URL(import.meta.env.VITE_BACKEND_GQL_URL).origin],
|
||||
}),
|
||||
],
|
||||
tracesSampleRate: 0.8,
|
||||
})
|
||||
sentryActive = true
|
||||
}
|
||||
|
||||
function deinitSentry() {
|
||||
Sentry.close()
|
||||
sentryActive = false
|
||||
}
|
||||
|
||||
export default <HoppModule>{
|
||||
onRouterInit(app, router) {
|
||||
if (!import.meta.env.VITE_SENTRY_DSN) {
|
||||
console.log(
|
||||
"Sentry tracing is not enabled because 'VITE_SENTRY_DSN' env is not defined"
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (settingsStore.value.TELEMETRY_ENABLED) {
|
||||
initSentry(import.meta.env.VITE_SENTRY_DSN, router, app)
|
||||
}
|
||||
|
||||
settingsStore.subject$.subscribe(({ TELEMETRY_ENABLED }) => {
|
||||
if (!TELEMETRY_ENABLED && sentryActive) {
|
||||
deinitSentry()
|
||||
} else if (TELEMETRY_ENABLED && !sentryActive) {
|
||||
initSentry(import.meta.env.VITE_SENTRY_DSN!, router, app)
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-col items-center justify-center min-h-screen">
|
||||
<div v-if="signingInWithEmail">
|
||||
<SmartSpinner />
|
||||
<div class="mt-2 text-sm text-secondaryLight">
|
||||
{{ t("state.loading") }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<AppLogo class="w-16 h-16 rounded" />
|
||||
</div>
|
||||
<pre v-if="error" class="mt-4 text-secondaryLight">{{ error }}</pre>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from "vue"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { initializeFirebase } from "~/helpers/fb"
|
||||
import { isSignInWithEmailLink, signInWithEmailLink } from "~/helpers/fb/auth"
|
||||
import { getLocalConfig, removeLocalConfig } from "~/newstore/localpersistence"
|
||||
|
||||
export default defineComponent({
|
||||
setup() {
|
||||
return {
|
||||
t: useI18n(),
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
signingInWithEmail: false,
|
||||
error: null,
|
||||
}
|
||||
},
|
||||
beforeMount() {
|
||||
initializeFirebase()
|
||||
},
|
||||
async mounted() {
|
||||
if (isSignInWithEmailLink(window.location.href)) {
|
||||
this.signingInWithEmail = true
|
||||
|
||||
let email = getLocalConfig("emailForSignIn")
|
||||
|
||||
if (!email) {
|
||||
email = window.prompt(
|
||||
"Please provide your email for confirmation"
|
||||
) as string
|
||||
}
|
||||
|
||||
await signInWithEmailLink(email, window.location.href)
|
||||
.then(() => {
|
||||
removeLocalConfig("emailForSignIn")
|
||||
this.$router.push({ path: "/" })
|
||||
})
|
||||
.catch((e) => {
|
||||
this.signingInWithEmail = false
|
||||
this.error = e.message
|
||||
})
|
||||
.finally(() => {
|
||||
this.signingInWithEmail = false
|
||||
})
|
||||
}
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<route lang="yaml">
|
||||
meta:
|
||||
layout: empty
|
||||
</route>
|
||||
@@ -1,343 +0,0 @@
|
||||
<template>
|
||||
<AppPaneLayout layout-id="mqtt">
|
||||
<template #primary>
|
||||
<div
|
||||
class="sticky top-0 z-10 flex flex-shrink-0 p-4 overflow-x-auto space-x-2 bg-primary"
|
||||
>
|
||||
<div class="inline-flex flex-1 space-x-2">
|
||||
<input
|
||||
id="mqtt-url"
|
||||
v-model="url"
|
||||
type="url"
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
class="w-full px-4 py-2 border rounded bg-primaryLight border-divider text-secondaryDark"
|
||||
:placeholder="t('mqtt.url')"
|
||||
:disabled="
|
||||
connectionState === 'CONNECTED' ||
|
||||
connectionState === 'CONNECTING'
|
||||
"
|
||||
@keyup.enter="isUrlValid ? toggleConnection() : null"
|
||||
/>
|
||||
<ButtonPrimary
|
||||
id="connect"
|
||||
:disabled="!isUrlValid"
|
||||
class="w-32"
|
||||
:label="
|
||||
connectionState === 'DISCONNECTED'
|
||||
? t('action.connect')
|
||||
: t('action.disconnect')
|
||||
"
|
||||
:loading="connectionState === 'CONNECTING'"
|
||||
@click="toggleConnection"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex space-x-2">
|
||||
<input
|
||||
id="mqtt-username"
|
||||
v-model="username"
|
||||
type="text"
|
||||
spellcheck="false"
|
||||
class="input"
|
||||
:placeholder="t('authorization.username')"
|
||||
/>
|
||||
<input
|
||||
id="mqtt-password"
|
||||
v-model="password"
|
||||
type="password"
|
||||
spellcheck="false"
|
||||
class="input"
|
||||
:placeholder="t('authorization.password')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #secondary>
|
||||
<RealtimeLog
|
||||
:title="t('mqtt.log')"
|
||||
:log="log"
|
||||
@delete="clearLogEntries()"
|
||||
/>
|
||||
</template>
|
||||
<template #sidebar>
|
||||
<div class="flex items-center justify-between p-4">
|
||||
<label for="pubTopic" class="font-semibold text-secondaryLight">
|
||||
{{ t("mqtt.topic") }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="flex px-4">
|
||||
<input
|
||||
id="pubTopic"
|
||||
v-model="pubTopic"
|
||||
class="input"
|
||||
:placeholder="t('mqtt.topic_name')"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex items-center justify-between p-4">
|
||||
<label for="mqtt-message" class="font-semibold text-secondaryLight">
|
||||
{{ t("mqtt.communication") }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="flex px-4 space-x-2">
|
||||
<input
|
||||
id="mqtt-message"
|
||||
v-model="message"
|
||||
class="input"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
:placeholder="t('mqtt.message')"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<ButtonPrimary
|
||||
id="publish"
|
||||
name="get"
|
||||
:disabled="!canPublish"
|
||||
:label="t('mqtt.publish')"
|
||||
@click="publish"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="flex items-center justify-between p-4 mt-4 border-t border-dividerLight"
|
||||
>
|
||||
<label for="subTopic" class="font-semibold text-secondaryLight">
|
||||
{{ t("mqtt.topic") }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="flex px-4 space-x-2">
|
||||
<input
|
||||
id="subTopic"
|
||||
v-model="subTopic"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
:placeholder="t('mqtt.topic_name')"
|
||||
spellcheck="false"
|
||||
class="input"
|
||||
/>
|
||||
<ButtonPrimary
|
||||
id="subscribe"
|
||||
name="get"
|
||||
:disabled="!canSubscribe"
|
||||
:label="
|
||||
subscriptionState ? t('mqtt.unsubscribe') : t('mqtt.subscribe')
|
||||
"
|
||||
reverse
|
||||
@click="toggleSubscription"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</AppPaneLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, onUnmounted, ref, watch } from "vue"
|
||||
import { debounce } from "lodash-es"
|
||||
import { MQTTConnection, MQTTError } from "~/helpers/realtime/MQTTConnection"
|
||||
import { useI18n } from "@composables/i18n"
|
||||
import { useToast } from "@composables/toast"
|
||||
import {
|
||||
useReadonlyStream,
|
||||
useStream,
|
||||
useStreamSubscriber,
|
||||
} from "@composables/stream"
|
||||
import {
|
||||
addMQTTLogLine,
|
||||
MQTTConn$,
|
||||
MQTTEndpoint$,
|
||||
MQTTLog$,
|
||||
setMQTTConn,
|
||||
setMQTTEndpoint,
|
||||
setMQTTLog,
|
||||
} from "~/newstore/MQTTSession"
|
||||
import RegexWorker from "@workers/regex?worker"
|
||||
|
||||
const t = useI18n()
|
||||
const toast = useToast()
|
||||
const { subscribeToStream } = useStreamSubscriber()
|
||||
|
||||
const url = useStream(MQTTEndpoint$, "", setMQTTEndpoint)
|
||||
const log = useStream(MQTTLog$, [], setMQTTLog)
|
||||
const socket = useStream(MQTTConn$, new MQTTConnection(), setMQTTConn)
|
||||
const connectionState = useReadonlyStream(
|
||||
socket.value.connectionState$,
|
||||
"DISCONNECTED"
|
||||
)
|
||||
const subscriptionState = useReadonlyStream(
|
||||
socket.value.subscriptionState$,
|
||||
false
|
||||
)
|
||||
|
||||
const isUrlValid = ref(true)
|
||||
const pubTopic = ref("")
|
||||
const subTopic = ref("")
|
||||
const message = ref("")
|
||||
const username = ref("")
|
||||
const password = ref("")
|
||||
|
||||
let worker: Worker
|
||||
|
||||
const canPublish = computed(
|
||||
() =>
|
||||
pubTopic.value !== "" &&
|
||||
message.value !== "" &&
|
||||
connectionState.value === "CONNECTED"
|
||||
)
|
||||
const canSubscribe = computed(
|
||||
() => subTopic.value !== "" && connectionState.value === "CONNECTED"
|
||||
)
|
||||
|
||||
const workerResponseHandler = ({
|
||||
data,
|
||||
}: {
|
||||
data: { url: string; result: boolean }
|
||||
}) => {
|
||||
if (data.url === url.value) isUrlValid.value = data.result
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
worker = new RegexWorker()
|
||||
worker.addEventListener("message", workerResponseHandler)
|
||||
|
||||
subscribeToStream(socket.value.event$, (event) => {
|
||||
switch (event?.type) {
|
||||
case "CONNECTING":
|
||||
log.value = [
|
||||
{
|
||||
payload: `${t("state.connecting_to", { name: url.value })}`,
|
||||
source: "info",
|
||||
color: "var(--accent-color)",
|
||||
ts: undefined,
|
||||
},
|
||||
]
|
||||
break
|
||||
|
||||
case "CONNECTED":
|
||||
log.value = [
|
||||
{
|
||||
payload: `${t("state.connected_to", { name: url.value })}`,
|
||||
source: "info",
|
||||
color: "var(--accent-color)",
|
||||
ts: Date.now(),
|
||||
},
|
||||
]
|
||||
toast.success(`${t("state.connected")}`)
|
||||
break
|
||||
|
||||
case "MESSAGE_SENT":
|
||||
addMQTTLogLine({
|
||||
prefix: `${event.message.topic}`,
|
||||
payload: event.message.message,
|
||||
source: "client",
|
||||
ts: Date.now(),
|
||||
})
|
||||
break
|
||||
|
||||
case "MESSAGE_RECEIVED":
|
||||
addMQTTLogLine({
|
||||
prefix: `${event.message.topic}`,
|
||||
payload: event.message.message,
|
||||
source: "server",
|
||||
ts: event.time,
|
||||
})
|
||||
break
|
||||
|
||||
case "SUBSCRIBED":
|
||||
addMQTTLogLine({
|
||||
payload: subscriptionState.value
|
||||
? `${t("state.subscribed_success", { topic: subTopic.value })}`
|
||||
: `${t("state.unsubscribed_success", { topic: subTopic.value })}`,
|
||||
source: "server",
|
||||
ts: event.time,
|
||||
})
|
||||
break
|
||||
|
||||
case "SUBSCRIPTION_FAILED":
|
||||
addMQTTLogLine({
|
||||
payload: subscriptionState.value
|
||||
? `${t("state.subscribed_failed", { topic: subTopic.value })}`
|
||||
: `${t("state.unsubscribed_failed", { topic: subTopic.value })}`,
|
||||
source: "server",
|
||||
ts: event.time,
|
||||
})
|
||||
break
|
||||
|
||||
case "ERROR":
|
||||
addMQTTLogLine({
|
||||
payload: getI18nError(event.error),
|
||||
source: "info",
|
||||
color: "#ff5555",
|
||||
ts: event.time,
|
||||
})
|
||||
break
|
||||
|
||||
case "DISCONNECTED":
|
||||
addMQTTLogLine({
|
||||
payload: t("state.disconnected_from", { name: url.value }).toString(),
|
||||
source: "info",
|
||||
color: "#ff5555",
|
||||
ts: event.time,
|
||||
})
|
||||
toast.error(`${t("state.disconnected")}`)
|
||||
break
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const debouncer = debounce(function () {
|
||||
worker.postMessage({ type: "ws", url: url.value })
|
||||
}, 1000)
|
||||
|
||||
watch(url, (newUrl) => {
|
||||
if (newUrl) debouncer()
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
worker.terminate()
|
||||
})
|
||||
|
||||
// METHODS
|
||||
const toggleConnection = () => {
|
||||
// If it is connecting:
|
||||
if (connectionState.value === "DISCONNECTED") {
|
||||
return socket.value.connect(url.value, username.value, password.value)
|
||||
}
|
||||
// Otherwise, it's disconnecting.
|
||||
socket.value.disconnect()
|
||||
}
|
||||
const publish = () => {
|
||||
socket.value?.publish(pubTopic.value, message.value)
|
||||
}
|
||||
const toggleSubscription = () => {
|
||||
if (subscriptionState.value) {
|
||||
socket.value.unsubscribe(subTopic.value)
|
||||
} else {
|
||||
socket.value.subscribe(subTopic.value)
|
||||
}
|
||||
}
|
||||
|
||||
const getI18nError = (error: MQTTError): string => {
|
||||
if (typeof error === "string") return error
|
||||
|
||||
switch (error.type) {
|
||||
case "CONNECTION_NOT_ESTABLISHED":
|
||||
return t("state.connection_lost").toString()
|
||||
case "SUBSCRIPTION_FAILED":
|
||||
return t("state.mqtt_subscription_failed", {
|
||||
topic: error.topic,
|
||||
}).toString()
|
||||
case "PUBLISH_ERROR":
|
||||
return t("state.publish_error", { topic: error.topic }).toString()
|
||||
case "CONNECTION_LOST":
|
||||
return t("state.connection_lost").toString()
|
||||
case "CONNECTION_FAILED":
|
||||
return t("state.connection_failed").toString()
|
||||
default:
|
||||
return t("state.disconnected_from", { name: url.value }).toString()
|
||||
}
|
||||
}
|
||||
const clearLogEntries = () => {
|
||||
log.value = []
|
||||
}
|
||||
</script>
|
||||
@@ -36,7 +36,7 @@
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"devDependencies": {
|
||||
"@hoppscotch/data": "workspace:^0.4.3",
|
||||
"@hoppscotch/data": "workspace:^0.4.4",
|
||||
"@hoppscotch/js-sandbox": "workspace:^2.0.0",
|
||||
"@relmify/jest-fp-ts": "^2.0.2",
|
||||
"@swc/core": "^1.2.181",
|
||||
|
||||
@@ -36,6 +36,8 @@ module.exports = {
|
||||
"vue/no-side-effects-in-computed-properties": "off",
|
||||
"import/no-named-as-default": "off",
|
||||
"import/no-named-as-default-member": "off",
|
||||
"@typescript-eslint/no-unused-vars":
|
||||
process.env.HOPP_LINT_FOR_PROD === "true" ? "error" : "warn",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"import/default": "off",
|
||||
|
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
|
Before Width: | Height: | Size: 571 B After Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 555 B After Width: | Height: | Size: 555 B |
|
Before Width: | Height: | Size: 378 B After Width: | Height: | Size: 378 B |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 311 B After Width: | Height: | Size: 311 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 504 B After Width: | Height: | Size: 504 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 398 B After Width: | Height: | Size: 398 B |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
570
packages/hoppscotch-common/assets/scss/styles.scss
Normal file
@@ -0,0 +1,570 @@
|
||||
* {
|
||||
@apply backface-hidden;
|
||||
@apply before:backface-hidden;
|
||||
@apply after:backface-hidden;
|
||||
@apply selection:bg-accentDark;
|
||||
@apply selection:text-accentContrast;
|
||||
}
|
||||
|
||||
:root {
|
||||
@apply antialiased;
|
||||
accent-color: var(--accent-color);
|
||||
font-variant-ligatures: common-ligatures;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
@apply bg-transparent;
|
||||
@apply border-solid border-l border-dividerLight border-t-0 border-b-0 border-r-0;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
@apply bg-divider bg-clip-content;
|
||||
@apply rounded-full;
|
||||
@apply border-solid border-transparent border-4;
|
||||
@apply hover:bg-dividerDark;
|
||||
@apply hover:bg-clip-content;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
@apply w-4;
|
||||
@apply h-0;
|
||||
}
|
||||
|
||||
input::placeholder,
|
||||
textarea::placeholder,
|
||||
.cm-placeholder {
|
||||
@apply text-secondary;
|
||||
@apply opacity-35;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
@apply text-secondaryDark;
|
||||
@apply font-medium;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
@apply bg-primary;
|
||||
@apply text-secondary text-body;
|
||||
@apply font-medium;
|
||||
@apply select-none;
|
||||
@apply overflow-x-hidden;
|
||||
@apply leading-body;
|
||||
animation: fade 300ms forwards;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-touch-callout: none;
|
||||
}
|
||||
|
||||
@keyframes fade {
|
||||
0% {
|
||||
@apply opacity-0;
|
||||
}
|
||||
|
||||
100% {
|
||||
@apply opacity-100;
|
||||
}
|
||||
}
|
||||
|
||||
.fade-enter-active,
|
||||
.fade-leave-active {
|
||||
@apply transition-opacity;
|
||||
}
|
||||
|
||||
.fade-enter-from,
|
||||
.fade-leave-to {
|
||||
@apply opacity-0;
|
||||
}
|
||||
|
||||
.slide-enter-active,
|
||||
.slide-leave-active {
|
||||
@apply transition;
|
||||
@apply duration-300;
|
||||
}
|
||||
|
||||
.slide-enter-from,
|
||||
.slide-leave-to {
|
||||
@apply transform;
|
||||
@apply translate-x-full;
|
||||
}
|
||||
|
||||
.bounce-enter-active,
|
||||
.bounce-leave-active {
|
||||
@apply transition;
|
||||
}
|
||||
|
||||
.bounce-enter-from,
|
||||
.bounce-leave-to {
|
||||
@apply transform;
|
||||
@apply scale-95;
|
||||
}
|
||||
|
||||
.svg-icons {
|
||||
@apply flex-shrink-0;
|
||||
@apply overflow-hidden;
|
||||
height: var(--line-height-body);
|
||||
width: var(--line-height-body);
|
||||
}
|
||||
|
||||
a {
|
||||
@apply inline-flex;
|
||||
@apply text-current;
|
||||
@apply no-underline;
|
||||
@apply transition;
|
||||
@apply leading-body;
|
||||
@apply focus:outline-none;
|
||||
|
||||
&.link {
|
||||
@apply items-center;
|
||||
@apply py-0.5 px-1;
|
||||
@apply -my-0.5 -mx-1;
|
||||
@apply text-accent;
|
||||
@apply rounded;
|
||||
@apply hover:text-accentDark;
|
||||
@apply focus-visible:ring;
|
||||
@apply focus-visible:ring-accent;
|
||||
@apply focus-visible:text-accentDark;
|
||||
}
|
||||
}
|
||||
|
||||
.cm-tooltip {
|
||||
.tippy-box {
|
||||
@apply shadow-none;
|
||||
@apply fixed;
|
||||
@apply inline-flex;
|
||||
@apply -mt-8;
|
||||
}
|
||||
}
|
||||
|
||||
.tippy-box[data-theme~="tooltip"] {
|
||||
@apply bg-tooltip;
|
||||
@apply border-solid border-tooltip;
|
||||
@apply rounded;
|
||||
@apply shadow;
|
||||
|
||||
.tippy-content {
|
||||
@apply flex;
|
||||
@apply text-tiny text-primary;
|
||||
@apply font-semibold;
|
||||
@apply py-1 px-2;
|
||||
@apply truncate;
|
||||
@apply leading-normal;
|
||||
@apply items-center;
|
||||
|
||||
kbd {
|
||||
@apply hidden;
|
||||
@apply font-sans;
|
||||
@apply bg-gray-500/45;
|
||||
@apply text-primaryLight;
|
||||
@apply rounded-sm;
|
||||
@apply px-1;
|
||||
@apply my-0 ml-1;
|
||||
@apply truncate;
|
||||
@apply sm:inline-flex;
|
||||
}
|
||||
|
||||
.env-icon {
|
||||
@apply transition;
|
||||
@apply inline-flex;
|
||||
@apply items-center;
|
||||
}
|
||||
}
|
||||
|
||||
.tippy-svg-arrow {
|
||||
svg:first-child {
|
||||
@apply fill-tooltip;
|
||||
}
|
||||
|
||||
svg:last-child {
|
||||
@apply fill-tooltip;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tippy-box[data-theme~="popover"] {
|
||||
@apply bg-popover;
|
||||
@apply border-solid border-dividerDark;
|
||||
@apply rounded;
|
||||
@apply shadow-lg;
|
||||
|
||||
.tippy-content {
|
||||
@apply flex flex-col;
|
||||
@apply max-h-56;
|
||||
@apply items-stretch;
|
||||
@apply overflow-y-auto;
|
||||
@apply text-secondary text-body;
|
||||
@apply p-2;
|
||||
@apply leading-normal;
|
||||
@apply focus:outline-none;
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
.tippy-svg-arrow {
|
||||
svg:first-child {
|
||||
@apply fill-dividerDark;
|
||||
}
|
||||
|
||||
svg:last-child {
|
||||
@apply fill-popover;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[data-v-tippy] {
|
||||
@apply flex flex-1;
|
||||
}
|
||||
|
||||
[interactive] > div {
|
||||
@apply flex flex-1;
|
||||
@apply h-full;
|
||||
}
|
||||
|
||||
hr {
|
||||
@apply border-b border-dividerLight;
|
||||
@apply my-2;
|
||||
}
|
||||
|
||||
.heading {
|
||||
@apply font-bold;
|
||||
@apply text-secondaryDark text-lg;
|
||||
@apply tracking-tight;
|
||||
}
|
||||
|
||||
.input,
|
||||
.select,
|
||||
.textarea {
|
||||
@apply flex;
|
||||
@apply w-full;
|
||||
@apply py-2 px-4;
|
||||
@apply bg-transparent;
|
||||
@apply rounded;
|
||||
@apply text-secondaryDark;
|
||||
@apply border border-divider;
|
||||
@apply focus-visible:border-dividerDark;
|
||||
}
|
||||
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
button {
|
||||
@apply truncate;
|
||||
@apply transition;
|
||||
@apply text-body;
|
||||
@apply leading-body;
|
||||
@apply focus:outline-none;
|
||||
@apply disabled:cursor-not-allowed;
|
||||
}
|
||||
|
||||
.input[type="file"],
|
||||
.input[type="radio"],
|
||||
#installPWA {
|
||||
@apply hidden;
|
||||
}
|
||||
|
||||
.floating-input ~ label {
|
||||
@apply absolute;
|
||||
@apply px-2 py-0.5;
|
||||
@apply m-2;
|
||||
@apply rounded;
|
||||
@apply transition;
|
||||
@apply origin-top-left;
|
||||
}
|
||||
|
||||
.floating-input:focus-within ~ label,
|
||||
.floating-input:not(:placeholder-shown) ~ label {
|
||||
@apply bg-primary;
|
||||
@apply transform;
|
||||
@apply origin-top-left;
|
||||
@apply scale-75;
|
||||
@apply translate-x-1 -translate-y-4;
|
||||
}
|
||||
|
||||
.floating-input:focus-within ~ label {
|
||||
@apply text-secondaryDark;
|
||||
}
|
||||
|
||||
.floating-input ~ .end-actions {
|
||||
@apply absolute;
|
||||
@apply right-0.2;
|
||||
@apply inset-y-0;
|
||||
@apply flex;
|
||||
@apply items-center;
|
||||
}
|
||||
|
||||
.floating-input:has(~ .end-actions) {
|
||||
@apply pr-12;
|
||||
}
|
||||
|
||||
pre.ace_editor {
|
||||
@apply font-mono;
|
||||
@apply resize-none;
|
||||
@apply z-0;
|
||||
}
|
||||
|
||||
.select {
|
||||
@apply appearance-none;
|
||||
@apply cursor-pointer;
|
||||
|
||||
&::-ms-expand {
|
||||
@apply hidden;
|
||||
}
|
||||
}
|
||||
|
||||
.select-wrapper {
|
||||
@apply flex flex-1;
|
||||
@apply relative;
|
||||
@apply after:absolute;
|
||||
@apply after:flex;
|
||||
@apply after:inset-y-0;
|
||||
@apply after:items-center;
|
||||
@apply after:justify-center;
|
||||
@apply after:pointer-events-none;
|
||||
@apply after:font-icon;
|
||||
@apply after:text-secondaryLight;
|
||||
@apply after:right-3;
|
||||
@apply after:content-["\e313"];
|
||||
}
|
||||
|
||||
.info-response {
|
||||
@apply text-pink-500;
|
||||
}
|
||||
|
||||
.success-response {
|
||||
@apply text-green-500;
|
||||
}
|
||||
|
||||
.redir-response {
|
||||
@apply text-yellow-500;
|
||||
}
|
||||
|
||||
.cl-error-response {
|
||||
@apply text-red-500;
|
||||
}
|
||||
|
||||
.sv-error-response {
|
||||
@apply text-red-600;
|
||||
}
|
||||
|
||||
.missing-data-response {
|
||||
@apply text-secondaryLight;
|
||||
}
|
||||
|
||||
.toasted-container {
|
||||
@apply max-w-md;
|
||||
|
||||
.toasted {
|
||||
&.toasted-primary {
|
||||
@apply px-4 py-2;
|
||||
@apply bg-tooltip;
|
||||
@apply border-secondaryDark;
|
||||
@apply text-primary text-body;
|
||||
@apply justify-between;
|
||||
@apply shadow-lg;
|
||||
@apply font-semibold;
|
||||
@apply transition;
|
||||
@apply leading-body;
|
||||
@apply sm:rounded;
|
||||
@apply sm:border;
|
||||
|
||||
.action {
|
||||
@apply relative;
|
||||
@apply flex flex-shrink-0;
|
||||
@apply text-body;
|
||||
@apply px-4;
|
||||
@apply my-1;
|
||||
@apply ml-auto;
|
||||
@apply normal-case;
|
||||
@apply font-semibold;
|
||||
@apply leading-body;
|
||||
@apply tracking-normal;
|
||||
@apply rounded;
|
||||
@apply last:ml-4;
|
||||
@apply sm:ml-8;
|
||||
@apply before:absolute;
|
||||
@apply before:bg-current;
|
||||
@apply before:opacity-10;
|
||||
@apply before:inset-0;
|
||||
@apply before:transition;
|
||||
@apply before:content-DEFAULT;
|
||||
@apply hover:no-underline;
|
||||
@apply hover:before:opacity-20;
|
||||
}
|
||||
}
|
||||
|
||||
&.info {
|
||||
@apply bg-accent;
|
||||
@apply text-accentContrast;
|
||||
@apply border-accentDark;
|
||||
}
|
||||
|
||||
&.error {
|
||||
@apply bg-red-200;
|
||||
@apply text-red-800;
|
||||
@apply border-red-400;
|
||||
}
|
||||
|
||||
&.success {
|
||||
@apply bg-green-200;
|
||||
@apply text-green-800;
|
||||
@apply border-green-400;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.smart-splitter .splitpanes__splitter {
|
||||
@apply relative;
|
||||
@apply bg-primaryLight;
|
||||
@apply before:absolute;
|
||||
@apply before:inset-0;
|
||||
@apply before:bg-accentLight;
|
||||
@apply before:opacity-0;
|
||||
@apply before:z-20;
|
||||
@apply before:transition;
|
||||
@apply before:content-DEFAULT;
|
||||
@apply after:absolute;
|
||||
@apply after:inset-0;
|
||||
@apply after:z-20;
|
||||
@apply after:transition;
|
||||
@apply after:flex;
|
||||
@apply after:items-center;
|
||||
@apply after:justify-center;
|
||||
@apply after:text-dividerDark;
|
||||
@apply after:font-icon;
|
||||
@apply hover:before:opacity-100;
|
||||
@apply hover:after:text-accentDark;
|
||||
}
|
||||
|
||||
.no-splitter .splitpanes__splitter {
|
||||
@apply relative;
|
||||
@apply bg-primaryLight;
|
||||
}
|
||||
|
||||
.smart-splitter.splitpanes--vertical > .splitpanes__splitter {
|
||||
@apply w-1;
|
||||
@apply before:-left-0.5;
|
||||
@apply before:-right-0.5;
|
||||
@apply before:h-full;
|
||||
@apply after:content-["\e5d4"];
|
||||
}
|
||||
|
||||
.smart-splitter.splitpanes--horizontal > .splitpanes__splitter {
|
||||
@apply h-1;
|
||||
@apply before:-top-0.5;
|
||||
@apply before:-bottom-0.5;
|
||||
@apply before:w-full;
|
||||
@apply after:content-["\e5d3"];
|
||||
}
|
||||
|
||||
.no-splitter.splitpanes--vertical > .splitpanes__splitter {
|
||||
@apply w-0.5;
|
||||
@apply pointer-events-none;
|
||||
}
|
||||
|
||||
.no-splitter.splitpanes--horizontal > .splitpanes__splitter {
|
||||
@apply h-0.5;
|
||||
@apply pointer-events-none;
|
||||
}
|
||||
|
||||
.cm-focused {
|
||||
@apply select-auto;
|
||||
@apply outline-none #{!important};
|
||||
|
||||
.cm-activeLine {
|
||||
@apply bg-primaryLight;
|
||||
}
|
||||
|
||||
.cm-activeLineGutter {
|
||||
@apply bg-primaryDark;
|
||||
}
|
||||
}
|
||||
|
||||
.cm-editor {
|
||||
.cm-line::selection {
|
||||
@apply bg-accentDark #{!important};
|
||||
@apply text-accentContrast #{!important};
|
||||
}
|
||||
|
||||
.cm-line ::selection {
|
||||
@apply bg-accentDark #{!important};
|
||||
@apply text-accentContrast #{!important};
|
||||
}
|
||||
}
|
||||
|
||||
.shortcut-key {
|
||||
@apply inline-flex;
|
||||
@apply font-sans;
|
||||
@apply text-tiny;
|
||||
@apply bg-divider;
|
||||
@apply rounded;
|
||||
@apply ml-2;
|
||||
@apply px-1;
|
||||
@apply min-w-5;
|
||||
@apply min-h-5;
|
||||
@apply items-center;
|
||||
@apply justify-center;
|
||||
@apply border border-dividerDark;
|
||||
@apply shadow-sm;
|
||||
@apply <sm:hidden;
|
||||
}
|
||||
|
||||
.capitalize-first {
|
||||
@apply first-letter:capitalize;
|
||||
}
|
||||
|
||||
details {
|
||||
@apply select-none;
|
||||
}
|
||||
|
||||
details summary::-webkit-details-marker {
|
||||
@apply hidden;
|
||||
}
|
||||
|
||||
details summary .indicator {
|
||||
@apply transition;
|
||||
}
|
||||
|
||||
details[open] summary .indicator {
|
||||
@apply transform;
|
||||
@apply rotate-90;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
main {
|
||||
margin-bottom: env(safe-area-inset-bottom);
|
||||
}
|
||||
}
|
||||
|
||||
.env-highlight {
|
||||
@apply text-accentContrast;
|
||||
|
||||
&.env-found {
|
||||
@apply bg-accentDark;
|
||||
@apply hover:bg-accent;
|
||||
}
|
||||
|
||||
&.env-not-found {
|
||||
@apply bg-red-500;
|
||||
@apply hover:bg-red-600;
|
||||
}
|
||||
}
|
||||
|
||||
#nprogress .bar {
|
||||
@apply bg-accent #{!important};
|
||||
}
|
||||
|
||||
.color-picker[type="color"] {
|
||||
@apply appearance-none;
|
||||
}
|
||||
|
||||
.color-picker[type="color"]::-webkit-color-swatch-wrapper {
|
||||
@apply rounded;
|
||||
@apply p-0;
|
||||
}
|
||||
|
||||
.color-picker[type="color"]::-webkit-color-swatch {
|
||||
@apply rounded;
|
||||
@apply border-0;
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
overwrite: true
|
||||
schema: https://api.hoppscotch.io/graphql
|
||||
schema:
|
||||
- ${VITE_BACKEND_GQL_URL}
|
||||
generates:
|
||||
src/helpers/backend/graphql.ts:
|
||||
documents: "src/**/*.graphql"
|
||||
plugins:
|
||||
- add:
|
||||
content: >
|
||||
// Auto-generated file (DO NOT EDIT!!!), refer gql-codegen.yml
|
||||
/* eslint-disable */
|
||||
// Auto-generated file (DO NOT EDIT!!!), refer gql-codegen.yml
|
||||
- typescript
|
||||
- typescript-operations
|
||||
- typed-document-node
|
||||
@@ -78,12 +78,24 @@
|
||||
"iso": "he-HE",
|
||||
"name": "עִברִית"
|
||||
},
|
||||
{
|
||||
"code": "hi",
|
||||
"file": "hi.json",
|
||||
"iso": "hi-HI",
|
||||
"name": "हिन्दी"
|
||||
},
|
||||
{
|
||||
"code": "hu",
|
||||
"file": "hu.json",
|
||||
"iso": "hu-HU",
|
||||
"name": "Magyar"
|
||||
},
|
||||
{
|
||||
"code": "id",
|
||||
"file": "id.json",
|
||||
"iso": "id",
|
||||
"name": "Indonesian"
|
||||
},
|
||||
{
|
||||
"code": "it",
|
||||
"file": "it.json",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Maak alles skoon",
|
||||
"close": "Close",
|
||||
"connect": "Koppel",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Kopieer",
|
||||
"delete": "Vee uit",
|
||||
"disconnect": "Ontkoppel",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Redigeer",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Gaan terug",
|
||||
"group_by": "Group by",
|
||||
"label": "Etiket",
|
||||
"learn_more": "Leer meer",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Soek",
|
||||
"send": "Stuur",
|
||||
"start": "Begin",
|
||||
"starting": "Starting",
|
||||
"stop": "Stop",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "Span is leeg",
|
||||
"parameters": "Hierdie versoek het geen parameters nie",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "Protokolle is leeg",
|
||||
"schema": "Koppel aan 'n GraphQL -eindpunt",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Spannaam leeg",
|
||||
"teams": "Spanne is leeg",
|
||||
"tests": "Daar is geen toetse vir hierdie versoek nie"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Bewerk omgewing",
|
||||
"invalid_name": "Gee 'n geldige naam vir die omgewing",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Nuwe omgewing",
|
||||
"no_environment": "Geen omgewing nie",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Kies omgewing",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Omgewings",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Veranderlike lys"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "Dit lyk nie asof hierdie blaaier ondersteuning vir bedieners gestuurde geleenthede het nie.",
|
||||
"check_console_details": "Kyk na die konsole -log vir meer inligting.",
|
||||
"curl_invalid_format": "cURL is nie behoorlik geformateer nie",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Leë versoeknaam",
|
||||
"f12_details": "(F12 vir meer inligting)",
|
||||
"gql_prettify_invalid_query": "Kon nie 'n ongeldige navraag mooi maak nie, los sintaksisfoute op en probeer weer",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Teken in met GitHub om 'n geheime idee te skep",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Vouer geskep",
|
||||
"edit": "Wysig gids",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Skema",
|
||||
"subscriptions": "Inskrywings"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Installeer toep",
|
||||
"login": "Teken aan",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Invoer uitvoer"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Kommunikasie",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Meld",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Boodskap",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publiseer",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Teken in",
|
||||
"topic": "Onderwerp",
|
||||
"topic_name": "Onderwerpnaam",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Versoek naam",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Navraagparameters",
|
||||
"parameters": "Grense",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Aksent kleur",
|
||||
"account": "Rekening",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Pas u rekeninginstellings aan.",
|
||||
"account_email_description": "Jou primêre e -posadres.",
|
||||
"account_name_description": "Dit is u vertoonnaam.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Verander lettergrootte",
|
||||
"choose_language": "Kies taal",
|
||||
"dark_mode": "Donker",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Eksperimente",
|
||||
"experiments_notice": "Dit is 'n versameling eksperimente waaraan ons werk, wat nuttig, pret of beide kan wees. Hulle is nie finaal nie en is moontlik nie stabiel nie, dus moenie paniekerig raak as iets te vreemd gebeur nie. Skakel net die ding uit. Grappies eenkant,",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Stuur versoek",
|
||||
"title": "Versoek"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScript -kode",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "امسح الكل",
|
||||
"close": "Close",
|
||||
"connect": "الاتصال",
|
||||
"connecting": "Connecting",
|
||||
"copy": "نسخ",
|
||||
"delete": "حذف",
|
||||
"disconnect": "قطع الاتصال",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "كرر",
|
||||
"edit": "يحرر",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "عد",
|
||||
"group_by": "Group by",
|
||||
"label": "ملصق",
|
||||
"learn_more": "اقرأ أكثر",
|
||||
"less": "اقل",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "بحث",
|
||||
"send": "ارسل",
|
||||
"start": "ابدأ",
|
||||
"starting": "Starting",
|
||||
"stop": "قف",
|
||||
"to_close": "لإغلاء",
|
||||
"to_navigate": "للإنتقال",
|
||||
@@ -77,7 +80,7 @@
|
||||
"status": "حالة",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "الشروط والخصوصية",
|
||||
"twitter": "تويتر",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "اكتب أمرًا أو ابحث ...",
|
||||
"we_use_cookies": "نحن نستخدم ملفات تعريف الارتباط",
|
||||
"whats_new": "ما هو الجديد؟",
|
||||
@@ -142,12 +145,12 @@
|
||||
"sync": "هل أنت متأكد أنك تريد مزامنة مساحة العمل هذه؟"
|
||||
},
|
||||
"count": {
|
||||
"header": "رأس {عدد}",
|
||||
"message": "الرسالة {عدد}",
|
||||
"header": "رأس {count}",
|
||||
"message": "الرسالة {count}",
|
||||
"parameter": "المعلمة {count}",
|
||||
"protocol": "البروتوكول {عدد}",
|
||||
"value": "القيمة {عدد}",
|
||||
"variable": "متغير {عدد}"
|
||||
"protocol": "البروتوكول {count}",
|
||||
"value": "القيمة {count}",
|
||||
"variable": "متغير {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "توليد الوثائق",
|
||||
@@ -172,6 +175,7 @@
|
||||
"protocols": "البروتوكولات فارغة",
|
||||
"schema": "اتصل بنقطة نهاية GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "اسم الفريق فارغ",
|
||||
"teams": "الفرق فارغة",
|
||||
"tests": "لا توجد اختبارات لهذا الطلب"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "حذف بيئة العمل",
|
||||
"edit": "تحرير البيئة",
|
||||
"invalid_name": "الرجاء تقديم اسم صالح للبيئة",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "بيئة جديدة",
|
||||
"no_environment": "لا بيئة",
|
||||
"no_environment_description": "لم يتم اختيار أي بيئة عمل. اختر ما تريد فعله بالمتغيرات التالية.",
|
||||
"select": "حدد البيئة",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "البيئات",
|
||||
"updated": "تحديث بيئة العمل",
|
||||
"variable_list": "قائمة متغيرة"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "يبدو أن هذا المستعرض لا يدعم أحداث إرسال الخادم.",
|
||||
"check_console_details": "تحقق من سجل وحدة التحكم للحصول على التفاصيل.",
|
||||
"curl_invalid_format": "لم يتم تنسيق cURL بشكل صحيح",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "اسم الطلب فارغ",
|
||||
"f12_details": "(للحصول على تفاصيل F12)",
|
||||
"gql_prettify_invalid_query": "تعذر تحسين استعلام غير صالح وحل أخطاء بنية الاستعلام وحاول مرة أخرى",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "تسجيل الدخول باستخدام GitHub لإنشاء جوهر سري",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "تم إنشاء المجلد",
|
||||
"edit": "تحرير المجلد",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "مخطط",
|
||||
"subscriptions": "الاشتراكات"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "تثبيت التطبيق",
|
||||
"login": "تسجيل الدخول",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "استيراد و تصدير"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "تواصل",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "سجل",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "رسالة",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "ينشر",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "يشترك",
|
||||
"topic": "عنوان",
|
||||
"topic_name": "اسم الموضوع",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "إعدادات التطبيق",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "محرر",
|
||||
"editor_description": "المحررين يمكنهم اضافة و تعديل و حذف الطلبات.",
|
||||
"email_verification_mail": "تم إرسال رابط التحقق إلى بريدك الإلكتروني. الرجاء الضغط على الرابط لتأكيد بريدك الإلكتروني.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "اسم الطلب",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "معلمات الاستعلام",
|
||||
"parameters": "حدود",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "لون التمييز",
|
||||
"account": "حساب",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "تخصيص إعدادات حسابك.",
|
||||
"account_email_description": "عنوان بريدك الإلكتروني الأساسي.",
|
||||
"account_name_description": "هذا هو اسم العرض الخاص بك.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "تغيير حجم الخط",
|
||||
"choose_language": "اختر اللغة",
|
||||
"dark_mode": "داكن",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "توسيع التنقل",
|
||||
"experiments": "التجارب",
|
||||
"experiments_notice": "هذه مجموعة من التجارب التي نعمل عليها والتي قد تكون مفيدة ، أو ممتعة ، أو كليهما ، أو لا شيء. إنها ليست نهائية وقد لا تكون مستقرة ، لذلك إذا حدث شيء غريب للغاية ، فلا داعي للذعر. فقط قم بإيقاف تشغيل الشيء. النكات جانبا،",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "ارسل طلب",
|
||||
"title": "طلب"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "انتقل الى الوضع الأسود",
|
||||
"dark": "انتقل الى الوضع الليلي",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "لقد أرسلنا رابط دعوة لجميع المدعوين!",
|
||||
"we_sent_invite_link_description": "اطلب من جميع المدعوين التحقق من صندوق الوارد الخاص بهم. انقر على الرابط للانضمام إلى الفريق."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "فشل التجربة",
|
||||
"javascript_code": "كود جافا سكريبت",
|
||||
717
packages/hoppscotch-common/locales/ca.json
Normal file
@@ -0,0 +1,717 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "Autoscroll",
|
||||
"cancel": "Cancel·lar",
|
||||
"choose_file": "Triar un fitxer",
|
||||
"clear": "Netejar",
|
||||
"clear_all": "Neteja-ho tot",
|
||||
"close": "Close",
|
||||
"connect": "Connectar",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Copiar",
|
||||
"delete": "Eliminar",
|
||||
"disconnect": "Desconnectar",
|
||||
"dismiss": "Tancar",
|
||||
"dont_save": "No guardar",
|
||||
"download_file": "Descarregar l'arxiu",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicar",
|
||||
"edit": "Editar",
|
||||
"filter": "Filtrar resposta",
|
||||
"go_back": "Tornar",
|
||||
"group_by": "Group by",
|
||||
"label": "Etiquetar",
|
||||
"learn_more": "Aprèn més",
|
||||
"less": "Menys",
|
||||
"more": "Més",
|
||||
"new": "Novetat",
|
||||
"no": "No",
|
||||
"open_workspace": "Obrir espai de treball",
|
||||
"paste": "Enganxar",
|
||||
"prettify": "Fes-ho bonic",
|
||||
"remove": "Eliminar",
|
||||
"restore": "Restaurar",
|
||||
"save": "Guardar",
|
||||
"scroll_to_bottom": "Desplaceu-vos cap avall",
|
||||
"scroll_to_top": "Desplaceu-vos cap a dalt",
|
||||
"search": "Cercar",
|
||||
"send": "Enviar",
|
||||
"start": "Començar",
|
||||
"starting": "Starting",
|
||||
"stop": "Aturar",
|
||||
"to_close": "Tancar",
|
||||
"to_navigate": "Navegar",
|
||||
"to_select": "Seleccionar",
|
||||
"turn_off": "Apagar",
|
||||
"turn_on": "Encendre",
|
||||
"undo": "Desfés",
|
||||
"yes": "Sí"
|
||||
},
|
||||
"add": {
|
||||
"new": "Afegir nou",
|
||||
"star": "Afegir estrella"
|
||||
},
|
||||
"app": {
|
||||
"chat_with_us": "Xateja amb nosaltres",
|
||||
"contact_us": "Contacta amb nosaltres",
|
||||
"copy": "Copiar",
|
||||
"copy_user_id": "Copiar User Auth Token",
|
||||
"developer_option": "Opcions de desenvolupador",
|
||||
"developer_option_description": "Eines de desenvolupament que ajuden en el desenvolupament i manteniment de Hoppscotch.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Documentació",
|
||||
"github": "GitHub",
|
||||
"help": "Ajuda & comentaris",
|
||||
"home": "Inici",
|
||||
"invite": "Convidar",
|
||||
"invite_description": "Hoppscotch és un ecosistema de desenvolupament d'API de codi obert. Hem dissenyat una interfície senzilla i intuïtiva per crear i gestionar les vostres API. Hoppscotch és una eina que us ajuda a construir, provar, documentar i compartir les vostres API.",
|
||||
"invite_your_friends": "Convida els teus amics",
|
||||
"join_discord_community": "Uniu-vos a la nostra comunitat Discord",
|
||||
"keyboard_shortcuts": "Dreceres de teclat",
|
||||
"name": "Hoppscotch",
|
||||
"new_version_found": "S'ha trobat una nova versió. Refresca per actualitzar.",
|
||||
"options": "Opcions",
|
||||
"proxy_privacy_policy": "Política de privadesa del servidor intermediari (proxy)",
|
||||
"reload": "Recarregar",
|
||||
"search": "Cercar",
|
||||
"share": "Compartir",
|
||||
"shortcuts": "Dreceres",
|
||||
"spotlight": "Destacar",
|
||||
"status": "Estat",
|
||||
"status_description": "Comproveu l'estat de la web",
|
||||
"terms_and_privacy": "Condicions i privadesa",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Escriviu una comanda o cerqueu...",
|
||||
"we_use_cookies": "Utilitzem cookies",
|
||||
"whats_new": "Què hi ha de nou?",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "El compte existeix amb credencials diferents - Inicieu sessió per enllaçar els dos comptes",
|
||||
"all_sign_in_options": "Totes les opcions d'inici de sessió",
|
||||
"continue_with_email": "Continuar amb el correu electrònic",
|
||||
"continue_with_github": "Continuar amb GitHub",
|
||||
"continue_with_google": "Continuar amb Google",
|
||||
"continue_with_microsoft": "Continuar amb Microsoft",
|
||||
"email": "Correu electrònic",
|
||||
"logged_out": "Sessió tancada",
|
||||
"login": "Iniciar Sessió",
|
||||
"login_success": "S'ha iniciat la sessió correctament",
|
||||
"login_to_hoppscotch": "Iniciar la sessió a Hoppscotch",
|
||||
"logout": "Tancar sessió",
|
||||
"re_enter_email": "Re-escriu el teu correu",
|
||||
"send_magic_link": "Envia un enllaç màgic",
|
||||
"sync": "Sincronitzar",
|
||||
"we_sent_magic_link": "T'hem enviat un enllaç màgic!",
|
||||
"we_sent_magic_link_description": "Comprova la vostra safata d'entrada - T'hem enviat un correu electrònic a {email}. Conté un enllaç màgic que us permetrà iniciar la sessió."
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "Generar Token",
|
||||
"include_in_url": "Inclou a l'URL",
|
||||
"learn": "Aprèn com",
|
||||
"pass_key_by": "Passar per",
|
||||
"password": "Contrasenya",
|
||||
"token": "Token",
|
||||
"type": "Tipus d'autorització",
|
||||
"username": "Nom d'usuari"
|
||||
},
|
||||
"collection": {
|
||||
"created": "Col·lecció creada",
|
||||
"edit": "Editar la col·lecció",
|
||||
"invalid_name": "Proporcioneu un nom vàlid per a la col·lecció",
|
||||
"my_collections": "Les meves col·leccions",
|
||||
"name": "La meva nova col·lecció",
|
||||
"name_length_insufficient": "El nom de la col·lecció ha de tenir almenys 3 caràcters",
|
||||
"new": "Nova col · lecció",
|
||||
"renamed": "S'ha canviat el nom de la col·lecció",
|
||||
"request_in_use": "Request in use",
|
||||
"save_as": "Guardar com",
|
||||
"select": "Seleccionar una col·lecció",
|
||||
"select_location": "Seleccionar la ubicació",
|
||||
"select_team": "Seleccionar un equip",
|
||||
"team_collections": "Col·leccions per equips"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "Està segur que vol deixar aquest equip?",
|
||||
"logout": "Està segur que vol tancar la sessió?",
|
||||
"remove_collection": "Està segur que vol suprimir permanentment aquesta col·lecció?",
|
||||
"remove_environment": "Està segur que vol suprimir permanentment aquest entorn?",
|
||||
"remove_folder": "Està segur que vol suprimir definitivament aquesta carpeta?",
|
||||
"remove_history": "Està segur que vol suprimir definitivament tot l'historial?",
|
||||
"remove_request": "Està segur que vol suprimir definitivament aquesta sol·licitud?",
|
||||
"remove_team": "Està segur que vol suprimir aquest equip?",
|
||||
"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.",
|
||||
"sync": "Està segur que vol sincronitzar aquest espai de treball?"
|
||||
},
|
||||
"count": {
|
||||
"header": "Capçalera {count}",
|
||||
"message": "Missatges {count}",
|
||||
"parameter": "Paràmetre {count}",
|
||||
"protocol": "Protocol {count}",
|
||||
"value": "Valor {count}",
|
||||
"variable": "Variable {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "Generar documentació",
|
||||
"generate_message": "Importeu qualsevol col·lecció Hoppscotch per generar documentació de l'API sobre la marxa."
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "Aquesta sol·licitud no utilitza cap autorització",
|
||||
"body": "Aquesta sol·licitud no té cap cos",
|
||||
"collection": "La col·lecció està buida",
|
||||
"collections": "Les col·leccions estan buides",
|
||||
"documentation": "Connecta't a un punt final de GraphQL per veure la documentació",
|
||||
"endpoint": "L'endpoint no pot estar buit",
|
||||
"environments": "Els entorns estan buits",
|
||||
"folder": "La carpeta està buida",
|
||||
"headers": "Aquesta sol·licitud no té cap capçalera",
|
||||
"history": "L'historial està buit",
|
||||
"invites": "La llista d'invitació està buida",
|
||||
"members": "L'equip està buit",
|
||||
"parameters": "Aquesta sol·licitud no té cap paràmetre",
|
||||
"pending_invites": "No hi ha invitacions pendents per a aquest equip",
|
||||
"profile": "Inicia sessió per veure el vostre perfil",
|
||||
"protocols": "Els protocols estan buits",
|
||||
"schema": "Connecta't a un endpoint GraphQL",
|
||||
"shortcodes": "Els shortcodes estan buits",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "El nom de l'equip és buit",
|
||||
"teams": "Els equips estan buits",
|
||||
"tests": "No hi ha proves per a aquesta sol·licitud"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "Afegir-ho a Global",
|
||||
"added": "Addició d'entorn",
|
||||
"create_new": "Crea un entorn nou",
|
||||
"created": "Etorn creat",
|
||||
"deleted": "Entorn eliminat",
|
||||
"edit": "Editar l'entorn",
|
||||
"invalid_name": "Proporcioneu un nom vàlid per a l'entorn",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "Les variables d'entorn niuades estan limitades a 10 nivells",
|
||||
"new": "Nou entorn",
|
||||
"no_environment": "Sense entorn",
|
||||
"no_environment_description": "No s'ha seleccionat cap entorn. Trieu què voleu fer amb les variables següents.",
|
||||
"select": "Seleccioneu un entorn",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Entorns",
|
||||
"updated": "Entorn actualitzat",
|
||||
"variable_list": "Llista de variables"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "Sembla que aquest navegador no és compatible amb els Esdeveniments Enviats pel Servidor (Server Sent Events).",
|
||||
"check_console_details": "Consulta el registre de la consola per obtenir més informació.",
|
||||
"curl_invalid_format": "cURL no està formatat correctament",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Nom de la sol·licitud buida",
|
||||
"f12_details": "(F12 per obtenir més informació)",
|
||||
"gql_prettify_invalid_query": "No s'ha pogut definir una consulta no vàlida, resoldre els errors de sintaxi de la consulta i tornar-ho a provar",
|
||||
"incomplete_config_urls": "Configuració d'URLs incompleta",
|
||||
"incorrect_email": "Correu electrònic incorrecte",
|
||||
"invalid_link": "Enllaç invalid",
|
||||
"invalid_link_description": "L'enllaç en que heu fet clic no és vàlid o ha caducat.",
|
||||
"json_parsing_failed": "JSON no vàlid",
|
||||
"json_prettify_invalid_body": "No s'ha pogut personalitzar un cos no vàlid, resol els errors de sintaxi json i tornar-ho a provar",
|
||||
"network_error": "Sembla que hi ha un error de xarxa. Si us plau torna-ho a provar.",
|
||||
"network_fail": "No s'ha pogut enviar la sol·licitud",
|
||||
"no_duration": "Sense durada",
|
||||
"no_results_found": "No s'ha trobat cap coincidència",
|
||||
"page_not_found": "This page could not be found",
|
||||
"script_fail": "No s'ha pogut executar l'script de sol·licitud prèvia",
|
||||
"something_went_wrong": "Alguna cosa ha anat malament",
|
||||
"test_script_fail": "No s'ha pogut executar l'script posterior a la sol·licitud"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "Exporta com a JSON",
|
||||
"create_secret_gist": "Crear un Gist secret",
|
||||
"gist_created": "Gist creat",
|
||||
"require_github": "Inicieu la sessió amb GitHub per crear un Gisst secret",
|
||||
"title": "Exportar"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "S'ha creat la carpeta",
|
||||
"edit": "Editar la carpeta",
|
||||
"invalid_name": "Proporcioneu un nom per a la carpeta",
|
||||
"name_length_insufficient": "El nom de la carpeta ha de tenir almenys 3 caràcters",
|
||||
"new": "Carpeta nova",
|
||||
"renamed": "S'ha canviat el nom de la carpeta"
|
||||
},
|
||||
"graphql": {
|
||||
"mutations": "Mutacions",
|
||||
"schema": "Esquema",
|
||||
"subscriptions": "Subscripcions"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Instal·la l'aplicació",
|
||||
"login": "Iniciar Sessió",
|
||||
"save_workspace": "Desa el meu espai de treball"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": "La capçalera de l'autorització es generarà automàticament quan envieu la sol·licitud.",
|
||||
"generate_documentation_first": "Genereu documentació primer",
|
||||
"network_fail": "No es pot arribar al punt final de l'API. Comproveu la connexió de xarxa i torneu-ho a provar.",
|
||||
"offline": "Sembla que estàs fora de línia. És possible que les dades d'aquest espai de treball no estiguin actualitzades.",
|
||||
"offline_short": "Sembla que estàs fora de línia.",
|
||||
"post_request_tests": "Els scripts de prova s'escriuen en JavaScript i s'executen després de rebre la resposta.",
|
||||
"pre_request_script": "Els scripts de sol·licitud prèvia s'escriuen en JavaScript i s'executen abans que s'enviï la sol·licitud.",
|
||||
"script_fail": "Sembla que hi ha un error a l'script de sol·licitud prèvia. Comproveu l'error a continuació i solucioneu l'script en conseqüència.",
|
||||
"test_script_fail": "Sembla que hi ha un error amb l'script de prova. Corregiu els errors i torneu a fer proves.",
|
||||
"tests": "Escriviu un script de prova per automatitzar la depuració."
|
||||
},
|
||||
"hide": {
|
||||
"collection": "Redueix el tauler de col·lecció",
|
||||
"more": "Amagar més",
|
||||
"preview": "Amagar la previsualització",
|
||||
"sidebar": "Amagar la barra lateral"
|
||||
},
|
||||
"import": {
|
||||
"collections": "Importar col·leccions",
|
||||
"curl": "Importar cURL",
|
||||
"failed": "La importació ha fallat",
|
||||
"from_gist": "Importar des de Gist",
|
||||
"from_gist_description": "Importar des de l'URL de Gist",
|
||||
"from_insomnia": "Importar des d'Insomnia",
|
||||
"from_insomnia_description": "Importar des de la col·lecció d'Insomnia",
|
||||
"from_json": "Importar des de Hoppscotch",
|
||||
"from_json_description": "Importar des del fitxer de col·lecció Hoppscotch",
|
||||
"from_my_collections": "Importar des de Les meves Col·leccions",
|
||||
"from_my_collections_description": "Importar des del fitxer de Les meves Col·leccions",
|
||||
"from_openapi": "Importar des de OpenAPI",
|
||||
"from_openapi_description": "Importa des del fitxer d'especificacions OpenAPI (YML/JSON)",
|
||||
"from_postman": "Importar des de Postman",
|
||||
"from_postman_description": "Importar des de la col·lecció de Postman",
|
||||
"from_url": "Importar des de l'URL",
|
||||
"gist_url": "Introduïu l'URL del Gist",
|
||||
"import_from_url_invalid_fetch": "No s'han pogut obtenir dades de l'URL",
|
||||
"import_from_url_invalid_file_format": "S'ha produït un error en importar les col·leccions",
|
||||
"import_from_url_invalid_type": "Tipus no compatible. Els valors acceptats són 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Col·leccions importades",
|
||||
"json_description": "Importar col·leccions des d'un fitxer JSON de col·leccions Hoppscotch",
|
||||
"title": "Importació"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Amagar o Ampliar Col·leccions",
|
||||
"collapse_sidebar": "Amagar o Ampliar la barra lateral",
|
||||
"column": "Distribució vertical",
|
||||
"name": "Distribució",
|
||||
"row": "Distribució horitzontal",
|
||||
"zen_mode": "Mode Zen"
|
||||
},
|
||||
"modal": {
|
||||
"collections": "Col·leccions",
|
||||
"confirm": "Confirmar",
|
||||
"edit_request": "Sol·licitud d'edició",
|
||||
"import_export": "Importar / Exportar"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Comunicació",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Registre",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Missatge",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publicar",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "subscriure's",
|
||||
"topic": "Tema",
|
||||
"topic_name": "Nom del Tema",
|
||||
"topic_title": "Publicar / Subscriure's al tema",
|
||||
"unsubscribe": "Cancel·lar la subscripció",
|
||||
"url": "URL"
|
||||
},
|
||||
"navigation": {
|
||||
"doc": "Documents",
|
||||
"graphql": "GraphQL",
|
||||
"profile": "Perfil",
|
||||
"realtime": "En temps real",
|
||||
"rest": "REST",
|
||||
"settings": "Configuració"
|
||||
},
|
||||
"preRequest": {
|
||||
"javascript_code": "Codi JavaScript",
|
||||
"learn": "Llegiu la documentació",
|
||||
"script": "Script de sol·licitud prèvia",
|
||||
"snippets": "Fragments (Snippets)"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "Configuració de l'aplicació",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Els editors poden afegir, editar i eliminar sol·licituds.",
|
||||
"email_verification_mail": "S'ha enviat un correu electrònic de verificació a la vostra adreça electrònica. Feu clic a l'enllaç per verificar la vostra adreça de correu electrònic.",
|
||||
"no_permission": "No teniu permís per dur a terme aquesta acció.",
|
||||
"owner": "Propietari",
|
||||
"owner_description": "Els propietaris poden afegir, editar i suprimir sol·licituds, col·leccions i membres de l'equip.",
|
||||
"roles": "Rols",
|
||||
"roles_description": "Els rols s'utilitzen per controlar l'accés a les col·leccions compartides.",
|
||||
"updated": "Perfil actualitzat",
|
||||
"viewer": "Espectador",
|
||||
"viewer_description": "Els espectadors només poden veure i utilitzar sol·licituds."
|
||||
},
|
||||
"remove": {
|
||||
"star": "Eliminar estrella"
|
||||
},
|
||||
"request": {
|
||||
"added": "S'ha afegit la sol·licitud",
|
||||
"authorization": "Autorització",
|
||||
"body": "Cos de la sol·licitud",
|
||||
"choose_language": "Tria l'idioma",
|
||||
"content_type": "Tipus de contingut",
|
||||
"content_type_titles": {
|
||||
"others": "Altres",
|
||||
"structured": "Estructurat",
|
||||
"text": "Text"
|
||||
},
|
||||
"copy_link": "Copia l'enllaç",
|
||||
"duration": "Durada",
|
||||
"enter_curl": "Introduïu cURL",
|
||||
"generate_code": "Generar codi",
|
||||
"generated_code": "Codi generat",
|
||||
"header_list": "Llista de capçaleres",
|
||||
"invalid_name": "Proporcioneu un nom per a la sol·licitud",
|
||||
"method": "Mètode",
|
||||
"name": "Sol·licita el nom",
|
||||
"new": "Nova sol·licitud",
|
||||
"override": "Sobreescriure",
|
||||
"override_help": "Estableix <kbd>Content-Type</kbd> a les capçaleres (Headers)",
|
||||
"overriden": "Sobreescrit",
|
||||
"parameter_list": "Paràmetres de consulta",
|
||||
"parameters": "Paràmetres",
|
||||
"path": "Ruta",
|
||||
"payload": "Payload",
|
||||
"query": "Consulta",
|
||||
"raw_body": "Cos de sol·licitud sense processar",
|
||||
"renamed": "S'ha canviat el nom de la sol·licitud",
|
||||
"run": "Executar",
|
||||
"save": "Guardar",
|
||||
"save_as": "Guardar com",
|
||||
"saved": "S'ha desat la sol·licitud",
|
||||
"share": "Compartir",
|
||||
"share_description": "Comparteix Hoppscotch amb els teus amics",
|
||||
"title": "Sol·licitud",
|
||||
"type": "Tipus de sol·licitud",
|
||||
"url": "URL",
|
||||
"variables": "Variables",
|
||||
"view_my_links": "Visualitzar els meus enllaços"
|
||||
},
|
||||
"response": {
|
||||
"body": "Cos de resposta",
|
||||
"filter_response_body": "Filtrar el cos de la resposta JSON (utilitza la sintaxi JSONPath)",
|
||||
"headers": "Capçaleres",
|
||||
"html": "HTML",
|
||||
"image": "Imatge",
|
||||
"json": "JSON",
|
||||
"pdf": "PDF",
|
||||
"preview_html": "Previsualitza HTML",
|
||||
"raw": "Sense processar (Raw)",
|
||||
"size": "Mida",
|
||||
"status": "Estat",
|
||||
"time": "Temps",
|
||||
"title": "Resposta",
|
||||
"waiting_for_connection": "esperant la connexió",
|
||||
"xml": "XML"
|
||||
},
|
||||
"settings": {
|
||||
"accent_color": "Color d'accent",
|
||||
"account": "Compte",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Personalitzeu la configuració del compte.",
|
||||
"account_email_description": "La vostra adreça de correu electrònic principal.",
|
||||
"account_name_description": "Aquest és el vostre nom d'exposició",
|
||||
"background": "Fons",
|
||||
"black_mode": "Negre",
|
||||
"change_font_size": "Canvia la mida de la lletra",
|
||||
"choose_language": "Tria l'idioma",
|
||||
"dark_mode": "Fosc",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Ampliar navegació",
|
||||
"experiments": "Experiments",
|
||||
"experiments_notice": "Es tracta d'una col·lecció d'experiments en què estem treballant que poden resultar útils, divertits, o ambdós. No són finals i potser no són estables, de manera que si passa alguna cosa massa estrany, no us espanteu. Només cal que el desactiveu. Bromes a part,",
|
||||
"extension_ver_not_reported": "No informat",
|
||||
"extension_version": "Versió d'extensió",
|
||||
"extensions": "Extensions",
|
||||
"extensions_use_toggle": "Utilitzeu l'extensió del navegador per enviar sol·licituds (si n'hi ha)",
|
||||
"follow": "Segueix-nos",
|
||||
"font_size": "Mida de la font",
|
||||
"font_size_large": "Gran",
|
||||
"font_size_medium": "Mitjà",
|
||||
"font_size_small": "Petit",
|
||||
"interceptor": "Interceptor",
|
||||
"interceptor_description": "Middleware entre aplicació i APIs.",
|
||||
"language": "Llenguatge",
|
||||
"light_mode": "Lluminós",
|
||||
"official_proxy_hosting": "El servidor intermediari (proxy) oficial està allotjat per Hoppscotch.",
|
||||
"profile": "Perfil",
|
||||
"profile_description": "Actualitza les dades del teu perfil",
|
||||
"profile_email": "Correu electrònic",
|
||||
"profile_name": "Nom de perfil",
|
||||
"proxy": "Servidor intermediari (Proxy)",
|
||||
"proxy_url": "URL del servidor intermediari",
|
||||
"proxy_use_toggle": "Utilitzeu el middleware del servidor intermediari per enviar sol·licituds",
|
||||
"read_the": "Llegir el",
|
||||
"reset_default": "Restableix els valors predeterminats",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes que ha creat.",
|
||||
"sidebar_on_left": "Barra lateral a l'esquerra",
|
||||
"sync": "Sincronitzar",
|
||||
"sync_collections": "Col·leccions",
|
||||
"sync_description": "Aquesta configuració es sincronitza amb el núvol.",
|
||||
"sync_environments": "Entorns",
|
||||
"sync_history": "Historial",
|
||||
"system_mode": "Sistema",
|
||||
"telemetry": "Telemetria",
|
||||
"telemetry_helps_us": "La telemetria ens ajuda a personalitzar les nostres operacions i oferir-vos la millor experiència.",
|
||||
"theme": "Tema",
|
||||
"theme_description": "Personalitzeu el tema de l'aplicació.",
|
||||
"use_experimental_url_bar": "Utilitzeu la barra d'URL experimental amb ressaltat de l'entorn",
|
||||
"user": "Usuari",
|
||||
"verified_email": "Verified email",
|
||||
"verify_email": "Verificar correu electronic"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Accions",
|
||||
"created_on": "Creat el",
|
||||
"deleted": "S'ha suprimit el shortcode",
|
||||
"method": "Mètode",
|
||||
"not_found": "No s'ha trobat el shortcode",
|
||||
"short_code": "Short code",
|
||||
"url": "URL"
|
||||
},
|
||||
"shortcut": {
|
||||
"general": {
|
||||
"close_current_menu": "Tanca el menú actual",
|
||||
"command_menu": "Menú de cerca & ordres",
|
||||
"help_menu": "Menú d'ajuda",
|
||||
"show_all": "Dreceres de teclat",
|
||||
"title": "General"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "Convidar gent a Hoppscotch",
|
||||
"title": "Miscel·lània"
|
||||
},
|
||||
"navigation": {
|
||||
"back": "Torneu a la pàgina anterior",
|
||||
"documentation": "Anar a la pàgina Documentació",
|
||||
"forward": "Anar a la pàgina següent",
|
||||
"graphql": "Anar a la pàgina de GraphQL",
|
||||
"profile": "Anar a la pàgina de Perfil",
|
||||
"realtime": "Anar a la pàgina de Temps Real (Realtime)",
|
||||
"rest": "Anar a la pàgina de REST",
|
||||
"settings": "Anar a la pàgina de Configuració",
|
||||
"title": "Navegació"
|
||||
},
|
||||
"request": {
|
||||
"copy_request_link": "Copiar l'enllaç de la sol·licitud",
|
||||
"delete_method": "Seleccionar el mètode DELETE",
|
||||
"get_method": "Seleccionar el mètode GET",
|
||||
"head_method": "Seleccionar el mètode HEAD",
|
||||
"method": "Mètode",
|
||||
"next_method": "Seleccionar mètode Següent",
|
||||
"post_method": "Seleccionar mètode POST",
|
||||
"previous_method": "Seleccionar mètode Anterior",
|
||||
"put_method": "Seleccionar mètode PUT",
|
||||
"reset_request": "Sol·licitud de restabliment",
|
||||
"save_to_collections": "Guardar a les col·leccions",
|
||||
"send_request": "Enviar sol.licitud",
|
||||
"title": "Sol·licitud"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Canviar el tema al mode negre",
|
||||
"dark": "Canviar el tema al mode fosc",
|
||||
"light": "Canviar el tema al mode lluminós",
|
||||
"system": "Canviar el tema al mode del sistema",
|
||||
"title": "Tema"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "Mostrar el codi",
|
||||
"collection": "Ampliar el Panell de Col·lecció",
|
||||
"more": "Mostrar més",
|
||||
"sidebar": "Mostrar la barra lateral"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "Comunicació",
|
||||
"connection_not_authorized": "Aquesta connexió SocketIO no utilitza cap autenticació.",
|
||||
"event_name": "Nom de l'esdeveniment",
|
||||
"events": "Esdeveniments",
|
||||
"log": "Registre",
|
||||
"url": "URL"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "Tipus d'esdeveniment",
|
||||
"log": "Registre",
|
||||
"url": "URL"
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "Edició massiva",
|
||||
"bulk_mode_placeholder": "Les entrades estan separades per una nova línia\nLes claus i els valors estan separats per:\nAnteposa # a qualsevol fila que vulguis afegir, però que es mantingui desactivat",
|
||||
"cleared": "Esborrat",
|
||||
"connected": "Connectat",
|
||||
"connected_to": "Connectat a {name}",
|
||||
"connecting_to": "S'està connectant a {name}...",
|
||||
"connection_error": "No s'ha pogut connectar",
|
||||
"connection_failed": "Connexió fallida",
|
||||
"connection_lost": "Connexió perduda",
|
||||
"copied_to_clipboard": "Copiat al porta-retalls",
|
||||
"deleted": "Eliminat",
|
||||
"deprecated": "Obsolet",
|
||||
"disabled": "Desactivat",
|
||||
"disconnected": "Desconnectat",
|
||||
"disconnected_from": "Desconnectat de {name}",
|
||||
"docs_generated": "Documentació generada",
|
||||
"download_started": "S'ha iniciat la baixada",
|
||||
"enabled": "Activat",
|
||||
"file_imported": "Fitxer importat",
|
||||
"finished_in": "Acabat en {duration} ms",
|
||||
"history_deleted": "S'ha suprimit l'historial",
|
||||
"linewrap": "Embolcar línies",
|
||||
"loading": "S'està carregant...",
|
||||
"message_received": "Missatge: {message} ha arribat al tema: {topic}",
|
||||
"mqtt_subscription_failed": "S'ha produït un error en subscriure's al tema: {topic}",
|
||||
"none": "Cap",
|
||||
"nothing_found": "No s'ha trobat res per",
|
||||
"published_error": "S'ha produït un error en publicar el missatge: {topic} al tema: {message}",
|
||||
"published_message": "Missatge publicat: {missatge} al tema: {tema}",
|
||||
"reconnection_error": "No s'ha pogut tornar a connectar",
|
||||
"subscribed_failed": "No s'ha pogut subscriure al tema: {topic}",
|
||||
"subscribed_success": "S'ha subscrit correctament al tema: {topic}",
|
||||
"unsubscribed_failed": "No s'ha pogut cancel·lar la subscripció al tema: {topic}",
|
||||
"unsubscribed_success": "S'ha cancel·lat correctament la subscripció del tema: {topic}",
|
||||
"waiting_send_request": "S'està esperant l'enviament de la sol·licitud"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "Llegiu més sobre les darreres versions",
|
||||
"chat": "Tens preguntes? Xateja amb nosaltres!",
|
||||
"community": "Feu preguntes i ajudeu els altres",
|
||||
"documentation": "Llegiu més sobre Hoppscotch",
|
||||
"forum": "Feu preguntes i obteniu respostes",
|
||||
"github": "Segueix-nos a Github",
|
||||
"shortcuts": "Navega per l'aplicació més ràpidament",
|
||||
"team": "Poseu-vos en contacte amb l'equip",
|
||||
"title": "Suport",
|
||||
"twitter": "Segueix-nos a Twitter"
|
||||
},
|
||||
"tab": {
|
||||
"authorization": "Autorització",
|
||||
"body": "Cos",
|
||||
"collections": "Col·leccions",
|
||||
"documentation": "Documentació",
|
||||
"headers": "Capçaleres",
|
||||
"history": "Historial",
|
||||
"mqtt": "MQTT",
|
||||
"parameters": "Paràmetres",
|
||||
"pre_request_script": "Script de sol·licitud prèvia",
|
||||
"queries": "Consultes",
|
||||
"query": "Consulta",
|
||||
"schema": "Schema",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "SSE",
|
||||
"tests": "Proves",
|
||||
"types": "Tipus",
|
||||
"variables": "Variables",
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "Ja sou membre d'aquest equip. Contacta amb el propietari del teu equip.",
|
||||
"create_new": "Crear un equip nou",
|
||||
"deleted": "S'ha eliminat l'equip",
|
||||
"edit": "Editar l'equip",
|
||||
"email": "Correu electrònic",
|
||||
"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_disabled": "L'únic propietari no pot sortir de l'equip",
|
||||
"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_invite_link": "Enllaç d'invitació no vàlid",
|
||||
"invalid_invite_link_description": "L'enllaç que has seguit no és vàlid. Contacta amb el propietari del teu equip.",
|
||||
"invalid_member_permission": "Si us plau proporcioneu un permís vàlid al membre de l'equip",
|
||||
"invite": "Invitar",
|
||||
"invite_more": "Invitar més",
|
||||
"invite_tooltip": "Invitar persones a aquest espai de treball",
|
||||
"invited_to_team": "{owner} t'ha invitat a unir-te a {team}",
|
||||
"join": "S'ha acceptat la invitació",
|
||||
"join_beta": "Uneix-te al programa beta per accedir als equips.",
|
||||
"join_team": "Uneix-te a {team}",
|
||||
"joined_team": "T'has unit a {team}",
|
||||
"joined_team_description": "Ara ets membre d'aquest equip",
|
||||
"left": "Has deixat l'equip",
|
||||
"login_to_continue": "Inicieu sessió per continuar",
|
||||
"login_to_continue_description": "Has d'haver iniciat sessió per unir-te a un equip.",
|
||||
"logout_and_try_again": "Tanqueu la sessió i inicieu la sessió amb un altre compte.",
|
||||
"member_has_invite": "Aquest identificador de correu electrònic ja té una invitació. Contacta amb el propietari del teu equip.",
|
||||
"member_not_found": "Membre no trobat. Contacta amb el propietari del teu equip.",
|
||||
"member_removed": "S'ha eliminat l'usuari",
|
||||
"member_role_updated": "Rols d'usuari actualitzats",
|
||||
"members": "Membres",
|
||||
"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",
|
||||
"new": "Nou equip",
|
||||
"new_created": "S'ha creat un nou equip",
|
||||
"new_name": "El meu Nou Equip",
|
||||
"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.",
|
||||
"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.",
|
||||
"pending_invites": "Invitacions pendents",
|
||||
"permissions": "Permisos",
|
||||
"saved": "S'ha guardat l'equip",
|
||||
"select_a_team": "Select a team",
|
||||
"title": "Equips",
|
||||
"we_sent_invite_link": "Hem enviat un enllaç d'invitació a tots els convidats!",
|
||||
"we_sent_invite_link_description": "Demaneu a tots els convidats que comprovin la seva safata d'entrada. Feu clic a l'enllaç per unir-vos a l'equip."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "prova fallada",
|
||||
"javascript_code": "Codi JavaScript",
|
||||
"learn": "Llegir la documentació",
|
||||
"passed": "prova superada",
|
||||
"report": "Informe de la prova",
|
||||
"results": "Resultats de la prova",
|
||||
"script": "Script",
|
||||
"snippets": "Fragments (Snippets)"
|
||||
},
|
||||
"websocket": {
|
||||
"communication": "Comunicació",
|
||||
"log": "Registre",
|
||||
"message": "Missatge",
|
||||
"protocols": "Protocols",
|
||||
"url": "URL"
|
||||
}
|
||||
}
|
||||
@@ -1,40 +1,43 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "Autoscroll",
|
||||
"autoscroll": "自动滚动",
|
||||
"cancel": "取消",
|
||||
"choose_file": "选择文件",
|
||||
"clear": "清除",
|
||||
"clear_all": "全部清除",
|
||||
"close": "Close",
|
||||
"close": "关闭",
|
||||
"connect": "连接",
|
||||
"connecting": "连接中",
|
||||
"copy": "复制",
|
||||
"delete": "删除",
|
||||
"disconnect": "断开连接",
|
||||
"dismiss": "忽略",
|
||||
"dont_save": "不保存",
|
||||
"download_file": "下载文件",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"drag_to_reorder": "拖曳以重新排序",
|
||||
"duplicate": "复制",
|
||||
"edit": "编辑",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "过滤",
|
||||
"go_back": "返回",
|
||||
"group_by": "分组方式",
|
||||
"label": "标签",
|
||||
"learn_more": "了解更多",
|
||||
"less": "更少",
|
||||
"more": "更多",
|
||||
"new": "新增",
|
||||
"no": "否",
|
||||
"open_workspace": "Open workspace",
|
||||
"open_workspace": "打开工作区",
|
||||
"paste": "粘贴",
|
||||
"prettify": "美化",
|
||||
"remove": "移除",
|
||||
"restore": "恢复",
|
||||
"save": "保存",
|
||||
"scroll_to_bottom": "Scroll to bottom",
|
||||
"scroll_to_top": "Scroll to top",
|
||||
"scroll_to_bottom": "滚动至底部",
|
||||
"scroll_to_top": "滚动至顶部",
|
||||
"search": "搜索",
|
||||
"send": "发送",
|
||||
"start": "开始",
|
||||
"starting": "正在开始",
|
||||
"stop": "停止",
|
||||
"to_close": "以关闭",
|
||||
"to_navigate": "以定位",
|
||||
@@ -171,7 +174,8 @@
|
||||
"profile": "登录以查看你的个人档案",
|
||||
"protocols": "协议为空",
|
||||
"schema": "连接至 GraphQL 端点",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"shortcodes": "Shortcodes 为空",
|
||||
"subscription": "订阅为空",
|
||||
"team_name": "团队名称为空",
|
||||
"teams": "团队为空",
|
||||
"tests": "没有针对该请求的测试"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "环境已删除",
|
||||
"edit": "编辑环境",
|
||||
"invalid_name": "请提供有效的环境名称",
|
||||
"my_environments": "我的环境",
|
||||
"nested_overflow": "环境嵌套深度超过限制(10层)",
|
||||
"new": "新建环境",
|
||||
"no_environment": "无环境",
|
||||
"no_environment_description": "没有选择环境。选择如何处理以下变量。",
|
||||
"select": "选择环境",
|
||||
"team_environments": "团队环境",
|
||||
"title": "环境",
|
||||
"updated": "环境已更新",
|
||||
"variable_list": "变量列表"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "该浏览器似乎不支持 SSE。",
|
||||
"check_console_details": "检查控制台日志以获悉详情",
|
||||
"curl_invalid_format": "cURL 格式不正确",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "您的帐号目前为这些团队的拥有者:",
|
||||
"delete_account_description": "您在删除帐号前必须先将您自己从团队中移除、转移拥有权,或是删除团队。",
|
||||
"empty_req_name": "空请求名称",
|
||||
"f12_details": "(F12 详情)",
|
||||
"gql_prettify_invalid_query": "无法美化无效的查询,处理查询语法错误并重试",
|
||||
@@ -209,8 +218,8 @@
|
||||
"network_error": "好像发生了网络错误,请重试。",
|
||||
"network_fail": "无法发送请求",
|
||||
"no_duration": "无持续时间",
|
||||
"no_results_found": "No matches found",
|
||||
"page_not_found": "This page could not be found",
|
||||
"no_results_found": "找不到结果",
|
||||
"page_not_found": "找不到此頁面",
|
||||
"script_fail": "无法执行预请求脚本",
|
||||
"something_went_wrong": "发生了一些错误",
|
||||
"test_script_fail": "无法执行请求脚本"
|
||||
@@ -220,7 +229,12 @@
|
||||
"create_secret_gist": "创建私密 Gist",
|
||||
"gist_created": "已创建 Gist",
|
||||
"require_github": "使用 GitHub 登录以创建私密 Gist",
|
||||
"title": "Export"
|
||||
"title": "导出"
|
||||
},
|
||||
"filter": {
|
||||
"all": "全部",
|
||||
"none": "无",
|
||||
"starred": "已加星号"
|
||||
},
|
||||
"folder": {
|
||||
"created": "已创建文件夹",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "模式",
|
||||
"subscriptions": "订阅"
|
||||
},
|
||||
"group": {
|
||||
"time": "时间",
|
||||
"url": "网址"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "安装应用",
|
||||
"login": "登录",
|
||||
@@ -276,10 +294,10 @@
|
||||
"from_postman_description": "从 Postman 集合中导入",
|
||||
"from_url": "从 URL 导入",
|
||||
"gist_url": "输入 Gist URL",
|
||||
"import_from_url_invalid_fetch": "Couldn't get data from the url",
|
||||
"import_from_url_invalid_file_format": "Error while importing collections",
|
||||
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Collections Imported",
|
||||
"import_from_url_invalid_fetch": "无法从网址取得资料",
|
||||
"import_from_url_invalid_file_format": "导入组合时发生错误",
|
||||
"import_from_url_invalid_type": "不支持此类型。可接受的值为 'hoppscotch'、'openapi'、'postman'、'insomnia'",
|
||||
"import_from_url_success": "已导入组合",
|
||||
"json_description": "从 Hoppscotch 的集合文件导入(JSON)",
|
||||
"title": "导入"
|
||||
},
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "导入/导出"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "您已经订阅了此主題。",
|
||||
"clean_session": "清除会话",
|
||||
"clear_input": "清除输入",
|
||||
"clear_input_on_send": "发送后清除输入",
|
||||
"client_id": "客户端 ID",
|
||||
"color": "选择颜色",
|
||||
"communication": "通讯",
|
||||
"connection_config": "连接配置",
|
||||
"connection_not_authorized": "此MQTT连接未使用任何验证。",
|
||||
"invalid_topic": "请提供该订阅的主题",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "日志",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "消息",
|
||||
"new": "新订阅",
|
||||
"not_connected": "请先启动MQTT连接。",
|
||||
"publish": "发布",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "订阅",
|
||||
"topic": "主题",
|
||||
"topic_name": "主题名称",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "应用设置",
|
||||
"default_hopp_displayname": "未命名使用者",
|
||||
"editor": "编辑者",
|
||||
"editor_description": "编辑者可以添加、编辑和删除请求。",
|
||||
"email_verification_mail": "确认邮件已发送至你的邮箱,请点击链接以验证你的电子邮箱。",
|
||||
@@ -347,9 +384,9 @@
|
||||
"choose_language": "选择语言",
|
||||
"content_type": "内容类型",
|
||||
"content_type_titles": {
|
||||
"others": "Others",
|
||||
"structured": "Structured",
|
||||
"text": "Text"
|
||||
"others": "其他",
|
||||
"structured": "结构",
|
||||
"text": "文字"
|
||||
},
|
||||
"copy_link": "复制链接",
|
||||
"duration": "持续时间",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "请求名称",
|
||||
"new": "新请求",
|
||||
"override": "覆盖",
|
||||
"override_help": "设置 <xmp>Content-Type</xmp> 头",
|
||||
"override_help": "设置 <kbd>Content-Type</kbd> 头",
|
||||
"overriden": "覆盖",
|
||||
"parameter_list": "查询参数",
|
||||
"parameters": "参数",
|
||||
@@ -381,11 +418,11 @@
|
||||
"type": "请求类型",
|
||||
"url": "URL",
|
||||
"variables": "变量",
|
||||
"view_my_links": "View my links"
|
||||
"view_my_links": "查看我的链接"
|
||||
},
|
||||
"response": {
|
||||
"body": "响应体",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "筛选JSON响应本体(使用JSONPath语法)",
|
||||
"headers": "响应头",
|
||||
"html": "HTML",
|
||||
"image": "图像",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "强调色",
|
||||
"account": "帐户",
|
||||
"account_deleted": "已刪除您的账号",
|
||||
"account_description": "自定义您的帐户设置。",
|
||||
"account_email_description": "您的主要电子邮箱地址。",
|
||||
"account_name_description": "这是您的显示名称。",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "更改字体大小",
|
||||
"choose_language": "选择语言",
|
||||
"dark_mode": "暗色",
|
||||
"delete_account": "刪除账号",
|
||||
"delete_account_description": "一旦您删除了您的帐号,您的所有数据将被永久删除。此操作无法复原。",
|
||||
"expand_navigation": "展开导航栏",
|
||||
"experiments": "实验功能",
|
||||
"experiments_notice": "下面是我们正在开发中的一些实验功能,这些功能可能会很有用,可能很有趣,又或者二者都是或都不是。这些功能并非最终版本且可能不稳定,所以如果发生了一些过于奇怪的事情,不要惊慌,关掉它们就好了。玩笑归玩笑,",
|
||||
@@ -437,8 +477,8 @@
|
||||
"proxy_use_toggle": "使用代理中间件发送请求",
|
||||
"read_the": "阅读",
|
||||
"reset_default": "重置为默认",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes which were created by you.",
|
||||
"short_codes": "快捷键",
|
||||
"short_codes_description": "我们为您打造的快捷键。",
|
||||
"sidebar_on_left": "侧边栏移至左侧",
|
||||
"sync": "同步",
|
||||
"sync_collections": "集合",
|
||||
@@ -452,16 +492,16 @@
|
||||
"theme_description": "自定义您的应用程序主题。",
|
||||
"use_experimental_url_bar": "使用实验性的带有环境高亮的 URL 栏",
|
||||
"user": "用户",
|
||||
"verified_email": "Verified email",
|
||||
"verified_email": "已验证电子邮件地址",
|
||||
"verify_email": "验证电子邮箱"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Actions",
|
||||
"created_on": "Created on",
|
||||
"deleted": "Shortcode deleted",
|
||||
"method": "Method",
|
||||
"not_found": "Shortcode not found",
|
||||
"short_code": "Short code",
|
||||
"actions": "操作",
|
||||
"created_on": "创建于",
|
||||
"deleted": "已刪除快捷键",
|
||||
"method": "方法",
|
||||
"not_found": "找不到快捷键",
|
||||
"short_code": "快捷键",
|
||||
"url": "URL"
|
||||
},
|
||||
"shortcut": {
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "发送请求",
|
||||
"title": "请求"
|
||||
},
|
||||
"response": {
|
||||
"copy": "复制响应至剪贴板",
|
||||
"download": "下载响应",
|
||||
"title": "响应"
|
||||
},
|
||||
"theme": {
|
||||
"black": "切换为黑色主题",
|
||||
"dark": "切换为深色主题",
|
||||
@@ -518,7 +563,7 @@
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "通讯",
|
||||
"connection_not_authorized": "This SocketIO connection does not use any authentication.",
|
||||
"connection_not_authorized": "此SocketIO连接未使用任何验证。",
|
||||
"event_name": "事件名称",
|
||||
"events": "事件",
|
||||
"log": "日志",
|
||||
@@ -536,9 +581,9 @@
|
||||
"connected": "已连接",
|
||||
"connected_to": "已连接到 {name}",
|
||||
"connecting_to": "正在连接到 {name}……",
|
||||
"connection_error": "Failed to connect",
|
||||
"connection_failed": "Connection failed",
|
||||
"connection_lost": "Connection lost",
|
||||
"connection_error": "连接错误",
|
||||
"connection_failed": "连接失败",
|
||||
"connection_lost": "连接丢失",
|
||||
"copied_to_clipboard": "已复制到剪贴板",
|
||||
"deleted": "已删除",
|
||||
"deprecated": "已弃用",
|
||||
@@ -553,17 +598,17 @@
|
||||
"history_deleted": "历史记录已删除",
|
||||
"linewrap": "换行",
|
||||
"loading": "正在加载……",
|
||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
||||
"message_received": "信息:{message}已到达主题:{topic}",
|
||||
"mqtt_subscription_failed": "订阅此主题时发生错误:{topic}",
|
||||
"none": "无",
|
||||
"nothing_found": "没有找到",
|
||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
||||
"published_message": "Published message: {message} to topic: {topic}",
|
||||
"reconnection_error": "Failed to reconnect",
|
||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
||||
"published_error": "将信息:{topic}发布至主题:{message}时发生错误",
|
||||
"published_message": "已将此信息:{message}发布至主题:{topic}",
|
||||
"reconnection_error": "重连失败",
|
||||
"subscribed_failed": "无法订阅此主題:{topic}",
|
||||
"subscribed_success": "成功订阅此主題:{topic}",
|
||||
"unsubscribed_failed": "无法取消订阅此主題:{topic}",
|
||||
"unsubscribed_success": "成功取消订阅此主題:{topic}",
|
||||
"waiting_send_request": "等待发送请求"
|
||||
},
|
||||
"support": {
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "我们向所有受邀者发送了邀请链接!",
|
||||
"we_sent_invite_link_description": "请所有受邀者检查他们的收件箱,点击链接以加入团队。"
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "已刪除环境",
|
||||
"duplicate": "已复制环境",
|
||||
"not_found": "找不到环境。"
|
||||
},
|
||||
"test": {
|
||||
"failed": "测试失败",
|
||||
"javascript_code": "JavaScript 代码",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Vymazat vše",
|
||||
"close": "Close",
|
||||
"connect": "Připojit",
|
||||
"connecting": "Connecting",
|
||||
"copy": "kopírovat",
|
||||
"delete": "Vymazat",
|
||||
"disconnect": "Odpojit",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Upravit",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Vrať se",
|
||||
"group_by": "Group by",
|
||||
"label": "Označení",
|
||||
"learn_more": "Další informace",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Vyhledávání",
|
||||
"send": "Poslat",
|
||||
"start": "Start",
|
||||
"starting": "Starting",
|
||||
"stop": "Stop",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -77,7 +80,7 @@
|
||||
"status": "Postavení",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "Podmínky a soukromí",
|
||||
"twitter": "Cvrlikání",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Zadejte příkaz nebo hledejte…",
|
||||
"we_use_cookies": "Používáme cookies",
|
||||
"whats_new": "Co je nového?",
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "Tým je prázdný",
|
||||
"parameters": "Tento požadavek nemá žádné parametry",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "Protokoly jsou prázdné",
|
||||
"schema": "Připojte se ke koncovému bodu GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Název týmu prázdný",
|
||||
"teams": "Týmy jsou prázdné",
|
||||
"tests": "Pro tento požadavek neexistují žádné testy"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Upravit prostředí",
|
||||
"invalid_name": "Zadejte platný název prostředí",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Nové prostředí",
|
||||
"no_environment": "Žádné prostředí",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Vyberte prostředí",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Prostředí",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Seznam proměnných"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "Zdá se, že tento prohlížeč nemá podporu událostí odeslaných serverem.",
|
||||
"check_console_details": "Podrobnosti najdete v protokolu konzoly.",
|
||||
"curl_invalid_format": "cURL nemá správný formát",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Název prázdného požadavku",
|
||||
"f12_details": "(F12 pro podrobnosti)",
|
||||
"gql_prettify_invalid_query": "Neplatný dotaz nelze předběžně upravit, vyřešit chyby syntaxe dotazu a zkusit to znovu",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Přihlaste se pomocí GitHub a vytvořte tajný seznam",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Složka vytvořena",
|
||||
"edit": "Upravit složku",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Schéma",
|
||||
"subscriptions": "Předplatné"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Nainstalovat aplikaci",
|
||||
"login": "Přihlásit se",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Import Export"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Sdělení",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Záznam",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Zpráva",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publikovat",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "předplatit",
|
||||
"topic": "Téma",
|
||||
"topic_name": "Název tématu",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Vyžádejte si jméno",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Parametry dotazu",
|
||||
"parameters": "Parametry",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Akcentní barva",
|
||||
"account": "Účet",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Přizpůsobte si nastavení účtu.",
|
||||
"account_email_description": "Vaše primární e -mailová adresa.",
|
||||
"account_name_description": "Toto je vaše zobrazované jméno.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Změnit velikost písma",
|
||||
"choose_language": "Vyber jazyk",
|
||||
"dark_mode": "Temný",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Experimenty",
|
||||
"experiments_notice": "Toto je sbírka experimentů, na kterých pracujeme a které se mohou ukázat jako užitečné, zábavné, obojí, nebo ani jedno. Nejsou konečné a nemusí být stabilní, takže pokud se stane něco příliš divného, nepanikařte. Prostě vypni tu nebezpečnou věc. Vtipy stranou,",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Poslat žádost",
|
||||
"title": "Žádost"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScriptový kód",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Slet alt",
|
||||
"close": "Close",
|
||||
"connect": "Opret forbindelse",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Kopi",
|
||||
"delete": "Slet",
|
||||
"disconnect": "Koble fra",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Redigere",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Gå tilbage",
|
||||
"group_by": "Group by",
|
||||
"label": "Etiket",
|
||||
"learn_more": "Lær mere",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Søg",
|
||||
"send": "Sende",
|
||||
"start": "Start",
|
||||
"starting": "Starting",
|
||||
"stop": "Hold op",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "Holdet er tomt",
|
||||
"parameters": "Denne anmodning har ingen parametre",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "Protokoller er tomme",
|
||||
"schema": "Opret forbindelse til et GraphQL -slutpunkt",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Teamnavn er tomt",
|
||||
"teams": "Hold er tomme",
|
||||
"tests": "Der er ingen test for denne anmodning"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Rediger miljø",
|
||||
"invalid_name": "Angiv et gyldigt navn på miljøet",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Nyt miljø",
|
||||
"no_environment": "Intet miljø",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Vælg miljø",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Miljøer",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Variabel liste"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "Det ser ikke ud til, at denne browser understøtter Server Sent Events.",
|
||||
"check_console_details": "Tjek konsollog for at få flere oplysninger.",
|
||||
"curl_invalid_format": "cURL er ikke formateret korrekt",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Tom anmodningsnavn",
|
||||
"f12_details": "(F12 for detaljer)",
|
||||
"gql_prettify_invalid_query": "Kunne ikke prætificere en ugyldig forespørgsel, løse forespørgselssyntaksfejl og prøve igen",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Log ind med GitHub for at skabe hemmelig kerne",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Mappe oprettet",
|
||||
"edit": "Rediger mappe",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Skema",
|
||||
"subscriptions": "Abonnementer"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Installer app",
|
||||
"login": "Log på",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Import Eksport"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Meddelelse",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Log",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Besked",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Offentliggøre",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Abonner",
|
||||
"topic": "Emne",
|
||||
"topic_name": "Emne navn",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Anmodningsnavn",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Forespørgselsparametre",
|
||||
"parameters": "Parametre",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Accent farve",
|
||||
"account": "Konto",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Tilpas dine kontoindstillinger.",
|
||||
"account_email_description": "Din primære e -mail -adresse.",
|
||||
"account_name_description": "Dette er dit visningsnavn.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Skift skriftstørrelse",
|
||||
"choose_language": "Vælg sprog",
|
||||
"dark_mode": "Mørk",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Eksperimenter",
|
||||
"experiments_notice": "Dette er en samling af eksperimenter, vi arbejder på, der kan vise sig at være nyttige, sjove, begge dele eller ingen af dem. De er ikke endelige og er muligvis ikke stabile, så hvis der sker noget alt for mærkeligt, skal du ikke gå i panik. Bare sluk for dang -tingen. Vittigheder til side,",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Send anmodning",
|
||||
"title": "Anmodning"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScript -kode",
|
||||
@@ -7,17 +7,19 @@
|
||||
"clear_all": "Alles zurücksetzen",
|
||||
"close": "Close",
|
||||
"connect": "Verbinden",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Kopieren",
|
||||
"delete": "Löschen",
|
||||
"disconnect": "Trennen",
|
||||
"dismiss": "Verwerfen",
|
||||
"dont_save": "Don't save",
|
||||
"dont_save": "Nicht speichern",
|
||||
"download_file": "Datei herunterladen",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplizieren",
|
||||
"edit": "Bearbeiten",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Zurück",
|
||||
"group_by": "Group by",
|
||||
"label": "Etikett",
|
||||
"learn_more": "Mehr erfahren",
|
||||
"less": "Weniger",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Suchen",
|
||||
"send": "Senden",
|
||||
"start": "Start",
|
||||
"starting": "Starting",
|
||||
"stop": "Stopp",
|
||||
"to_close": "zum Schließen",
|
||||
"to_navigate": "zum Navigieren",
|
||||
@@ -52,18 +55,18 @@
|
||||
"chat_with_us": "Chatte mit uns",
|
||||
"contact_us": "Kontaktiere uns",
|
||||
"copy": "Kopieren",
|
||||
"copy_user_id": "Copy User Auth Token",
|
||||
"developer_option": "Developer options",
|
||||
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
|
||||
"copy_user_id": "Kopiere Nutzer-Authentisierungstoken",
|
||||
"developer_option": "Entwickleroptionen",
|
||||
"developer_option_description": "Entwicklungswerkzeuge, die helfen Hoppscotch weiter zu entwickeln und zu warten.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Dokumentation",
|
||||
"github": "GitHub",
|
||||
"help": "Hilfe, Feedback und Dokumentation",
|
||||
"home": "Home",
|
||||
"invite": "Einladen",
|
||||
"invite_description": "In Hoppscotch haben wir eine einfache und intuitive Benutzeroberfläche zum Erstellen und Verwalten Ihrer APIs entwickelt. Hoppscotch ist ein Tool, mit dem Sie Ihre APIs erstellen, testen, dokumentieren und teilen können.",
|
||||
"invite_your_friends": "Lade deine Freunde ein",
|
||||
"join_discord_community": "Treten Sie unserer Discord-Community bei",
|
||||
"invite_description": "In Hoppscotch haben wir eine einfache und intuitive Benutzeroberfläche zum Erstellen und Verwalten Deiner APIs entwickelt. Hoppscotch ist ein Tool, mit dem Du Deine APIs erstellen, testen, dokumentieren und teilen kannst.",
|
||||
"invite_your_friends": "Lade Deine Freunde ein",
|
||||
"join_discord_community": "Tritt unserer Discord-Community bei",
|
||||
"keyboard_shortcuts": "Tastaturkürzel",
|
||||
"name": "Hoppscotch",
|
||||
"new_version_found": "Neue Version gefunden. Zum Aktualisieren Seite neu laden.",
|
||||
@@ -75,16 +78,16 @@
|
||||
"shortcuts": "Verknüpfungen",
|
||||
"spotlight": "Scheinwerfer",
|
||||
"status": "Status",
|
||||
"status_description": "Check the status of the website",
|
||||
"status_description": "Überprüfe den Status der Webseite",
|
||||
"terms_and_privacy": "AGB und Datenschutzerklärung",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Geben Sie einen Befehl ein oder suchen Sie…",
|
||||
"type_a_command_search": "Gib einen Befehl ein oder suche…",
|
||||
"we_use_cookies": "Wir verwenden Cookies",
|
||||
"whats_new": "Was gibt's Neues?",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "Konto existiert mit unterschiedlichen Zugangsdaten - Melden Sie sich an, um beide Konten zu verknüpfen",
|
||||
"account_exists": "Konto existiert mit unterschiedlichen Zugangsdaten - Melde Dich an, um beide Konten zu verknüpfen",
|
||||
"all_sign_in_options": "Alle Anmeldeoptionen",
|
||||
"continue_with_email": "Mit E-Mail anmelden",
|
||||
"continue_with_github": "Mit GitHub anmelden",
|
||||
@@ -100,7 +103,7 @@
|
||||
"send_magic_link": "Magischen Link schicken",
|
||||
"sync": "Synchronisieren",
|
||||
"we_sent_magic_link": "Wir haben dir einen magischen Link geschickt!",
|
||||
"we_sent_magic_link_description": "Überprüfen Sie Ihren Posteingang - wir haben eine E-Mail an {email} gesendet. Es enthält einen magischen Link, der Sie einloggt."
|
||||
"we_sent_magic_link_description": "Überprüfe Deinen Posteingang - wir haben eine E-Mail an {email} gesendet. Es enthält einen magischen Link, der Dich einloggt."
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "Token generieren",
|
||||
@@ -115,31 +118,31 @@
|
||||
"collection": {
|
||||
"created": "Sammlung erstellt",
|
||||
"edit": "Sammlung bearbeiten",
|
||||
"invalid_name": "Bitte geben Sie einen gültigen Namen für die Sammlung an",
|
||||
"invalid_name": "Bitte gib einen gültigen Namen für die Sammlung an",
|
||||
"my_collections": "Meine Sammlungen",
|
||||
"name": "Meine neue Sammlung",
|
||||
"name_length_insufficient": "Sammlungs-Name soll mindestens 3 Zeichen lang sein",
|
||||
"name_length_insufficient": "Sammlungsname soll mindestens 3 Zeichen lang sein",
|
||||
"new": "Neue Sammlung",
|
||||
"renamed": "Sammlung umbenannt",
|
||||
"request_in_use": "Anfrage wird ausgeführt",
|
||||
"save_as": "Speichern als",
|
||||
"select": "Wählen Sie eine Sammlung",
|
||||
"select": "Wähle eine Sammlung",
|
||||
"select_location": "Ort auswählen",
|
||||
"select_team": "Wähle ein Team",
|
||||
"team_collections": "Teamsammlungen"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "Möchten Sie dieses Team wirklich verlassen?",
|
||||
"logout": "Möchten Sie sich wirklich abmelden?",
|
||||
"remove_collection": "Möchten Sie diese Sammlung wirklich endgültig löschen?",
|
||||
"remove_environment": "Möchten Sie diese Umgebung wirklich dauerhaft löschen?",
|
||||
"remove_folder": "Möchten Sie diesen Ordner wirklich dauerhaft löschen?",
|
||||
"remove_history": "Möchten Sie wirklich den gesamten Verlauf dauerhaft löschen?",
|
||||
"remove_request": "Möchten Sie diese Anfrage wirklich dauerhaft löschen?",
|
||||
"remove_team": "Möchten Sie dieses Team wirklich löschen?",
|
||||
"remove_telemetry": "Möchten Sie die Telemetrie wirklich deaktivieren?",
|
||||
"request_change": "Are you sure you want to discard current request, unsaved changes will be lost.",
|
||||
"sync": "Möchten Sie diesen Arbeitsbereich wirklich synchronisieren?"
|
||||
"exit_team": "Möchtest Du dieses Team wirklich verlassen?",
|
||||
"logout": "Möchtest Du Dich wirklich abmelden?",
|
||||
"remove_collection": "Möchtest Du diese Sammlung wirklich endgültig löschen?",
|
||||
"remove_environment": "Möchtest Du diese Umgebung wirklich dauerhaft löschen?",
|
||||
"remove_folder": "Möchtest Du diesen Ordner wirklich dauerhaft löschen?",
|
||||
"remove_history": "Möchtest Du wirklich den gesamten Verlauf dauerhaft löschen?",
|
||||
"remove_request": "Möchtest Du diese Anfrage wirklich dauerhaft löschen?",
|
||||
"remove_team": "Möchtest Du dieses Team wirklich löschen?",
|
||||
"remove_telemetry": "Möchtest Du die Telemetrie wirklich deaktivieren?",
|
||||
"request_change": "Möchtest Du diese Anfrage verwerfen? Ungespeicherte Änderungen gehen verloren.",
|
||||
"sync": "Möchtest Du diesen Arbeitsbereich wirklich synchronisieren?"
|
||||
},
|
||||
"count": {
|
||||
"header": "Header {count}",
|
||||
@@ -151,14 +154,14 @@
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "Dokumentation erstellen",
|
||||
"generate_message": "Importieren Sie eine beliebige Hoppscotch-Sammlung, um unterwegs API-Dokumentation zu generieren."
|
||||
"generate_message": "Importiere eine beliebige Hoppscotch-Sammlung, um unterwegs API-Dokumentation zu generieren."
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "Diese Anfrage verwendet keine Autorisierung",
|
||||
"body": "Diese Anfrage hat keinen Körper",
|
||||
"collection": "Sammlung ist leer",
|
||||
"collections": "Sammlungen sind leer",
|
||||
"documentation": "Verbinden Sie sich zu einem GraphQL-Endpunkt um die API-Dokumentation zu sehen",
|
||||
"documentation": "Verbinde Dich zu einem GraphQL-Endpunkt, um die API-Dokumentation zu sehen",
|
||||
"endpoint": "Endpunkt kann nicht leer sein",
|
||||
"environments": "Umgebungen sind leer",
|
||||
"folder": "Der Ordner ist leer",
|
||||
@@ -172,6 +175,7 @@
|
||||
"protocols": "Protokolle sind leer",
|
||||
"schema": "Verbinden mit einem GraphQL-Endpunkt",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Teamname leer",
|
||||
"teams": "Teams sind leer",
|
||||
"tests": "Es gibt keine Tests für diese Anfrage"
|
||||
@@ -180,26 +184,31 @@
|
||||
"add_to_global": "Zur Globalen Umgebung hinzufügen",
|
||||
"added": "Umgebung hinzugefügt",
|
||||
"create_new": "Neue Umgebung erstellen",
|
||||
"created": "Environment created",
|
||||
"created": "Umgebung erzeugt",
|
||||
"deleted": "Umgebung löschen",
|
||||
"edit": "Umgebung bearbeiten",
|
||||
"invalid_name": "Bitte geben Sie einen gültigen Namen für die Umgebung an",
|
||||
"invalid_name": "Bitte gib einen gültigen Namen für die Umgebung an",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "Verschachtelte Umgebungsvariablen sind limitert auf 10 Unterebenen",
|
||||
"new": "Neue Umgebung",
|
||||
"no_environment": "Keine Umgebung",
|
||||
"no_environment_description": "Es wurden keine Umgebungen ausgewählt. Wählen Sie aus, was mit den untenstehenden Variablen geschehen soll.",
|
||||
"no_environment_description": "Es wurden keine Umgebungen ausgewählt. Wähle aus, was mit den untenstehenden Variablen geschehen soll.",
|
||||
"select": "Umgebung auswählen",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Umgebungen",
|
||||
"updated": "Umgebung aktualisiert",
|
||||
"variable_list": "Variablenliste"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "Dieser Browser scheint keine Unterstützung für die vom Server gesendete Ereignisse zu haben.",
|
||||
"check_console_details": "Einzelheiten finden Sie in der Browser-Konsole.",
|
||||
"check_console_details": "Einzelheiten findest Du in der Browser-Konsole.",
|
||||
"curl_invalid_format": "cURL ist nicht richtig formatiert",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Leerer Anfragename",
|
||||
"f12_details": "(F12 für Details)",
|
||||
"gql_prettify_invalid_query": "Eine ungültige Abfrage konnte nicht verschönert werden, Fehler in der Abfragesyntax beheben und erneut versuchen",
|
||||
"gql_prettify_invalid_query": "Eine ungültige Abfrage konnte nicht verschönert werden. Fehler in der Abfragesyntax beheben und erneut versuchen",
|
||||
"incomplete_config_urls": "Fehlende Konfigurations-URLs",
|
||||
"incorrect_email": "Falsche E-Mail Adresse",
|
||||
"invalid_link": "Falscher Link",
|
||||
@@ -219,14 +228,19 @@
|
||||
"as_json": "Als JSON exportieren",
|
||||
"create_secret_gist": "Geheimen Github Gist erstellen",
|
||||
"gist_created": "Gist erstellt",
|
||||
"require_github": "Melden Sie sich bei GitHub an, um einen geheimen Gist zu erstellen",
|
||||
"require_github": "Melde Dich bei GitHub an, um einen geheimen Gist zu erstellen",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Ordner erstellt",
|
||||
"edit": "Ordner bearbeiten",
|
||||
"invalid_name": "Bitte geben Sie einen Namen für den Ordner an",
|
||||
"name_length_insufficient": "Folder name should be at least 3 characters long",
|
||||
"invalid_name": "Bitte gib einen Namen für den Ordner an",
|
||||
"name_length_insufficient": "Ordnername sollte mindestens 3 Zeichen lang sein",
|
||||
"new": "Neuer Ordner",
|
||||
"renamed": "Ordner umbenannt"
|
||||
},
|
||||
@@ -235,25 +249,29 @@
|
||||
"schema": "Schema",
|
||||
"subscriptions": "Abonnements"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "App installieren",
|
||||
"login": "Anmeldung",
|
||||
"save_workspace": "Arbeitsbereich speichern"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": "Der Autorisierungsheader wird automatisch generiert, wenn Sie die Anfrage senden.",
|
||||
"authorization": "Der Autorisierungsheader wird automatisch generiert, wenn Du die Anfrage sendest.",
|
||||
"generate_documentation_first": "Zuerst Dokumentation erstellen",
|
||||
"network_fail": "Der API-Endpunkt kann nicht erreicht werden. Überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.",
|
||||
"network_fail": "Der API-Endpunkt kann nicht erreicht werden. Überprüfe Deine Netzwerkverbindung und versuche es erneut.",
|
||||
"offline": "Du scheinst offline zu sein. Die Daten in diesem Arbeitsbereich sind möglicherweise nicht aktuell.",
|
||||
"offline_short": "Du scheinst offline zu sein.",
|
||||
"post_request_tests": "Testskripts werden in JavaScript geschrieben und nach Erhalt der Antwort ausgeführt.",
|
||||
"pre_request_script": "Pre-Request-Skripte sind in JavaScript geschrieben und werden ausgeführt, bevor die Anfrage gesendet wird.",
|
||||
"script_fail": "Es scheint ein Fehler im Pre-Request-Skript zu sein. Überprüfen Sie den Fehler unten und korrigieren Sie das Skript entsprechend.",
|
||||
"test_script_fail": "Es scheint ein Fehler im Testskript zu sein. Überprüfen Sie den Fehler unten und korrigieren Sie das Skript entsprechend.",
|
||||
"tests": "Schreiben Sie ein Testskript, um das Debuggen zu automatisieren."
|
||||
"script_fail": "Es scheint ein Fehler im Pre-Request-Skript zu sein. Überprüfe den Fehler unten und korrigiere das Skript entsprechend.",
|
||||
"test_script_fail": "Es scheint ein Fehler im Testskript zu sein. Überprüfe den Fehler unten und korrigiere das Skript entsprechend.",
|
||||
"tests": "Schreibe ein Testskript, um das Debuggen zu automatisieren."
|
||||
},
|
||||
"hide": {
|
||||
"collection": "Collapse Collection Panel",
|
||||
"collection": "Sammlungsbereich einklappen",
|
||||
"more": "Mehr ausblenden",
|
||||
"preview": "Vorschau ausblenden",
|
||||
"sidebar": "Seitenleiste ausblenden"
|
||||
@@ -284,8 +302,8 @@
|
||||
"title": "Importieren"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Collapse or Expand Collections",
|
||||
"collapse_sidebar": "Collapse or Expand the sidebar",
|
||||
"collapse_collection": "Sammlungen ein- oder ausklappen",
|
||||
"collapse_sidebar": "Seitenleiste ein- oder ausklappen",
|
||||
"column": "Vertikales Layout",
|
||||
"name": "Layout",
|
||||
"row": "Horizontales Layout",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Import / Export"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Kommunikation",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Protokoll",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Nachricht",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Veröffentlichen",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Abonnieren",
|
||||
"topic": "Thema",
|
||||
"topic_name": "Themenname",
|
||||
@@ -325,10 +361,11 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App-Einstellungen",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editoren können neue Anfragen hinzufügen, bearbeiten und löschen.",
|
||||
"email_verification_mail": "Eine Bestätigungsmail wurde an Ihre primäre E-Mail-Adresse versendet. Bitte klicken Sie auf den darin stehenden Link um Ihre E-Mail-Adresse zu bestätigen.",
|
||||
"no_permission": "Sie haben nicht die erforderlichen Berechtigungen für diese Aktion.",
|
||||
"email_verification_mail": "Eine Bestätigungsmail wurde an Deine primäre E-Mail-Adresse versendet. Bitte klicke auf den darin stehenden Link um Deine E-Mail-Adresse zu bestätigen.",
|
||||
"no_permission": "Du hast nicht die erforderlichen Berechtigungen für diese Aktion.",
|
||||
"owner": "Eigentümer",
|
||||
"owner_description": "Eigentümer können Abfragen, Sammlungen und Teammitglieder hinzufügen, bearbeiten und löschen.",
|
||||
"roles": "Rollen",
|
||||
@@ -357,16 +394,16 @@
|
||||
"generate_code": "Code generieren",
|
||||
"generated_code": "Generierter Code",
|
||||
"header_list": "Header-Liste",
|
||||
"invalid_name": "Bitte geben Sie einen Namen für die Anfrage an",
|
||||
"invalid_name": "Bitte gib einen Namen für die Anfrage an",
|
||||
"method": "Methode",
|
||||
"name": "Anfragename",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"new": "Neue Anfrage",
|
||||
"override": "Überschreiben",
|
||||
"override_help": "Setze <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Überschrieben",
|
||||
"parameter_list": "Abfrageparameter",
|
||||
"parameters": "Parameter",
|
||||
"path": "Path",
|
||||
"path": "Pfad",
|
||||
"payload": "Nutzlast",
|
||||
"query": "Anfrage",
|
||||
"raw_body": "Roher Anfragetext",
|
||||
@@ -376,7 +413,7 @@
|
||||
"save_as": "Speichern als",
|
||||
"saved": "Anfrage gespeichert",
|
||||
"share": "Teilen",
|
||||
"share_description": "Share Hoppscotch with your friends",
|
||||
"share_description": "Teile Hoppscotch mit Deinen Freunden",
|
||||
"title": "Anfrage",
|
||||
"type": "Anfragetyp",
|
||||
"url": "URL",
|
||||
@@ -403,22 +440,25 @@
|
||||
"settings": {
|
||||
"accent_color": "Akzentfarbe",
|
||||
"account": "Konto",
|
||||
"account_description": "Passen Sie Ihre Kontoeinstellungen an.",
|
||||
"account_email_description": "Ihre primäre E-Mail-Adresse.",
|
||||
"account_name_description": "Dies ist Ihr Anzeigename.",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Passe Deine Kontoeinstellungen an.",
|
||||
"account_email_description": "Deine primäre E-Mail-Adresse.",
|
||||
"account_name_description": "Dies ist Dein Anzeigename.",
|
||||
"background": "Hintergrund",
|
||||
"black_mode": "Schwarz",
|
||||
"change_font_size": "Schriftgröße ändern",
|
||||
"choose_language": "Sprache wählen",
|
||||
"dark_mode": "Dunkel",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Menüpunkte vergrößern",
|
||||
"experiments": "Experimente",
|
||||
"experiments_notice": "Dies ist eine Sammlung von Experimenten, an denen wir aktuell arbeiten und die sich als nützlich erweisen könnten, Spaß machen, beides oder keines von beiden. Sie sind nicht endgültig und möglicherweise nicht stabil. Wenn also etwas übermäßig Seltsames passiert, geraten Sie nicht in Panik. Schalten Sie das verdammte Ding einfach aus. Scherz beiseite,",
|
||||
"experiments_notice": "Dies ist eine Sammlung von Experimenten, an denen wir aktuell arbeiten und die sich als nützlich erweisen könnten, Spaß machen, beides oder keines von beiden. Sie sind nicht endgültig und möglicherweise nicht stabil. Wenn also etwas übermäßig Seltsames passiert, gerate nicht in Panik. Schalte das verdammte Ding einfach aus. Scherz beiseite,",
|
||||
"extension_ver_not_reported": "Nicht gemeldet",
|
||||
"extension_version": "Erweiterungsversion",
|
||||
"extensions": "Erweiterungen",
|
||||
"extensions_use_toggle": "Verwenden Sie die Browsererweiterung, um Anfragen zu senden (falls vorhanden)",
|
||||
"follow": "Follow Us",
|
||||
"extensions_use_toggle": "Verwende die Browsererweiterung, um Anfragen zu senden (falls vorhanden)",
|
||||
"follow": "Folge uns",
|
||||
"font_size": "Schriftgröße",
|
||||
"font_size_large": "Groß",
|
||||
"font_size_medium": "Mittel",
|
||||
@@ -429,12 +469,12 @@
|
||||
"light_mode": "Hell",
|
||||
"official_proxy_hosting": "Offizieller Proxy, von Hoppscotch gehostet.",
|
||||
"profile": "Profil",
|
||||
"profile_description": "Aktualisiere deine Profildaten.",
|
||||
"profile_description": "Aktualisiere Deine Profildaten.",
|
||||
"profile_email": "E-Mail-Adresse",
|
||||
"profile_name": "Profilname",
|
||||
"proxy": "Proxy",
|
||||
"proxy_url": "Proxy-URL",
|
||||
"proxy_use_toggle": "Verwenden Sie die Proxy-Middleware, um Anfragen zu senden",
|
||||
"proxy_use_toggle": "Verwende die Proxy-Middleware, um Anfragen zu senden",
|
||||
"read_the": "Lies die",
|
||||
"reset_default": "Zurücksetzen",
|
||||
"short_codes": "Short codes",
|
||||
@@ -449,7 +489,7 @@
|
||||
"telemetry": "Telemetrie",
|
||||
"telemetry_helps_us": "Telemetrie hilft uns, unseren Betrieb zu personalisieren und Ihnen das beste Erlebnis zu bieten.",
|
||||
"theme": "Thema",
|
||||
"theme_description": "Passen Sie Ihr Anwendungsdesign an.",
|
||||
"theme_description": "Passe Dein Anwendungsdesign an.",
|
||||
"use_experimental_url_bar": "Experimentelle URL-Leiste mit Hervorhebung der Umgebung verwenden",
|
||||
"user": "Nutzer",
|
||||
"verified_email": "Verified email",
|
||||
@@ -473,7 +513,7 @@
|
||||
"title": "Allgemein"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "Laden Sie Leute zu Hoppscotch ein",
|
||||
"invite": "Lade Leute zu Hoppscotch ein",
|
||||
"title": "Sonstiges"
|
||||
},
|
||||
"navigation": {
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Anfrage senden",
|
||||
"title": "Anfrage"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Auf Schwarzes Design wechseln",
|
||||
"dark": "Auf Dunkles Design wechseln",
|
||||
@@ -512,7 +557,7 @@
|
||||
},
|
||||
"show": {
|
||||
"code": "Code anzeigen",
|
||||
"collection": "Expand Collection Panel",
|
||||
"collection": "Sammlungspanel ausklappen",
|
||||
"more": "Mehr anzeigen",
|
||||
"sidebar": "Seitenleiste anzeigen"
|
||||
},
|
||||
@@ -531,7 +576,7 @@
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "Bulk-Bearbeitung",
|
||||
"bulk_mode_placeholder": "Einträge werden durch Zeilenumbruch getrennt\nSchlüssel und Werte werden getrennt durch:\nStellen Sie # jeder Zeile voran, die Sie hinzufügen möchten, aber lassen Sie sie deaktiviert",
|
||||
"bulk_mode_placeholder": "Einträge werden durch Zeilenumbruch getrennt\nSchlüssel und Werte werden getrennt durch:\nStelle # jeder Zeile voran, die Du hinzufügen möchtest, aber lasse sie deaktiviert",
|
||||
"cleared": "Gelöscht",
|
||||
"connected": "In Verbindung gebracht",
|
||||
"connected_to": "Verbunden mit {name}",
|
||||
@@ -567,14 +612,14 @@
|
||||
"waiting_send_request": "Warten auf Anfrage senden"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "Lesen Sie mehr über die neuesten Versionen",
|
||||
"changelog": "Lese mehr über die neuesten Versionen",
|
||||
"chat": "Fragen? Chatte mit uns!",
|
||||
"community": "Stellen Sie Fragen und helfen Sie anderen",
|
||||
"documentation": "Lesen Sie mehr über Hoppscotch",
|
||||
"forum": "Stellen Sie Fragen und erhalten Sie Antworten",
|
||||
"github": "Follow us on Github",
|
||||
"community": "Stelle Fragen und helfe anderen",
|
||||
"documentation": "Lese mehr über Hoppscotch",
|
||||
"forum": "Stelle Fragen und erhalte Antworten",
|
||||
"github": "Folge uns auf Github",
|
||||
"shortcuts": "Hoppscotch schneller bedienen",
|
||||
"team": "Nehmen Sie Kontakt mit dem Team auf",
|
||||
"team": "Nehme Kontakt mit dem Team auf",
|
||||
"title": "Hilfe",
|
||||
"twitter": "Folge uns auf Twitter"
|
||||
},
|
||||
@@ -599,34 +644,34 @@
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "Sie sind bereits ein Mitglied des Teams, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"already_member": "Du bist bereits ein Mitglied des Teams, bitte kontaktiere den Teameigentümer.",
|
||||
"create_new": "Neues Team erstellen",
|
||||
"deleted": "Team gelöscht",
|
||||
"edit": "Team bearbeiten",
|
||||
"email": "E-Mail-Adresse",
|
||||
"email_do_not_match": "E-Mail-Adresse stimmt nicht mit Ihren Kontodaten überein, bitte kontaktieren Sie 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_disabled": "Eigentümer können das Team nicht verlassen",
|
||||
"invalid_email_format": "E-Mail-Format ist ungültig",
|
||||
"invalid_id": "Ungültige Team-ID, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"invalid_id": "Ungültige Team-ID, bitte kontaktiere den Teameigentümer.",
|
||||
"invalid_invite_link": "Ungültiger Einladungslink.",
|
||||
"invalid_invite_link_description": "Der Einladungslink ist ungültig, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"invalid_member_permission": "Bitte erteilen Sie dem Teammitglied eine gültige Erlaubnis",
|
||||
"invalid_invite_link_description": "Der Einladungslink ist ungültig, bitte kontaktiere den Teameigentümer.",
|
||||
"invalid_member_permission": "Bitte erteile dem Teammitglied eine gültige Erlaubnis",
|
||||
"invite": "Einladen",
|
||||
"invite_more": "Mehr einladen",
|
||||
"invite_tooltip": "Personen zum Arbeitsbereich einladen",
|
||||
"invited_to_team": "{owner} hat dich zu {team} eingeladen",
|
||||
"join": "Einladung angenommen",
|
||||
"join_beta": "Nehmen Sie am Beta-Programm teil, um auf Teams zuzugreifen.",
|
||||
"join_beta": "Nimm am Beta-Programm teil, um auf Teams zuzugreifen.",
|
||||
"join_team": "{team} beitreten",
|
||||
"joined_team": "Du bist {team} beigetreten",
|
||||
"joined_team_description": "Du bist nun ein Mitglied des Teams",
|
||||
"left": "Du hast das Team verlassen",
|
||||
"login_to_continue": "Zum Fortfahren anmelden",
|
||||
"login_to_continue_description": "Du musst angemeldet sein um ein Team beitreten zu können.",
|
||||
"logout_and_try_again": "Bitte melden Sie sich ab und versuchen Sie es mit einem anderen Konto.",
|
||||
"member_has_invite": "Diese E-Mail-Adresse wurde bereits eingeladen, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"member_not_found": "Mitglied konnte nicht gefunden werden, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"logout_and_try_again": "Bitte melde Dich ab und versuche es mit einem anderen Konto.",
|
||||
"member_has_invite": "Diese E-Mail-Adresse wurde bereits eingeladen, bitte kontaktiere den Teameigentümer.",
|
||||
"member_not_found": "Mitglied konnte nicht gefunden werden, bitte kontaktiere den Teameigentümer.",
|
||||
"member_removed": "Benutzer entfernt",
|
||||
"member_role_updated": "Benutzerrollen aktualisiert",
|
||||
"members": "Mitglieder",
|
||||
@@ -635,17 +680,22 @@
|
||||
"new": "Neues Team",
|
||||
"new_created": "Neues Team erstellt",
|
||||
"new_name": "Mein neues Team",
|
||||
"no_access": "Sie haben keinen Bearbeitungszugriff auf diese Sammlungen",
|
||||
"no_invite_found": "Einladung nicht gefunden, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"not_found": "Team wurde nicht gefunde, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"not_valid_viewer": "Sie haben nicht die richtige Berechtung als Gast, bitte kontaktieren Sie den Teameigentümer.",
|
||||
"pending_invites": "Pending invites",
|
||||
"no_access": "Du hast keinen Bearbeitungszugriff auf diese Sammlungen",
|
||||
"no_invite_found": "Einladung nicht gefunden, 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.",
|
||||
"pending_invites": "Wartende Einladungen",
|
||||
"permissions": "Berechtigungen",
|
||||
"saved": "Team gespeichert",
|
||||
"select_a_team": "Team auswählen",
|
||||
"title": "Team",
|
||||
"we_sent_invite_link": "Einladungen wurden an alle E-Mails verschickt!",
|
||||
"we_sent_invite_link_description": "Bitten Sie alle eingeladenen Personen, ihren Posteingang zu überprüfen. Klicken Sie auf den Link, um dem Team beizutreten."
|
||||
"we_sent_invite_link_description": "Bitte alle eingeladenen Personen, ihren Posteingang zu überprüfen. Klicke auf den Link, um dem Team beizutreten."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "Test fehlgeschlagen",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Τα καθαρίζω όλα",
|
||||
"close": "Close",
|
||||
"connect": "Συνδέω-συωδεομαι",
|
||||
"connecting": "Connecting",
|
||||
"copy": "αντίγραφο",
|
||||
"delete": "Διαγράφω",
|
||||
"disconnect": "Αποσυνδέω",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Επεξεργασία",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Πήγαινε πίσω",
|
||||
"group_by": "Group by",
|
||||
"label": "Επιγραφή",
|
||||
"learn_more": "Μάθε περισσότερα",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Αναζήτηση",
|
||||
"send": "Στείλετε",
|
||||
"start": "Αρχή",
|
||||
"starting": "Starting",
|
||||
"stop": "Να σταματήσει",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -54,7 +57,7 @@
|
||||
"copy": "αντίγραφο",
|
||||
"copy_user_id": "Copy User Auth Token",
|
||||
"developer_option": "Developer options",
|
||||
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
|
||||
"developer_option_description": "Εργαλεία για προγραμματιστές που βοηθάνε στην ανάπτυξη και συντήρηση του Hoppscotch.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Τεκμηρίωση",
|
||||
"github": "GitHub",
|
||||
@@ -75,9 +78,9 @@
|
||||
"shortcuts": "Συντομεύσεις",
|
||||
"spotlight": "Προβολέας θέατρου",
|
||||
"status": "Κατάσταση",
|
||||
"status_description": "Check the status of the website",
|
||||
"status_description": "Ελέγξτε το status της Ιστοσελίδας",
|
||||
"terms_and_privacy": "Όροι και απόρρητο",
|
||||
"twitter": "Κελάδημα",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Πληκτρολογήστε μια εντολή ή αναζήτηση…",
|
||||
"we_use_cookies": "Χρησιμοποιούμε cookies",
|
||||
"whats_new": "Τι νέα?",
|
||||
@@ -89,7 +92,7 @@
|
||||
"continue_with_email": "Συνεχίστε με το Email",
|
||||
"continue_with_github": "Συνεχίστε με το GitHub",
|
||||
"continue_with_google": "Συνεχίστε με την Google",
|
||||
"continue_with_microsoft": "Continue with Microsoft",
|
||||
"continue_with_microsoft": "Συνεχίστε με την Microsoft",
|
||||
"email": "ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ",
|
||||
"logged_out": "Αποσυνδέθηκα",
|
||||
"login": "Σύνδεση",
|
||||
@@ -158,62 +161,68 @@
|
||||
"body": "Αυτό το αίτημα δεν έχει σώμα",
|
||||
"collection": "Η συλλογή είναι άδεια",
|
||||
"collections": "Οι συλλογές είναι άδειες",
|
||||
"documentation": "Connect to a GraphQL endpoint to view documentation",
|
||||
"endpoint": "Endpoint cannot be empty",
|
||||
"documentation": "Συνδεθείτε σε ένα GraphQL endpoint για προβολή της τεκμηρίωσης",
|
||||
"endpoint": "Το Endpoint δεν μπορεί να είναι άδειο",
|
||||
"environments": "Τα περιβάλλοντα είναι άδεια",
|
||||
"folder": "Ο φάκελος είναι άδειος",
|
||||
"headers": "Αυτό το αίτημα δεν έχει κεφαλίδες",
|
||||
"history": "Η ιστορία είναι άδεια",
|
||||
"invites": "Invite list is empty",
|
||||
"history": "Το ιστορικό είναι άδειο",
|
||||
"invites": "Η λίστα προσκλήσεων είναι άδεια",
|
||||
"members": "Η ομάδα είναι άδεια",
|
||||
"parameters": "Αυτό το αίτημα δεν έχει παραμέτρους",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"pending_invites": "Δεν υπάρχουν εκκρεμείς προσκλήσεις για αυτή την ομάδα",
|
||||
"profile": "Συνδεθείτε για προβολή του προφίλ σας",
|
||||
"protocols": "Τα πρωτόκολλα είναι κενά",
|
||||
"schema": "Συνδεθείτε σε ένα τελικό σημείο GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"shortcodes": "Τα Shortcodes είναι κενά",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Το όνομα της ομάδας είναι κενό",
|
||||
"teams": "Οι ομάδες είναι άδειες",
|
||||
"tests": "Δεν υπάρχουν δοκιμές για αυτό το αίτημα"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "Add to Global",
|
||||
"added": "Environment addition",
|
||||
"add_to_global": "Προσθήκη στο Global",
|
||||
"added": "Προσθήκη Περιβάλλοντος",
|
||||
"create_new": "Δημιουργήστε νέο περιβάλλον",
|
||||
"created": "Environment created",
|
||||
"deleted": "Environment deletion",
|
||||
"created": "Το Περιβάλλον δημιουργήθηκε",
|
||||
"deleted": "Διαγραφή Περιβάλλοντος",
|
||||
"edit": "Επεξεργασία Περιβάλλοντος",
|
||||
"invalid_name": "Καταχωρίστε ένα έγκυρο όνομα για το περιβάλλον",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"my_environments": "Τα Περιβάλλοντα μου",
|
||||
"nested_overflow": "Οι 'φωλιασμένες' μεταβλητές περιβάλλοντος είναι περιορισμένες σε 10 επίπεδα",
|
||||
"new": "Νέο Περιβάλλον",
|
||||
"no_environment": "Χωρίς περιβάλλον",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"no_environment_description": "Δέν επιλέχθηκε κάποιο περιβάλλον. Διαλέξτε τι θέλετε να κάνετε με τις παρακάτω μεταβλητές.",
|
||||
"select": "Επιλέξτε περιβάλλον",
|
||||
"team_environments": "Περιβάλλοντα Ομάδας",
|
||||
"title": "Περιβάλλοντα",
|
||||
"updated": "Environment updation",
|
||||
"updated": "Αναβάθμιση Περιβάλλοντος",
|
||||
"variable_list": "Λίστα μεταβλητών"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "Αυτό το πρόγραμμα περιήγησης δεν φαίνεται να υποστηρίζει διακομιστές που έχουν σταλεί συμβάντα.",
|
||||
"check_console_details": "Ελέγξτε το αρχείο καταγραφής της κονσόλας για λεπτομέρειες.",
|
||||
"curl_invalid_format": "Το cURL δεν έχει μορφοποιηθεί σωστά",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Όνομα κενού αιτήματος",
|
||||
"f12_details": "(F12 για λεπτομέρειες)",
|
||||
"gql_prettify_invalid_query": "Δεν ήταν δυνατή η προεπιλογή ενός μη έγκυρου ερωτήματος, η επίλυση σφαλμάτων σύνταξης ερωτήματος και η δοκιμή ξανά",
|
||||
"incomplete_config_urls": "Incomplete configuration URLs",
|
||||
"incorrect_email": "Incorrect email",
|
||||
"invalid_link": "Invalid link",
|
||||
"invalid_link_description": "The link you clicked is invalid or expired.",
|
||||
"json_parsing_failed": "Invalid JSON",
|
||||
"incomplete_config_urls": "Μη-ολοκληρωμένα URLs διαμόρφωσης",
|
||||
"incorrect_email": "Λάθος email",
|
||||
"invalid_link": "Μή έγκυρο link",
|
||||
"invalid_link_description": "Ο σύνδεσμος που επιλέξατε έχει λήξει ή δεν είναι έγκυρος.",
|
||||
"json_parsing_failed": "Μη έγκυρο JSON",
|
||||
"json_prettify_invalid_body": "Δεν ήταν δυνατή η ομορφιά ενός μη έγκυρου σώματος, η επίλυση σφαλμάτων σύνταξης json και η προσπάθεια ξανά",
|
||||
"network_error": "There seems to be a network error. Please try again.",
|
||||
"network_error": "Από ότι φαίνεται υπάρχει ένα σφάλμα δικτύου. Παρακαλούμε προσπαθήστε ξανά.",
|
||||
"network_fail": "Δεν ήταν δυνατή η αποστολή του αιτήματος",
|
||||
"no_duration": "Χωρίς διάρκεια",
|
||||
"no_results_found": "No matches found",
|
||||
"page_not_found": "This page could not be found",
|
||||
"no_results_found": "Δεν βρέθηκαν αντιστοιχίες",
|
||||
"page_not_found": "Αυτή η σελίδα δεν βρέθηκε",
|
||||
"script_fail": "Δεν ήταν δυνατή η εκτέλεση του σεναρίου πριν από το αίτημα",
|
||||
"something_went_wrong": "Κάτι πήγε στραβά",
|
||||
"test_script_fail": "Could not execute post-request script"
|
||||
"test_script_fail": "Δεν μπορεσε να εκτελεστεί το post-request script"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "Εξαγωγή ως JSON",
|
||||
@@ -222,11 +231,16 @@
|
||||
"require_github": "Συνδεθείτε με το GitHub για να δημιουργήσετε μυστική ουσία",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Ο φάκελος δημιουργήθηκε",
|
||||
"edit": "Επεξεργασία φακέλου",
|
||||
"invalid_name": "Καταχωρίστε ένα όνομα για το φάκελο",
|
||||
"name_length_insufficient": "Folder name should be at least 3 characters long",
|
||||
"name_length_insufficient": "Το όνομα του φακέλου πρέπει έχει μέγεθος τουλάχιστον 3 χαρακτήρες.",
|
||||
"new": "Νέος φάκελος",
|
||||
"renamed": "Ο φάκελος μετονομάστηκε"
|
||||
},
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Σχήμα",
|
||||
"subscriptions": "Συνδρομές"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Εγκατάσταση εφαρμογής",
|
||||
"login": "Σύνδεση",
|
||||
@@ -253,7 +271,7 @@
|
||||
"tests": "Γράψτε ένα δοκιμαστικό σενάριο για να αυτοματοποιήσετε τον εντοπισμό σφαλμάτων."
|
||||
},
|
||||
"hide": {
|
||||
"collection": "Collapse Collection Panel",
|
||||
"collection": "Σύμπτυξη Panel Συλλογών",
|
||||
"more": "Κρύψου περισσότερο",
|
||||
"preview": "Απόκρυψη προεπισκόπησης",
|
||||
"sidebar": "Απόκρυψη πλευρικής γραμμής"
|
||||
@@ -263,32 +281,32 @@
|
||||
"curl": "Εισαγωγή cURL",
|
||||
"failed": "Η εισαγωγή απέτυχε",
|
||||
"from_gist": "Εισαγωγή από το Gist",
|
||||
"from_gist_description": "Import from Gist URL",
|
||||
"from_insomnia": "Import from Insomnia",
|
||||
"from_insomnia_description": "Import from Insomnia collection",
|
||||
"from_json": "Import from Hoppscotch",
|
||||
"from_json_description": "Import from Hoppscotch collection file",
|
||||
"from_gist_description": "Εισαγωγή από Gist URL",
|
||||
"from_insomnia": "Εισαγωγή από Insomnia",
|
||||
"from_insomnia_description": "Εισαγωγή από Συλλογή Insomnia",
|
||||
"from_json": "Εισαγωγή από Hoppscotch",
|
||||
"from_json_description": "Εισαγωγή από αρχείο συλλογών Hoppscotch",
|
||||
"from_my_collections": "Εισαγωγή από τις Συλλογές μου",
|
||||
"from_my_collections_description": "Import from My Collections file",
|
||||
"from_openapi": "Import from OpenAPI",
|
||||
"from_openapi_description": "Import from OpenAPI specification file (YML/JSON)",
|
||||
"from_postman": "Import from Postman",
|
||||
"from_postman_description": "Import from Postman collection",
|
||||
"from_url": "Import from URL",
|
||||
"from_my_collections_description": "Εισαγωγή από αρχείο οι Συλλογές μου",
|
||||
"from_openapi": "Εισαγωγή από OpenAPI",
|
||||
"from_openapi_description": "Εισαγωγή από αρχειο προδιαγραφών OpenAPI (YML/JSON)",
|
||||
"from_postman": "Εισαγωγή από Postman",
|
||||
"from_postman_description": "Εισαγωγή Συλλογής από Postman",
|
||||
"from_url": "Εισαγωγή από URL",
|
||||
"gist_url": "Εισαγάγετε Gist URL",
|
||||
"import_from_url_invalid_fetch": "Couldn't get data from the url",
|
||||
"import_from_url_invalid_file_format": "Error while importing collections",
|
||||
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Collections Imported",
|
||||
"json_description": "Import collections from a Hoppscotch Collections JSON file",
|
||||
"import_from_url_invalid_fetch": "Δεν μπορέσαμε να πάρουμε δεδομένα από το url",
|
||||
"import_from_url_invalid_file_format": "Σφάλμα κατά την εισαγωγή των Συλλογών",
|
||||
"import_from_url_invalid_type": "Μη υποστηριζόμενος τύπος. Αποδεκτές τιμές είναι 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Η εισαγωγή των Συλλογών ήταν επιτυχής",
|
||||
"json_description": "Εισαγωγή συλλογών αρχείο JSON Hoppscotch Collections",
|
||||
"title": "Εισαγωγή"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Collapse or Expand Collections",
|
||||
"collapse_sidebar": "Collapse or Expand the sidebar",
|
||||
"column": "Vertical layout",
|
||||
"name": "Layout",
|
||||
"row": "Horizontal layout",
|
||||
"collapse_collection": "Σύμπτυξη ή επέκταση Συλλογών",
|
||||
"collapse_sidebar": "Σύμπτυξη ή επέκταση του sidebar",
|
||||
"column": "Κατακόρυφη Διάταξη",
|
||||
"name": "Διάταξη",
|
||||
"row": "Οριζόντια Διάταξη",
|
||||
"zen_mode": "Λειτουργία Zen"
|
||||
},
|
||||
"modal": {
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Εισαγωγή εξαγωγή"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Επικοινωνία",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Κούτσουρο",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Μήνυμα",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Δημοσιεύω",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Εγγραφείτε",
|
||||
"topic": "Θέμα",
|
||||
"topic_name": "Όνομα θέματος",
|
||||
@@ -324,18 +360,19 @@
|
||||
"snippets": "Αποσπάσματα"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"app_settings": "Ρυθμίσεις Εφαρμογής",
|
||||
"default_hopp_displayname": "Ανώνυμος Χρήστης",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
"no_permission": "You do not have permission to perform this action.",
|
||||
"owner": "Owner",
|
||||
"owner_description": "Owners can add, edit, and delete requests, collections and team members.",
|
||||
"roles": "Roles",
|
||||
"roles_description": "Roles are used to control access to the shared collections.",
|
||||
"updated": "Profile updated",
|
||||
"editor_description": "Οι Editors μπορούν να προσθέσουν, επεξεργαστούν και διαγράψουν αιτήματα.",
|
||||
"email_verification_mail": "Έχει αποσταλεί ένα μήνυμα επιβεβαίωσης στην διεύθυνση email σας. Παρακαλούμε κάντε κλικ στο Link που περιέχει το email για να επιβεβαιώσετε την διεύθυνση email σας.",
|
||||
"no_permission": "Δεν έχετε άδεια για την εκτέλεση αυτής της λειτουργίας.",
|
||||
"owner": "Ιδιοκτήτης",
|
||||
"owner_description": "Οι Ιδιοκτήτες μπορούν να προσθέσουν, επεξεργαστούν και διαγράψουν αιτήματα, συλλογές και μέλη ομάδων.",
|
||||
"roles": "Ρόλοι",
|
||||
"roles_description": "Οι ρόλοι χρησιμοποιούνται για να ελέγχεται η πρόσβαση και ο χειρισμός μιας κοινοποιημένης συλλογής.",
|
||||
"updated": "Το προφίλ ενημερώθηκε",
|
||||
"viewer": "Viewer",
|
||||
"viewer_description": "Viewers can only view and use requests."
|
||||
"viewer_description": "Οι Viewers μπορούν μόνο να δούν και χρησιμοποιήσουν αιτήματα."
|
||||
},
|
||||
"remove": {
|
||||
"star": "Αφαίρεση αστεριού"
|
||||
@@ -360,9 +397,9 @@
|
||||
"invalid_name": "Καταχωρίστε ένα όνομα για το αίτημα",
|
||||
"method": "Μέθοδος",
|
||||
"name": "Αίτημα ονόματος",
|
||||
"new": "New Request",
|
||||
"new": "Νέο Αίτημα",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Παράμετροι ερωτήματος",
|
||||
"parameters": "Παράμετροι",
|
||||
@@ -376,12 +413,12 @@
|
||||
"save_as": "Αποθήκευση ως",
|
||||
"saved": "Το αίτημα αποθηκεύτηκε",
|
||||
"share": "Μερίδιο",
|
||||
"share_description": "Share Hoppscotch with your friends",
|
||||
"share_description": "Κοινοποίηση Hoppscotch στους φίλους σου",
|
||||
"title": "Αίτηση",
|
||||
"type": "Τύπος αιτήματος",
|
||||
"url": "URL",
|
||||
"variables": "Μεταβλητές",
|
||||
"view_my_links": "View my links"
|
||||
"view_my_links": "Προβολή των links μου"
|
||||
},
|
||||
"response": {
|
||||
"body": "Σώμα απόκρισης",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Χρώμα προφοράς",
|
||||
"account": "λογαριασμός",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Προσαρμόστε τις ρυθμίσεις του λογαριασμού σας.",
|
||||
"account_email_description": "Η κύρια διεύθυνση email σας.",
|
||||
"account_name_description": "Αυτό είναι το εμφανιζόμενο όνομά σας.",
|
||||
@@ -411,14 +449,16 @@
|
||||
"change_font_size": "Αλλαγή μεγέθους γραμματοσειράς",
|
||||
"choose_language": "Διάλεξε γλώσσα",
|
||||
"dark_mode": "Σκοτάδι",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Επέκταση navigation",
|
||||
"experiments": "Πειράματα",
|
||||
"experiments_notice": "Αυτή είναι μια συλλογή πειραμάτων που δουλεύουμε και που μπορεί να αποδειχθούν χρήσιμα, διασκεδαστικά, και τα δύο ή κανένα από τα δύο. Δεν είναι οριστικά και μπορεί να μην είναι σταθερά, οπότε αν συμβεί κάτι υπερβολικά περίεργο, μην πανικοβληθείτε. Απλώς απενεργοποιήστε το πράγμα. Τα αστεία στην άκρη,",
|
||||
"extension_ver_not_reported": "Δεν αναφέρεται",
|
||||
"extension_version": "Έκταση επέκτασης",
|
||||
"extensions": "Επεκτάσεις",
|
||||
"extensions_use_toggle": "Χρησιμοποιήστε την επέκταση του προγράμματος περιήγησης για να στείλετε αιτήματα (εάν υπάρχουν)",
|
||||
"follow": "Follow Us",
|
||||
"follow": "Ακολούθησε Μας",
|
||||
"font_size": "Μέγεθος γραμματοσειράς",
|
||||
"font_size_large": "Μεγάλο",
|
||||
"font_size_medium": "Μεσαίο",
|
||||
@@ -429,17 +469,17 @@
|
||||
"light_mode": "Φως",
|
||||
"official_proxy_hosting": "Το Official Proxy φιλοξενείται από το Hoppscotch.",
|
||||
"profile": "Profile",
|
||||
"profile_description": "Update your profile details",
|
||||
"profile_email": "Email address",
|
||||
"profile_name": "Profile name",
|
||||
"profile_description": "Ανανεώστε τις λεπτομέρειες του προφίλ σας",
|
||||
"profile_email": "Διευθυνση Email",
|
||||
"profile_name": "Όνομα Προφίλ",
|
||||
"proxy": "Πληρεξούσιο",
|
||||
"proxy_url": "URL διακομιστή μεσολάβησης",
|
||||
"proxy_use_toggle": "Χρησιμοποιήστε το ενδιάμεσο διακομιστή μεσολάβησης για να στείλετε αιτήματα",
|
||||
"read_the": "Διαβάστε το",
|
||||
"reset_default": "Επαναφορά στο προκαθορισμένο",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes which were created by you.",
|
||||
"sidebar_on_left": "Sidebar on left",
|
||||
"short_codes_description": "Short codes πυ δημιουργήσατε.",
|
||||
"sidebar_on_left": "Sidebar στα αριστερά",
|
||||
"sync": "Συγχρονίζω",
|
||||
"sync_collections": "Συλλογές",
|
||||
"sync_description": "Αυτές οι ρυθμίσεις συγχρονίζονται με το cloud.",
|
||||
@@ -452,15 +492,15 @@
|
||||
"theme_description": "Προσαρμόστε το θέμα της εφαρμογής σας.",
|
||||
"use_experimental_url_bar": "Χρήση πειραματικής γραμμής URL με ανάδειξη περιβάλλοντος",
|
||||
"user": "Χρήστης",
|
||||
"verified_email": "Verified email",
|
||||
"verify_email": "Verify email"
|
||||
"verified_email": "Επαληθευμένο email",
|
||||
"verify_email": "Επαλήθευση email"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Actions",
|
||||
"actions": "Δράσεις",
|
||||
"created_on": "Created on",
|
||||
"deleted": "Shortcode deleted",
|
||||
"deleted": "Το Shortcode διαγράφηκε",
|
||||
"method": "Method",
|
||||
"not_found": "Shortcode not found",
|
||||
"not_found": "Το Shortcode δεν βρέθηκε",
|
||||
"short_code": "Short code",
|
||||
"url": "URL"
|
||||
},
|
||||
@@ -481,7 +521,7 @@
|
||||
"documentation": "Μεταβείτε στη σελίδα Τεκμηρίωση",
|
||||
"forward": "Προχωρήστε στην επόμενη σελίδα",
|
||||
"graphql": "Μεταβείτε στη σελίδα GraphQL",
|
||||
"profile": "Go to Profile page",
|
||||
"profile": "Πάνε στην σελίδα του Προφίλ",
|
||||
"realtime": "Μεταβείτε στη σελίδα σε πραγματικό χρόνο",
|
||||
"rest": "Μεταβείτε στη σελίδα REST",
|
||||
"settings": "Μεταβείτε στη σελίδα Ρυθμίσεις",
|
||||
@@ -502,31 +542,36 @@
|
||||
"send_request": "Στείλε αίτημα",
|
||||
"title": "Αίτηση"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Αντιγραφή response στο πρόχειρο",
|
||||
"download": "Κατέβασμα response ώς αρχείο",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
"light": "Switch theme to light mode",
|
||||
"system": "Switch theme to system mode",
|
||||
"title": "Theme"
|
||||
"black": "Αλλαγή θέματος στη Μαύρη Λειτουργία",
|
||||
"dark": "Αλλαγή θέματος στη Σκούρη Λειτουργία",
|
||||
"light": "Αλλαγή θέματος στη Ανοιχτή Λειτουργία",
|
||||
"system": "Αλλαγή θέματος στη Λειτουργία Συστήματος",
|
||||
"title": "Θέμα"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "Εμφάνιση κωδικού",
|
||||
"collection": "Expand Collection Panel",
|
||||
"collection": "Επέκταση Collection Panel",
|
||||
"more": "Δείτε περισσότερα",
|
||||
"sidebar": "Εμφάνιση πλευρικής γραμμής"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "Επικοινωνία",
|
||||
"connection_not_authorized": "This SocketIO connection does not use any authentication.",
|
||||
"connection_not_authorized": "Η συγκεκριμένη σύνδεση SocketIO δεν χρησιμοποιεί αυθεντικοποίηση.",
|
||||
"event_name": "Όνομα συμβάντος",
|
||||
"events": "Εκδηλώσεις",
|
||||
"log": "Κούτσουρο",
|
||||
"log": "Logs",
|
||||
"url": "URL"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "Τύπος συμβάντος",
|
||||
"log": "Κούτσουρο",
|
||||
"log": "Logs",
|
||||
"url": "URL"
|
||||
},
|
||||
"state": {
|
||||
@@ -536,9 +581,9 @@
|
||||
"connected": "Συνδεδεμένος",
|
||||
"connected_to": "Συνδέθηκε με το {name}",
|
||||
"connecting_to": "Σύνδεση με {name} ...",
|
||||
"connection_error": "Failed to connect",
|
||||
"connection_failed": "Connection failed",
|
||||
"connection_lost": "Connection lost",
|
||||
"connection_error": "Η Σύνδεση απέτυχε",
|
||||
"connection_failed": "Αποτυχής Σύνδεση",
|
||||
"connection_lost": "Η Σύνδεση χάθηκε",
|
||||
"copied_to_clipboard": "Αντιγράφηκε στο πρόχειρο",
|
||||
"deleted": "Διαγράφηκε",
|
||||
"deprecated": "ΚΑΤΑΡΓΗΘΗΚΕ",
|
||||
@@ -553,17 +598,17 @@
|
||||
"history_deleted": "Το ιστορικό διαγράφηκε",
|
||||
"linewrap": "Τυλίξτε γραμμές",
|
||||
"loading": "Φόρτωση...",
|
||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
||||
"message_received": "Μήνυμα: {message} ήρθε με θέμα: {topic}",
|
||||
"mqtt_subscription_failed": "Κάτι πήγε στραβά κατα την εγγραφή στο Θέμα: {topic}",
|
||||
"none": "Κανένας",
|
||||
"nothing_found": "Δεν βρέθηκε τίποτα για",
|
||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
||||
"published_message": "Published message: {message} to topic: {topic}",
|
||||
"reconnection_error": "Failed to reconnect",
|
||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
||||
"published_error": "Κάτι πήγε στραβά κατα την αποστολή του μηνύματος: {topic} με θέμα: {message}",
|
||||
"published_message": "Δημοσιευμένο Μηνυμα: {message} με θέμα: {topic}",
|
||||
"reconnection_error": "Αποτυχία επανασύνδεσης",
|
||||
"subscribed_failed": "Αποτυχία εγγραφής στο Θέμα: {topic}",
|
||||
"subscribed_success": "Επιτυχία εγγραφής στο Θέμα: {topic}",
|
||||
"unsubscribed_failed": "Αποτυχία απεγγραφής στο Θέμα: {topic}",
|
||||
"unsubscribed_success": "Επιτυχία απεγγραφής στο Θέμα: {topic}",
|
||||
"waiting_send_request": "Αναμονή για αποστολή αιτήματος"
|
||||
},
|
||||
"support": {
|
||||
@@ -599,59 +644,64 @@
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "You are already a member of this team. Contact your team owner.",
|
||||
"already_member": "Είστε ήδη μέλος σε αυτή την ομάδα. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"create_new": "Δημιουργία νέας ομάδας",
|
||||
"deleted": "Η ομάδα διαγράφηκε",
|
||||
"edit": "Επεξεργασία ομάδας",
|
||||
"email": "ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ",
|
||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||
"email_do_not_match": "Το Email δεν ταιριάζει με τις λεπτομέριες του προφιλ σας. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"exit": "Έξοδος από την ομάδα",
|
||||
"exit_disabled": "Μόνο ο ιδιοκτήτης δεν μπορεί να αποχωρήσει από την ομάδα",
|
||||
"invalid_email_format": "Η μορφή ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη",
|
||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||
"invalid_invite_link": "Invalid invite link",
|
||||
"invalid_invite_link_description": "The link you followed is invalid. Contact your team owner.",
|
||||
"invalid_id": "Μή εγκυρο αναγνωριστικό ομάδας. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"invalid_invite_link": "Μη έγκυρος σύνδεσμος πρόσκλησης",
|
||||
"invalid_invite_link_description": "Ο σύνδεσμος πρόσκλησης δεν είναι έγκυρος. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"invalid_member_permission": "Δώστε έγκυρη άδεια στο μέλος της ομάδας",
|
||||
"invite": "Invite",
|
||||
"invite_more": "Invite more",
|
||||
"invite_tooltip": "Invite people to this workspace",
|
||||
"invited_to_team": "{owner} invited you to join {team}",
|
||||
"join": "Invitation accepted",
|
||||
"invite": "Πρόσκληση",
|
||||
"invite_more": "Πρόσκληση περισσοτέρων",
|
||||
"invite_tooltip": "Πρόσκληση χρηστών σε αυτό το workspace",
|
||||
"invited_to_team": "{owner} σου έκανε πρόσκληση για να μπεις στην {team}",
|
||||
"join": "Πρόσκληση Αποδεκτή",
|
||||
"join_beta": "Εγγραφείτε στο πρόγραμμα beta για πρόσβαση σε ομάδες.",
|
||||
"join_team": "Join {team}",
|
||||
"joined_team": "You have joined {team}",
|
||||
"joined_team_description": "You are now a member of this team",
|
||||
"join_team": "Γίνε Μέλος {team}",
|
||||
"joined_team": "Μπήκες στην ομάδα: {team}",
|
||||
"joined_team_description": "Είστε πλέον μέλος αυτής της ομάδας",
|
||||
"left": "Έφυγες από την ομάδα",
|
||||
"login_to_continue": "Login to continue",
|
||||
"login_to_continue_description": "You need to be logged in to join a team.",
|
||||
"logout_and_try_again": "Logout and sign in with another account",
|
||||
"member_has_invite": "This email ID already has an invite. Contact your team owner.",
|
||||
"member_not_found": "Member not found. Contact your team owner.",
|
||||
"login_to_continue": "Συνδέσου για να συνεχίσεις",
|
||||
"login_to_continue_description": "Πρέπει να είσαι συνδεδεμένος για να μπεις σε κάποια ομάδα.",
|
||||
"logout_and_try_again": "Αποσύνδεση και Σύνδεση με άλλο λογαριασμό",
|
||||
"member_has_invite": "Αυτή η διεύθυνση email έχει ήδη πρόσκληση. This email ID already has an invite. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"member_not_found": "Το μέλος δεν βρέθηκε. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"member_removed": "Ο χρήστης καταργήθηκε",
|
||||
"member_role_updated": "Οι ρόλοι των χρηστών ενημερώθηκαν",
|
||||
"members": "Μέλη",
|
||||
"name_length_insufficient": "Το όνομα της ομάδας πρέπει να έχει τουλάχιστον 6 χαρακτήρες",
|
||||
"name_updated": "Team name updated",
|
||||
"name_updated": "Το όνομα ομάδας ανανεώθηκε",
|
||||
"new": "Νέα Ομάδα",
|
||||
"new_created": "Δημιουργήθηκε νέα ομάδα",
|
||||
"new_name": "Η νέα μου ομάδα",
|
||||
"no_access": "Δεν έχετε πρόσβαση επεξεργασίας σε αυτές τις συλλογές",
|
||||
"no_invite_found": "Invitation 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.",
|
||||
"pending_invites": "Pending invites",
|
||||
"no_invite_found": "Δέν βρέθηκε πρόσκληση. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"not_found": "Η ομάδα δεν βρέθηκε. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"not_valid_viewer": "Δεν είστε έγκυρος viewer. Επικοινωνήστε με τον Ιδιοκτήτη της Ομάδας.",
|
||||
"pending_invites": "Εκκρεμης προσκλήσεις",
|
||||
"permissions": "Άδειες",
|
||||
"saved": "Η ομάδα σώθηκε",
|
||||
"select_a_team": "Select a team",
|
||||
"select_a_team": "Επιλογή ομάδας",
|
||||
"title": "Της ομάδας",
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
"we_sent_invite_link": "Στείλαμε έναν σύνδεσμο πρόσκλησης σε όλους!",
|
||||
"we_sent_invite_link_description": "Ζητήστε από όλους όσους στείλατε πρόσκληση να ελέγξουν τα email τους. Click στον σύνδεσμο για εισαγωγή στην ομάδα."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Το περιβάλλον διαγράφηκε",
|
||||
"duplicate": "Το περιβάλλον αντιγράφηκε",
|
||||
"not_found": "Το περιβάλλον δεν βρέθηκε."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"failed": "Αποτυχία test",
|
||||
"javascript_code": "Κώδικας JavaScript",
|
||||
"learn": "Διαβάστε την τεκμηρίωση",
|
||||
"passed": "test passed",
|
||||
"passed": "Επιτυχία test",
|
||||
"report": "Αναφορά δοκιμής",
|
||||
"results": "Αποτελέσματα δοκιμών",
|
||||
"script": "Γραφή",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Clear all",
|
||||
"close": "Close",
|
||||
"connect": "Connect",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Copy",
|
||||
"delete": "Delete",
|
||||
"disconnect": "Disconnect",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Edit",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Go back",
|
||||
"group_by": "Group by",
|
||||
"label": "Label",
|
||||
"learn_more": "Learn more",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Search",
|
||||
"send": "Send",
|
||||
"start": "Start",
|
||||
"starting": "Starting",
|
||||
"stop": "Stop",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "Team is empty",
|
||||
"parameters": "This request does not have any parameters",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "Protocols are empty",
|
||||
"schema": "Connect to a GraphQL endpoint to view schema",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Team name empty",
|
||||
"teams": "You don't belong to any teams",
|
||||
"tests": "There are no tests for this request"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Edit Environment",
|
||||
"invalid_name": "Please provide a name for the environment",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "New Environment",
|
||||
"no_environment": "No environment",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Select environment",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Environments",
|
||||
"updated": "Environment updated",
|
||||
"variable_list": "Variable List"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "This browser doesn't seems to have Server Sent Events support.",
|
||||
"check_console_details": "Check console log for details.",
|
||||
"curl_invalid_format": "cURL is not formatted properly",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Empty Request Name",
|
||||
"f12_details": "(F12 for details)",
|
||||
"gql_prettify_invalid_query": "Couldn't prettify an invalid query, solve query syntax errors and try again",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Login with GitHub to create secret gist",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Folder created",
|
||||
"edit": "Edit Folder",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Schema",
|
||||
"subscriptions": "Subscriptions"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Install app",
|
||||
"login": "Login",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Import / Export"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Communication",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Log",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Message",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publish",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Subscribe",
|
||||
"topic": "Topic",
|
||||
"topic_name": "Topic Name",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -353,7 +390,8 @@
|
||||
},
|
||||
"copy_link": "Copy link",
|
||||
"duration": "Duration",
|
||||
"enter_curl": "Enter cURL",
|
||||
"enter_curl": "Enter cURL command",
|
||||
"duplicated": "Request duplicated",
|
||||
"generate_code": "Generate code",
|
||||
"generated_code": "Generated code",
|
||||
"header_list": "Header List",
|
||||
@@ -362,7 +400,7 @@
|
||||
"name": "Request name",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Query Parameters",
|
||||
"parameters": "Parameters",
|
||||
@@ -403,6 +441,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Accent color",
|
||||
"account": "Account",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Customize your account settings.",
|
||||
"account_email_description": "Your primary email address.",
|
||||
"account_name_description": "This is your display name.",
|
||||
@@ -411,6 +450,8 @@
|
||||
"change_font_size": "Change font size",
|
||||
"choose_language": "Choose language",
|
||||
"dark_mode": "Dark",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Experiments",
|
||||
"experiments_notice": "This is a collection of experiments we're working on that might turn out to be useful, fun, both, or neither. They're not final and may not be stable, so if something overly weird happens, don't panic. Just turn the dang thing off. Jokes aside, ",
|
||||
@@ -418,7 +459,7 @@
|
||||
"extension_version": "Extension Version",
|
||||
"extensions": "Browser extension",
|
||||
"extensions_use_toggle": "Use the browser extension to send requests (if present)",
|
||||
"follow": "Follow Us",
|
||||
"follow": "Follow us",
|
||||
"font_size": "Font size",
|
||||
"font_size_large": "Large",
|
||||
"font_size_medium": "Medium",
|
||||
@@ -502,6 +543,11 @@
|
||||
"send_request": "Send Request",
|
||||
"title": "Request"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -519,7 +565,7 @@
|
||||
"socketio": {
|
||||
"communication": "Communication",
|
||||
"connection_not_authorized": "This SocketIO connection does not use any authentication.",
|
||||
"event_name": "Event Name",
|
||||
"event_name": "Event/Topic Name",
|
||||
"events": "Events",
|
||||
"log": "Log",
|
||||
"url": "URL"
|
||||
@@ -647,6 +693,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScript Code",
|
||||
@@ -5,19 +5,21 @@
|
||||
"choose_file": "Seleccionar archivo",
|
||||
"clear": "Limpiar",
|
||||
"clear_all": "Limpiar todo",
|
||||
"close": "Close",
|
||||
"close": "Cerrar",
|
||||
"connect": "Conectar",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Copiar",
|
||||
"delete": "Borrar",
|
||||
"disconnect": "Desconectar",
|
||||
"dismiss": "Descartar",
|
||||
"dont_save": "Don't save",
|
||||
"download_file": "Descargar archivo",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"drag_to_reorder": "Arrastrar para reordenar",
|
||||
"duplicate": "Duplicar",
|
||||
"edit": "Editar",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Volver",
|
||||
"group_by": "Group by",
|
||||
"label": "Etiqueta",
|
||||
"learn_more": "Aprender más",
|
||||
"less": "Menos",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Buscar",
|
||||
"send": "Enviar",
|
||||
"start": "Comenzar",
|
||||
"starting": "Starting",
|
||||
"stop": "Detener",
|
||||
"to_close": "para cerrar",
|
||||
"to_navigate": "para navegar",
|
||||
@@ -171,7 +174,8 @@
|
||||
"profile": "Iniciar sesión para ver tu perfil",
|
||||
"protocols": "Los protocolos están vacíos",
|
||||
"schema": "Conectarse a un punto final de GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"shortcodes": "Los shortcodes están vacíos",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Nombre del equipo vacío",
|
||||
"teams": "Los equipos están vacíos",
|
||||
"tests": "No hay pruebas para esta petición"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Eliminar el entorno",
|
||||
"edit": "Editar entorno",
|
||||
"invalid_name": "Proporciona un nombre válido para el entorno.",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "las variables de entorno anidadas están limitadas a 10 niveles",
|
||||
"new": "Nuevo entorno",
|
||||
"no_environment": "Sin entorno",
|
||||
"no_environment_description": "No se ha seleccionado ningún entorno. Elije qué hacer con las siguientes variables.",
|
||||
"select": "Seleccionar entorno",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Entornos",
|
||||
"updated": "Actualización del entorno",
|
||||
"variable_list": "Lista de variables"
|
||||
@@ -197,6 +203,9 @@
|
||||
"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.",
|
||||
"curl_invalid_format": "cURL no está formateado correctamente",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Nombre de petición vacío",
|
||||
"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",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Iniciar sesión con GitHub para crear un Gist secreto",
|
||||
"title": "Exportar"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Carpeta creada",
|
||||
"edit": "Editar carpeta",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Esquema",
|
||||
"subscriptions": "Suscripciones"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Instalar aplicación",
|
||||
"login": "Iniciar sesión",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Importación y exportación"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Comunicación",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Registro",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Mensaje",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publicar",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Suscribir",
|
||||
"topic": "Tema",
|
||||
"topic_name": "Nombre del tema",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "Ajustes de la aplicación",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Los editores pueden añadir, editar y eliminar solicitudes.",
|
||||
"email_verification_mail": "Se ha enviado un correo electrónico de verificación a tu dirección de correo electrónico. Haz clic en el enlace para verificar tu dirección de correo electrónico.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Nombre de petición",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Parámetros de consulta",
|
||||
"parameters": "Parámetros",
|
||||
@@ -381,7 +418,7 @@
|
||||
"type": "Tipo de petición",
|
||||
"url": "URL",
|
||||
"variables": "Variables",
|
||||
"view_my_links": "View my links"
|
||||
"view_my_links": "Ver mis enlaces"
|
||||
},
|
||||
"response": {
|
||||
"body": "Cuerpo de respuesta",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Color de acentuación",
|
||||
"account": "Cuenta",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Personaliza la configuración de tu cuenta.",
|
||||
"account_email_description": "Tu dirección de correo electrónico principal.",
|
||||
"account_name_description": "Este es tu nombre para mostrar.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Cambiar tamaño de fuente",
|
||||
"choose_language": "Elegir idioma",
|
||||
"dark_mode": "Oscuro",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expandir la navegación",
|
||||
"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,",
|
||||
@@ -418,7 +458,7 @@
|
||||
"extension_version": "Versión de extensión",
|
||||
"extensions": "Extensiones",
|
||||
"extensions_use_toggle": "Utilizar la extensión del navegador para enviar peticiones (si está presente)",
|
||||
"follow": "Follow Us",
|
||||
"follow": "Síguenos",
|
||||
"font_size": "Tamaño de fuente",
|
||||
"font_size_large": "Grande",
|
||||
"font_size_medium": "Mediano",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Enviar petición",
|
||||
"title": "Petición"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copiar la respuesta al portapapeles",
|
||||
"download": "Descargar la respuesta como archivo",
|
||||
"title": "Respuesta"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Cambiar el tema al modo negro",
|
||||
"dark": "Cambiar el tema al modo oscuro",
|
||||
@@ -572,10 +617,10 @@
|
||||
"community": "Haz preguntas y ayuda a los demás",
|
||||
"documentation": "Leer más sobre Hoppscotch",
|
||||
"forum": "Haz preguntas y obtén respuestas",
|
||||
"github": "Follow us on Github",
|
||||
"github": "Síguenos en Github",
|
||||
"shortcuts": "Navega por la aplicación más rápido",
|
||||
"team": "Ponte en contacto con el equipo",
|
||||
"title": "Apoyo",
|
||||
"title": "Ayuda",
|
||||
"twitter": "Síguenos en Twitter"
|
||||
},
|
||||
"tab": {
|
||||
@@ -590,7 +635,7 @@
|
||||
"pre_request_script": "Script previo a la petición",
|
||||
"queries": "Consultas",
|
||||
"query": "Consulta",
|
||||
"schema": "Schema",
|
||||
"schema": "Esquema",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "SSE",
|
||||
"tests": "Pruebas",
|
||||
@@ -647,6 +692,11 @@
|
||||
"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."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "prueba fallida",
|
||||
"javascript_code": "Código JavaScript",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Tyhjennä",
|
||||
"close": "Close",
|
||||
"connect": "Kytkeä",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Kopio",
|
||||
"delete": "Poistaa",
|
||||
"disconnect": "Katkaista",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Muokata",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Mene takaisin",
|
||||
"group_by": "Group by",
|
||||
"label": "Etiketti",
|
||||
"learn_more": "Lue lisää",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Hae",
|
||||
"send": "Lähettää",
|
||||
"start": "alkaa",
|
||||
"starting": "Starting",
|
||||
"stop": "Lopettaa",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -77,7 +80,7 @@
|
||||
"status": "Tila",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "Ehdot ja yksityisyys",
|
||||
"twitter": "Viserrys",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Kirjoita komento tai hae…",
|
||||
"we_use_cookies": "Käytämme evästeitä",
|
||||
"whats_new": "Mikä on uutta?",
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "Joukkue on tyhjä",
|
||||
"parameters": "Tässä pyynnössä ei ole parametreja",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "Protokollat ovat tyhjiä",
|
||||
"schema": "Muodosta yhteys GraphQL -päätepisteeseen",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Joukkueen nimi tyhjä",
|
||||
"teams": "Joukkueet ovat tyhjiä",
|
||||
"tests": "Tätä pyyntöä ei ole testattu"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Muokkaa ympäristöä",
|
||||
"invalid_name": "Anna ympäristölle kelvollinen nimi",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Uusi ympäristö",
|
||||
"no_environment": "Ei ympäristöä",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Valitse ympäristö",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Ympäristöt",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Muuttujien luettelo"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "Tämä selain ei näytä tukevan palvelimen lähettämiä tapahtumia.",
|
||||
"check_console_details": "Katso lisätietoja konsolilokista.",
|
||||
"curl_invalid_format": "cURL ei ole alustettu oikein",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Tyhjä pyynnön nimi",
|
||||
"f12_details": "(F12 lisätietoja)",
|
||||
"gql_prettify_invalid_query": "Virheellistä kyselyä ei voitu määrittää, ratkaista kyselyn syntaksivirheet ja yrittää uudelleen",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Kirjaudu sisään GitHubilla luodaksesi salaisen sisällön",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Kansio luotu",
|
||||
"edit": "Muokkaa kansiota",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Kaavio",
|
||||
"subscriptions": "Tilaukset"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Asenna sovellus",
|
||||
"login": "Kirjaudu sisään",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Tuonti ja vienti"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Viestintä",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Hirsi",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Viesti",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Julkaista",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Tilaa",
|
||||
"topic": "Aihe",
|
||||
"topic_name": "Aiheen nimi",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Pyynnön nimi",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Kyselyparametrit",
|
||||
"parameters": "Parametrit",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Korostusväri",
|
||||
"account": "Tili",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Muokkaa tilisi asetuksia.",
|
||||
"account_email_description": "Ensisijainen sähköpostiosoitteesi.",
|
||||
"account_name_description": "Tämä on näyttönimesi.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Vaihda fontin kokoa",
|
||||
"choose_language": "Valitse kieli",
|
||||
"dark_mode": "Tumma",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Kokeet",
|
||||
"experiments_notice": "Tämä on kokoelma kokeiluja, joita parhaillaan käsittelemme ja jotka voivat osoittautua hyödyllisiksi, hauskoiksi, molemmiksi tai kumpikaan. Ne eivät ole lopullisia eivätkä ehkä vakaita, joten jos jotain liian outoa tapahtuu, älä panikoi. Kytke vain paska pois päältä. Vitsit sivuun,",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Lähetä pyyntö",
|
||||
"title": "Pyyntö"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScript -koodi",
|
||||
@@ -7,25 +7,27 @@
|
||||
"clear_all": "Tout effacer",
|
||||
"close": "Close",
|
||||
"connect": "Connecter",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Copier",
|
||||
"delete": "Supprimer",
|
||||
"disconnect": "Déconnecter",
|
||||
"dismiss": "Rejeter",
|
||||
"dont_save": "Don't save",
|
||||
"dont_save": "Ne pas sauvegarder",
|
||||
"download_file": "Télécharger le fichier",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"drag_to_reorder": "Faites glisser pour réorganiser",
|
||||
"duplicate": "Dupliquer",
|
||||
"edit": "Éditer",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Retour",
|
||||
"group_by": "Group by",
|
||||
"label": "Étiqueter",
|
||||
"learn_more": "En savoir plus",
|
||||
"less": "Less",
|
||||
"less": "Moins",
|
||||
"more": "Suite",
|
||||
"new": "Nouveau",
|
||||
"no": "Non",
|
||||
"open_workspace": "Open workspace",
|
||||
"paste": "Paste",
|
||||
"open_workspace": "Ouvrir un espace de travail",
|
||||
"paste": "Coller",
|
||||
"prettify": "Formater",
|
||||
"remove": "Supprimer",
|
||||
"restore": "Restaurer",
|
||||
@@ -35,10 +37,11 @@
|
||||
"search": "Chercher",
|
||||
"send": "Envoyer",
|
||||
"start": "Démarrer",
|
||||
"starting": "Starting",
|
||||
"stop": "Arrêter",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
"to_select": "to select",
|
||||
"to_close": "pour fermer",
|
||||
"to_navigate": "pour naviguer",
|
||||
"to_select": "pour sélectionner",
|
||||
"turn_off": "Éteindre",
|
||||
"turn_on": "Allumer",
|
||||
"undo": "Annuler",
|
||||
@@ -52,9 +55,9 @@
|
||||
"chat_with_us": "Discuter avec nous",
|
||||
"contact_us": "Nous contacter",
|
||||
"copy": "Copier",
|
||||
"copy_user_id": "Copy User Auth Token",
|
||||
"developer_option": "Developer options",
|
||||
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
|
||||
"copy_user_id": "Copier le jeton d'authentification de l'utilisateur",
|
||||
"developer_option": "Options pour les développeurs",
|
||||
"developer_option_description": "Des outils pour les développeurs qui aident au développement et à la maintenance de Hoppscotch.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Documentation",
|
||||
"github": "GitHub",
|
||||
@@ -75,7 +78,7 @@
|
||||
"shortcuts": "Raccourcis",
|
||||
"spotlight": "Projecteur",
|
||||
"status": "Statut",
|
||||
"status_description": "Check the status of the website",
|
||||
"status_description": "Vérifier l'état du site web",
|
||||
"terms_and_privacy": "Conditions et confidentialité",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Tapez une commande ou recherchez…",
|
||||
@@ -86,7 +89,7 @@
|
||||
"auth": {
|
||||
"account_exists": "Le compte existe avec des informations d'identification différentes - Connectez-vous pour lier les deux comptes",
|
||||
"all_sign_in_options": "Toutes les options de connexion",
|
||||
"continue_with_email": "Continuer avec l'e-mail",
|
||||
"continue_with_email": "Continuer par e-mail",
|
||||
"continue_with_github": "Continuer avec GitHub",
|
||||
"continue_with_google": "Continuer avec Google",
|
||||
"continue_with_microsoft": "Continue with Microsoft",
|
||||
@@ -118,10 +121,10 @@
|
||||
"invalid_name": "Veuillez fournir un nom valide pour la collection",
|
||||
"my_collections": "Mes collections",
|
||||
"name": "Ma nouvelle collection",
|
||||
"name_length_insufficient": "Collection name should be at least 3 characters long",
|
||||
"name_length_insufficient": "Le nom de la collection doit comporter au moins 3 caractères",
|
||||
"new": "Nouvelle collection",
|
||||
"renamed": "Collection renommée",
|
||||
"request_in_use": "Request in use",
|
||||
"request_in_use": "Demande en cours d'utilisation",
|
||||
"save_as": "Enregistrer sous",
|
||||
"select": "Sélectionnez une collection",
|
||||
"select_location": "Sélectionnez l'emplacement",
|
||||
@@ -131,15 +134,15 @@
|
||||
"confirm": {
|
||||
"exit_team": "Are you sure you want to leave this team?",
|
||||
"logout": "Êtes-vous sûr de vouloir vous déconnecter?",
|
||||
"remove_collection": "Voulez-vous vraiment supprimer définitivement cette collection ?",
|
||||
"remove_environment": "Voulez-vous vraiment supprimer définitivement cet environnement ?",
|
||||
"remove_folder": "Voulez-vous vraiment supprimer définitivement ce dossier ?",
|
||||
"remove_history": "Voulez-vous vraiment supprimer définitivement tout l'historique ?",
|
||||
"remove_request": "Voulez-vous vraiment supprimer définitivement cette requête ?",
|
||||
"remove_team": "Voulez-vous vraiment supprimer cette équipe ?",
|
||||
"remove_telemetry": "Êtes-vous sûr de vouloir désactiver la télémétrie ?",
|
||||
"remove_collection": "Voulez-vous vraiment supprimer définitivement cette collection ?",
|
||||
"remove_environment": "Voulez-vous vraiment supprimer définitivement cet environnement ?",
|
||||
"remove_folder": "Voulez-vous vraiment supprimer définitivement ce dossier ?",
|
||||
"remove_history": "Voulez-vous vraiment supprimer définitivement tout l'historique ?",
|
||||
"remove_request": "Voulez-vous vraiment supprimer définitivement cette requête ?",
|
||||
"remove_team": "Voulez-vous vraiment supprimer cette équipe ?",
|
||||
"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.",
|
||||
"sync": "Voulez-vous vraiment synchroniser cet espace de travail ?"
|
||||
"sync": "Voulez-vous vraiment synchroniser cet espace de travail ?"
|
||||
},
|
||||
"count": {
|
||||
"header": "En-tête {count}",
|
||||
@@ -158,75 +161,86 @@
|
||||
"body": "Cette requête n'a pas de corps",
|
||||
"collection": "La collection est vide",
|
||||
"collections": "Les collections sont vides",
|
||||
"documentation": "Connect to a GraphQL endpoint to view documentation",
|
||||
"endpoint": "Endpoint cannot be empty",
|
||||
"documentation": "Se connecter à un point de terminaison GraphQL pour afficher la documentation",
|
||||
"endpoint": "Le point de terminaison ne peut pas être vide",
|
||||
"environments": "Les environnements sont vides",
|
||||
"folder": "Le dossier est vide",
|
||||
"headers": "Cette requête n'a pas d'en-tête",
|
||||
"history": "L'historique est vide",
|
||||
"invites": "Invite list is empty",
|
||||
"invites": "La liste d'invitations est vide",
|
||||
"members": "L'équipe est vide",
|
||||
"parameters": "Cette requête n'a aucun paramètre",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"pending_invites": "Il n'y a pas d'invitation en cours pour cette équipe",
|
||||
"profile": "Connectez-vous pour voir votre profil",
|
||||
"protocols": "Les protocoles sont vides",
|
||||
"schema": "Se connecter à un point de terminaison GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"shortcodes": "Les shortcodes sont vides",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Nom de l'équipe vide",
|
||||
"teams": "Les équipes sont vides",
|
||||
"tests": "Il n'y a pas de tests pour cette requête"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "Add to Global",
|
||||
"added": "Environment addition",
|
||||
"add_to_global": "Ajouter dans Global",
|
||||
"added": "Ajout de l'environnement",
|
||||
"create_new": "Créer un nouvel environnement",
|
||||
"created": "Environment created",
|
||||
"deleted": "Environment deletion",
|
||||
"created": "Environnement créé",
|
||||
"deleted": "Environnement supprimé",
|
||||
"edit": "Modifier l'environnement",
|
||||
"invalid_name": "Veuillez fournir un nom valide pour l'environnement",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "les variables d'environnement imbriquées sont limitées à 10 niveaux",
|
||||
"new": "Nouvel environnement",
|
||||
"no_environment": "Pas d'environnement",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"no_environment_description": "Aucun environnement n'a été sélectionné. Choisissez ce qu'il faut faire avec les variables suivantes.",
|
||||
"select": "Sélectionnez l'environnement",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Environnements",
|
||||
"updated": "Environment updation",
|
||||
"updated": "Mise à jour de l'environnement",
|
||||
"variable_list": "Liste des variables"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "Ce navigateur ne semble pas prendre en charge les événements envoyés par le serveur.",
|
||||
"check_console_details": "Consultez le journal de la console pour plus de détails.",
|
||||
"curl_invalid_format": "cURL n'est pas formaté correctement",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Nom de la requête vide",
|
||||
"f12_details": "(F12 pour les détails)",
|
||||
"gql_prettify_invalid_query": "Impossible de formater une requête non valide, résolvez les erreurs de syntaxe de la requête et réessayer",
|
||||
"incomplete_config_urls": "Incomplete configuration URLs",
|
||||
"incorrect_email": "Incorrect email",
|
||||
"invalid_link": "Invalid link",
|
||||
"invalid_link_description": "The link you clicked is invalid or expired.",
|
||||
"json_parsing_failed": "Invalid JSON",
|
||||
"incomplete_config_urls": "Configuration URLs incomplete",
|
||||
"incorrect_email": "Email incorrect",
|
||||
"invalid_link": "Lien invalide",
|
||||
"invalid_link_description": "Le lien sur lequel vous avez cliqué n'est pas valide ou a expiré.",
|
||||
"json_parsing_failed": "JSON non valide",
|
||||
"json_prettify_invalid_body": "Impossible de formater un corps non valide, résolvez les erreurs de syntaxe json et réessayez",
|
||||
"network_error": "There seems to be a network error. Please try again.",
|
||||
"network_error": "Il semble y avoir une erreur de réseau. Veuillez réessayer.",
|
||||
"network_fail": "Impossible d'envoyer la requête",
|
||||
"no_duration": "Pas de durée",
|
||||
"no_results_found": "No matches found",
|
||||
"page_not_found": "This page could not be found",
|
||||
"script_fail": "Impossible d'exécuter le script de pré-requête",
|
||||
"no_results_found": "Aucune correspondance trouvée",
|
||||
"page_not_found": "Cette page n'a pas pu être trouvée",
|
||||
"script_fail": "Impossible d'exécuter le script de pré-requête",
|
||||
"something_went_wrong": "Quelque chose s'est mal passé",
|
||||
"test_script_fail": "Could not execute post-request script"
|
||||
"test_script_fail": "Impossible d'exécuter le script post-requête"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "Exporter au format JSON",
|
||||
"create_secret_gist": "Créer un Gist secret",
|
||||
"gist_created": "Gist créé",
|
||||
"require_github": "Connectez-vous avec GitHub pour créer un Gist secret",
|
||||
"title": "Export"
|
||||
"title": "Exportation"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Dossier créé",
|
||||
"edit": "Modifier le dossier",
|
||||
"invalid_name": "Veuillez fournir un nom pour le dossier",
|
||||
"name_length_insufficient": "Folder name should be at least 3 characters long",
|
||||
"name_length_insufficient": "Le nom du dossier doit comporter au moins 3 caractères.",
|
||||
"new": "Nouveau dossier",
|
||||
"renamed": "Dossier renommé"
|
||||
},
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Schéma",
|
||||
"subscriptions": "Abonnements"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Installer l'application",
|
||||
"login": "Connexion",
|
||||
@@ -248,8 +266,8 @@
|
||||
"offline_short": "Vous semblez être hors ligne.",
|
||||
"post_request_tests": "Les scripts de test sont écrits en JavaScript et sont exécutés après réception de la réponse.",
|
||||
"pre_request_script": "Les scripts de pré-requête sont écrits en JavaScript et sont exécutés avant l'envoi de la requête.",
|
||||
"script_fail": "Il semble qu'il y ait un problème dans le script de pré-requête. Vérifiez l'erreur ci-dessous et corrigez le script en conséquence.",
|
||||
"test_script_fail": "There seems to be an error with test script. Please fix the errors and run tests again",
|
||||
"script_fail": "Il semble qu'il y ait un problème dans le script de pré-requête. Vérifiez l'erreur ci-dessous et corrigez le script en conséquence.",
|
||||
"test_script_fail": "Il semble y avoir une erreur avec le script de test. Veuillez corriger les erreurs et recommencer les tests",
|
||||
"tests": "Ecrivez un script de test pour automatiser le débogage."
|
||||
},
|
||||
"hide": {
|
||||
@@ -263,31 +281,31 @@
|
||||
"curl": "Importer en cURL",
|
||||
"failed": "Échec de l'importation",
|
||||
"from_gist": "Importer depuis Gist",
|
||||
"from_gist_description": "Import from Gist URL",
|
||||
"from_insomnia": "Import from Insomnia",
|
||||
"from_insomnia_description": "Import from Insomnia collection",
|
||||
"from_json": "Import from Hoppscotch",
|
||||
"from_json_description": "Import from Hoppscotch collection file",
|
||||
"from_gist_description": "Importer depuis un lien Gist",
|
||||
"from_insomnia": "Importer depuis Insomnia",
|
||||
"from_insomnia_description": "Importer depuis une collection Insomnia",
|
||||
"from_json": "Importer depuis Hoppscotch",
|
||||
"from_json_description": "Importation depuis le fichier de la collection Hoppscotch",
|
||||
"from_my_collections": "Importer depuis Mes collections",
|
||||
"from_my_collections_description": "Import from My Collections file",
|
||||
"from_openapi": "Import from OpenAPI",
|
||||
"from_openapi_description": "Import from OpenAPI specification file (YML/JSON)",
|
||||
"from_postman": "Import from Postman",
|
||||
"from_postman_description": "Import from Postman collection",
|
||||
"from_url": "Import from URL",
|
||||
"from_my_collections_description": "Importation à partir du fichier Mes Collections",
|
||||
"from_openapi": "Importer depuis OpenAPI",
|
||||
"from_openapi_description": "Importer depuis un fichier OpenAPI (YML/JSON)",
|
||||
"from_postman": "Importer depuis Postman",
|
||||
"from_postman_description": "Import depuis une collection Postman",
|
||||
"from_url": "Importer depuis une URL",
|
||||
"gist_url": "Entrez l'URL principale",
|
||||
"import_from_url_invalid_fetch": "Couldn't get data from the url",
|
||||
"import_from_url_invalid_file_format": "Error while importing collections",
|
||||
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Collections Imported",
|
||||
"json_description": "Import collections from a Hoppscotch Collections JSON file",
|
||||
"import_from_url_invalid_fetch": "Impossible d'obtenir des données à partir de l'url.",
|
||||
"import_from_url_invalid_file_format": "Erreur lors de l'importation de collections",
|
||||
"import_from_url_invalid_type": "Type non supporté. Les valeurs acceptées sont 'hoppscotch', 'openapi', 'postman', 'insomnia'.",
|
||||
"import_from_url_success": "Collections Importées",
|
||||
"json_description": "Importer des collections depuis un fichier JSON Hoppscotch",
|
||||
"title": "Importer"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Collapse or Expand Collections",
|
||||
"collapse_sidebar": "Collapse or Expand the sidebar",
|
||||
"collapse_collection": "Réduire ou développer les collections",
|
||||
"collapse_sidebar": "Réduire ou développer la barre latérale",
|
||||
"column": "Disposition verticale",
|
||||
"name": "Layout",
|
||||
"name": "Disposition",
|
||||
"row": "Disposition horizontale",
|
||||
"zen_mode": "Mode Zen"
|
||||
},
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Importer / Exporter"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Communication",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Infos",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Message",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publier",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "S'abonner",
|
||||
"topic": "Sujet",
|
||||
"topic_name": "Nom du sujet",
|
||||
@@ -324,18 +360,19 @@
|
||||
"snippets": "Extraits"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
"no_permission": "You do not have permission to perform this action.",
|
||||
"owner": "Owner",
|
||||
"owner_description": "Owners can add, edit, and delete requests, collections and team members.",
|
||||
"roles": "Roles",
|
||||
"roles_description": "Roles are used to control access to the shared collections.",
|
||||
"updated": "Profile updated",
|
||||
"viewer": "Viewer",
|
||||
"viewer_description": "Viewers can only view and use requests."
|
||||
"app_settings": "Réglages de l'application",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Éditeur",
|
||||
"editor_description": "Les éditeurs peuvent ajouter, modifier et supprimer des demandes.",
|
||||
"email_verification_mail": "Un e-mail de vérification a été envoyé à votre adresse e-mail. Veuillez cliquer sur le lien pour vérifier votre adresse électronique.",
|
||||
"no_permission": "Vous n'avez pas la permission d'effectuer cette action.",
|
||||
"owner": "Propriétaire",
|
||||
"owner_description": "Les propriétaires peuvent ajouter, modifier et supprimer des demandes, des collections et des membres de l'équipe.",
|
||||
"roles": "Rôles",
|
||||
"roles_description": "Les rôles sont utilisés pour contrôler l'accès aux collections partagées.",
|
||||
"updated": "Profil mis à jour",
|
||||
"viewer": "Visionneur",
|
||||
"viewer_description": "Les visionneurs ne peuvent que consulter et utiliser les demandes."
|
||||
},
|
||||
"remove": {
|
||||
"star": "Supprimer l'étoile"
|
||||
@@ -347,9 +384,9 @@
|
||||
"choose_language": "Choisissez la langue",
|
||||
"content_type": "Type de contenu",
|
||||
"content_type_titles": {
|
||||
"others": "Others",
|
||||
"structured": "Structured",
|
||||
"text": "Text"
|
||||
"others": "Autres",
|
||||
"structured": "Structuré",
|
||||
"text": "Texte"
|
||||
},
|
||||
"copy_link": "Copier le lien",
|
||||
"duration": "Durée",
|
||||
@@ -360,10 +397,10 @@
|
||||
"invalid_name": "Veuillez fournir un nom pour la requête",
|
||||
"method": "Méthode",
|
||||
"name": "Nom de la requête",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"new": "Nouvelle requête",
|
||||
"override": "Remplacer",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"overriden": "Remplacé",
|
||||
"parameter_list": "Paramètres de requête",
|
||||
"parameters": "Paramètres",
|
||||
"path": "Chemin",
|
||||
@@ -376,12 +413,12 @@
|
||||
"save_as": "Enregistrer sous",
|
||||
"saved": "Requête enregistrée",
|
||||
"share": "Partager",
|
||||
"share_description": "Share Hoppscotch with your friends",
|
||||
"share_description": "Partagez Hoppscotch avec vos amis",
|
||||
"title": "Requête",
|
||||
"type": "Type de requête",
|
||||
"url": "URL",
|
||||
"variables": "Variables",
|
||||
"view_my_links": "View my links"
|
||||
"view_my_links": "Voir mes liens"
|
||||
},
|
||||
"response": {
|
||||
"body": "Corps de réponse",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Couleur d'accent",
|
||||
"account": "Compte",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Personnalisez les paramètres de votre compte.",
|
||||
"account_email_description": "Votre adresse e-mail principale.",
|
||||
"account_name_description": "Ceci est votre nom d'affichage.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Changer la taille de la police",
|
||||
"choose_language": "Choisissez la langue",
|
||||
"dark_mode": "Sombre",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Expériences",
|
||||
"experiments_notice": "Il s'agit d'une collection d'expériences sur lesquelles nous travaillons et qui pourraient s'avérer utiles, amusantes, les deux ou aucune. Ils ne sont pas définitifs et peuvent ne pas être stables, donc si quelque chose de trop étrange se produit, ne paniquez pas. Il suffit d'éteindre le truc. Blague à part,",
|
||||
@@ -428,10 +468,10 @@
|
||||
"language": "Langue",
|
||||
"light_mode": "Clair",
|
||||
"official_proxy_hosting": "Le proxy officiel est hébergé par Hoppscotch.",
|
||||
"profile": "Profile",
|
||||
"profile_description": "Update your profile details",
|
||||
"profile_email": "Email address",
|
||||
"profile_name": "Profile name",
|
||||
"profile": "Profil",
|
||||
"profile_description": "Mettez à jour les détails de votre profil",
|
||||
"profile_email": "Addresse Email ",
|
||||
"profile_name": "Nom du profil",
|
||||
"proxy": "Proxy",
|
||||
"proxy_url": "URL du proxy",
|
||||
"proxy_use_toggle": "Utiliser le proxy pour envoyer des requêtes",
|
||||
@@ -439,7 +479,7 @@
|
||||
"reset_default": "Réinitialiser par défaut",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes which were created by you.",
|
||||
"sidebar_on_left": "Sidebar on left",
|
||||
"sidebar_on_left": "Barre latérale à gauche",
|
||||
"sync": "Synchroniser",
|
||||
"sync_collections": "Collections",
|
||||
"sync_description": "Ces paramètres sont synchronisés dans le cloud.",
|
||||
@@ -453,14 +493,14 @@
|
||||
"use_experimental_url_bar": "Utiliser la barre d'URL expérimentale avec mise en évidence de l'environnement",
|
||||
"user": "Utilisateur",
|
||||
"verified_email": "Verified email",
|
||||
"verify_email": "Verify email"
|
||||
"verify_email": "Vérifier l'email"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Actions",
|
||||
"created_on": "Created on",
|
||||
"deleted": "Shortcode deleted",
|
||||
"method": "Method",
|
||||
"not_found": "Shortcode not found",
|
||||
"created_on": "Créé le",
|
||||
"deleted": "Shortcode supprimé",
|
||||
"method": "Méthode",
|
||||
"not_found": "Shortcode non trouvé",
|
||||
"short_code": "Short code",
|
||||
"url": "URL"
|
||||
},
|
||||
@@ -502,17 +542,22 @@
|
||||
"send_request": "Envoyer la requête",
|
||||
"title": "Requête"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copier la réponse dans le presse-papiers",
|
||||
"download": "Télécharger la réponse en tant que fichier",
|
||||
"title": "Réponse"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
"light": "Switch theme to light mode",
|
||||
"system": "Switch theme to system mode",
|
||||
"title": "Theme"
|
||||
"black": "Passage du thème au mode noir",
|
||||
"dark": "Passage du thème au mode sombre",
|
||||
"light": "Passage du thème au mode clair",
|
||||
"system": "Passage du thème au mode système",
|
||||
"title": "Thème"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "Afficher le code",
|
||||
"collection": "Expand Collection Panel",
|
||||
"collection": "Développer le panneau de collection",
|
||||
"more": "Montre plus",
|
||||
"sidebar": "Afficher la barre latérale"
|
||||
},
|
||||
@@ -536,9 +581,9 @@
|
||||
"connected": "Connecté",
|
||||
"connected_to": "Connecté à {nom}",
|
||||
"connecting_to": "Connexion à {nom}...",
|
||||
"connection_error": "Failed to connect",
|
||||
"connection_failed": "Connection failed",
|
||||
"connection_lost": "Connection lost",
|
||||
"connection_error": "Échec de la connexion",
|
||||
"connection_failed": "La connexion a échoué",
|
||||
"connection_lost": "Connexion perdue",
|
||||
"copied_to_clipboard": "Copié dans le presse-papier",
|
||||
"deleted": "Supprimé",
|
||||
"deprecated": "DÉCONSEILLÉ",
|
||||
@@ -553,17 +598,17 @@
|
||||
"history_deleted": "Historique supprimé",
|
||||
"linewrap": "Retour à la ligne",
|
||||
"loading": "Chargement...",
|
||||
"message_received": "Message: {message} arrived on topic: {topic}",
|
||||
"mqtt_subscription_failed": "Something went wrong while subscribing to topic: {topic}",
|
||||
"message_received": "Message : {message} arrivé sur le sujet : {topic}",
|
||||
"mqtt_subscription_failed": "Quelque chose s'est mal passé lors de l'inscription à un sujet : {topic}",
|
||||
"none": "Rien",
|
||||
"nothing_found": "Rien trouvé pour",
|
||||
"published_error": "Something went wrong while publishing msg: {topic} to topic: {message}",
|
||||
"published_message": "Published message: {message} to topic: {topic}",
|
||||
"reconnection_error": "Failed to reconnect",
|
||||
"subscribed_failed": "Failed to subscribe to topic: {topic}",
|
||||
"subscribed_success": "Successfully subscribed to topic: {topic}",
|
||||
"unsubscribed_failed": "Failed to unsubscribe from topic: {topic}",
|
||||
"unsubscribed_success": "Successfully unsubscribed from topic: {topic}",
|
||||
"published_error": "Quelque chose s'est mal passé lors de la publication du message : {topic} dans le sujet : {message}",
|
||||
"published_message": "Message publié : {message} au sujet : {topic}",
|
||||
"reconnection_error": "Échec de la reconnexion",
|
||||
"subscribed_failed": "Échec de l'inscription au sujet : {topic}",
|
||||
"subscribed_success": "Inscription réussie au sujet : {topic}",
|
||||
"unsubscribed_failed": "Échec de la désinscription du sujet : {topic}",
|
||||
"unsubscribed_success": "Désinscription réussie du sujet : {topic}",
|
||||
"waiting_send_request": "En attente d'envoi de la requête"
|
||||
},
|
||||
"support": {
|
||||
@@ -599,53 +644,58 @@
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "You are already a member of this team. Contact your team owner.",
|
||||
"already_member": "Vous êtes déjà membre de cette équipe. Contactez le propriétaire de votre équipe.",
|
||||
"create_new": "Créer une nouvelle équipe",
|
||||
"deleted": "Équipe supprimée",
|
||||
"edit": "Modifier l'équipe",
|
||||
"email": "E-mail",
|
||||
"email_do_not_match": "Email doesn't match with your account details. Contact your team owner.",
|
||||
"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_disabled": "Seul le propriétaire ne peut pas quitter l'équipe",
|
||||
"invalid_email_format": "Le format de l'e-mail n'est pas valide",
|
||||
"invalid_id": "Invalid team ID. Contact your team owner.",
|
||||
"invalid_invite_link": "Invalid invite link",
|
||||
"invalid_invite_link_description": "The link you followed is invalid. Contact your team owner.",
|
||||
"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_description": "Le lien que vous avez suivi n'est pas valide. Contactez le propriétaire de votre équipe.",
|
||||
"invalid_member_permission": "Veuillez fournir une autorisation valide au membre de l'équipe",
|
||||
"invite": "Invite",
|
||||
"invite_more": "Invite more",
|
||||
"invite_tooltip": "Invite people to this workspace",
|
||||
"invited_to_team": "{owner} invited you to join {team}",
|
||||
"join": "Invitation accepted",
|
||||
"invite": "Inviter",
|
||||
"invite_more": "Inviter plus",
|
||||
"invite_tooltip": "Invitez des personnes à cet espace de travail",
|
||||
"invited_to_team": "{owner} vous invite à rejoindre {team}",
|
||||
"join": "Invitation accepté",
|
||||
"join_beta": "Rejoignez le programme bêta pour accéder aux équipes.",
|
||||
"join_team": "Join {team}",
|
||||
"joined_team": "You have joined {team}",
|
||||
"joined_team_description": "You are now a member of this team",
|
||||
"join_team": "Rejoindre {team}",
|
||||
"joined_team": "Vous avez rejoint {team}",
|
||||
"joined_team_description": "Vous êtes maintenant membre de cette équipe",
|
||||
"left": "Vous avez quitté l'équipe",
|
||||
"login_to_continue": "Login to continue",
|
||||
"login_to_continue_description": "You need to be logged in to join a team.",
|
||||
"logout_and_try_again": "Logout and sign in with another account",
|
||||
"member_has_invite": "This email ID already has an invite. Contact your team owner.",
|
||||
"member_not_found": "Member not found. Contact your team owner.",
|
||||
"login_to_continue": "Connectez-vous pour continuer",
|
||||
"login_to_continue_description": "Vous devez être connecté pour rejoindre une équipe.",
|
||||
"logout_and_try_again": "Se déconnecter et se connecter avec un autre compte",
|
||||
"member_has_invite": "Cet identifiant e-mail a déjà une invitation. Contactez le propriétaire de votre équipe.",
|
||||
"member_not_found": "Membre non trouvé. Contactez le propriétaire de votre équipe.",
|
||||
"member_removed": "Utilisateur supprimé",
|
||||
"member_role_updated": "Rôles des utilisateurs mis à jour",
|
||||
"members": "Membres",
|
||||
"name_length_insufficient": "Le nom de l'équipe doit comporter au moins 6 caractères",
|
||||
"name_updated": "Team name updated",
|
||||
"name_updated": "Nom de l'équipe mis à jour",
|
||||
"new": "Nouvelle équipe",
|
||||
"new_created": "Nouvelle équipe créée",
|
||||
"new_name": "Ma nouvelle équipe",
|
||||
"no_access": "Vous n'avez pas l'accès en modification à ces collections",
|
||||
"no_invite_found": "Invitation 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.",
|
||||
"pending_invites": "Pending invites",
|
||||
"no_invite_found": "Invitation 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.",
|
||||
"pending_invites": "Invitations en attente",
|
||||
"permissions": "Autorisations",
|
||||
"saved": "Équipe enregistrée",
|
||||
"select_a_team": "Select a team",
|
||||
"select_a_team": "Choisir une équipe",
|
||||
"title": "Équipes",
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
"we_sent_invite_link": "Nous avons envoyé un lien d'invitation à tous les invités !",
|
||||
"we_sent_invite_link_description": "Demandez à tous les invités de vérifier leur boîte de réception. Cliquez sur le lien pour rejoindre l'équipe."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "Test échoué",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "נקה הכל",
|
||||
"close": "Close",
|
||||
"connect": "לְחַבֵּר",
|
||||
"connecting": "Connecting",
|
||||
"copy": "עותק",
|
||||
"delete": "לִמְחוֹק",
|
||||
"disconnect": "לְנַתֵק",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "לַעֲרוֹך",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "תחזור",
|
||||
"group_by": "Group by",
|
||||
"label": "תווית",
|
||||
"learn_more": "למד עוד",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "לחפש",
|
||||
"send": "לִשְׁלוֹחַ",
|
||||
"start": "הַתחָלָה",
|
||||
"starting": "Starting",
|
||||
"stop": "תפסיק",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -77,7 +80,7 @@
|
||||
"status": "סטָטוּס",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "תנאים ופרטיות",
|
||||
"twitter": "טוויטר",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "הקלד פקודה או חפש ...",
|
||||
"we_use_cookies": "אנו משתמשים בעוגיות",
|
||||
"whats_new": "מה חדש?",
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "הקבוצה ריקה",
|
||||
"parameters": "לבקשה זו אין פרמטרים",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "הפרוטוקולים ריקים",
|
||||
"schema": "התחבר לנקודת קצה של GraphQL",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "שם הקבוצה ריק",
|
||||
"teams": "הקבוצות ריקות",
|
||||
"tests": "אין בדיקות לבקשה זו"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "ערוך את הסביבה",
|
||||
"invalid_name": "אנא ספק שם חוקי לסביבה",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "סביבה חדשה",
|
||||
"no_environment": "אין סביבה",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "בחר סביבה",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "סביבות",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "רשימת משתנים"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "נראה שלדפדפן זה אין תמיכה באירועי שרת נשלח.",
|
||||
"check_console_details": "בדוק את יומן המסוף לפרטים.",
|
||||
"curl_invalid_format": "cURL אינו בפורמט תקין",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "שם הבקשה ריק",
|
||||
"f12_details": "(F12 לפרטים)",
|
||||
"gql_prettify_invalid_query": "לא ניתן היה לייפות שאילתה לא חוקית, לפתור שגיאות תחביר שאילתות ולנסות שוב",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "התחבר עם GitHub כדי ליצור תמצית סודית",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "תיקייה נוצרה",
|
||||
"edit": "ערוך תיקייה",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "סכֵימָה",
|
||||
"subscriptions": "מנויים"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "התקן אפליקציה",
|
||||
"login": "התחברות",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "יבוא ויצוא"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "תִקשׁוֹרֶת",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "עֵץ",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "הוֹדָעָה",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "לְפַרְסֵם",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "הירשם",
|
||||
"topic": "נוֹשֵׂא",
|
||||
"topic_name": "שם הנושא",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "שם הבקשה",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "פרמטרי שאילתה",
|
||||
"parameters": "פרמטרים",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "צבע הדגשה",
|
||||
"account": "חֶשְׁבּוֹן",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "התאם אישית את הגדרות החשבון שלך.",
|
||||
"account_email_description": "כתובת הדוא\"ל הראשית שלך.",
|
||||
"account_name_description": "זהו שם התצוגה שלך.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "שנה גודל פונט",
|
||||
"choose_language": "בחר שפה",
|
||||
"dark_mode": "אפל",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "ניסויים",
|
||||
"experiments_notice": "זהו אוסף של ניסויים שעליהם אנו עובדים שעשויים להיות שימושיים, מהנים, שניהם או לא. הם לא סופיים ואולי לא יציבים, אז אם קורה משהו מוזר מדי, אל תיבהל. פשוט כבה את העניין המטומטם. בדיחות בצד,",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "שלח בקשה",
|
||||
"title": "בַּקָשָׁה"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "קוד JavaScript",
|
||||
718
packages/hoppscotch-common/locales/hi.json
Normal file
@@ -0,0 +1,718 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "स्वतः स्क्रॉल",
|
||||
"cancel": "रद्द करें",
|
||||
"choose_file": "फ़ाइल चुनें",
|
||||
"clear": "साफ़",
|
||||
"clear_all": "सभी साफ करें",
|
||||
"close": "बंद करे",
|
||||
"connect": "कनेक्ट करें",
|
||||
"connecting": "Connecting",
|
||||
"copy": "कॉपी",
|
||||
"delete": "हटाएं",
|
||||
"disconnect": "डिस्कनेक्ट",
|
||||
"dismiss": "खारिज करें",
|
||||
"dont_save": "मत बचाओ",
|
||||
"download_file": "फ़ाइल डाउनलोड करें",
|
||||
"drag_to_reorder": "व्यवस्थित करने के लिए घसीटे",
|
||||
"duplicate": "नकल करें",
|
||||
"edit": "संपादित करें",
|
||||
"filter": "फ़िल्टर प्रतिक्रिया",
|
||||
"go_back": "वापस जाओ",
|
||||
"group_by": "Group by",
|
||||
"label": "लेबल",
|
||||
"learn_more": "और अधिक जानें",
|
||||
"less": "कम",
|
||||
"more": "अधिक",
|
||||
"new": "नया",
|
||||
"no": "स्टार जोड़ें",
|
||||
"open_workspace": "कार्यक्षेत्र खोलें",
|
||||
"paste": "पेस्ट",
|
||||
"prettify": "सुंदर करे",
|
||||
"remove": "हटाओ",
|
||||
"restore": "पुनर्स्थापित करें",
|
||||
"save": "बचाएं",
|
||||
"scroll_to_bottom": "नीचे स्क्रॉल करें",
|
||||
"scroll_to_top": "शीर्ष तक स्क्रॉल करें",
|
||||
"search": "खोज",
|
||||
"send": "भेजें ",
|
||||
"start": "प्रारंभ",
|
||||
"starting": "Starting",
|
||||
"stop": "रोकें",
|
||||
"to_close": "बंद करने के लिए",
|
||||
"to_navigate": "नेविगेट करने के लिए",
|
||||
"to_select": "चुनने के लिए",
|
||||
"turn_off": "बंद करें",
|
||||
"turn_on": "चालू करें",
|
||||
"undo": "पूर्ववत",
|
||||
"yes": "हां"
|
||||
},
|
||||
"add": {
|
||||
"new": "नया जोड़ें",
|
||||
"star": "स्टार जोड़ें"
|
||||
},
|
||||
"app": {
|
||||
"chat_with_us": "हमारे साथ चैट करें",
|
||||
"contact_us": "हमसे संपर्क करें",
|
||||
"copy": "कॉपी करें",
|
||||
"copy_user_id": "उपयोगकर्ता प्रामाणिक टोकन कॉपी करें",
|
||||
"developer_option": "डेवलपर विकल्प",
|
||||
"developer_option_description": "डेवलपर टूल जो Hoppscotch के विकास और रखरखाव में मदद करता है",
|
||||
"discord": "Discord",
|
||||
"documentation": "दस्तावेज़ीकरण",
|
||||
"github": "GitHub",
|
||||
"help": "सहायता और प्रतिक्रिया",
|
||||
"home": "घर",
|
||||
"invite": "आमंत्रित करें",
|
||||
"invite_description": "हॉप्सकॉच एक ओपन सोर्स एपीआई डेवलपमेंट इकोसिस्टम है। हमने आपके एपीआई बनाने और प्रबंधित करने के लिए एक सरल और सहज इंटरफ़ेस डिज़ाइन किया है। हॉप्सकॉच एक ऐसा टूल है जो आपको अपने एपीआई बनाने, परीक्षण, दस्तावेज़ और साझा करने में मदद करता है।",
|
||||
"invite_your_friends": "अपने दोस्तों को इनवाइट करें",
|
||||
"join_discord_community": "हमारे डिस्कॉर्ड समुदाय में शामिल हों",
|
||||
"keyboard_shortcuts": "कीबोर्ड शॉर्टकट",
|
||||
"name": "हॉप्सकॉच",
|
||||
"new_version_found": "नया संस्करण मिला। अपडेट करने के लिए रिफ्रेश करें।",
|
||||
"options": "विकल्प",
|
||||
"proxy_privacy_policy": "प्रॉक्सी गोपनीयता नीति",
|
||||
"reload": "पुनः लोड करें",
|
||||
"search": "खोज",
|
||||
"share": "बाँट",
|
||||
"shortcuts": "शॉर्टकट",
|
||||
"spotlight": "स्पॉटलाइट",
|
||||
"status": "स्थिति",
|
||||
"status_description": "वेबसाइट की स्थिति जांचें",
|
||||
"terms_and_privacy": "शर्तें और गोपनीयता",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "कमांड टाइप करें या सर्च करें...",
|
||||
"we_use_cookies": "हम कुकीज़ का उपयोग करते हैं",
|
||||
"whats_new": "नया क्या है?",
|
||||
"wiki": "विकी"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "खाता अलग-अलग क्रेडेंशियल के साथ मौजूद है - दोनों खातों को जोड़ने के लिए लॉगिन करें",
|
||||
"all_sign_in_options": "सभी साइन इन विकल्प",
|
||||
"continue_with_email": "ईमेल के साथ जारी रखें",
|
||||
"continue_with_github": "GitHub के साथ जारी रखें",
|
||||
"continue_with_google": "Google के साथ जारी रखें",
|
||||
"continue_with_microsoft": "Microsoft के साथ जारी रखें",
|
||||
"email": "ईमेल",
|
||||
"logged_out": "लॉग आउट",
|
||||
"login": "लॉग इन",
|
||||
"login_success": "सफलतापूर्वक लॉग इन किया",
|
||||
"login_to_hoppscotch": "हॉप्सकॉच में लॉगिन करें",
|
||||
"logout": "लॉगआउट",
|
||||
"re_enter_email": "ईमेल दोबारा दर्ज करें",
|
||||
"send_magic_link": "मैजिक लिंक भेजें",
|
||||
"sync": "सिंक",
|
||||
"we_sent_magic_link": "हमने आपको एक मैजिक लिंक भेजा है!",
|
||||
"we_sent_magic_link_description": "अपना इनबॉक्स जांचें - हमने {email} पर एक ईमेल भेजा है। इसमें एक जादुई लिंक है जो आपको लॉग इन करेगा।"
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "टोकन जनरेट करें",
|
||||
"include_in_url": "URL में शामिल करें",
|
||||
"learn": "जानें कैसे",
|
||||
"pass_key_by": "पास करें",
|
||||
"password": "पासवर्ड",
|
||||
"token": "टोकन",
|
||||
"type": "प्राधिकरण प्रकार",
|
||||
"username": "उपयोगकर्ता नाम"
|
||||
},
|
||||
"collection": {
|
||||
"created": "संग्रह बनाया गया",
|
||||
"edit": "संग्रह संपादित करें",
|
||||
"invalid_name": "कृपया संग्रह के लिए एक नाम प्रदान करें",
|
||||
"my_collections": "मेरे संग्रह",
|
||||
"name": "मेरा नया संग्रह",
|
||||
"name_length_insufficient": "संग्रह का नाम कम से कम 3 वर्णों का होना चाहिए",
|
||||
"new": "नया संग्रह",
|
||||
"renamed": "संग्रह का नाम बदला गया",
|
||||
"request_in_use": "रिक्वेस्ट इन यूज़",
|
||||
"save_as": "इस रूप में सेव करें",
|
||||
"select": "एक संग्रह का चयन करें",
|
||||
"select_location": "स्थान चुनें",
|
||||
"select_team": "एक टीम चुनें",
|
||||
"team_collections": "टीम संग्रह"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "क्या आप वाकई इस टीम को छोड़ना चाहते हैं?",
|
||||
"logout": "क्या आप वाकई लॉगआउट करना चाहते हैं?",
|
||||
"remove_collection": "क्या आप वाकई इस संग्रह को स्थायी रूप से हटाना चाहते हैं?",
|
||||
"remove_environment": "क्या आप वाकई इस परिवेश को स्थायी रूप से हटाना चाहते हैं?",
|
||||
"remove_folder": "क्या आप वाकई इस फ़ोल्डर को स्थायी रूप से हटाना चाहते हैं?",
|
||||
"remove_history": "क्या आप वाकई सभी इतिहास को स्थायी रूप से हटाना चाहते हैं?",
|
||||
"remove_request": "क्या आप वाकई इस अनुरोध को स्थायी रूप से हटाना चाहते हैं?",
|
||||
"remove_team": "क्या आप वाकई इस टीम को हटाना चाहते हैं?",
|
||||
"remove_telemetry": "क्या आप वाकई टेलीमेट्री से ऑप्ट-आउट करना चाहते हैं?",
|
||||
"request_change": "क्या आप वाकई वर्तमान अनुरोध को छोड़ना चाहते हैं, सहेजे नहीं गए परिवर्तन खो जाएंगे।",
|
||||
"sync": "क्या आप अपने कार्यक्षेत्र को क्लाउड से पुनर्स्थापित करना चाहेंगे? यह आपकी स्थानीय प्रगति को त्याग देगा।"
|
||||
},
|
||||
"count": {
|
||||
"header": "हेडर {count}",
|
||||
"message": "मैसेज {count}",
|
||||
"parameter": "पैरामीटर {count}",
|
||||
"protocol": "प्रोटोकॉल {count}",
|
||||
"value": "मान {count}",
|
||||
"variable": "वेरिएबल {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "दस्तावेज़ीकरण उत्पन्न करें",
|
||||
"generate_message": "चलते-फिरते API दस्तावेज़ बनाने के लिए कोई भी Hoppscotch संग्रह आयात करें।"
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "यह अनुरोध किसी प्राधिकरण का उपयोग नहीं करता",
|
||||
"body": "इस अनुरोध में कोई बॉडी नहीं है",
|
||||
"collection": "संग्रह खाली है",
|
||||
"collections": "संग्रह खाली हैं",
|
||||
"documentation": "दस्तावेज़ीकरण देखने के लिए GraphQL से कनेक्ट करें",
|
||||
"endpoint": "समापन बिंदु खाली नहीं हो सकता",
|
||||
"environments": "वातावरण खाली हैं",
|
||||
"folder": " फ़ोल्डर खाली है",
|
||||
"headers": " इस अनुरोध का कोई हेडर नहीं है",
|
||||
"history": " इतिहास खाली है",
|
||||
"invites": " आमंत्रण सूची खाली है",
|
||||
"members": " टीम खाली है",
|
||||
"parameters": " इस अनुरोध का कोई पैरामीटर नहीं है",
|
||||
"pending_invites": " इस टीम के लिए कोई आमंत्रण लंबित नहीं है",
|
||||
"profile": " अपना प्रोफ़ाइल देखने के लिए लॉगिन करें",
|
||||
"protocols": " प्रोटोकॉल खाली हैं",
|
||||
"schema": " स्कीमा देखने के लिए ग्राफ़क्यूएल एंडपॉइंट से कनेक्ट करें",
|
||||
"shortcodes": " शॉर्टकोड खाली हैं",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": " टीम का नाम खाली",
|
||||
"teams": " आप किसी भी टीम से संबंधित नहीं हैं",
|
||||
"tests": " इस अनुरोध के लिए कोई परीक्षण नहीं हैं"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": " ग्लोबल में जोड़ें",
|
||||
"added": " पर्यावरण अतिरिक्त",
|
||||
"create_new": " नया वातावरण बनाएं",
|
||||
"created": " पर्यावरण बनाया",
|
||||
"deleted": " पर्यावरण विलोपन",
|
||||
"edit": " पर्यावरण संपादित करें",
|
||||
"invalid_name": " कृपया पर्यावरण के लिए एक नाम प्रदान करें",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": " नेस्टेड पर्यावरण चर 10 स्तरों तक सीमित हैं",
|
||||
"new": " नया वातावरण",
|
||||
"no_environment": " कोई वातावरण नहीं",
|
||||
"no_environment_description": " कोई परिवेश नहीं चुना गया था. चुनें कि निम्नलिखित चर के साथ क्या करना है।",
|
||||
"select": " पर्यावरण का चयन करें",
|
||||
"team_environments": "Team Environments",
|
||||
"title": " वातावरण",
|
||||
"updated": " पर्यावरण अद्यतन",
|
||||
"variable_list": " परिवर्तनीय सूची"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": " ऐसा लगता है कि इस ब्राउज़र में सर्वर से भेजे गए इवेंट का समर्थन नहीं है।",
|
||||
"check_console_details": " विवरण के लिए कंसोल लॉग की जाँच करें।",
|
||||
"curl_invalid_format": " कर्ल ठीक से स्वरूपित नहीं है",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": " खाली अनुरोध का नाम",
|
||||
"f12_details": " (विवरण के लिए F12)",
|
||||
"gql_prettify_invalid_query": " अमान्य क्वेरी को सुंदर नहीं बना सका, क्वेरी सिंटैक्स त्रुटियों को हल नहीं कर सका और पुनः प्रयास करें",
|
||||
"incomplete_config_urls": " अपूर्ण कॉन्फ़िगरेशन URL",
|
||||
"incorrect_email": " गलत ईमेल",
|
||||
"invalid_link": " अमान्य लिंक",
|
||||
"invalid_link_description": " आपके द्वारा क्लिक किया गया लिंक अमान्य है या समाप्त हो गया है।",
|
||||
"json_parsing_failed": " अमान्य JSON",
|
||||
"json_prettify_invalid_body": " अमान्य निकाय को सुंदर नहीं बना सका, json सिंटैक्स त्रुटियों को हल करें और पुनः प्रयास करें",
|
||||
"network_error": " ऐसा लगता है कि कोई नेटवर्क त्रुटि है। कृपया पुन: प्रयास करें।",
|
||||
"network_fail": " अनुरोध नहीं भेजा जा सका",
|
||||
"no_duration": " कोई अवधि नहीं",
|
||||
"no_results_found": " कोई मेल नहीं मिले",
|
||||
"page_not_found": " यह पृष्ठ नहीं मिल सका",
|
||||
"script_fail": " पूर्व-अनुरोध स्क्रिप्ट निष्पादित नहीं कर सका",
|
||||
"something_went_wrong": " कुछ गलत हो गया",
|
||||
"test_script_fail": " अनुरोध के बाद स्क्रिप्ट निष्पादित नहीं कर सका"
|
||||
},
|
||||
"export": {
|
||||
"as_json": " JSON के रूप में निर्यात करें",
|
||||
"create_secret_gist": " गुप्त सार बनाएँ",
|
||||
"gist_created": " जिस्ट बनाया",
|
||||
"require_github": " गुप्त सार बनाने के लिए GitHub के साथ लॉगिन करें",
|
||||
"title": " निर्यात करना"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": " फोल्डर बनाया",
|
||||
"edit": " फ़ोल्डर संपादित करें",
|
||||
"invalid_name": " कृपया फ़ोल्डर के लिए एक नाम प्रदान करें",
|
||||
"name_length_insufficient": " फ़ोल्डर का नाम कम से कम 3 वर्ण लंबा होना चाहिए",
|
||||
"new": " नया फोल्डर",
|
||||
"renamed": " फ़ोल्डर का नाम बदला"
|
||||
},
|
||||
"graphql": {
|
||||
"mutations": " उत्परिवर्तन",
|
||||
"schema": " योजना",
|
||||
"subscriptions": " सदस्यता"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": " एप्लिकेशन इंस्टॉल करें",
|
||||
"login": " लॉग इन करें",
|
||||
"save_workspace": " मेरा कार्यक्षेत्र सहेजें"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": " जब आप अनुरोध भेजेंगे तो प्राधिकरण शीर्षलेख स्वतः उत्पन्न हो जाएगा।",
|
||||
"generate_documentation_first": " पहले दस्तावेज़ तैयार करें",
|
||||
"network_fail": " एपीआई समापन बिंदु तक पहुंचने में असमर्थ। अपने नेटवर्क कनेक्शन की जाँच करें या किसी भिन्न इंटरसेप्टर का चयन करें और पुनः प्रयास करें।",
|
||||
"offline": " ऐसा लगता है कि आप ऑफ़लाइन हैं. हो सकता है कि इस कार्यस्थान का डेटा अप टू डेट न हो.",
|
||||
"offline_short": " ऐसा लगता है कि आप ऑफ़लाइन हैं.",
|
||||
"post_request_tests": " टेस्ट स्क्रिप्ट जावास्क्रिप्ट में लिखी जाती हैं, और प्रतिक्रिया प्राप्त होने के बाद चलाई जाती हैं।",
|
||||
"pre_request_script": " पूर्व-अनुरोध स्क्रिप्ट जावास्क्रिप्ट में लिखी जाती हैं, और अनुरोध भेजे जाने से पहले चलाई जाती हैं।",
|
||||
"script_fail": " ऐसा लगता है कि प्री-रिक्वेस्ट स्क्रिप्ट में गड़बड़ है। नीचे दी गई त्रुटि की जाँच करें और उसके अनुसार स्क्रिप्ट को ठीक करें।",
|
||||
"test_script_fail": " ऐसा लगता है कि परीक्षण स्क्रिप्ट में कोई त्रुटि है। कृपया त्रुटियों को ठीक करें और फिर से परीक्षण चलाएं",
|
||||
"tests": "Write a test script to automate debugging.",
|
||||
"test": "डिबगिंग को स्वचालित करने के लिए एक परीक्षण स्क्रिप्ट लिखें"
|
||||
},
|
||||
"hide": {
|
||||
"collection": "संग्रह पैनल संक्षिप्त करें",
|
||||
"more": "अधिक छुपाएं",
|
||||
"preview": "पूर्वावलोकन छुपाएं",
|
||||
"sidebar": "साइडबार को ध्वस्त करें"
|
||||
},
|
||||
"import": {
|
||||
"collections": "आयात संग्रहण",
|
||||
"curl": "आयात cURL",
|
||||
"failed": "आयात करते समय त्रुटि: प्रारूप पहचाना नहीं गया",
|
||||
"from_gist": "Gist से आयात करें",
|
||||
"from_gist_description": "Gist URL से आयात करें",
|
||||
"from_insomnia": "Insomnia से आयात करें",
|
||||
"from_insomnia_description": "Insomnia collection से आयात करें",
|
||||
"from_json": "Hoppscotch से आयात करें",
|
||||
"from_json_description": "Hoppsotch संग्रह फ़ाइल से आयात करें",
|
||||
"from_my_collections": "मेरे संग्रह से आयात करें",
|
||||
"from_my_collections_description": "मेरे संग्रह फ़ाइल से आयात करें",
|
||||
"from_openapi": "OpenAPI से आयात करें",
|
||||
"from_openapi_description": "OpenAPI specification file से आयात करें (JSON)",
|
||||
"from_postman": "Postman से आयात करें",
|
||||
"from_postman_description": "Postman collection से आयात करें",
|
||||
"from_url": "URL से आयात करें",
|
||||
"gist_url": "Gist URL दर्ज करें",
|
||||
"import_from_url_invalid_fetch": "URL से डेटा नहीं मिल सका",
|
||||
"import_from_url_invalid_file_format": "संग्रह आयात करते समय त्रुटि",
|
||||
"import_from_url_invalid_type": "असमर्थित प्रकार। स्वीकृत मूल्य हैं 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "संग्रह आयातित",
|
||||
"json_description": "Hoppscotch Collections JSON फ़ाइल से संग्रह आयात करें",
|
||||
"title": "आयात करें"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "संग्रह को संक्षिप्त या विस्तृत करें",
|
||||
"collapse_sidebar": "साइडबार को संक्षिप्त या विस्तृत करें",
|
||||
"column": "लंबवत लेआउट",
|
||||
"name": "लेआउट",
|
||||
"row": "क्षैतिज लेआउट",
|
||||
"zen_mode": "ज़ेन मोड"
|
||||
},
|
||||
"modal": {
|
||||
"collections": "संग्रह",
|
||||
"confirm": "पुष्टि करें",
|
||||
"edit_request": "अनुरोध संपादित करें",
|
||||
"import_export": "आयात / निर्यात"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "संचार",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "लॉग",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "संदेश",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "प्रकाशित",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "सब्सक्राइब करें",
|
||||
"topic": "विषय",
|
||||
"topic_name": "विषय का नाम",
|
||||
"topic_title": "विषय प्रकाशित करें / सदस्यता लें",
|
||||
"unsubscribe": "विषय प्रकाशित करें / सदस्यता लें",
|
||||
"url": "URL"
|
||||
},
|
||||
"navigation": {
|
||||
"doc": "डॉक्स",
|
||||
"graphql": "ग्राफक्ल",
|
||||
"profile": "प्रोफ़ाइल",
|
||||
"realtime": "रियल टाइम",
|
||||
"rest": "रेस्ट",
|
||||
"settings": "समायोजन"
|
||||
},
|
||||
"preRequest": {
|
||||
"javascript_code": "जावास्क्रिप्ट कोड",
|
||||
"learn": "प्रलेखन पढ़ें",
|
||||
"script": "पूर्व-अनुरोध स्क्रिप्ट",
|
||||
"snippets": "स्निपेट्स"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "एप्लिकेशन सेटिंग",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "संपादक",
|
||||
"editor_description": "संपादक अनुरोधों को जोड़ सकते हैं, संपादित कर सकते हैं और हटा सकते हैं।",
|
||||
"email_verification_mail": "आपके ईमेल पते पर एक सत्यापन ईमेल भेजा गया है। कृपया अपना ईमेल पता सत्यापित करने के लिए लिंक पर क्लिक करें।",
|
||||
"no_permission": "आपके पास यह कार्रवाई करने की अनुमति नहीं है।",
|
||||
"owner": "स्वामी",
|
||||
"owner_description": "मालिक अनुरोध, संग्रह और टीम के सदस्यों को जोड़, संपादित और हटा सकते हैं।",
|
||||
"roles": "भूमिकाएँ",
|
||||
"roles_description": "साझा संग्रह तक पहुंच को नियंत्रित करने के लिए भूमिकाओं का उपयोग किया जाता है।",
|
||||
"updated": "प्रोफाइल अद्यतन किया गया",
|
||||
"viewer": "दर्शक",
|
||||
"viewer_description": "दर्शक केवल अनुरोधों को देख और उपयोग कर सकते हैं।"
|
||||
},
|
||||
"remove": {
|
||||
"star": "स्टार निकालें"
|
||||
},
|
||||
"request": {
|
||||
"added": "अनुरोध जोड़ा गया",
|
||||
"authorization": "प्राधिकार",
|
||||
"body": "अनुरोध निकाय",
|
||||
"choose_language": "भाषा चुनें",
|
||||
"content_type": "सामग्री प्रकार",
|
||||
"content_type_titles": {
|
||||
"others": "अन्य",
|
||||
"structured": "स्ट्रक्चर्ड",
|
||||
"text": "मूलपाठ"
|
||||
},
|
||||
"copy_link": "प्रतिरूप जोड़ना",
|
||||
"duration": "अवधि",
|
||||
"enter_curl": "कर्ल दर्ज करें",
|
||||
"generate_code": "उत्पन्न कोड",
|
||||
"generated_code": "उत्पन्न कोड",
|
||||
"header_list": "हेडर सूची",
|
||||
"invalid_name": "कृपया अनुरोध के लिए एक नाम प्रदान करें",
|
||||
"method": "तरीका",
|
||||
"name": "अनुरोध नाम",
|
||||
"new": "नई विनती",
|
||||
"override": "अवहेलना",
|
||||
"override_help": "हेडर में <kbd> सामग्री-प्रकार </kbd> सेट करें",
|
||||
"overriden": "ओवरराइड",
|
||||
"parameter_list": "क्वेरी पैरामीटर",
|
||||
"parameters": "मापदंडों",
|
||||
"path": "रास्ता",
|
||||
"payload": "पेलोड",
|
||||
"query": "सवाल",
|
||||
"raw_body": "कच्चे अनुरोध निकाय",
|
||||
"renamed": "अनुरोध नाम दिया गया",
|
||||
"run": "दौड़ना",
|
||||
"save": "बचाना",
|
||||
"save_as": "के रूप रक्षित करें",
|
||||
"saved": "अनुरोध सहेजा गया",
|
||||
"share": "शेयर करना",
|
||||
"share_description": "अपने दोस्तों के साथ hoppscotch साझा करें",
|
||||
"title": "प्रार्थना",
|
||||
"type": "अनुरोध का प्रकार",
|
||||
"url": "यूआरएल",
|
||||
"variables": "चर",
|
||||
"view_my_links": "मेरे लिंक देखें"
|
||||
},
|
||||
"response": {
|
||||
"body": "प्रतिक्रिया निकाय",
|
||||
"filter_response_body": "फ़िल्टर JSON रिस्पांस बॉडी (JSONPATH सिंटैक्स का उपयोग करता है)",
|
||||
"headers": "हेडर",
|
||||
"html": "एचटीएमएल",
|
||||
"image": "छवि",
|
||||
"json": "जेसन",
|
||||
"pdf": "पीडीएफ",
|
||||
"preview_html": "HTML का पूर्वावलोकन करें",
|
||||
"raw": "कच्चा",
|
||||
"size": "आकार",
|
||||
"status": "दर्जा",
|
||||
"time": "समय",
|
||||
"title": "जवाब",
|
||||
"waiting_for_connection": "जुडने के लिए इंतजार",
|
||||
"xml": "एक्सएमएल"
|
||||
},
|
||||
"settings": {
|
||||
"accent_color": "स्वरोंका रंग",
|
||||
"account": "खाता",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "अपनी खाता सेटिंग कस्टमाइज़ करें।",
|
||||
"account_email_description": "आपका प्राथमिक ईमेल पता।",
|
||||
"account_name_description": "यह आपका प्रदर्शन नाम है।",
|
||||
"background": "पार्श्वभूमि",
|
||||
"black_mode": "काला",
|
||||
"change_font_size": "फॉण्ट आकार बदलें",
|
||||
"choose_language": "भाषा चुनें",
|
||||
"dark_mode": "अँधेरा",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "नेविगेशन का विस्तार करें",
|
||||
"experiments": "प्रयोगों",
|
||||
"experiments_notice": "यह उन प्रयोगों का एक संग्रह है, जिन पर हम काम कर रहे हैं, जो उपयोगी, मज़ेदार, दोनों या न ही हो सकते हैं। वे अंतिम नहीं हैं और स्थिर नहीं हो सकते हैं, इसलिए यदि कुछ अजीब होता है, तो घबराएं नहीं। बस खतरे को बंद कर दें। एक तरफ मजाक,",
|
||||
"extension_ver_not_reported": "सूचना नहीं दी",
|
||||
"extension_version": "विस्तार संस्करण",
|
||||
"extensions": "ब्राउज़र विस्तार",
|
||||
"extensions_use_toggle": "अनुरोध भेजने के लिए ब्राउज़र एक्सटेंशन का उपयोग करें (यदि मौजूद है)",
|
||||
"follow": "हमारे पर का पालन करें",
|
||||
"font_size": "फ़ॉन्ट आकार",
|
||||
"font_size_large": "विशाल",
|
||||
"font_size_medium": "मध्यम",
|
||||
"font_size_small": "छोटा",
|
||||
"interceptor": "इंटरसेप्टर",
|
||||
"interceptor_description": "एप्लिकेशन और एपीआई के बीच मिडलवेयर।",
|
||||
"language": "भाषा",
|
||||
"light_mode": "रोशनी",
|
||||
"official_proxy_hosting": "आधिकारिक प्रॉक्सी होप्सकॉच द्वारा होस्ट किया गया है।",
|
||||
"profile": "प्रोफ़ाइल",
|
||||
"profile_description": "अपने प्रोफ़ाइल विवरण को अपडेट करें",
|
||||
"profile_email": "ईमेल पता",
|
||||
"profile_name": "प्रोफ़ाइल नाम",
|
||||
"proxy": "प्रतिनिधि",
|
||||
"proxy_url": "प्रॉक्सी यूआरएल",
|
||||
"proxy_use_toggle": "अनुरोध भेजने के लिए प्रॉक्सी मिडलवेयर का उपयोग करें",
|
||||
"read_the": "को पढ़िए",
|
||||
"reset_default": "डिफ़ॉल्ट पर रीसेट",
|
||||
"short_codes": "लघु संहिताएँ",
|
||||
"short_codes_description": "छोटे कोड जो आपके द्वारा बनाए गए थे।",
|
||||
"sidebar_on_left": "बाईं ओर साइडबार",
|
||||
"sync": "सिंक्रनाइज़",
|
||||
"sync_collections": "संग्रह",
|
||||
"sync_description": "इन सेटिंग्स को क्लाउड में सिंक किया जाता है।",
|
||||
"sync_environments": "वातावरण",
|
||||
"sync_history": "इतिहास",
|
||||
"system_mode": "व्यवस्था",
|
||||
"telemetry": "टेलीमेटरी",
|
||||
"telemetry_helps_us": "टेलीमेट्री हमें अपने संचालन को निजीकृत करने और आपको सबसे अच्छा अनुभव प्रदान करने में मदद करती है।",
|
||||
"theme": "थीम",
|
||||
"theme_description": "अपने एप्लिकेशन थीम को कस्टमाइज़ करें।",
|
||||
"use_experimental_url_bar": "पर्यावरण हाइलाइटिंग के साथ प्रयोगात्मक URL बार का उपयोग करें",
|
||||
"user": "उपयोगकर्ता",
|
||||
"verified_email": "सत्यापित ईमेल",
|
||||
"verify_email": "ईमेल सत्यापित करें"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "कार्रवाई",
|
||||
"created_on": "पर बनाया",
|
||||
"deleted": "शॉर्टकोड हटा दिया गया",
|
||||
"method": "तरीका",
|
||||
"not_found": "शॉर्टकोड नहीं मिला",
|
||||
"short_code": "लघु कूट संख्या",
|
||||
"url": "यूआरएल"
|
||||
},
|
||||
"shortcut": {
|
||||
"general": {
|
||||
"close_current_menu": "वर्तमान मेनू बंद करें",
|
||||
"command_menu": "खोज और कमांड मेनू",
|
||||
"help_menu": "सहायता मेनू",
|
||||
"show_all": "कुंजीपटल अल्प मार्ग",
|
||||
"title": "सामान्य"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "लोगों को hoppscotch के लिए आमंत्रित करें",
|
||||
"title": "विविध"
|
||||
},
|
||||
"navigation": {
|
||||
"back": "पिछले पृष्ठ पर वापस जाएं",
|
||||
"documentation": "प्रलेखन पृष्ठ पर जाएं",
|
||||
"forward": "अगले पृष्ठ पर आगे बढ़ें",
|
||||
"graphql": "Graphql पेज पर जाएं",
|
||||
"profile": "प्रोफ़ाइल पेज पर जाएं",
|
||||
"realtime": "रियलटाइम पेज पर जाएं",
|
||||
"rest": "रेस्ट पेज पर जाएं",
|
||||
"settings": "सेटिंग्स पृष्ठ पर जाएं",
|
||||
"title": "मार्गदर्शन"
|
||||
},
|
||||
"request": {
|
||||
"copy_request_link": "कॉपी अनुरोध लिंक",
|
||||
"delete_method": "हटाएं विधि का चयन करें",
|
||||
"get_method": "गेट विधि का चयन करें",
|
||||
"head_method": "हेड विधि का चयन करें",
|
||||
"method": "तरीका",
|
||||
"next_method": "अगली विधि का चयन करें",
|
||||
"post_method": "पोस्ट विधि का चयन करें",
|
||||
"previous_method": "पिछली विधि का चयन करें",
|
||||
"put_method": "पुट विधि का चयन करें",
|
||||
"reset_request": "रीसेट अनुरोध",
|
||||
"save_to_collections": "संग्रह के लिए सहेजें",
|
||||
"send_request": "अनुरोध भेजा",
|
||||
"title": "प्रार्थना"
|
||||
},
|
||||
"response": {
|
||||
"copy": "क्लिपबोर्ड पर प्रतिक्रिया कॉपी करें",
|
||||
"download": "फ़ाइल के रूप में प्रतिक्रिया डाउनलोड करें",
|
||||
"title": "जवाब"
|
||||
},
|
||||
"theme": {
|
||||
"black": "ब्लैक मोड पर थीम को स्विच करें",
|
||||
"dark": "डार्क मोड पर थीम को स्विच करें",
|
||||
"light": "प्रकाश मोड पर थीम स्विच करें",
|
||||
"system": "सिस्टम मोड पर थीम स्विच करें",
|
||||
"title": "थीम"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "शो कोड",
|
||||
"collection": "संग्रह पैनल का विस्तार करें",
|
||||
"more": "और दिखाओ",
|
||||
"sidebar": "साइडबार का विस्तार करें"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "संचार",
|
||||
"connection_not_authorized": "यह सॉकेटियो कनेक्शन किसी भी प्रमाणीकरण का उपयोग नहीं करता है।",
|
||||
"event_name": "कार्यक्रम नाम",
|
||||
"events": "आयोजन",
|
||||
"log": "लकड़ी का लट्ठा",
|
||||
"url": "यूआरएल"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "घटना प्रकार",
|
||||
"log": "लकड़ी का लट्ठा",
|
||||
"url": "यूआरएल"
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "थोक संपादन",
|
||||
"bulk_mode_placeholder": "प्रविष्टियों को न्यूलाइन द्वारा अलग किया जाता है \n कुंजियाँ और मूल्यों को अलग कर दिया जाता है: \n किसी भी पंक्ति को आप जोड़ना चाहते हैं, लेकिन अक्षम रखें",
|
||||
"cleared": "साफ़ किया गया",
|
||||
"connected": "जुड़े हुए",
|
||||
"connected_to": "{name} से जुड़ा हुआ है",
|
||||
"connecting_to": "{name} से कनेक्ट करना ...",
|
||||
"connection_error": "जोडने में विफल",
|
||||
"connection_failed": "कनेक्शन विफल",
|
||||
"connection_lost": "संपर्क टूट गया",
|
||||
"copied_to_clipboard": "क्लिपबोर्ड पर नकल",
|
||||
"deleted": "हटाए गए",
|
||||
"deprecated": "बहिष्कृत किया गया",
|
||||
"disabled": "अक्षम",
|
||||
"disconnected": "डिस्कनेक्ट किया गया",
|
||||
"disconnected_from": "{name} से डिस्कनेक्ट किया गया",
|
||||
"docs_generated": "प्रलेखन उत्पन्न",
|
||||
"download_started": "डाउनलोड शुरू हुआ",
|
||||
"enabled": "सक्रिय",
|
||||
"file_imported": "आयातित फ़ाइल",
|
||||
"finished_in": "{duration} एमएस में समाप्त",
|
||||
"history_deleted": "इतिहास हटा दिया गया",
|
||||
"linewrap": "लपेटने की रेखाएँ",
|
||||
"loading": "लोड हो रहा है...",
|
||||
"message_received": "संदेश: {message} विषय पर पहुंचे: {topic}",
|
||||
"mqtt_subscription_failed": "विषय की सदस्यता लेते हुए कुछ गलत हो गया: {topic}",
|
||||
"none": "कोई भी नहीं",
|
||||
"nothing_found": "के लिए कुछ भी नहीं मिला",
|
||||
"published_error": "MSG प्रकाशित करते समय कुछ गलत हुआ: {topic} विषय के लिए: {message}",
|
||||
"published_message": "प्रकाशित संदेश: {message} विषय के लिए: {topic}",
|
||||
"reconnection_error": "फिर से जुड़ने में विफल रहा",
|
||||
"subscribed_failed": "विषय की सदस्यता लेने में विफल: {topic}",
|
||||
"subscribed_success": "सफलतापूर्वक विषय की सदस्यता: {topic}",
|
||||
"unsubscribed_failed": "विषय से सदस्यता समाप्त करने में विफल: {topic}",
|
||||
"unsubscribed_success": "विषय से सफलतापूर्वक सदस्यता: {topic}",
|
||||
"waiting_send_request": "अनुरोध भेजने की प्रतीक्षा में"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "नवीनतम रिलीज़ के बारे में और पढ़ें",
|
||||
"chat": "प्रशन? हम से बात करे!",
|
||||
"community": "सवाल पूछें और दूसरों की मदद करें",
|
||||
"documentation": "Hoppscotch के बारे में और पढ़ें",
|
||||
"forum": "सवाल पूछें और उत्तर प्राप्त करें",
|
||||
"github": "हमें GitHub पर फॉलो करें",
|
||||
"shortcuts": "ऐप को तेजी से ब्राउज़ करें",
|
||||
"team": "टीम के संपर्क में रहें",
|
||||
"title": "सहायता",
|
||||
"twitter": "चहचहाना पर हमें का पालन करें"
|
||||
},
|
||||
"tab": {
|
||||
"authorization": "प्राधिकार",
|
||||
"body": "शरीर",
|
||||
"collections": "संग्रह",
|
||||
"documentation": "प्रलेखन",
|
||||
"headers": "हेडर",
|
||||
"history": "इतिहास",
|
||||
"mqtt": "MQTT",
|
||||
"parameters": "मापदंडों",
|
||||
"pre_request_script": "पूर्व-अनुरोध स्क्रिप्ट",
|
||||
"queries": "प्रश्नों",
|
||||
"query": "सवाल",
|
||||
"schema": "योजना",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "एसएसई",
|
||||
"tests": "परीक्षण",
|
||||
"types": "प्रकार",
|
||||
"variables": "चर",
|
||||
"websocket": "जालसाजक"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "आप पहले से ही इस टीम के सदस्य हैं। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"create_new": "नई टीम बनाएं",
|
||||
"deleted": "टीम हटा दी गई",
|
||||
"edit": "संपादित टीम",
|
||||
"email": "ईमेल",
|
||||
"email_do_not_match": "ईमेल आपके खाते के विवरण के साथ मेल नहीं खाता है। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"exit": "निकास टीम",
|
||||
"exit_disabled": "केवल मालिक टीम से बाहर नहीं निकल सकते",
|
||||
"invalid_email_format": "ईमेल प्रारूप अमान्य है",
|
||||
"invalid_id": "अमान्य टीम आईडी। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"invalid_invite_link": "अमान्य आमंत्रित लिंक",
|
||||
"invalid_invite_link_description": "आपके द्वारा पीछा किया गया लिंक अमान्य है। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"invalid_member_permission": "कृपया टीम के सदस्य को एक वैध अनुमति प्रदान करें",
|
||||
"invite": "आमंत्रित करना",
|
||||
"invite_more": "अधिक आमंत्रित करें",
|
||||
"invite_tooltip": "लोगों को इस कार्यक्षेत्र में आमंत्रित करें",
|
||||
"invited_to_team": "{owner} ने आपको {team} में शामिल होने के लिए आमंत्रित किया",
|
||||
"join": "निमंत्रण स्वीकार किया गया",
|
||||
"join_beta": "टीमों तक पहुंचने के लिए बीटा कार्यक्रम में शामिल हों।",
|
||||
"join_team": "टीम में शामिल हों}",
|
||||
"joined_team": "आप {team} में शामिल हो गए हैं",
|
||||
"joined_team_description": "अब आप इस टीम के सदस्य हैं",
|
||||
"left": "आपने टीम छोड़ दी",
|
||||
"login_to_continue": "जारी रखने के लिए लॉगिन करें",
|
||||
"login_to_continue_description": "एक टीम में शामिल होने के लिए आपको लॉग इन करने की आवश्यकता है।",
|
||||
"logout_and_try_again": "लॉगआउट और किसी अन्य खाते के साथ साइन इन करें",
|
||||
"member_has_invite": "इस ईमेल आईडी में पहले से ही एक निमंत्रण है। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"member_not_found": "सदस्य अनुपस्थित। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"member_removed": "उपयोगकर्ता हटा दिया",
|
||||
"member_role_updated": "उपयोगकर्ता भूमिकाएँ अद्यतन की गईं",
|
||||
"members": "सदस्यों",
|
||||
"name_length_insufficient": "टीम का नाम कम से कम 6 अक्षर लंबा होना चाहिए",
|
||||
"name_updated": "टीम का नाम अपडेट किया गया",
|
||||
"new": "नई टीम",
|
||||
"new_created": "नई टीम बनाई गई",
|
||||
"new_name": "मेरी नई टीम",
|
||||
"no_access": "आपके पास इन संग्रहों तक पहुंच नहीं है",
|
||||
"no_invite_found": "निमंत्रण नहीं मिला। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"not_found": "टीम नहीं मिली। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"not_valid_viewer": "आप एक वैध दर्शक नहीं हैं। अपनी टीम के मालिक से संपर्क करें।",
|
||||
"pending_invites": "लंबित आमंत्रण",
|
||||
"permissions": "अनुमतियां",
|
||||
"saved": "टीम बचाया",
|
||||
"select_a_team": "एक टीम का चयन करें",
|
||||
"title": "टीमों",
|
||||
"we_sent_invite_link": "हमने सभी आमंत्रणों के लिए एक आमंत्रण लिंक भेजा!",
|
||||
"we_sent_invite_link_description": "सभी आमंत्रणों से उनके इनबॉक्स की जांच करने के लिए पूछें। टीम में शामिल होने के लिए लिंक पर क्लिक करें।"
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "परीक्षण विफल",
|
||||
"javascript_code": "जावास्क्रिप्ट कोड",
|
||||
"learn": "प्रलेखन पढ़ें",
|
||||
"passed": "परीक्षा उत्तीर्ण की",
|
||||
"report": "जाँच रिपोर्ट",
|
||||
"results": "परीक्षा के परिणाम",
|
||||
"script": "लिखी हुई कहानी",
|
||||
"snippets": "स्निपेट्स"
|
||||
},
|
||||
"websocket": {
|
||||
"communication": "संचार",
|
||||
"log": "लकड़ी का लट्ठा",
|
||||
"message": "संदेश",
|
||||
"protocols": "प्रोटोकॉल",
|
||||
"url": "यूआरएल"
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Összes törlése",
|
||||
"close": "Close",
|
||||
"connect": "Kapcsolódás",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Másolás",
|
||||
"delete": "Törlés",
|
||||
"disconnect": "Leválasztás",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Kettőzés",
|
||||
"edit": "Szerkesztés",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Vissza",
|
||||
"group_by": "Group by",
|
||||
"label": "Címke",
|
||||
"learn_more": "Tudjon meg többet",
|
||||
"less": "Kevesebb",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Keresés",
|
||||
"send": "Küldés",
|
||||
"start": "Indítás",
|
||||
"starting": "Starting",
|
||||
"stop": "Leállítás",
|
||||
"to_close": "a bezáráshoz",
|
||||
"to_navigate": "a navigáláshoz",
|
||||
@@ -172,6 +175,7 @@
|
||||
"protocols": "A protokollok üresek",
|
||||
"schema": "Kapcsolódjon egy GraphQL-végponthoz a séma megtekintéséhez",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "A csapat neve üres",
|
||||
"teams": "Ön nem tartozik semmilyen csapathoz",
|
||||
"tests": "Nincsenek tesztek ehhez a kéréshez"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Környezet törlése",
|
||||
"edit": "Környezet szerkesztése",
|
||||
"invalid_name": "Adjon nevet a környezetnek",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "az egymásba ágyazott környezeti változók 10 szintre vannak korlátozva",
|
||||
"new": "Új 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.",
|
||||
"select": "Környezet kiválasztása",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Környezetek",
|
||||
"updated": "Környezet frissítve",
|
||||
"variable_list": "Változólista"
|
||||
@@ -197,6 +203,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.",
|
||||
"check_console_details": "Nézze meg a konzolnaplót a részletekért.",
|
||||
"curl_invalid_format": "A cURL nincs megfelelően formázva",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Üres kérésnév",
|
||||
"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",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Jelentkezzen be GitHub használatával a titkos Gist létrehozásához",
|
||||
"title": "Exportálás"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Mappa létrehozva",
|
||||
"edit": "Mappa szerkesztése",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Séma",
|
||||
"subscriptions": "Feliratkozások"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Alkalmazás telepítése",
|
||||
"login": "Bejelentkezés",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Importálás és exportálás"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Kommunikáció",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Napló",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Üzenet",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Közzététel",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Feliratkozás",
|
||||
"topic": "Téma",
|
||||
"topic_name": "Téma neve",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "Alkalmazás beállításai",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Szerkesztő",
|
||||
"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.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Kérés neve",
|
||||
"new": "Új kérés",
|
||||
"override": "Felülbírálás",
|
||||
"override_help": "A <xmp>Content-Type</xmp> beállítása a fejlécekben",
|
||||
"override_help": "A <kbd>Content-Type</kbd> beállítása a fejlécekben",
|
||||
"overriden": "Felülbírálva",
|
||||
"parameter_list": "Lekérdezési paraméterek",
|
||||
"parameters": "Paraméterek",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Kiemelőszín",
|
||||
"account": "Fiók",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "A fiókbeállítások személyre szabása.",
|
||||
"account_email_description": "Az Ön elsődleges e-mail-címe.",
|
||||
"account_name_description": "Ez a megjelenített neve.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Betűméret megváltoztatása",
|
||||
"choose_language": "Nyelv kiválasztása",
|
||||
"dark_mode": "Sötét",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Navigáció kinyitása",
|
||||
"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, ",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Kérés elküldése",
|
||||
"title": "Kérés"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Téma átváltása fekete módra",
|
||||
"dark": "Téma átváltása sötét módra",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "Elküldtünk egy meghívási hivatkozást az összes meghívottnak.",
|
||||
"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": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "teszt sikertelen",
|
||||
"javascript_code": "JavaScript kód",
|
||||
717
packages/hoppscotch-common/locales/id.json
Normal file
@@ -0,0 +1,717 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "Gulir Otomatis",
|
||||
"cancel": "Batalkan",
|
||||
"choose_file": "Pilih file",
|
||||
"clear": "Bersihkan",
|
||||
"clear_all": "Bersihkan semua",
|
||||
"close": "Tutup",
|
||||
"connect": "Sambungkan",
|
||||
"connecting": "Menyambungkan",
|
||||
"copy": "Salin",
|
||||
"delete": "Menghapus",
|
||||
"disconnect": "Memutuskan",
|
||||
"dismiss": "Tolak",
|
||||
"dont_save": "Jangan simpan",
|
||||
"download_file": "Unduh berkas",
|
||||
"drag_to_reorder": "Seret untuk menyusun ulang",
|
||||
"duplicate": "Duplikat",
|
||||
"edit": "Edit",
|
||||
"filter": "Tanggapan filter",
|
||||
"go_back": "Kembali",
|
||||
"group_by": "Group by",
|
||||
"label": "Label",
|
||||
"learn_more": "Pelajari lebih lanjut",
|
||||
"less": "Lebih sedikit",
|
||||
"more": "Lebih banyak",
|
||||
"new": "Baru",
|
||||
"no": "Tidak",
|
||||
"open_workspace": "Ruang kerja terbuka",
|
||||
"paste": "Tempel",
|
||||
"prettify": "Prettify",
|
||||
"remove": "Hapus",
|
||||
"restore": "Pulihkan",
|
||||
"save": "Simpan",
|
||||
"scroll_to_bottom": "Gulir ke bawah",
|
||||
"scroll_to_top": "Gulir ke atas",
|
||||
"search": "Cari",
|
||||
"send": "Kirim",
|
||||
"start": "Mulai",
|
||||
"starting": "Memulai",
|
||||
"stop": "Berhenti",
|
||||
"to_close": "Untuk menutup",
|
||||
"to_navigate": "Untuk menavigasi",
|
||||
"to_select": "Memilih",
|
||||
"turn_off": "Matikan",
|
||||
"turn_on": "Nyalakan",
|
||||
"undo": "Mengembalikan",
|
||||
"yes": "Ya"
|
||||
},
|
||||
"add": {
|
||||
"new": "Tambah baru",
|
||||
"star": "Tambahkan bintang"
|
||||
},
|
||||
"app": {
|
||||
"chat_with_us": "Berbincanglah dengan kami",
|
||||
"contact_us": "Hubungi kami",
|
||||
"copy": "Salin",
|
||||
"copy_user_id": "Salin Token Otentikasi Pengguna",
|
||||
"developer_option": "Opsi pengembang",
|
||||
"developer_option_description": "Alat pengembang yang membantu dalam pengembangan dan pemeliharaan Hoppscotch.",
|
||||
"discord": "Discord",
|
||||
"documentation": "Dokumentasi",
|
||||
"github": "GitHub",
|
||||
"help": "Bantuan & umpan balik",
|
||||
"home": "Beranda",
|
||||
"invite": "Undang",
|
||||
"invite_description": "Hoppscotch adalah ekosistem pengembangan API open source. Kami merancang antarmuka yang sederhana dan intuitif untuk membuat dan mengelola API Anda. Hoppscotch adalah alat yang membantu Anda membuat, menguji, mendokumentasikan, dan membagikan API Anda.",
|
||||
"invite_your_friends": "Undang temanmu",
|
||||
"join_discord_community": "Bergabunglah dengan komunitas Discord kami",
|
||||
"keyboard_shortcuts": "Pintasan keyboard",
|
||||
"name": "Hoppscotch",
|
||||
"new_version_found": "Versi baru ditemukan. Segarkan untuk memperbarui..",
|
||||
"options": "Pilihan",
|
||||
"proxy_privacy_policy": "Kebijakan privasi proxy",
|
||||
"reload": "Muat ulang",
|
||||
"search": "Mencari",
|
||||
"share": "Membagikan",
|
||||
"shortcuts": "Jalan pintas",
|
||||
"spotlight": "Menyoroti",
|
||||
"status": "Status",
|
||||
"status_description": "Periksa status situs web",
|
||||
"terms_and_privacy": "Syarat dan privasi",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "Ketik perintah atau cari…",
|
||||
"we_use_cookies": "Kami menggunakan cookie",
|
||||
"whats_new": "Apa yang baru?",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "Akun ada dengan kredensial berbeda - Masuk untuk menautkan kedua akun",
|
||||
"all_sign_in_options": "Semua opsi masuk",
|
||||
"continue_with_email": "Lanjutkan dengan Surel",
|
||||
"continue_with_github": "Lanjutkan dengan GitHub",
|
||||
"continue_with_google": "Lanjutkan dengan Google",
|
||||
"continue_with_microsoft": "Lanjutkan dengan Microsoft",
|
||||
"email": "Surel",
|
||||
"logged_out": "Keluar",
|
||||
"login": "Masuk",
|
||||
"login_success": "Berhasil masuk",
|
||||
"login_to_hoppscotch": "Masuk ke Hoppscotch",
|
||||
"logout": "Keluar",
|
||||
"re_enter_email": "Masukkan kembali surel",
|
||||
"send_magic_link": "Kirim tautan ajaib",
|
||||
"sync": "Sinkronkan",
|
||||
"we_sent_magic_link": "Kami mengirimi Anda tautan ajaib!",
|
||||
"we_sent_magic_link_description": "Periksa kotak masuk Anda - kami mengirim surel ke {email}. Ini berisi tautan ajaib yang akan membuat Anda masuk.."
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "Buat Token",
|
||||
"include_in_url": "Sertakan dalam URL",
|
||||
"learn": "Belajar bagaimana",
|
||||
"pass_key_by": "Lewat",
|
||||
"password": "Kata Sandi",
|
||||
"token": "Token",
|
||||
"type": "Jenis Otorisasi",
|
||||
"username": "Nama Pengguna"
|
||||
},
|
||||
"collection": {
|
||||
"created": "Koleksi dibuat",
|
||||
"edit": "Mengubah Koleksi",
|
||||
"invalid_name": "Berikan nama untuk Koleksi",
|
||||
"my_collections": "Koleksi Saya",
|
||||
"name": "Koleksi Baru Saya",
|
||||
"name_length_insufficient": "Nama koleksi harus minimal 3 karakter",
|
||||
"new": "Koleksi baru",
|
||||
"renamed": "Koleksi berganti nama",
|
||||
"request_in_use": "Permintaan sedang digunakan",
|
||||
"save_as": "Simpan Sebagai",
|
||||
"select": "Pilih Koleksi",
|
||||
"select_location": "Pilih lokasi",
|
||||
"select_team": "Pilih team",
|
||||
"team_collections": "Koleksi Tim"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "Apakah Anda yakin ingin keluar dari tim ini?",
|
||||
"logout": "Apakah Anda yakin ingin keluar?",
|
||||
"remove_collection": "Apakah Anda yakin ingin menghapus koleksi ini secara permanen?",
|
||||
"remove_environment": "Apakah Anda yakin ingin menghapus lingkungan ini secara permanen?",
|
||||
"remove_folder": "Apakah Anda yakin ingin menghapus folder ini secara permanen?",
|
||||
"remove_history": "Apakah Anda yakin ingin menghapus semua riwayat secara permanen?",
|
||||
"remove_request": "Apakah Anda yakin ingin menghapus permintaan ini secara permanen?",
|
||||
"remove_team": "Apakah Anda yakin ingin menghapus tim ini?",
|
||||
"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.",
|
||||
"sync": "Apakah Anda ingin memulihkan ruang kerja Anda dari cloud? Ini akan membuang kemajuan lokal Anda."
|
||||
},
|
||||
"count": {
|
||||
"header": "Header {count}",
|
||||
"message": "Pesan {count}",
|
||||
"parameter": "Parameter {count}",
|
||||
"protocol": "Protocol {count}",
|
||||
"value": "Nilai {count}",
|
||||
"variable": "Variabel {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "Buat dokumentasi",
|
||||
"generate_message": "Impor koleksi Hoppscotch apa pun untuk menghasilkan dokumentasi API saat on-the-go."
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "Permintaan ini tidak menggunakan otorisasi apa pun",
|
||||
"body": "Permintaan ini tidak memiliki body",
|
||||
"collection": "Koleksi kosong",
|
||||
"collections": "Koleksi kosong",
|
||||
"documentation": "Hubungkan ke endpoint GraphQL untuk melihat dokumentasi",
|
||||
"endpoint": "Endpoint tidak boleh kosong",
|
||||
"environments": "Environments kosong",
|
||||
"folder": "Folder kosong",
|
||||
"headers": "Permintaan ini tidak memiliki headers",
|
||||
"history": "Riwayat kosong",
|
||||
"invites": "Daftar undangan kosong",
|
||||
"members": "Team kosong",
|
||||
"parameters": "Permintaan ini tidak memiliki parameter apa pun",
|
||||
"pending_invites": "Tidak ada undangan yang tertunda untuk tim ini",
|
||||
"profile": "Masuk untuk melihat profil Anda",
|
||||
"protocols": "Protokol kosong",
|
||||
"schema": "Hubungkan ke endpoint GraphQL untuk melihat skema",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Nama team kosong",
|
||||
"teams": "Kamu bukan di team manapun",
|
||||
"tests": "Tidak ada tes untuk permintaan ini"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "Tambahkan ke Global",
|
||||
"added": "Tambahan Environment",
|
||||
"create_new": "Membuat baru environment",
|
||||
"created": "Environment dibuat",
|
||||
"deleted": "Environment dihapus",
|
||||
"edit": "Sunting Environment",
|
||||
"invalid_name": "Tolong beri nama untuk environment",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "variabel environment bersarang dibatasi hingga 10 level",
|
||||
"new": "Environment Baru",
|
||||
"no_environment": "No environment",
|
||||
"no_environment_description": "Tidak ada environment yang dipilih. Pilih apa yang harus dilakukan dengan variabel berikut.",
|
||||
"select": "Pilih environment",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Environments",
|
||||
"updated": "Environment diperbarui",
|
||||
"variable_list": "Daftar Variable"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "Browser ini sepertinya tidak memiliki dukungan Server Sent Events.",
|
||||
"check_console_details": "Periksa console log untuk detailnya.",
|
||||
"curl_invalid_format": "cURL tidak diformat dengan benar",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Nama Permintaan Kosong",
|
||||
"f12_details": "(F12 untuk detailnya)",
|
||||
"gql_prettify_invalid_query": "Tidak dapat prettify kueri yang tidak valid, menyelesaikan kesalahan sintaksis kueri, dan coba lagi",
|
||||
"incomplete_config_urls": "URL konfigurasi tidak lengkap",
|
||||
"incorrect_email": "Surel Salah",
|
||||
"invalid_link": "Tautan tidak valid",
|
||||
"invalid_link_description": "Tautan yang Anda klik tidak valid atau kedaluwarsa.",
|
||||
"json_parsing_failed": "JSON tidak valid",
|
||||
"json_prettify_invalid_body": "Tidak dapat prettify body yang tidak valid, selesaikan kesalahan sintaks json dan coba lagi",
|
||||
"network_error": "Sepertinya ada kesalahan jaringan. Silakan coba lagi.",
|
||||
"network_fail": "Tidak dapat mengirim permintaan",
|
||||
"no_duration": "Tidak ada durasi",
|
||||
"no_results_found": "Tidak ada kecocokan yang ditemukan",
|
||||
"page_not_found": "Halaman ini tidak dapat ditemukan",
|
||||
"script_fail": "Tidak dapat menjalankan pre-request script",
|
||||
"something_went_wrong": "Ada yang salah",
|
||||
"test_script_fail": "Tidak dapat mengeksekusi post-request script"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "Export sebagai JSON",
|
||||
"create_secret_gist": "Buat secret Gist",
|
||||
"gist_created": "Gist dibuat",
|
||||
"require_github": "Masuk dengan GitHub untuk membuat secret gist",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Folder dibuat",
|
||||
"edit": "Edit Folder",
|
||||
"invalid_name": "Harap berikan nama untuk foldernya",
|
||||
"name_length_insufficient": "Nama folder harus minimal 3 karakter",
|
||||
"new": "Folder baru",
|
||||
"renamed": "Folder berganti nama"
|
||||
},
|
||||
"graphql": {
|
||||
"mutations": "Mutations",
|
||||
"schema": "Schema",
|
||||
"subscriptions": "Subscriptions"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Pasang app",
|
||||
"login": "Login",
|
||||
"save_workspace": "Simpan Ruang Kerja Saya"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": "Header otorisasi akan dibuat secara otomatis saat Anda mengirim permintaan.",
|
||||
"generate_documentation_first": "Generate dokumentasi dulu",
|
||||
"network_fail": "Tidak dapat mencapai API endpoint. Periksa koneksi jaringan Anda atau pilih Interceptor lain dan coba lagi.",
|
||||
"offline": "Anda tampaknya sedang offline. Data di ruang kerja ini mungkin tidak terbarui.",
|
||||
"offline_short": "Anda sepertinya sedang offline.",
|
||||
"post_request_tests": "Pengujian scripts ditulis dalam JavaScript, dan dijalankan setelah respons diterima.",
|
||||
"pre_request_script": "Pre-request scripts ditulis dalam JavaScript, dan dijalankan sebelum request dikirim.",
|
||||
"script_fail": "Sepertinya ada kesalahan dalam pre-request script. Periksa kesalahan di bawah ini dan perbaiki script yang sesuai.",
|
||||
"test_script_fail": "Tampaknya ada kesalahan dengan test script. Harap perbaiki kesalahan dan jalankan tes lagi",
|
||||
"tests": "Tulis test script untuk mengotomatiskan debugging."
|
||||
},
|
||||
"hide": {
|
||||
"collection": "Ciutkan Panel Koleksi",
|
||||
"more": "Sembunyikan lainnya",
|
||||
"preview": "Sembunyikan preview",
|
||||
"sidebar": "Ciutkan sidebar"
|
||||
},
|
||||
"import": {
|
||||
"collections": "Impor koleksi",
|
||||
"curl": "Impor cURL",
|
||||
"failed": "Kesalahan saat mengimpor: format tidak dikenali",
|
||||
"from_gist": "Impor dari Gist",
|
||||
"from_gist_description": "Impor dari Gist URL",
|
||||
"from_insomnia": "Impor dari Insomnia",
|
||||
"from_insomnia_description": "Impor dari Koleksi Insomnia",
|
||||
"from_json": "Impor dari Hoppscotch",
|
||||
"from_json_description": "Impor dari Hoppscotch berkas koleksi",
|
||||
"from_my_collections": "Impor dari Koleksi Saya",
|
||||
"from_my_collections_description": "Impor dari Berkas Koleksi Saya",
|
||||
"from_openapi": "Import dari OpenAPI",
|
||||
"from_openapi_description": "Impor dari OpenAPI syarat berkas (YML/JSON)",
|
||||
"from_postman": "Impor dari Postman",
|
||||
"from_postman_description": "Impor dari Koleksi Postman",
|
||||
"from_url": "Impor dari URL",
|
||||
"gist_url": "Masukkan Gist URL",
|
||||
"import_from_url_invalid_fetch": "Tidak bisa mendapatkan data dari url",
|
||||
"import_from_url_invalid_file_format": "Kesalahan saat mengimpor koleksi",
|
||||
"import_from_url_invalid_type": "Jenis tidak didukung. nilai yang diterima adalah 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Impor koleksi berhasil",
|
||||
"json_description": "Impor Koleksi dari berkas JSON Koleksi Hoppscotch",
|
||||
"title": "Impor"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Ciutkan atau Perluas Collections",
|
||||
"collapse_sidebar": "Ciutkan atau Perluas sidebar",
|
||||
"column": "Vertikal layout",
|
||||
"name": "Layout",
|
||||
"row": "Horisontal layout",
|
||||
"zen_mode": "Zen mode"
|
||||
},
|
||||
"modal": {
|
||||
"collections": "Koleksi",
|
||||
"confirm": "Mengonfirmasi",
|
||||
"edit_request": "Edit Request",
|
||||
"import_export": "Impor / Ekspor"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Komunikasi",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Log",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Pesan",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Menerbitkan",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Langganan",
|
||||
"topic": "Topik",
|
||||
"topic_name": "Nama Topik",
|
||||
"topic_title": "Menerbitkan / Langganan topik",
|
||||
"unsubscribe": "Berhenti berlangganan",
|
||||
"url": "URL"
|
||||
},
|
||||
"navigation": {
|
||||
"doc": "Docs",
|
||||
"graphql": "GraphQL",
|
||||
"profile": "Profil",
|
||||
"realtime": "Realtime",
|
||||
"rest": "REST",
|
||||
"settings": "Pengaturan"
|
||||
},
|
||||
"preRequest": {
|
||||
"javascript_code": "JavaScript Code",
|
||||
"learn": "Baca dokumentasi",
|
||||
"script": "Pre-Request Script",
|
||||
"snippets": "Snippets"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "Pengaturan aplikasi",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editor dapat menambah, mengedit, dan menghapus request.",
|
||||
"email_verification_mail": "Surel verifikasi telah dikirim ke alamat surel Anda. Silakan klik tautan untuk memverifikasi alamat surel Anda.",
|
||||
"no_permission": "Anda tidak memiliki izin untuk melakukan tindakan ini.",
|
||||
"owner": "Owner",
|
||||
"owner_description": "Pemilik dapat menambah, mengedit, dan menghapus permintaan, koleksi, dan anggota tim.",
|
||||
"roles": "Roles",
|
||||
"roles_description": "Roles digunakan untuk mengontrol akses ke koleksi bersama.",
|
||||
"updated": "Profil diperbarui",
|
||||
"viewer": "Penonton",
|
||||
"viewer_description": "Penonton hanya dapat melihat dan menggunakan requests.."
|
||||
},
|
||||
"remove": {
|
||||
"star": "Hapus bintang"
|
||||
},
|
||||
"request": {
|
||||
"added": "Request ditambahkan",
|
||||
"authorization": "Authorization",
|
||||
"body": "Request Body",
|
||||
"choose_language": "Pilih bahasa",
|
||||
"content_type": "Content Type",
|
||||
"content_type_titles": {
|
||||
"others": "Others",
|
||||
"structured": "Structured",
|
||||
"text": "Text"
|
||||
},
|
||||
"copy_link": "Salin tautan",
|
||||
"duration": "Durasi",
|
||||
"enter_curl": "Masukkan cURL",
|
||||
"generate_code": "Generate code",
|
||||
"generated_code": "Generated code",
|
||||
"header_list": "Daftar Header",
|
||||
"invalid_name": "Harap berikan nama untuk request",
|
||||
"method": "Method",
|
||||
"name": "Request nama",
|
||||
"new": "Request baru",
|
||||
"override": "Membatalkan",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Diganti",
|
||||
"parameter_list": "Query Parameters",
|
||||
"parameters": "Parameters",
|
||||
"path": "Path",
|
||||
"payload": "Payload",
|
||||
"query": "Query",
|
||||
"raw_body": "Raw Request Body",
|
||||
"renamed": "Request berganti nama",
|
||||
"run": "Jalankan",
|
||||
"save": "Menyimpan",
|
||||
"save_as": "Simpan sebagai",
|
||||
"saved": "Request disimpan",
|
||||
"share": "Membagikan",
|
||||
"share_description": "Bagikan Hoppscotch dengan teman-teman Anda",
|
||||
"title": "Request",
|
||||
"type": "Tipe Request",
|
||||
"url": "URL",
|
||||
"variables": "Variables",
|
||||
"view_my_links": "Lihat tautan saya"
|
||||
},
|
||||
"response": {
|
||||
"body": "Response Body",
|
||||
"filter_response_body": "Filter body respons JSON (menggunakan sintaks JSONPath)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "Gambar",
|
||||
"json": "JSON",
|
||||
"pdf": "PDF",
|
||||
"preview_html": "Pratinjau HTML",
|
||||
"raw": "Raw",
|
||||
"size": "Size",
|
||||
"status": "Status",
|
||||
"time": "Waktu",
|
||||
"title": "Response",
|
||||
"waiting_for_connection": "Menunggu koneksi",
|
||||
"xml": "XML"
|
||||
},
|
||||
"settings": {
|
||||
"accent_color": "Accent color",
|
||||
"account": "Akun",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Sesuaikan pengaturan akun Anda.",
|
||||
"account_email_description": "Alamat surel utama Anda.",
|
||||
"account_name_description": "Ini adalah nama tampilan Anda.",
|
||||
"background": "Latar belakang",
|
||||
"black_mode": "Hitam",
|
||||
"change_font_size": "Ubah ukuran font",
|
||||
"choose_language": "Pilih bahasa",
|
||||
"dark_mode": "Gelap",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Perluas navigasi",
|
||||
"experiments": "Eksperimen",
|
||||
"experiments_notice": "Ini adalah kumpulan eksperimen yang sedang kami kerjakan yang mungkin berguna, menyenangkan, keduanya, atau tidak keduanya. Mereka tidak final dan mungkin tidak stabil, jadi jika sesuatu yang terlalu aneh terjadi, jangan panik. Matikan saja. Kesampingkan lelucon, ",
|
||||
"extension_ver_not_reported": "Tidak Dilaporkan",
|
||||
"extension_version": "Versi Ekstensi",
|
||||
"extensions": "Ekstensi Peramban",
|
||||
"extensions_use_toggle": "Gunakan ekstensi peramban untuk mengirim permintaan (jika ada)",
|
||||
"follow": "Ikuti kami",
|
||||
"font_size": "Ukuran huruf",
|
||||
"font_size_large": "Besar",
|
||||
"font_size_medium": "Sedang",
|
||||
"font_size_small": "Kecil",
|
||||
"interceptor": "Pencegat",
|
||||
"interceptor_description": "Middleware antara aplikasi dan API.",
|
||||
"language": "Bahasa",
|
||||
"light_mode": "Terang",
|
||||
"official_proxy_hosting": "Proxy resmi dihosting oleh Hoppscotch.",
|
||||
"profile": "Profil",
|
||||
"profile_description": "Perbarui detail profil Anda",
|
||||
"profile_email": "Alamat surel",
|
||||
"profile_name": "Nama profil",
|
||||
"proxy": "Proxy",
|
||||
"proxy_url": "Proxy URL",
|
||||
"proxy_use_toggle": "Gunakan middleware proxy untuk mengirim requests",
|
||||
"read_the": "Baca",
|
||||
"reset_default": "Setel ulang ke default",
|
||||
"short_codes": "Short codes",
|
||||
"short_codes_description": "Short codes yang Anda buat.",
|
||||
"sidebar_on_left": "Sidebar berada di kiri",
|
||||
"sync": "Synchronise",
|
||||
"sync_collections": "Koleksi",
|
||||
"sync_description": "Pengaturan ini disinkronkan ke cloud.",
|
||||
"sync_environments": "Environments",
|
||||
"sync_history": "Riwayat",
|
||||
"system_mode": "Sistem",
|
||||
"telemetry": "Telemetri",
|
||||
"telemetry_helps_us": "Telemetri membantu kami mempersonalisasi operasi kami dan memberikan pengalaman terbaik kepada Anda.",
|
||||
"theme": "Tema",
|
||||
"theme_description": "Sesuaikan tema aplikasi Anda.",
|
||||
"use_experimental_url_bar": "Gunakan experimental URL bar dengan environment highlighting",
|
||||
"user": "Pengguna",
|
||||
"verified_email": "Surel terverifikasi",
|
||||
"verify_email": "Verifikasi surel"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "Tindakan",
|
||||
"created_on": "Dibuat pada",
|
||||
"deleted": "Shortcode dihapus",
|
||||
"method": "Method",
|
||||
"not_found": "Shortcode tidak ditemukan",
|
||||
"short_code": "Short code",
|
||||
"url": "URL"
|
||||
},
|
||||
"shortcut": {
|
||||
"general": {
|
||||
"close_current_menu": "Tutup menu saat ini",
|
||||
"command_menu": "Cari & menu perintah",
|
||||
"help_menu": "Menu bantuan",
|
||||
"show_all": "Pintasan keyboard",
|
||||
"title": "Umum"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "Undang orang ke Hoppscotch",
|
||||
"title": "Miscellaneous"
|
||||
},
|
||||
"navigation": {
|
||||
"back": "Kembali ke halaman sebelumnya",
|
||||
"documentation": "Pergi ke halaman Dokumentasi",
|
||||
"forward": "Pergi ke halaman berikutnya",
|
||||
"graphql": "Pergi ke halaman GraphQL",
|
||||
"profile": "Pergi ke halaman Profile",
|
||||
"realtime": "Pergi ke halaman Realtime",
|
||||
"rest": "Pergi ke halaman REST",
|
||||
"settings": "Pergi ke halaman Pengaturan",
|
||||
"title": "Navigasi"
|
||||
},
|
||||
"request": {
|
||||
"copy_request_link": "Salin Tautan Permintaan",
|
||||
"delete_method": "Pilih metode DELETE",
|
||||
"get_method": "Pilih metode GET",
|
||||
"head_method": "Pilih metode HEAD",
|
||||
"method": "metode",
|
||||
"next_method": "Pilih metode Next",
|
||||
"post_method": "Pilih metode POST",
|
||||
"previous_method": "Pilih metode Previous",
|
||||
"put_method": "Pilih metode PUT",
|
||||
"reset_request": "Mengatur ulang Request",
|
||||
"save_to_collections": "Menyimpan ke Collections",
|
||||
"send_request": "Kirim Request",
|
||||
"title": "Request"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Salin response ke papan klip",
|
||||
"download": "Unduh response sebagai file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Alihkan tema ke mode hitam",
|
||||
"dark": "Alihkan tema ke mode gelap",
|
||||
"light": "Alihkan tema ke mode terang",
|
||||
"system": "Alihkan tema ke mode sistem",
|
||||
"title": "Tema"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "Tampilkan code",
|
||||
"collection": "Luaskan Panel Collection",
|
||||
"more": "Lebih banyak",
|
||||
"sidebar": "Memperluas sidebar"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "Komunikasi",
|
||||
"connection_not_authorized": "Koneksi SocketIO ini tidak menggunakan otentikasi apa pun.",
|
||||
"event_name": "Nama Event",
|
||||
"events": "Events",
|
||||
"log": "Log",
|
||||
"url": "URL"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "Tipe Event",
|
||||
"log": "Log",
|
||||
"url": "URL"
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "Bulk edit",
|
||||
"bulk_mode_placeholder": "Entri dipisahkan oleh baris baru\nKeys dan nilai dipisahkan oleh :\nPrepend # ke baris mana pun yang ingin Anda tambahkan tetapi tetap dinonaktifkan",
|
||||
"cleared": "Dihapus",
|
||||
"connected": "Terhubung",
|
||||
"connected_to": "Terhubung dengan {name}",
|
||||
"connecting_to": "Menghubungkan ke {name}...",
|
||||
"connection_error": "Gagal terhubung",
|
||||
"connection_failed": "Koneksi gagal",
|
||||
"connection_lost": "Koneksi terputus",
|
||||
"copied_to_clipboard": "Disalin ke papan klip",
|
||||
"deleted": "Dihapus",
|
||||
"deprecated": "Tidak digunakan lagi",
|
||||
"disabled": "Nonaktifkan",
|
||||
"disconnected": "Terputus",
|
||||
"disconnected_from": "Terputus dari {name}",
|
||||
"docs_generated": "Dokumentasi dihasilkan",
|
||||
"download_started": "Unduhan dimulai",
|
||||
"enabled": "Diaktifkan",
|
||||
"file_imported": "File diimpor",
|
||||
"finished_in": "Selesai dalam {duration} ms",
|
||||
"history_deleted": "Riwayat dihapus",
|
||||
"linewrap": "Wrap lines",
|
||||
"loading": "Memuat...",
|
||||
"message_received": "Pesan: {message} tiba di topik: {topic}",
|
||||
"mqtt_subscription_failed": "Terjadi masalah saat berlangganan topik: {topic}",
|
||||
"none": "Tidak ada",
|
||||
"nothing_found": "Tidak ada yang ditemukan untuk",
|
||||
"published_error": "Terjadi masalah saat memublikasikan msg: {topic} ke topik: {message}",
|
||||
"published_message": "Pesan yang dipublikasikan: {message} ke topik: {topic}",
|
||||
"reconnection_error": "Gagal menyambung kembali",
|
||||
"subscribed_failed": "Gagal berlangganan topik: {topic}",
|
||||
"subscribed_success": "Berhasil berlangganan topik: {topic}",
|
||||
"unsubscribed_failed": "Gagal berhenti berlangganan dari topik: {topic}",
|
||||
"unsubscribed_success": "Berhasil berhenti berlangganan dari topik: {topic}",
|
||||
"waiting_send_request": "Menunggu untuk mengirim request"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "Baca lebih lanjut tentang rilis terbaru",
|
||||
"chat": "Pertanyaan? berbincanglah dengan kami!",
|
||||
"community": "Ajukan pertanyaan dan bantu orang lain",
|
||||
"documentation": "Baca lebih lanjut tentang Hoppscotch",
|
||||
"forum": "Ajukan pertanyaan dan dapatkan jawaban",
|
||||
"github": "Ikuti kami di GitHub",
|
||||
"shortcuts": "Jelajahi aplikasi lebih cepat",
|
||||
"team": "Hubungi tim",
|
||||
"title": "Mendukung",
|
||||
"twitter": "Ikuti kami di Twitter"
|
||||
},
|
||||
"tab": {
|
||||
"authorization": "Authorization",
|
||||
"body": "Body",
|
||||
"collections": "Collections",
|
||||
"documentation": "Dokumentasi",
|
||||
"headers": "Headers",
|
||||
"history": "Riwayat",
|
||||
"mqtt": "MQTT",
|
||||
"parameters": "Parameters",
|
||||
"pre_request_script": "Pre-request Script",
|
||||
"queries": "Queries",
|
||||
"query": "Query",
|
||||
"schema": "Schema",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "SSE",
|
||||
"tests": "Tests",
|
||||
"types": "Types",
|
||||
"variables": "Variables",
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "Anda sudah menjadi anggota tim ini. Hubungi pemilik tim Anda.",
|
||||
"create_new": "Buat tim baru",
|
||||
"deleted": "Tim dihapus",
|
||||
"edit": "Edit Tim",
|
||||
"email": "E-mail",
|
||||
"email_do_not_match": "Surel tidak cocok dengan detail akun Anda. Hubungi pemilik tim Anda.",
|
||||
"exit": "Keluar dari Tim",
|
||||
"exit_disabled": "Hanya pemilik yang tidak dapat keluar dari tim",
|
||||
"invalid_email_format": "Format surel tidak valid",
|
||||
"invalid_id": "ID tim tidak valid. Hubungi pemilik tim Anda.",
|
||||
"invalid_invite_link": "Tautan undangan tidak valid",
|
||||
"invalid_invite_link_description": "Tautan yang Anda ikuti tidak valid. Hubungi pemilik tim Anda.",
|
||||
"invalid_member_permission": "Harap berikan izin yang valid kepada anggota tim",
|
||||
"invite": "Mengundang",
|
||||
"invite_more": "Undang lebih banyak",
|
||||
"invite_tooltip": "Undang orang ke ruang kerja ini",
|
||||
"invited_to_team": "{owner} mengundang Anda untuk bergabung {team}",
|
||||
"join": "Undangan diterima",
|
||||
"join_beta": "Bergabunglah dengan program beta untuk mengakses tim.",
|
||||
"join_team": "Bergabung {team}",
|
||||
"joined_team": "Anda telah bergabung {team}",
|
||||
"joined_team_description": "Anda sekarang adalah anggota tim ini",
|
||||
"left": "Anda meninggalkan tim",
|
||||
"login_to_continue": "Masuk untuk melanjutkan",
|
||||
"login_to_continue_description": "Anda harus login untuk bergabung dengan tim.",
|
||||
"logout_and_try_again": "Keluar dan login dengan akun lain",
|
||||
"member_has_invite": "ID email ini sudah memiliki undangan. Hubungi pemilik tim Anda.",
|
||||
"member_not_found": "Anggota tidak ditemukan. Hubungi pemilik tim Anda.",
|
||||
"member_removed": "Pengguna dihapus",
|
||||
"member_role_updated": "Peran pengguna diperbarui",
|
||||
"members": "Anggota",
|
||||
"name_length_insufficient": "Nama tim harus setidaknya 6 karakter",
|
||||
"name_updated": "Nama tim diperbarui",
|
||||
"new": "Tim Baru",
|
||||
"new_created": "Tim baru dibuat",
|
||||
"new_name": "Tim baru saya",
|
||||
"no_access": "Anda tidak memiliki akses edit ke collections ini",
|
||||
"no_invite_found": "Undangan 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.",
|
||||
"pending_invites": "Undangan tertunda",
|
||||
"permissions": "Izin",
|
||||
"saved": "Tim disimpan",
|
||||
"select_a_team": "Pilih tim",
|
||||
"title": "tim",
|
||||
"we_sent_invite_link": "Kami mengirim tautan undangan ke semua undangan!",
|
||||
"we_sent_invite_link_description": "Minta semua undangan untuk memeriksa kotak masuk mereka. Klik tautan untuk bergabung dengan tim."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "Tes gagal",
|
||||
"javascript_code": "JavaScript Code",
|
||||
"learn": "Baca dokumentasi",
|
||||
"passed": "Tes lulus",
|
||||
"report": "Laporan pengujian",
|
||||
"results": "Hasil tes",
|
||||
"script": "Script",
|
||||
"snippets": "Snippets"
|
||||
},
|
||||
"websocket": {
|
||||
"communication": "Komunikasi",
|
||||
"log": "Log",
|
||||
"message": "Pesan",
|
||||
"protocols": "Protokol",
|
||||
"url": "URL"
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Cancella tutto",
|
||||
"close": "Close",
|
||||
"connect": "Connetti",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Copia",
|
||||
"delete": "Elimina",
|
||||
"disconnect": "Disconnetti",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplica",
|
||||
"edit": "Modifica",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Torna indietro",
|
||||
"group_by": "Group by",
|
||||
"label": "Etichetta",
|
||||
"learn_more": "Per saperne di più",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Cerca",
|
||||
"send": "Invia",
|
||||
"start": "Avvia",
|
||||
"starting": "Starting",
|
||||
"stop": "Interrompi",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -172,6 +175,7 @@
|
||||
"protocols": "I protocolli sono vuoti",
|
||||
"schema": "Connettiti a un endpoint GraphQL per mostrare lo schema",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Il nome del team è vuoto",
|
||||
"teams": "I team sono vuoti",
|
||||
"tests": "Non ci sono test per questa richiesta"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Modifica ambiente",
|
||||
"invalid_name": "Si prega di fornire un nome valido per l'ambiente",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Nuovo ambiente",
|
||||
"no_environment": "Nessun ambiente",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Seleziona ambiente",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "Ambienti",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Elenco variabili"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "Questo browser non sembra supportare gli eventi inviati dal server (Server Sent Events).",
|
||||
"check_console_details": "Controlla il log della console per i dettagli.",
|
||||
"curl_invalid_format": "cURL non è formattato correttamente",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Nome richiesta vuoto",
|
||||
"f12_details": "(F12 per i dettagli)",
|
||||
"gql_prettify_invalid_query": "Impossibile abbellire una query non valida, risolvere gli errori di sintassi della query e riprovare",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Accedi con GitHub per creare un Gist segreto",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Cartella creata",
|
||||
"edit": "Modifica cartella",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Schema",
|
||||
"subscriptions": "Sottoscrizioni"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Installa l'applicazione",
|
||||
"login": "Accedi",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Importa/Esporta"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Comunicazione",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Log",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Messaggio",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Pubblica",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Sottoscrivi",
|
||||
"topic": "Argomento",
|
||||
"topic_name": "Nome argomento",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "Impostazioni della app",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Autore",
|
||||
"editor_description": "Gli Autori possono aggiungere, modificare e cancellare richieste.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Nome richiesta",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Parametri della query",
|
||||
"parameters": "Parametri",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Colore in risalto",
|
||||
"account": "Account",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Personalizza le impostazioni del tuo account.",
|
||||
"account_email_description": "Il tuo indirizzo email principale.",
|
||||
"account_name_description": "Questo è il tuo nome mostrato.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Cambia la dimensione dei caratteri",
|
||||
"choose_language": "Scegli la lingua",
|
||||
"dark_mode": "Scuro",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Espandi navigazione",
|
||||
"experiments": "Sperimentale",
|
||||
"experiments_notice": "Questa è una raccolta di esperimenti su cui stiamo lavorando che potrebbero rivelarsi utili, divertenti, entrambi o nessuno dei due. Non sono definitivi e potrebbero non essere stabili, quindi se succede qualcosa di eccessivamente strano, niente panico. Basta solo disabilitare quella dannata cosa. Scherzi a parte, ",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Invia richiesta",
|
||||
"title": "Richiesta"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "Abbiamo inviato un link di invito a tutti gli invitati!",
|
||||
"we_sent_invite_link_description": "Chiedi a tutti gli invitati di controllare la loro casella email. Cliccando sul link possono entrare nel team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "Test fallito",
|
||||
"javascript_code": "Codice JavaScript",
|
||||
714
packages/hoppscotch-common/locales/ja.json
Normal file
@@ -0,0 +1,714 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "自動スクロール",
|
||||
"cancel": "キャンセル",
|
||||
"choose_file": "ファイルを選択してください",
|
||||
"clear": "クリア",
|
||||
"clear_all": "すべてクリア",
|
||||
"close": "閉じる",
|
||||
"connect": "接続",
|
||||
"connecting": "接続中",
|
||||
"copy": "コピー",
|
||||
"delete": "消去",
|
||||
"disconnect": "切断",
|
||||
"dismiss": "閉じる",
|
||||
"dont_save": "保存しない",
|
||||
"download_file": "ファイルをダウンロード",
|
||||
"drag_to_reorder": "ドラッグして並べ替え",
|
||||
"duplicate": "複製",
|
||||
"edit": "編集",
|
||||
"filter": "フィルター",
|
||||
"go_back": "戻る",
|
||||
"group_by": "グループ化",
|
||||
"label": "ラベル",
|
||||
"learn_more": "もっと詳しく",
|
||||
"less": "表示を減らす",
|
||||
"more": "もっと見る",
|
||||
"new": "新規",
|
||||
"no": "いいえ",
|
||||
"open_workspace": "ワークスペースを開く",
|
||||
"paste": "貼り付け",
|
||||
"prettify": "自動整形",
|
||||
"remove": "削除",
|
||||
"restore": "戻す",
|
||||
"save": "保存",
|
||||
"scroll_to_bottom": "下にスクロール",
|
||||
"scroll_to_top": "上にスクロール",
|
||||
"search": "検索",
|
||||
"send": "送信",
|
||||
"start": "はじめる",
|
||||
"starting": "開始中",
|
||||
"stop": "止める",
|
||||
"to_close": "閉じる",
|
||||
"to_navigate": "上下に移動する",
|
||||
"to_select": "選択する",
|
||||
"turn_off": "オフ",
|
||||
"turn_on": "オン",
|
||||
"undo": "元に戻す",
|
||||
"yes": "はい"
|
||||
},
|
||||
"add": {
|
||||
"new": "新しく追加",
|
||||
"star": "スターを追加"
|
||||
},
|
||||
"app": {
|
||||
"chat_with_us": "チャットで問い合わせる",
|
||||
"contact_us": "お問い合わせ",
|
||||
"copy": "コピー",
|
||||
"copy_user_id": "User Auth Tokenをコピー",
|
||||
"developer_option": "開発者向けオプション",
|
||||
"developer_option_description": "Hoppscotchの開発に役立つ開発者向けツール",
|
||||
"discord": "Discord",
|
||||
"documentation": "ドキュメント",
|
||||
"github": "GitHub",
|
||||
"help": "ヘルプ & フィードバック",
|
||||
"home": "ホーム",
|
||||
"invite": "招待",
|
||||
"invite_description": "HoppscotchはオープンソースのAPI開発エコシステムです。APIを作成・管理するためのシンプルで直感的なインターフェイスを設計しました。HoppscotchはAPIの構築・テスト・文書化・共有を支援します。",
|
||||
"invite_your_friends": "友達を招待する",
|
||||
"join_discord_community": "Discordコミュニティに参加する",
|
||||
"keyboard_shortcuts": "キーボードショートカット",
|
||||
"name": "Hoppscotch",
|
||||
"new_version_found": "新しいバージョンが見つかりました。再読み込みすると更新されます。",
|
||||
"options": "オプション",
|
||||
"proxy_privacy_policy": "プロキシのプライバシーポリシー",
|
||||
"reload": "更新",
|
||||
"search": "検索",
|
||||
"share": "共有",
|
||||
"shortcuts": "ショートカット",
|
||||
"spotlight": "スポットライト",
|
||||
"status": "状態",
|
||||
"status_description": "ウェブサイトの状態を確認",
|
||||
"terms_and_privacy": "利用規約とプライバシーポリシー",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "コマンドもしくは検索ワードを入力…",
|
||||
"we_use_cookies": "Cookieを使用しています",
|
||||
"whats_new": "新着情報",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"auth": {
|
||||
"account_exists": "アカウントがそれぞれの認証情報で存在しています - ログインして両方のアカウントを連携する",
|
||||
"all_sign_in_options": "すべてのサインインオプション",
|
||||
"continue_with_email": "メールアドレスで続行",
|
||||
"continue_with_github": "GitHubアカウントで続行",
|
||||
"continue_with_google": "Googleアカウントで続行",
|
||||
"continue_with_microsoft": "Microsoftアカウントで続行",
|
||||
"email": "メールアドレス",
|
||||
"logged_out": "ログアウトしました",
|
||||
"login": "ログイン",
|
||||
"login_success": "正常にログインしました",
|
||||
"login_to_hoppscotch": "Hoppscotchにログインする",
|
||||
"logout": "ログアウト",
|
||||
"re_enter_email": "メールアドレスを再入力してください",
|
||||
"send_magic_link": "マジックリンクを送る",
|
||||
"sync": "同期",
|
||||
"we_sent_magic_link": "マジックリンクを送信しました!",
|
||||
"we_sent_magic_link_description": "受信トレイを確認してください - {email}にメールを送信しました。ログインするためのマジックリンクが含まれています。"
|
||||
},
|
||||
"authorization": {
|
||||
"generate_token": "トークンを生成",
|
||||
"include_in_url": "URLに含める",
|
||||
"learn": "詳しく学ぶ",
|
||||
"pass_key_by": "認証元: ",
|
||||
"password": "パスワード",
|
||||
"token": "トークン",
|
||||
"type": "認証タイプ",
|
||||
"username": "ユーザー名"
|
||||
},
|
||||
"collection": {
|
||||
"created": "コレクションが作成されました",
|
||||
"edit": "コレクションの編集",
|
||||
"invalid_name": "コレクション名を入力してください",
|
||||
"my_collections": "マイコレクション",
|
||||
"name": "新しいマイコレクション",
|
||||
"name_length_insufficient": "コレクション名は3文字以上である必要があります",
|
||||
"new": "新しいコレクション",
|
||||
"renamed": "コレクション名が変更されました",
|
||||
"request_in_use": "使用中のリクエスト",
|
||||
"save_as": "名前を付けて保存",
|
||||
"select": "コレクションを選択",
|
||||
"select_location": "場所を選択",
|
||||
"select_team": "チームを選択",
|
||||
"team_collections": "チームコレクション"
|
||||
},
|
||||
"confirm": {
|
||||
"exit_team": "本当にこのチームから退出しますか?",
|
||||
"logout": "ログアウトしてもよろしいですか?",
|
||||
"remove_collection": "このコレクションを完全に削除してもよろしいですか?",
|
||||
"remove_environment": "この環境を完全に削除してもよろしいですか?",
|
||||
"remove_folder": "このフォルダを完全に削除してもよろしいですか?",
|
||||
"remove_history": "すべての履歴を完全に削除してもよろしいですか?",
|
||||
"remove_request": "このリクエストを完全に削除してもよろしいですか?",
|
||||
"remove_team": "このチームを削除してもよろしいですか?",
|
||||
"remove_telemetry": "テレメトリをオプトアウトしてもよろしいですか?",
|
||||
"request_change": "現在のリクエストを削除してもよろしいですか?保存されていない変更は削除されます。",
|
||||
"sync": "クラウドからワークスペースを復元しますか?この場合、ローカルの進行状況は破棄されます。"
|
||||
},
|
||||
"count": {
|
||||
"header": "ヘッダー {count}",
|
||||
"message": "メッセージ {count}",
|
||||
"parameter": "パラメータ {count}",
|
||||
"protocol": "プロトコル {count}",
|
||||
"value": "値 {count}",
|
||||
"variable": "変数 {count}"
|
||||
},
|
||||
"documentation": {
|
||||
"generate": "ドキュメントを生成",
|
||||
"generate_message": "Hoppscotchのコレクションをインポートして、APIドキュメントをすぐに生成することができます。"
|
||||
},
|
||||
"empty": {
|
||||
"authorization": "このリクエストでは認証を使用しません",
|
||||
"body": "リクエストボディがありません",
|
||||
"collection": "コレクションは空です",
|
||||
"collections": "コレクションがありません",
|
||||
"documentation": "GraphQLエンドポイントに接続してドキュメントを表示する",
|
||||
"endpoint": "エンドポイントを空にすることはできません",
|
||||
"environments": "環境変数がありません",
|
||||
"folder": "フォルダは空です",
|
||||
"headers": "このリクエストにはヘッダーがありません",
|
||||
"history": "履歴がありません",
|
||||
"invites": "招待リストは空です",
|
||||
"members": "チームメンバーはいません",
|
||||
"parameters": "このリクエストにはパラメータがありません",
|
||||
"pending_invites": "このチームに保留中の招待はありません",
|
||||
"profile": "ログインしてプロフィールを見る",
|
||||
"protocols": "プロトコルがありません",
|
||||
"schema": "GraphQLエンドポイントに接続する",
|
||||
"shortcodes": "ショートコードはありません",
|
||||
"subscription": "サブスクリプションはありません",
|
||||
"team_name": "チーム名がありません",
|
||||
"teams": "チームに参加していません",
|
||||
"tests": "このリクエストのテストはありません"
|
||||
},
|
||||
"environment": {
|
||||
"add_to_global": "環境変数をGlobalに追加",
|
||||
"added": "環境変数を追加しました",
|
||||
"create_new": "新しい環境変数を作成",
|
||||
"created": "環境変数を作成しました",
|
||||
"deleted": "環境変数を削除しました",
|
||||
"edit": "環境変数の編集",
|
||||
"invalid_name": "環境変数名を入力してください",
|
||||
"my_environments": "個人の環境変数",
|
||||
"nested_overflow": "環境変数の入れ子は10段階までです",
|
||||
"new": "新しい環境変数",
|
||||
"no_environment": "環境変数が存在しません",
|
||||
"no_environment_description": "環境変数が選択されていません。次の環境変数から選択してください。",
|
||||
"select": "環境変数を選択",
|
||||
"team_environments": "チームの環境変数",
|
||||
"title": "環境変数",
|
||||
"updated": "環境変数を更新しました",
|
||||
"variable_list": "環境変数リスト"
|
||||
},
|
||||
"error": {
|
||||
"browser_support_sse": "このブラウザはServer-Sent Eventsをサポートしていないようです。",
|
||||
"check_console_details": "詳細については、コンソールログを確認してください。",
|
||||
"curl_invalid_format": "cURLが正しくフォーマットされていません",
|
||||
"danger_zone": "危険",
|
||||
"delete_account": "あなたのアカウントは以下のチームのオーナーとなっています:",
|
||||
"delete_account_description": "アカウントを削除する前にチームを離脱するか、オーナーを委任するか、チームを削除してください。",
|
||||
"empty_req_name": "リクエスト名がありません",
|
||||
"f12_details": "(詳細はF12キーを押してください)",
|
||||
"gql_prettify_invalid_query": "クエリを整形できませんでした。クエリの構文エラーを解決して再試行してください。",
|
||||
"incomplete_config_urls": "設定URLが不完全です",
|
||||
"incorrect_email": "メールアドレスが間違っています",
|
||||
"invalid_link": "リンクが無効です",
|
||||
"invalid_link_description": "クリックしたリンクは無効か期限切れです。",
|
||||
"json_parsing_failed": "JSONが無効です",
|
||||
"json_prettify_invalid_body": "ボディを整形できませんでした。JSONの構文エラーを解決して再試行してください。",
|
||||
"network_error": "ネットワークエラーが発生したようです。もう一度お試しください。",
|
||||
"network_fail": "リクエストを送信できませんでした",
|
||||
"no_duration": "期間なし",
|
||||
"no_results_found": "該当するものがありませんでした",
|
||||
"page_not_found": "このページは見つかりませんでした",
|
||||
"script_fail": "リクエスト前のスクリプトを実行できませんでした",
|
||||
"something_went_wrong": "不明なエラーです",
|
||||
"test_script_fail": "リクエスト後のスクリプトを実行できませんでした"
|
||||
},
|
||||
"export": {
|
||||
"as_json": "JSONとしてエクスポート",
|
||||
"create_secret_gist": "Secret Gistを作成",
|
||||
"gist_created": "Gistが作成されました",
|
||||
"require_github": "GitHubにログインしてSecret Gistを作成",
|
||||
"title": "エクスポート"
|
||||
},
|
||||
"filter": {
|
||||
"all": "全て",
|
||||
"none": "無し",
|
||||
"starred": "スター付き"
|
||||
},
|
||||
"folder": {
|
||||
"created": "作成されたフォルダ",
|
||||
"edit": "フォルダの編集",
|
||||
"invalid_name": "フォルダ名を入力してください",
|
||||
"name_length_insufficient": "フォルダ名は3文字以上である必要があります",
|
||||
"new": "新しいフォルダ",
|
||||
"renamed": "フォルダ名が変更されました"
|
||||
},
|
||||
"graphql": {
|
||||
"mutations": "ミューテーション",
|
||||
"schema": "スキーマ",
|
||||
"subscriptions": "サブスクリプション"
|
||||
},
|
||||
"group": {
|
||||
"time": "時間",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "アプリをインストール",
|
||||
"login": "ログイン",
|
||||
"save_workspace": "ワークスペースを保存"
|
||||
},
|
||||
"helpers": {
|
||||
"authorization": "リクエストを送信すると、認証ヘッダーが自動的に生成されます。",
|
||||
"generate_documentation_first": "最初にドキュメントを生成する",
|
||||
"network_fail": "APIエンドポイントに到達できません。ネットワーク接続を確認して再試行してください。",
|
||||
"offline": "オフラインになっているようです。このワークスペースのデータは最新でない可能性があります。",
|
||||
"offline_short": "オフラインになっているようです。",
|
||||
"post_request_tests": "テストスクリプトはJavaScriptで記述されており、レスポンスを受信した後に実行されます。",
|
||||
"pre_request_script": "プリリクエストスクリプトはJavaScriptで記述されており、リクエストが送信される前に実行されます。",
|
||||
"script_fail": "プリリクエストスクリプトに問題があるようです。以下のエラーを確認し、スクリプトを修正してください。",
|
||||
"test_script_fail": "テストスクリプトにエラーがあるようです。エラーを修正し、再度テストを実行してください。",
|
||||
"tests": "デバッグを自動化するテストスクリプトを作成します。"
|
||||
},
|
||||
"hide": {
|
||||
"collection": "コレクションパネルを非表示",
|
||||
"more": "隠す",
|
||||
"preview": "プレビューを非表示",
|
||||
"sidebar": "サイドバーを非表示"
|
||||
},
|
||||
"import": {
|
||||
"collections": "コレクションをインポート",
|
||||
"curl": "cURLをインポート",
|
||||
"failed": "インポートに失敗しました",
|
||||
"from_gist": "Gistからインポート",
|
||||
"from_gist_description": "GistのURLからインポート",
|
||||
"from_insomnia": "Insomniaからインポート",
|
||||
"from_insomnia_description": "Insomniaのコレクションからインポート",
|
||||
"from_json": "Hoppscotchからインポート",
|
||||
"from_json_description": "Hoppscotchのコレクションファイルからインポート",
|
||||
"from_my_collections": "マイコレクションからインポート",
|
||||
"from_my_collections_description": "マイコレクションファイルからインポート",
|
||||
"from_openapi": "OpenAPIからインポート",
|
||||
"from_openapi_description": "OpenAPI仕様のファイル (YML/JSON) からインポート",
|
||||
"from_postman": "Postmanからインポート",
|
||||
"from_postman_description": "Postmanのコレクションからインポート",
|
||||
"from_url": "URLからインポート",
|
||||
"gist_url": "GistのURLを入力してください",
|
||||
"import_from_url_invalid_fetch": "指定されたURLからデータを取得できませんでした",
|
||||
"import_from_url_invalid_file_format": "コレクションのインポート中にエラーが発生しました",
|
||||
"import_from_url_invalid_type": "サポートされていないタイプです。サポートされているのは 'hoppscotch', 'openapi', 'postman', 'insomnia' です。",
|
||||
"import_from_url_success": "コレクションがインポートされました",
|
||||
"json_description": "Hoppscotchのコレクション (JSONファイル) からインポート",
|
||||
"title": "インポート"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "コレクションを表示・非表示",
|
||||
"collapse_sidebar": "サイドバーを表示・非表示",
|
||||
"column": "縦型レイアウト",
|
||||
"name": "レイアウト",
|
||||
"row": "横型レイアウト",
|
||||
"zen_mode": "禅モード"
|
||||
},
|
||||
"modal": {
|
||||
"collections": "コレクション",
|
||||
"confirm": "確認",
|
||||
"edit_request": "リクエストの編集",
|
||||
"import_export": "インポート・エクスポート"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "既にこのトピックにサブスクライブしています",
|
||||
"clean_session": "セッションをクリア",
|
||||
"clear_input": "入力をクリア",
|
||||
"clear_input_on_send": "送信後に入力をクリア",
|
||||
"client_id": "クライアントID",
|
||||
"color": "色を選択",
|
||||
"communication": "コミュニケーション",
|
||||
"connection_config": "接続設定",
|
||||
"connection_not_authorized": "このMQTTコネクションではどの認証も使われていません。",
|
||||
"invalid_topic": "このサブスクリプションのためのトピックを入力してください",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "ログ",
|
||||
"lw_message": "Last-Willメッセージ",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Willトピック",
|
||||
"message": "メッセージ",
|
||||
"new": "新しいサブスクリプション",
|
||||
"not_connected": "まずMQTTコネクションを開始してください。",
|
||||
"publish": "パブリッシュ",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "サブスクライブ",
|
||||
"topic": "トピック",
|
||||
"topic_name": "トピック名",
|
||||
"topic_title": "トピックのパブリッシュ・サブスクライブ",
|
||||
"unsubscribe": "サブスクライブを解除",
|
||||
"url": "URL"
|
||||
},
|
||||
"navigation": {
|
||||
"doc": "ドキュメント",
|
||||
"graphql": "GraphQL",
|
||||
"profile": "Profile",
|
||||
"realtime": "リアルタイム",
|
||||
"rest": "REST",
|
||||
"settings": "設定"
|
||||
},
|
||||
"preRequest": {
|
||||
"javascript_code": "JavaScriptコード",
|
||||
"learn": "ドキュメントを読む",
|
||||
"script": "プリリクエストスクリプト",
|
||||
"snippets": "スニペット"
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "アプリ設定",
|
||||
"default_hopp_displayname": "ユーザ名未設定",
|
||||
"editor": "編集者",
|
||||
"editor_description": "編集者はリクエストの追加・編集・削除を行うことができます。",
|
||||
"email_verification_mail": "登録されているメールアドレスに認証メールが送信されました。リンクをクリックしてメールアドレスを認証してください。",
|
||||
"no_permission": "この操作を行う権限がありません。",
|
||||
"owner": "管理者",
|
||||
"owner_description": "管理者はリクエスト・コレクション・チームメンバーの追加・編集・削除が可能です。",
|
||||
"roles": "ロール",
|
||||
"roles_description": "ロールは共有コレクションへのアクセスを制御するために使用されます。",
|
||||
"updated": "プロフィールを更新しました",
|
||||
"viewer": "閲覧者",
|
||||
"viewer_description": "閲覧者はリクエストの閲覧・利用が可能です。"
|
||||
},
|
||||
"remove": {
|
||||
"star": "スターを外す"
|
||||
},
|
||||
"request": {
|
||||
"added": "リクエストが追加されました",
|
||||
"authorization": "認証",
|
||||
"body": "リクエストボディ",
|
||||
"choose_language": "言語を選択",
|
||||
"content_type": "コンテンツタイプ",
|
||||
"content_type_titles": {
|
||||
"others": "その他",
|
||||
"structured": "構造化されたデータ",
|
||||
"text": "テキスト"
|
||||
},
|
||||
"copy_link": "リンクをコピー",
|
||||
"duration": "間隔",
|
||||
"enter_curl": "cURLコマンドを入力してください",
|
||||
"generate_code": "コードを生成",
|
||||
"generated_code": "生成されたコード",
|
||||
"header_list": "ヘッダーリスト",
|
||||
"invalid_name": "リクエスト名を入力してください",
|
||||
"method": "メソッド",
|
||||
"name": "リクエスト名",
|
||||
"new": "新しいリクエスト",
|
||||
"override": "上書き",
|
||||
"override_help": "リクエストの <kbd>Content-Type</kbd> ヘッダを上書き",
|
||||
"overriden": "上書きされました",
|
||||
"parameter_list": "クエリパラメータ",
|
||||
"parameters": "パラメータ",
|
||||
"path": "パス",
|
||||
"payload": "ペイロード",
|
||||
"query": "クエリ",
|
||||
"raw_body": "生のリクエストボディ",
|
||||
"renamed": "リクエストの名前を変更",
|
||||
"run": "実行",
|
||||
"save": "保存",
|
||||
"save_as": "名前を付けて保存",
|
||||
"saved": "保存されたリクエスト",
|
||||
"share": "共有",
|
||||
"share_description": "Hoppscotchを友人に共有",
|
||||
"title": "リクエスト",
|
||||
"type": "リクエストの種類",
|
||||
"url": "URL",
|
||||
"variables": "変数",
|
||||
"view_my_links": "自分のリンクを見る"
|
||||
},
|
||||
"response": {
|
||||
"body": "レスポンスボディ",
|
||||
"filter_response_body": "JSONレスポンスボディをフィルタ (JSONPathシンタックスを使用)",
|
||||
"headers": "ヘッダー",
|
||||
"html": "HTML",
|
||||
"image": "画像",
|
||||
"json": "JSON",
|
||||
"pdf": "PDF",
|
||||
"preview_html": "HTMLのプレビュー",
|
||||
"raw": "Raw",
|
||||
"size": "サイズ",
|
||||
"status": "ステータス",
|
||||
"time": "時間",
|
||||
"title": "レスポンス",
|
||||
"waiting_for_connection": "接続を待っています",
|
||||
"xml": "XML"
|
||||
},
|
||||
"settings": {
|
||||
"accent_color": "アクセントの色",
|
||||
"account": "アカウント",
|
||||
"account_deleted": "あなたのアカウントは削除されました",
|
||||
"account_description": "アカウント設定をカスタマイズ",
|
||||
"account_email_description": "プライマリメールアドレス",
|
||||
"account_name_description": "あなたの表示名",
|
||||
"background": "背景",
|
||||
"black_mode": "ブラック",
|
||||
"change_font_size": "フォントの大きさを変更",
|
||||
"choose_language": "言語を選択",
|
||||
"dark_mode": "ダーク",
|
||||
"delete_account": "アカウントの削除",
|
||||
"delete_account_description": "アカウントを削除すると、あなたのアカウントに紐づくデータは全て永久に削除されます。これは取り消すことができません。",
|
||||
"expand_navigation": "ナビゲーションの詳細表示",
|
||||
"experiments": "試験的な機能",
|
||||
"experiments_notice": "これらは試験的に実装している機能で、役に立つかもしれないし、楽しいかもしれないし、両方かもしれないし、はたまたどちらでもないかもしれません。これらは未完成で、安定したものではありません。何か問題がありましたら、こちらより報告をお願いします。→",
|
||||
"extension_ver_not_reported": "未報告",
|
||||
"extensions": "拡張機能",
|
||||
"extension_version": "ブラウザ拡張機能のバージョン",
|
||||
"extensions_use_toggle": "ブラウザ拡張機能を使用してリクエストを送信する(利用可能な場合)",
|
||||
"follow": "フォローする",
|
||||
"font_size": "フォントサイズ",
|
||||
"font_size_large": "大きめ",
|
||||
"font_size_medium": "普通",
|
||||
"font_size_small": "小さめ",
|
||||
"interceptor": "インターセプタ",
|
||||
"interceptor_description": "アプリケーションとAPIをつなぐミドルウェア",
|
||||
"language": "言語",
|
||||
"light_mode": "ライト",
|
||||
"official_proxy_hosting": "公式プロキシはHoppscotchによってホストされています。",
|
||||
"profile": "プロフィール",
|
||||
"profile_description": "プロフィールの詳細を更新",
|
||||
"profile_email": "メールアドレス",
|
||||
"profile_name": "プロフィールに表示する名前",
|
||||
"proxy": "プロキシ",
|
||||
"proxy_url": "プロキシURL",
|
||||
"proxy_use_toggle": "リクエストの送信にプロキシミドルウェアを使用する",
|
||||
"read_the": "詳しくは",
|
||||
"reset_default": "デフォルトにリセット",
|
||||
"short_codes": "ショートコード",
|
||||
"short_codes_description": "あなたが作成したショートコードです。",
|
||||
"sidebar_on_left": "サイドバーを左側に表示",
|
||||
"sync": "同期する",
|
||||
"sync_collections": "コレクション",
|
||||
"sync_description": "これらの設定はクラウドに同期されます。",
|
||||
"sync_environments": "環境変数",
|
||||
"sync_history": "履歴",
|
||||
"system_mode": "システム",
|
||||
"telemetry": "テレメトリ",
|
||||
"telemetry_helps_us": "テレメトリは私たちの業務を改善し、ユーザの皆様に最高の体験を提供するために役立てられます。",
|
||||
"theme": "テーマ",
|
||||
"theme_description": "アプリケーションのテーマをカスタマイズ",
|
||||
"use_experimental_url_bar": "ハイライトした実験的なURLバーを使用",
|
||||
"user": "ユーザー",
|
||||
"verified_email": "メールアドレスの認証済",
|
||||
"verify_email": "メールアドレスの認証"
|
||||
},
|
||||
"shortcodes": {
|
||||
"actions": "アクション",
|
||||
"created_on": "作成日",
|
||||
"deleted": "ショートコードを削除しました",
|
||||
"method": "メソッド",
|
||||
"not_found": "ショートコードが見つかりません",
|
||||
"short_code": "ショートコード",
|
||||
"url": "URL"
|
||||
},
|
||||
"shortcut": {
|
||||
"general": {
|
||||
"close_current_menu": "現在のメニューを閉じる",
|
||||
"command_menu": "検索&コマンドメニュー",
|
||||
"help_menu": "ヘルプメニュー",
|
||||
"show_all": "キーボードショートカット",
|
||||
"title": "全般"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"invite": "Hoppscotchに招待",
|
||||
"title": "その他"
|
||||
},
|
||||
"navigation": {
|
||||
"back": "前のページに戻る",
|
||||
"documentation": "ドキュメントページに移動",
|
||||
"forward": "次のページに進む",
|
||||
"graphql": "GraphQLページに移動",
|
||||
"profile": "プロフィールページに移動",
|
||||
"realtime": "リアルタイムページに移動",
|
||||
"rest": "RESTページに移動",
|
||||
"settings": "設定ページに移動",
|
||||
"title": "ナビゲーション"
|
||||
},
|
||||
"request": {
|
||||
"copy_request_link": "コピーリクエストリンク",
|
||||
"delete_method": "DELETEメソッドを選択",
|
||||
"get_method": "GETメソッドを選択",
|
||||
"head_method": "HEADメソッドを選択",
|
||||
"method": "メソッド",
|
||||
"next_method": "次のメソッドを選択",
|
||||
"post_method": "POSTメソッドを選択",
|
||||
"previous_method": "前のメソッドを選択",
|
||||
"put_method": "PUTメソッドを選択",
|
||||
"reset_request": "リセットリクエスト",
|
||||
"save_to_collections": "コレクションに保存",
|
||||
"send_request": "リクエストを送信",
|
||||
"title": "リクエスト"
|
||||
},
|
||||
"response": {
|
||||
"copy": "レスポンスをクリップボードにコピー",
|
||||
"download": "レスポンスをファイルとして保存",
|
||||
"title": "レスポンス"
|
||||
},
|
||||
"theme": {
|
||||
"black": "テーマをブラックモードに変更",
|
||||
"dark": "テーマをダークモードに変更",
|
||||
"light": "テーマをライトモードに変更",
|
||||
"system": "テーマをシステム標準に変更",
|
||||
"title": "テーマ"
|
||||
}
|
||||
},
|
||||
"show": {
|
||||
"code": "コードを表示",
|
||||
"collection": "コレクションパネルを表示",
|
||||
"more": "さらに表示",
|
||||
"sidebar": "サイドバーを表示"
|
||||
},
|
||||
"socketio": {
|
||||
"communication": "コミュニケーション",
|
||||
"connection_not_authorized": "このSocketIOコネクションではどの認証も使われていません。",
|
||||
"event_name": "イベント・トピック名",
|
||||
"events": "イベント",
|
||||
"log": "ログ",
|
||||
"url": "URL"
|
||||
},
|
||||
"sse": {
|
||||
"event_type": "イベントの種類",
|
||||
"log": "ログ",
|
||||
"url": "URL"
|
||||
},
|
||||
"state": {
|
||||
"bulk_mode": "一括編集",
|
||||
"bulk_mode_placeholder": "エントリは改行で区切られます。\nキーと値は「:」で区切られます。\n追加したいが無効にしたい行の先頭には「#」を追加してください。",
|
||||
"cleared": "クリア",
|
||||
"connected": "接続済み",
|
||||
"connected_to": "{名前}に接続しました",
|
||||
"connecting_to": "{名前}に接続しています...",
|
||||
"copied_to_clipboard": "クリップボードにコピーしました",
|
||||
"deleted": "削除されました",
|
||||
"deprecated": "非推奨",
|
||||
"disabled": "無効",
|
||||
"disconnected": "切断されました",
|
||||
"disconnected_from": "{名前}から切断されました",
|
||||
"docs_generated": "生成されたドキュメント",
|
||||
"download_started": "ダウンロード開始",
|
||||
"enabled": "有効",
|
||||
"file_imported": "インポートされたファイル",
|
||||
"finished_in": "{duration} msで終了しました",
|
||||
"history_deleted": "履歴が削除されました",
|
||||
"linewrap": "行の折り返し",
|
||||
"loading": "読み込んでいます...",
|
||||
"message_received": "トピック: {topic} でメッセージ: {message} を受信しました",
|
||||
"mqtt_subscription_failed": "トピック: {topic} のサブスクライブで問題が発生しました",
|
||||
"none": "なし",
|
||||
"nothing_found": "何も見つかりません",
|
||||
"published_error": "ピック: {topic} にメッセージ: {message} を送信する際に問題が発生しました",
|
||||
"published_message": "トピック: {topic} にメッセージ: {message} を送信しました",
|
||||
"reconnection_error": "再接続に失敗",
|
||||
"subscribed_failed": "トピック: {topic} のサブスクライブに失敗",
|
||||
"subscribed_success": "トピック: {topic} のサブスクライブに成功",
|
||||
"unsubscribed_failed": "トピック: {topic} のサブスクライブ解除に失敗",
|
||||
"unsubscribed_success": "トピック: {topic} のサブスクライブ解除に成功",
|
||||
"waiting_send_request": "リクエストの送信を待機中"
|
||||
},
|
||||
"support": {
|
||||
"changelog": "最新リリースについてもっと読む",
|
||||
"chat": "ご質問はこちら。チャットでお問い合わせください!",
|
||||
"community": "質問の投稿・回答はこちらから",
|
||||
"documentation": "Hoppscotchをもっと知る",
|
||||
"forum": "質問をして答えを得る",
|
||||
"github": "GitHubでフォローする",
|
||||
"shortcuts": "アプリをより効率よく使いこなす",
|
||||
"team": "チームと連絡を取る",
|
||||
"title": "サポート",
|
||||
"twitter": "私たちのTwitterをフォローする"
|
||||
},
|
||||
"tab": {
|
||||
"authorization": "認証",
|
||||
"body": "ボディ",
|
||||
"collections": "コレクション",
|
||||
"documentation": "ドキュメント",
|
||||
"headers": "ヘッダー",
|
||||
"history": "履歴",
|
||||
"mqtt": "MQTT",
|
||||
"parameters": "パラメータ",
|
||||
"pre_request_script": "プリリクエストスクリプト",
|
||||
"queries": "クエリ",
|
||||
"query": "クエリ",
|
||||
"schema": "スキーマ",
|
||||
"socketio": "Socket.IO",
|
||||
"sse": "SSE",
|
||||
"tests": "テスト",
|
||||
"types": "種類",
|
||||
"variables": "変数",
|
||||
"websocket": "WebSocket"
|
||||
},
|
||||
"team": {
|
||||
"already_member": "あなたは既にこのチームのメンバーです。チームの管理者に連絡してください。",
|
||||
"create_new": "新しいチームを作成",
|
||||
"deleted": "チームが削除されました",
|
||||
"edit": "チームの編集",
|
||||
"email": "メールアドレス",
|
||||
"email_do_not_match": "メールアドレスがアカウント情報と一致しません。チームの管理者に連絡してください。",
|
||||
"exit": "チームから退出",
|
||||
"exit_disabled": "管理者はチームから退出できません",
|
||||
"invalid_email_format": "メールアドレスの形式が無効です",
|
||||
"invalid_id": "チームIDが無効です。チームの管理者に連絡してください。",
|
||||
"invalid_invite_link": "招待リンクが無効です",
|
||||
"invalid_invite_link_description": "このリンクは無効です。チームの管理者に連絡してください。",
|
||||
"invalid_member_permission": "チームメンバーに有効な許可を与えてください",
|
||||
"invite": "招待",
|
||||
"invite_more": "さらに招待",
|
||||
"invite_tooltip": "このワークスペースに招待",
|
||||
"invited_to_team": "{owner}が{team}にあなたを招待しました",
|
||||
"join": "招待を了承しました",
|
||||
"join_beta": "ベータプログラムに参加して、チームにアクセスする。",
|
||||
"join_team": "{team}に参加",
|
||||
"joined_team": "あなたは{team}に参加しました",
|
||||
"joined_team_description": "あなたはこのチームのメンバーです",
|
||||
"left": "あなたはチームから退出しました",
|
||||
"login_to_continue": "ログインして続行",
|
||||
"login_to_continue_description": "チームに参加するには、ログインが必要です。",
|
||||
"logout_and_try_again": "ログアウトして別のアカウントでサインインする",
|
||||
"member_has_invite": "このメールアドレスはすでに招待されています。チームの管理者に連絡してください。",
|
||||
"member_not_found": "メンバーが見つかりませんでした。チームの管理者に連絡してください。",
|
||||
"member_removed": "ユーザーが削除されました",
|
||||
"member_role_updated": "ユーザーロールが更新されました",
|
||||
"members": "メンバー",
|
||||
"name_length_insufficient": "チーム名は6文字以上である必要があります",
|
||||
"name_updated": "チーム名が更新されました",
|
||||
"new": "新しいチーム",
|
||||
"new_created": "新しいチームが作成されました",
|
||||
"new_name": "私の新しいチーム",
|
||||
"no_access": "これらのコレクションを編集することはできません",
|
||||
"no_invite_found": "招待が見つかりません。チームの管理者に連絡してください。",
|
||||
"not_found": "チームが見つかりません。チームの管理者に連絡してください。",
|
||||
"not_valid_viewer": "あなたは有効な閲覧者ではありません。チームの管理者に連絡してください。",
|
||||
"pending_invites": "招待の保留",
|
||||
"permissions": "権限",
|
||||
"saved": "チームが保存されました",
|
||||
"select_a_team": "チームを選択",
|
||||
"title": "チーム",
|
||||
"we_sent_invite_link": "招待者の皆様に、招待リンクを送信しました!",
|
||||
"we_sent_invite_link_description": "招待者全員に受信トレイを確認するよう依頼します。リンクをクリックすると、チームに参加できます。"
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "環境変数を削除しました",
|
||||
"duplicate": "環境変数が重複しています",
|
||||
"not_found": "環境変数が見つかりません"
|
||||
},
|
||||
"test": {
|
||||
"failed": "テスト失敗",
|
||||
"javascript_code": "JavaScriptコード",
|
||||
"learn": "ドキュメントを読む",
|
||||
"passed": "テスト成功",
|
||||
"report": "テストレポート",
|
||||
"results": "テスト結果",
|
||||
"script": "スクリプト",
|
||||
"snippets": "スニペット"
|
||||
},
|
||||
"websocket": {
|
||||
"communication": "コミュニケーション",
|
||||
"log": "ログ",
|
||||
"message": "メッセージ",
|
||||
"protocols": "プロトコル",
|
||||
"url": "URL"
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,28 @@
|
||||
{
|
||||
"action": {
|
||||
"autoscroll": "Autoscroll",
|
||||
"autoscroll": "자동 스크롤",
|
||||
"cancel": "취소",
|
||||
"choose_file": "파일 선택",
|
||||
"clear": "지우기",
|
||||
"clear_all": "모두 지우기",
|
||||
"close": "Close",
|
||||
"close": "닫기",
|
||||
"connect": "연결",
|
||||
"connecting": "Connecting",
|
||||
"copy": "복사",
|
||||
"delete": "삭제",
|
||||
"disconnect": "연결 해제",
|
||||
"dismiss": "닫기",
|
||||
"dont_save": "Don't save",
|
||||
"dont_save": "저장 안함",
|
||||
"download_file": "파일 다운로드",
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "복제",
|
||||
"edit": "편집",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "돌아가기",
|
||||
"group_by": "Group by",
|
||||
"label": "이름",
|
||||
"learn_more": "더 알아보기",
|
||||
"less": "Less",
|
||||
"less": "접기",
|
||||
"more": "더보기",
|
||||
"new": "추가",
|
||||
"no": "아니요",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "검색",
|
||||
"send": "보내기",
|
||||
"start": "시작",
|
||||
"starting": "Starting",
|
||||
"stop": "정지",
|
||||
"to_close": "로 닫기",
|
||||
"to_navigate": "로 이동",
|
||||
@@ -77,7 +80,7 @@
|
||||
"status": "상태",
|
||||
"status_description": "Check the status of the website",
|
||||
"terms_and_privacy": "약관 및 개인정보 보호",
|
||||
"twitter": "트위터",
|
||||
"twitter": "Twitter",
|
||||
"type_a_command_search": "명령을 입력하거나 검색...",
|
||||
"we_use_cookies": "우리는 쿠키를 사용중입니다.",
|
||||
"whats_new": "새로 바뀐 점",
|
||||
@@ -138,7 +141,7 @@
|
||||
"remove_request": "이 요청을 영구적으로 삭제하겠습니까?",
|
||||
"remove_team": "이 팀을 삭제하겠습니까?",
|
||||
"remove_telemetry": "진단 데이터를 보내지 않겠습니까?",
|
||||
"request_change": "Are you sure you want to discard current request, unsaved changes will be lost.",
|
||||
"request_change": "현재 요청을 취소하시겠습니까? 저장되지 않은 변경사항은 삭제됩니다.",
|
||||
"sync": "이 작업 공간을 동기화하겠습니까?"
|
||||
},
|
||||
"count": {
|
||||
@@ -172,6 +175,7 @@
|
||||
"protocols": "프로토콜이 비어 있습니다.",
|
||||
"schema": "스키마를 보려면 GraphQL 엔드포인트에 연결하세요.",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "팀 이름이 비어 있습니다.",
|
||||
"teams": "아무 팀에도 속하지 않았습니다.",
|
||||
"tests": "이 요청에 대한 테스트가 없습니다."
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "환경 편집",
|
||||
"invalid_name": "환경 이름을 바르게 입력하세요.",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "환경 변수는 열 단계까지만 중첩될 수 있습니다.",
|
||||
"new": "새 환경",
|
||||
"no_environment": "환경 없음",
|
||||
"no_environment_description": "선택한 환경이 없습니다. 선택해주세요.",
|
||||
"select": "환경 선택",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "환경",
|
||||
"updated": "환경 수정됨",
|
||||
"variable_list": "변수 목록"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "이 브라우저는 서버 전송 이벤트를 지원하지 않는 것 같습니다.",
|
||||
"check_console_details": "자세한 내용은 콘솔 로그를 확인하세요.",
|
||||
"curl_invalid_format": "cURL 형식이 올바르지 않습니다.",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "빈 요청 이름",
|
||||
"f12_details": "(자세한 내용은 F12)",
|
||||
"gql_prettify_invalid_query": "잘못된 쿼리를 구문 강조할 수 없습니다. 쿼리 구문 오류를 해결하고 다시 시도하세요.",
|
||||
@@ -210,7 +219,7 @@
|
||||
"network_fail": "요청을 보낼 수 없습니다.",
|
||||
"no_duration": "소요 시간 없음",
|
||||
"no_results_found": "No matches found",
|
||||
"page_not_found": "This page could not be found",
|
||||
"page_not_found": "해당 페이지를 찾을 수 없습니다.",
|
||||
"script_fail": "사전 요청 스크립트를 실행할 수 없습니다.",
|
||||
"something_went_wrong": "문제가 발생했습니다.",
|
||||
"test_script_fail": "테스트 스크립트를 실행할 수 없습니다."
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "GitHub에 로그인하여 secret gist 만들기",
|
||||
"title": "내보내기"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "폴더 생성됨",
|
||||
"edit": "폴더 수정",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "스키마",
|
||||
"subscriptions": "섭스크립션"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "앱을 설치",
|
||||
"login": "로그인",
|
||||
@@ -276,12 +294,12 @@
|
||||
"from_postman_description": "Postman 모음집을 가져옵니다.",
|
||||
"from_url": "URL에서 가져오기",
|
||||
"gist_url": "Gist URL 입력",
|
||||
"import_from_url_invalid_fetch": "Couldn't get data from the url",
|
||||
"import_from_url_invalid_file_format": "Error while importing collections",
|
||||
"import_from_url_invalid_type": "Unsupported type. accepted values are 'hoppscotch', 'openapi', 'postman', 'insomnia'",
|
||||
"import_from_url_success": "Collections Imported",
|
||||
"import_from_url_invalid_fetch": "URL에서 데이터를 가져올 수 없습니다.",
|
||||
"import_from_url_invalid_file_format": "모음집을 가져오는데 실패하였습니다.",
|
||||
"import_from_url_invalid_type": "지원되지 않는 타입입니다. 지원되는 타입은 'hoppscotch', 'openapi', 'postman', 'insomnia' 입니다.",
|
||||
"import_from_url_success": "모음집을 성공적으로 가져왔습니다.",
|
||||
"json_description": "호프스카치 모음집 JSON 파일을 가져옵니다.",
|
||||
"title": "가저오기"
|
||||
"title": "가져오기"
|
||||
},
|
||||
"layout": {
|
||||
"collapse_collection": "Collapse or Expand Collections",
|
||||
@@ -295,13 +313,31 @@
|
||||
"collections": "모음집",
|
||||
"confirm": "확인",
|
||||
"edit_request": "요청 수정",
|
||||
"import_export": "가저오기 / 내보내기"
|
||||
"import_export": "가져오기 / 내보내기"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "통신",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "로그",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "메시지",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "게시",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "구독",
|
||||
"topic": "토픽",
|
||||
"topic_name": "토픽 이름",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "앱 설정",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "편집자",
|
||||
"editor_description": "편집자는 요청을 추가, 수정, 삭제할 수 있습니다.",
|
||||
"email_verification_mail": "인증 이메일을 보냈습니다. 이메일에 있는 인증용 링크를 눌러주세요.",
|
||||
@@ -360,9 +397,9 @@
|
||||
"invalid_name": "요청 이름을 바르게 입력하세요.",
|
||||
"method": "메서드",
|
||||
"name": "요청 이름",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"new": "새로운 요청",
|
||||
"override": "덮어쓰기",
|
||||
"override_help": "헤더에 <kbd>Content-Type</kbd>를 설정해주세요.",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "쿼리 파라미터 목록",
|
||||
"parameters": "파라미터",
|
||||
@@ -381,7 +418,7 @@
|
||||
"type": "요청 유형",
|
||||
"url": "URL",
|
||||
"variables": "변수",
|
||||
"view_my_links": "View my links"
|
||||
"view_my_links": "내 링크 보기"
|
||||
},
|
||||
"response": {
|
||||
"body": "응답 본문",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "강조색",
|
||||
"account": "계정",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "계정 설정을 수정합니다.",
|
||||
"account_email_description": "기본 이메일 주소입니다.",
|
||||
"account_name_description": "디스플레이 이름입니다.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "글자 크기 변경",
|
||||
"choose_language": "언어 선택",
|
||||
"dark_mode": "어두운 테마",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "내비게이션 확장",
|
||||
"experiments": "실험실",
|
||||
"experiments_notice": "이것은 유용하거나 재미있거나 둘 다이거나 어느 쪽도 아닌, 아직 실험 중인 기능입니다. 완성되지 않았고 안정적이지 않을 수 있으므로 이상한 일이 발생하더라도 당황하지 마세요. 진지하게 말해서, 끄세요.",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "요청 보내기",
|
||||
"title": "요청"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "검은 테마로 전환",
|
||||
"dark": "어두운 테마로 전환",
|
||||
@@ -512,7 +557,7 @@
|
||||
},
|
||||
"show": {
|
||||
"code": "코드 표시",
|
||||
"collection": "Expand Collection Panel",
|
||||
"collection": "모음집 보기",
|
||||
"more": "자세히 보기",
|
||||
"sidebar": "사이드바 표시"
|
||||
},
|
||||
@@ -536,9 +581,9 @@
|
||||
"connected": "연결됨",
|
||||
"connected_to": "{name}에 연결됨",
|
||||
"connecting_to": "{name}에 연결 중...",
|
||||
"connection_error": "Failed to connect",
|
||||
"connection_failed": "Connection failed",
|
||||
"connection_lost": "Connection lost",
|
||||
"connection_error": "연결 실패",
|
||||
"connection_failed": "연결 실패",
|
||||
"connection_lost": "연결 끊김",
|
||||
"copied_to_clipboard": "클립보드에 복사됨",
|
||||
"deleted": "삭제됨",
|
||||
"deprecated": "더 이상 사용되지 않음",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "모든 초대 대상에게 초대 링크를 보냈습니다.",
|
||||
"we_sent_invite_link_description": "초대 대상들이 이메일을 확인하도록 권하세요. 이메일 속 링크를 클릭하면 팀에 합류할 수 있습니다."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "테스트 실패",
|
||||
"javascript_code": "자바스크립트 코드",
|
||||
@@ -7,6 +7,7 @@
|
||||
"clear_all": "Wis alles",
|
||||
"close": "Close",
|
||||
"connect": "Verbinden",
|
||||
"connecting": "Connecting",
|
||||
"copy": "Kopiëren",
|
||||
"delete": "Verwijderen",
|
||||
"disconnect": "Verbinding verbreken",
|
||||
@@ -16,8 +17,9 @@
|
||||
"drag_to_reorder": "Drag to reorder",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Bewerking",
|
||||
"filter_response": "Filter response",
|
||||
"filter": "Filter",
|
||||
"go_back": "Ga terug",
|
||||
"group_by": "Group by",
|
||||
"label": "Label",
|
||||
"learn_more": "Leer meer",
|
||||
"less": "Less",
|
||||
@@ -35,6 +37,7 @@
|
||||
"search": "Zoeken",
|
||||
"send": "Versturen",
|
||||
"start": "Begin",
|
||||
"starting": "Starting",
|
||||
"stop": "Stop",
|
||||
"to_close": "to close",
|
||||
"to_navigate": "to navigate",
|
||||
@@ -142,10 +145,10 @@
|
||||
"sync": "Weet u zeker dat u deze werkruimte wilt synchroniseren?"
|
||||
},
|
||||
"count": {
|
||||
"header": "Kop {telling}",
|
||||
"message": "Bericht {tel}",
|
||||
"parameter": "Parameter {aantal}",
|
||||
"protocol": "Protocol {tel}",
|
||||
"header": "Kop {count}",
|
||||
"message": "Bericht {count}",
|
||||
"parameter": "Parameter {count}",
|
||||
"protocol": "Protocol {count}",
|
||||
"value": "Waarde {count}",
|
||||
"variable": "Variabele {count}"
|
||||
},
|
||||
@@ -168,10 +171,11 @@
|
||||
"members": "Team is leeg",
|
||||
"parameters": "Dit verzoek heeft geen parameters",
|
||||
"pending_invites": "There are no pending invites for this team",
|
||||
"profile": "Login in to view your profile",
|
||||
"profile": "Login to view your profile",
|
||||
"protocols": "Protocollen zijn leeg",
|
||||
"schema": "Verbinding maken met een GraphQL-eindpunt",
|
||||
"shortcodes": "Shortcodes are empty",
|
||||
"subscription": "Subscriptions are empty",
|
||||
"team_name": "Teamnaam leeg",
|
||||
"teams": "Teams zijn leeg",
|
||||
"tests": "Er zijn geen tests voor dit verzoek"
|
||||
@@ -184,11 +188,13 @@
|
||||
"deleted": "Environment deletion",
|
||||
"edit": "Omgeving bewerken",
|
||||
"invalid_name": "Geef een geldige naam op voor de omgeving",
|
||||
"my_environments": "My Environments",
|
||||
"nested_overflow": "nested environment variables are limited to 10 levels",
|
||||
"new": "Nieuwe omgeving",
|
||||
"no_environment": "Geen omgeving",
|
||||
"no_environment_description": "No environments were selected. Choose what to do with the following variables.",
|
||||
"select": "Selecteer omgeving",
|
||||
"team_environments": "Team Environments",
|
||||
"title": "omgevingen",
|
||||
"updated": "Environment updation",
|
||||
"variable_list": "Variabele lijst"
|
||||
@@ -197,6 +203,9 @@
|
||||
"browser_support_sse": "Deze browser lijkt geen ondersteuning te hebben voor door de server verzonden gebeurtenissen.",
|
||||
"check_console_details": "Controleer het consolelogboek voor details.",
|
||||
"curl_invalid_format": "cURL is niet correct geformatteerd",
|
||||
"danger_zone": "Danger zone",
|
||||
"delete_account": "Your account is currently an owner in these teams:",
|
||||
"delete_account_description": "You must either remove yourself, transfer ownership, or delete these teams before you can delete your account.",
|
||||
"empty_req_name": "Lege aanvraagnaam",
|
||||
"f12_details": "(F12 voor details)",
|
||||
"gql_prettify_invalid_query": "Kon een ongeldige zoekopdracht niet mooier maken, syntaxisfouten in de query oplossen en opnieuw proberen",
|
||||
@@ -222,6 +231,11 @@
|
||||
"require_github": "Log in met GitHub om een geheime kern te maken",
|
||||
"title": "Export"
|
||||
},
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"starred": "Starred"
|
||||
},
|
||||
"folder": {
|
||||
"created": "Map aangemaakt",
|
||||
"edit": "Map bewerken",
|
||||
@@ -235,6 +249,10 @@
|
||||
"schema": "Schema",
|
||||
"subscriptions": "Abonnementen"
|
||||
},
|
||||
"group": {
|
||||
"time": "Time",
|
||||
"url": "URL"
|
||||
},
|
||||
"header": {
|
||||
"install_pwa": "Installeer app",
|
||||
"login": "Log in",
|
||||
@@ -298,10 +316,28 @@
|
||||
"import_export": "Importeren / exporteren"
|
||||
},
|
||||
"mqtt": {
|
||||
"already_subscribed": "You are already subscribed to this topic.",
|
||||
"clean_session": "Clean Session",
|
||||
"clear_input": "Clear input",
|
||||
"clear_input_on_send": "Clear input on send",
|
||||
"client_id": "Client ID",
|
||||
"color": "Pick a color",
|
||||
"communication": "Communicatie",
|
||||
"connection_config": "Connection Config",
|
||||
"connection_not_authorized": "This MQTT connection does not use any authentication.",
|
||||
"invalid_topic": "Please provide a topic for the subscription",
|
||||
"keep_alive": "Keep Alive",
|
||||
"log": "Logboek",
|
||||
"lw_message": "Last-Will Message",
|
||||
"lw_qos": "Last-Will QoS",
|
||||
"lw_retain": "Last-Will Retain",
|
||||
"lw_topic": "Last-Will Topic",
|
||||
"message": "Bericht",
|
||||
"new": "New Subscription",
|
||||
"not_connected": "Please start a MQTT connection first.",
|
||||
"publish": "Publiceren",
|
||||
"qos": "QoS",
|
||||
"ssl": "SSL",
|
||||
"subscribe": "Abonneren",
|
||||
"topic": "Onderwerp",
|
||||
"topic_name": "Onderwerpnaam",
|
||||
@@ -325,6 +361,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"app_settings": "App Settings",
|
||||
"default_hopp_displayname": "Unnamed User",
|
||||
"editor": "Editor",
|
||||
"editor_description": "Editors can add, edit, and delete requests.",
|
||||
"email_verification_mail": "A verification email has been sent to your email address. Please click on the link to verify your email address.",
|
||||
@@ -362,7 +399,7 @@
|
||||
"name": "Naam aanvragen",
|
||||
"new": "New Request",
|
||||
"override": "Override",
|
||||
"override_help": "Set <xmp>Content-Type</xmp> in Headers",
|
||||
"override_help": "Set <kbd>Content-Type</kbd> in Headers",
|
||||
"overriden": "Overridden",
|
||||
"parameter_list": "Queryparameters",
|
||||
"parameters": "Parameters:",
|
||||
@@ -403,6 +440,7 @@
|
||||
"settings": {
|
||||
"accent_color": "Accentkleur",
|
||||
"account": "Account",
|
||||
"account_deleted": "Your account has been deleted",
|
||||
"account_description": "Pas uw accountinstellingen aan.",
|
||||
"account_email_description": "Uw primaire e-mailadres.",
|
||||
"account_name_description": "Dit is uw weergavenaam.",
|
||||
@@ -411,6 +449,8 @@
|
||||
"change_font_size": "Verander lettergrootte",
|
||||
"choose_language": "Kies een taal",
|
||||
"dark_mode": "Donker",
|
||||
"delete_account": "Delete account",
|
||||
"delete_account_description": "Once you delete your account, all your data will be permanently deleted. This action cannot be undone.",
|
||||
"expand_navigation": "Expand navigation",
|
||||
"experiments": "Experimentele functies",
|
||||
"experiments_notice": "Dit is een verzameling experimenten waaraan we werken en die nuttig, leuk, beide of geen van beide kunnen te zijn. Ze zijn niet definitief en zijn mogelijk niet stabiel, dus als er iets heel raars gebeurt, raak dan niet in paniek. Zet de functie uit, en",
|
||||
@@ -502,6 +542,11 @@
|
||||
"send_request": "Verstuur verzoek",
|
||||
"title": "Verzoek"
|
||||
},
|
||||
"response": {
|
||||
"copy": "Copy response to clipboard",
|
||||
"download": "Download response as file",
|
||||
"title": "Response"
|
||||
},
|
||||
"theme": {
|
||||
"black": "Switch theme to black mode",
|
||||
"dark": "Switch theme to dark mode",
|
||||
@@ -647,6 +692,11 @@
|
||||
"we_sent_invite_link": "We sent an invite link to all invitees!",
|
||||
"we_sent_invite_link_description": "Ask all invitees to check their inbox. Click on the link to join the team."
|
||||
},
|
||||
"team_environment": {
|
||||
"deleted": "Environment Deleted",
|
||||
"duplicate": "Environment Duplicated",
|
||||
"not_found": "Environment not found."
|
||||
},
|
||||
"test": {
|
||||
"failed": "test failed",
|
||||
"javascript_code": "JavaScript-code",
|
||||